張海浪,舒志兵,鄭之開
(南京工業(yè)大學(xué) 電氣工程與控制科學(xué)學(xué)院,南京 211816)
基于開放式數(shù)控系統(tǒng)的輔助控制系統(tǒng)設(shè)計(jì)*
張海浪,舒志兵,鄭之開
(南京工業(yè)大學(xué) 電氣工程與控制科學(xué)學(xué)院,南京 211816)
為輔助開放式數(shù)控系統(tǒng)完成外圍端口控制及數(shù)控功能指令訂制,在研究了PLC控制系統(tǒng)的基礎(chǔ)上,設(shè)計(jì)一種專用輔助控制系統(tǒng)。該系統(tǒng)采用虛擬plc技術(shù),VC++開發(fā)平臺(tái),設(shè)計(jì)開放的指令解析器和運(yùn)行系統(tǒng),通過定義二進(jìn)制編碼規(guī)則和指令解析表實(shí)現(xiàn)數(shù)控子功能指令拓展。該系統(tǒng)與主控制系統(tǒng)功能獨(dú)立,經(jīng)過實(shí)際應(yīng)用證明,該輔助系統(tǒng)能夠根據(jù)加載的PLC程序控制端口狀態(tài),并成功運(yùn)行數(shù)控子功能。
虛擬PLC;端口控制;子功能訂制;MFC消息映射;開放式數(shù)控系統(tǒng)
開放式數(shù)控系統(tǒng)[1]是目前數(shù)控技術(shù)的重點(diǎn)發(fā)展方向。當(dāng)今數(shù)控技術(shù)的發(fā)展,已經(jīng)由面向硬件轉(zhuǎn)向面向軟件。其最高程度的開放應(yīng)是以軟件技術(shù)為基礎(chǔ)的控制器[2]。
基于IPC工控機(jī)和PMAC(Programmable Multi-axis Controller)運(yùn)動(dòng)控制卡的運(yùn)動(dòng)控制系統(tǒng)[3]是開放式數(shù)控系統(tǒng)的典型代表。而PLC[4]作為數(shù)控系統(tǒng)的重要組成部分,用軟件來實(shí)現(xiàn)其功能已經(jīng)成為開放式數(shù)控系統(tǒng)中PLC的發(fā)展趨勢(shì)。
目前數(shù)控PLC控制模塊有三種,傳統(tǒng)硬件PLC控制器,基于嵌入式的PLC控制器,虛擬PLC。三者各有優(yōu)勢(shì),并存于市場(chǎng)。針對(duì)虛擬PLC,國(guó)外已有基于PC的開放式控制軟件,具有開放的控制平臺(tái),但大都與硬件產(chǎn)品配套,價(jià)格高昂。部分國(guó)內(nèi)大型數(shù)控系統(tǒng)有PLC控制模塊,可以為主系統(tǒng)提供端口管理功能,但是開放性不強(qiáng),功能指令訂制尚未有公認(rèn)的管理機(jī)制。
基于以上考慮,設(shè)計(jì)二進(jìn)制碼的編譯和解析方法,定義解析和運(yùn)行指令表,完成滿足外圍端口控制和數(shù)控功能指令設(shè)計(jì)的數(shù)控專用輔助控制系統(tǒng)。采用VC++開發(fā)平臺(tái)[5],動(dòng)態(tài)鏈接庫(kù)技術(shù)(dll),可以用于大多數(shù)數(shù)控系統(tǒng)的移植[6];設(shè)計(jì)純軟件的輔助控制系統(tǒng)[6-9]。最終應(yīng)用于實(shí)際投入市場(chǎng)的運(yùn)動(dòng)控制產(chǎn)品中。
設(shè)計(jì)輔助系統(tǒng)應(yīng)用于Ncstudio V10多Z軸運(yùn)動(dòng)控制系統(tǒng)中驗(yàn)證。系統(tǒng)硬件采用工控機(jī)+PM95A運(yùn)動(dòng)控制板卡+控制器搭建。
PM95A匹配NCstudio V10版本控制系統(tǒng)軟件。軟件由維宏電子股份有限公司自主研發(fā),可為支持不同行業(yè)提供運(yùn)動(dòng)控制解決方案。軟件架構(gòu)如圖1所示。
圖1 控制系統(tǒng)軟件架構(gòu)
系統(tǒng)上層是面向用戶的操作界面,滿足客戶參數(shù)設(shè)定、加工路徑顯示、加工程序編輯、手動(dòng)控制、狀態(tài)監(jiān)視等。通過窗口響應(yīng)顯示和刷新界面。業(yè)務(wù)邏輯層實(shí)現(xiàn)數(shù)控專用功能。核心功能層包含內(nèi)核和解析器,系統(tǒng)內(nèi)核負(fù)責(zé)系統(tǒng)的狀態(tài)監(jiān)控,調(diào)度系統(tǒng)資源。解析器主要工作是對(duì)刀路程序進(jìn)行解析,下發(fā)控制指令NCCMD到驅(qū)動(dòng)層。驅(qū)動(dòng)層是軟件和硬件交互信息的重要模塊,核心功能層通過R3R0緩沖區(qū)和外部硬件交換數(shù)據(jù)、下發(fā)控制脈沖。
設(shè)計(jì)輔助控制系統(tǒng)于系統(tǒng)內(nèi)核,可享有較高優(yōu)先級(jí),與內(nèi)核共享系統(tǒng)資源,方便通過驅(qū)動(dòng)層獲取和改變外部端口狀態(tài)。
虛擬PLC系統(tǒng)主要包括編譯系統(tǒng)和運(yùn)行系統(tǒng),在此基礎(chǔ)上加入實(shí)時(shí)監(jiān)控系統(tǒng)。系統(tǒng)框圖如圖2所示。
圖2 輔助控制系統(tǒng)框圖
系統(tǒng)運(yùn)行開始首先完成編譯過程,然后建立定時(shí)器,周期性觸發(fā)掃描過程。監(jiān)視過程在讀取輔助系統(tǒng)內(nèi)部存儲(chǔ)區(qū)更新數(shù)據(jù)。
2.1 編譯系統(tǒng)設(shè)計(jì)
設(shè)計(jì)PLC程序編譯過程如圖3所示。
圖3 編譯過程
編譯系統(tǒng)主要通過設(shè)計(jì)編譯功能類CPlcCompiler,報(bào)錯(cuò)字符類plc_exception,實(shí)現(xiàn)編譯過程。編譯功能設(shè)計(jì)中核心的是CPlcCompiler解析指令功能,在文件處理等流程操作后,循環(huán)調(diào)用解析指令功能。
解析指令功能相關(guān)的成員變量如表1所示。
表1 解析指令相關(guān)成員變量
解析指令功能按順序調(diào)用的成員方法如下:
//在系統(tǒng)初始化中調(diào)用,開始編譯成二進(jìn)制代碼
bool Compile(LPCTSTR pszFnIn_, LPCTSTR pszFnOut_)
//在Compile函數(shù)中調(diào)用,將m_szCurCode斷句為字段,并匹配對(duì)應(yīng)的字段標(biāo)示,放入m_nCurToken
word_t ReadNextToken()
//在Compile函數(shù)中調(diào)用,獲取字段標(biāo)示對(duì)應(yīng)的解析函數(shù),在之后執(zhí)行
PCODEFUNC GetStatementHandler(word_t token_)
//在每個(gè)字段標(biāo)示對(duì)應(yīng)解析函數(shù)調(diào)用,寫入二進(jìn)制代碼,可根據(jù)指令不同重載寫入形式。
void Output(int v1_)
解析指令功能:定義Output(int v1_)為寫入基礎(chǔ)單元的編譯模式, GetStatementHandler()成員函數(shù)通過定義指令編譯解析表調(diào)用對(duì)應(yīng)的指令解析函數(shù),編譯解析表中成員格式:{字段標(biāo)識(shí)符, &解析指令函數(shù)}。
plc_exception定義各類型報(bào)錯(cuò)宏,及報(bào)錯(cuò)字符串。通過結(jié)構(gòu)體將宏名和報(bào)錯(cuò)字符串對(duì)應(yīng)。在編譯源程序的過程中,根據(jù)邏輯判斷,出錯(cuò)的地方傳入特定的報(bào)錯(cuò)宏,實(shí)現(xiàn)編譯錯(cuò)誤記錄。
2.2 運(yùn)行系統(tǒng)設(shè)計(jì)
設(shè)計(jì)運(yùn)行過程如圖4所示。
圖4 運(yùn)行過程
運(yùn)行系統(tǒng)主要通過設(shè)計(jì)運(yùn)行系統(tǒng)類CPlc、代碼類CPlcCode實(shí)現(xiàn)運(yùn)行過程。指令解析與編譯系統(tǒng)相似,設(shè)計(jì)有運(yùn)行指令解析表,最終將邏輯運(yùn)算拆解為堆棧操作和參數(shù)獲取操作。相關(guān)成員方法按順序調(diào)用如下:
//在多媒體定時(shí)器響應(yīng)函數(shù)中調(diào)用,執(zhí)行plc掃描
void CPlc::Scan()
//在Scan()調(diào)用,獲取字段標(biāo)示
ins_t CPlcCode::GetCode()
//在Scan()調(diào)用,從運(yùn)行指令解析表獲得指令解析函數(shù)
inline PINSFUNC CPlc::GetInstructionHandler(ins_t code_)
//在指令解析函數(shù)中調(diào)用,執(zhí)行堆棧操作存取邏輯值
void CPlc::Push(int val_)
int CPlc::Pop()
int CPlc::Top()//只取值不移動(dòng)堆棧指針
//在指令解析函數(shù)中調(diào)用,從二進(jìn)制代碼中獲取地址、立即數(shù)、參考類型等參數(shù)數(shù)據(jù)
int GetBitAddr()
int GetImmInt()
REFINT GetRef()
邏輯運(yùn)算功能:指令解析函數(shù)利用GetBitAddr()等方法傳入?yún)?shù),掃描過程中執(zhí)行Pop()等操作,將邏輯運(yùn)算結(jié)果存入堆棧中,最終根據(jù)參數(shù)和堆棧中的結(jié)果輸出一組相關(guān)邏輯結(jié)果。
運(yùn)行系統(tǒng)還需要建立內(nèi)部存儲(chǔ)空間,并完成和驅(qū)動(dòng)層和監(jiān)控系統(tǒng)的數(shù)據(jù)交互。CPlc類中定義int m_nChannels[c_nNUMOF_CHANNEL]進(jìn)行內(nèi)部存儲(chǔ)區(qū)管理。定義GetChannels()成員方法向外傳遞m_nChannels。
2.3 監(jiān)控系統(tǒng)設(shè)計(jì)
監(jiān)視過程通過設(shè)計(jì)頁(yè)面管理類CPLCIOPage和繪制Xaml資源文件實(shí)現(xiàn)。采取字符數(shù)組顯示的方法,建立二維坐標(biāo)系。通過按鈕可選擇地顯示部分通道狀態(tài)。相關(guān)成員變量如表2所示。
表2 監(jiān)控界面相關(guān)成員變量
//在消息映射機(jī)制里調(diào)用,實(shí)現(xiàn)按鈕響應(yīng),提供對(duì)話框修改上述三類起始號(hào)
oid OnInputShownChannelBase();
void OnInputShowTimerBase();
void OnInputShowCounterBase();
//在WM_TIMER消息響應(yīng)函數(shù)OnTimer()調(diào)用,定時(shí)刷新頁(yè)面
void FreshUI()
// 在FreshUI()調(diào)用,從Cplc的成員m_nChannels處更新選擇的定時(shí)器、計(jì)數(shù)器、通道狀態(tài),x,y為在字符數(shù)組中的坐標(biāo)
void ShowBitChannel(int channel_, int x_, int y_);
void ShowTimerChannel(int channel_, int x_, int y_);
void ShowCounterChannel(int channel_, int x_, int y_);
通過設(shè)置起始號(hào),可顯示10個(gè)通道、16個(gè)定時(shí)器和16個(gè)計(jì)數(shù)器的狀態(tài)。最終建立的監(jiān)控界面如圖5所示。
圖5 監(jiān)控界面
添加PLC數(shù)控指令,可以實(shí)現(xiàn)數(shù)控子功能訂制。可設(shè)計(jì)包括潤(rùn)滑油泵控制、上下料控制的流程控制指令,識(shí)別刀具信息的換刀指令等數(shù)控專用指令?,F(xiàn)通過設(shè)計(jì)調(diào)用主系統(tǒng)功能的通訊指令來說明功能指令添加流程。
PLC專用通訊指令設(shè)計(jì)
通訊指令格式:
MSG <消息類型>, <消息ID>
(1)在編譯系統(tǒng)的編譯指令解析表中添加成員:
{CPlcCompiler::USW_MSG &CPlcCompiler::CodeMSG}
(2)設(shè)計(jì)void CodeMSG()
解析函數(shù)主體如下:
//匹配當(dāng)前字段
Match(USW_MSG);
//定義參考整形變量,從源代碼傳入?yún)?shù)
REFINT _msg;
GetRefInt(&_msg);
REFINT _v1;
GetRefInt(&_v1);
REFINT _v2;
GetRefInt(&_v2);
//寫入二進(jìn)制文件
Output(INS_LN, m_nLineno);
Output(INS_MSG);
Output(_msg);
Output(_v1);
Output(_v2);
參考整形REFINT是包含數(shù)據(jù)類型和數(shù)值的結(jié)構(gòu)體:
struct REFINT{ ref_t nRef;
int nVal;};
//目前支持類型
enum ref_t{ REF_IMM,
REF_CHANNEL,
REF_VAR,};
REFINT支持立即數(shù)、通道、變量格式的參數(shù),通過GetRefInt(REFINT* pRefInt_)分析源代碼參數(shù)類型,存入pRefInt_。
(3)運(yùn)行系統(tǒng)指令解析表添加成員,設(shè)計(jì)解析函數(shù)。
添加解析表和編譯系統(tǒng)相似;設(shè)計(jì)解析函數(shù)即根據(jù)傳入的消息ID調(diào)用::Postmessage()發(fā)送相應(yīng)消息到消息隊(duì)列,在此不再詳細(xì)描述。
在基于IPC和PMAC形式的運(yùn)控系統(tǒng)中,綜合應(yīng)用虛擬PLC技術(shù)、MFC消息映射和類封裝、VC++編程等技術(shù),設(shè)計(jì)實(shí)現(xiàn)可添加數(shù)控子功能指令和外圍端口控制的運(yùn)控專用輔助控制系統(tǒng)。經(jīng)測(cè)試,本文設(shè)計(jì)的二進(jìn)制代碼編譯方法和指令解析機(jī)制,可以方便地添加數(shù)控指令,對(duì)開放性數(shù)控系統(tǒng)的設(shè)計(jì)具有應(yīng)用價(jià)值。
[1] 郭鼓,李樹軍. 一種基于PMAC的開放式數(shù)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 制造業(yè)自動(dòng)化,2012(4):106-110.
[2] Sergej N Grigoriev, Georgi M Martinov. The Control Platform for Decomposition and Synthesis of Specialized CNC Systems [J]. Procedia CIRP, 2016, 41:858-863.
[3] 汪龍祺,李文明,李友一. 基于運(yùn)動(dòng)控制卡的機(jī)電控制系統(tǒng)實(shí)現(xiàn)[J]. 微計(jì)算機(jī)信息,2011(3):9-10.
[4] 喬?hào)|凱,陳軍. 基于PLC和變頻器的C650臥式車床主軸電機(jī)多段速系統(tǒng)設(shè)計(jì)[J]. 組合機(jī)床與自動(dòng)化加工技術(shù),2016(1):98-100.
[5] 侯俊杰. 深入淺出MFC[M]. 武漢:華中科技大學(xué)出版社, 2001.
[6] 陸麗麗,季建華. 基于CNC的軟PLC虛擬機(jī)中元件庫(kù)的研究[J]. 機(jī)械研究與應(yīng)用,2015(3):6-8.
[7] 劉安民,尹蘭,沈航. CXK650型數(shù)控機(jī)床切削參數(shù)優(yōu)化及實(shí)時(shí)監(jiān)控系統(tǒng)開發(fā)研究[J]. 機(jī)械科學(xué)與技術(shù),2015(12):113-117.
[8] 王建. 嵌入式數(shù)控系統(tǒng)中軟PLC的研究與實(shí)現(xiàn)[D]. 哈爾濱:哈爾濱工業(yè)大學(xué),2013.
[9] Adam Milik. On Hardware Synthesis and Implementation of PLC Programs in FPGAs[J]. Microprocessors and Microsystems, 2016.
[10] 董烈超,周鳳星,盧少武. 基于FPGA的交流伺服系統(tǒng)高速數(shù)據(jù)傳輸?shù)脑O(shè)計(jì)[J]. 組合機(jī)床與自動(dòng)化加工技術(shù),2015(11):61-64.
(編輯 李秀敏)
Design of Auxiliary Control System Based on Open CNC System
ZHANG Hai-lang, SHU Zhi-bing, ZHENG Zhi-kai
(College of Electrical Engineering and Control Science, Nanjing Tech University, Nanjing 211816, China)
In order to assist the open CNC system to complete the peripheral port control and NC function instruction customization, a special auxiliary control system is designed on the basis of the study of the PLC control system. The system uses the virtual PLC technology, VC++ development platform, designs the open command parser and operation system. By defining binary encoding rules and directives resolution table , it achieve NC sub function instruction development. The system function is independent of the main control system function. It is proved by the practical application that the auxiliary system can control the port state according to the loading PLC program and successfully operate the NC sub function.
virtual PLC; port control; special functions; MFC message mapping; open CNC system
1001-2265(2017)01-0082-03
10.13462/j.cnki.mmtamt.2017.01.022
2016-04-14;
2016-05-08
2015年江蘇省研究生培養(yǎng)創(chuàng)新工程(KYLX15_0783)
張海浪(1990—),男,河南洛陽(yáng)人,南京工業(yè)大學(xué)碩士研究生,研究方向?yàn)檫\(yùn)動(dòng)控制、智能驅(qū)動(dòng)及計(jì)算機(jī)技術(shù),(E-mail)zhlwqq@163.com。
TH166;TG659
A