陳嬋娟,李 龍
(陜西科技大學(xué)機電工程學(xué)院,西安 710021)
軟PLC技術(shù)是一種基于IPC或EPC的將PLC的控制功能封裝在軟件內(nèi)的控制技術(shù)[1],也就是通過軟件來實現(xiàn)標(biāo)準(zhǔn)硬件PLC的基本功能。它不但具有傳統(tǒng)PLC的PID調(diào)節(jié)、離散控制和I/O控制功能,而且具有微型計算機的高速數(shù)據(jù)處理和網(wǎng)絡(luò)功能[2]。由于國際編程標(biāo)準(zhǔn)IEC61131-3的制定和推廣應(yīng)用,軟PLC技術(shù)已經(jīng)成為一項新興的技術(shù)。
根據(jù)IEC61131-3的標(biāo)準(zhǔn),可選用的編程語言有:梯形圖(LD),指令表(IL),結(jié)構(gòu)文本(ST),功能模塊(FB)和順序功能圖(SFC)[3]。指令表程序可以更方便的用于程序的編譯,所以指令表編輯模塊的開發(fā)具有著很大的實用意義。為了使所開發(fā)的系統(tǒng)能夠?qū)崿F(xiàn)指令表編輯功能,本文根據(jù)指令表語言的特點,并采用C++語言成功開發(fā)了指令表編輯模塊,從而實現(xiàn)了指令表語言的編輯,修改與輸出。
指令表編輯模塊是建立在多文檔界面應(yīng)用程序之上的。多文檔界面應(yīng)用程序簡稱MDI(Multiple Document Interface),它允許有多個文檔、視圖類和多個文檔模板CMultiDocTemplate存在,即可以建立多種文檔——視圖——子框架窗口的關(guān)系[4]。由于MDI程序基于的文檔模板類為CMultiDocTemplate,能夠同時創(chuàng)建多種文檔類型,所以采用了MDI應(yīng)用程序來開發(fā)軟PLC開發(fā)系統(tǒng),開發(fā)出的軟PLC開發(fā)系統(tǒng)界面如圖1所示。
圖1 軟PLC開發(fā)系統(tǒng)界面
圖1中最右側(cè)的窗口為指令表程序最終的輸出窗口,該窗口不僅可以顯示指令表編輯器所編輯的指令表程序,還可以顯示由梯形圖程序轉(zhuǎn)化的指令表程序。根據(jù)指令表程序語言的特點我們將所創(chuàng)建的指令表程序顯示窗口設(shè)置成一個列表視圖控件。實現(xiàn)方法是給程序添加一個基于CListView類的新類:CILView,并給這個類定義一個類型為CListCtrl的變量:m_listctrl,從而來初始化列表視圖控件。
指令表程序顯示窗口是從原有的MDI應(yīng)用程序窗口拆分而來的。實現(xiàn)方法是在CChildFrame類中定義兩個類型為CSplitterWnd的變量:m_wndSplitter1和m_wndSplitter2,再利用這兩個變量調(diào)用函數(shù)CreateStatic()來拆分窗口,最后將構(gòu)建的類CILView通過函數(shù)CreatView()將列表視圖控件在拆分的窗口上顯示[5]。MDI應(yīng)用程序窗口切分流程如圖2所示。
圖2 MDI應(yīng)用程序窗口切分流程
指令表編輯器是在一個對話框上實現(xiàn)的,通過給程序添加一個對話框資源,并構(gòu)建一個基于CDialog類的新類:CEDITDlg來實現(xiàn)的?;趯υ捒虻念怌EDITDlg定義如下:
為了獲取程序相應(yīng)的“步數(shù)”、“指令”和“操作數(shù)”這三個元素,在對話框上添加了三個Edit Box控件來。同時為了方便用戶預(yù)覽程序,也在對話框上添加了一個具有網(wǎng)格線風(fēng)格的列表視圖控件。另外還添加了5個按鈕控件,從而實現(xiàn)“刪除”和“插入”等功能,以便用戶能夠?qū)Τ绦蜻M行更改和刪除等操作。指令表編輯器的界面如圖3所示。
圖3 指令表編輯器編輯界面
指令表程序主要包括“步數(shù)”、“指令”和“操作數(shù)”這三個元素,根據(jù)這三個元素首先定義一個結(jié)構(gòu)體CILElement用于存儲程序的相關(guān)數(shù)據(jù)。數(shù)據(jù)結(jié)構(gòu)體CILElement的定義如下:
定義完存儲數(shù)據(jù)的結(jié)構(gòu)體后,再用MFC的鏈表類將程序的每個“步數(shù)”串聯(lián)起來,就是定義一個CPtrList類的變量 m_IlList指向定義的結(jié)構(gòu)體CILElement,以便對后面對程序的序列化和輸出。程序輸出之間要對程序數(shù)據(jù)進行提取、交換與存儲,數(shù)據(jù)的提取、交換與存儲流程如圖4所示。
圖4 數(shù)據(jù)處理流程
指令表編輯器里輸入的數(shù)據(jù)經(jīng)過提取、交換和存儲,接下來就是要將編輯器里輸入的數(shù)據(jù)輸出到程序的最終輸出窗口。實現(xiàn)的方法是分別在源文件CEDITILDlg.cpp和CS_PLCView.cpp的頭部定義自定義消息碼:#define WM_SET_IL WM_USER+100,最后通過自定義的消息處理函數(shù)實現(xiàn)數(shù)據(jù)的輸出[6]。指令表程序最終輸出界面如圖5所示。
圖5 指令表程序最終輸出界面
圖5是指令表編輯器編輯的程序最終輸出到列表視圖控件所在窗口的界面,由于對指令表程序所包含的三個元素采用字符串類CString類進行定義,所以數(shù)據(jù)在處理過程中不會出現(xiàn)錯誤,在程序運行時保證了輸入和輸出程序的一致性。軟PLC相對于傳統(tǒng)PLC來說,它更靈活,可以根據(jù)用戶自己的需求開發(fā)出相應(yīng)的產(chǎn)品,并且價格低廉。指令表編輯模塊是軟PLC開發(fā)系統(tǒng)不可或缺的部分,該模塊的開發(fā)對于整個開發(fā)系統(tǒng)的完整性具有重要意義。同時指令表編輯模塊的開發(fā)也為以后程序的編譯和仿真奠定了基礎(chǔ)。
[1]黃延延,林躍,于海斌.軟PLC技術(shù)研究及實現(xiàn)[J].計算機工程,2004,30(1):15-17.
[2]陳嬋娟,高帥,王杰.軟PLC開發(fā)系統(tǒng)梯形圖編輯模塊的實現(xiàn)[J].組合機床與自動化加工技術(shù),2010(10):5-6.
[3]Open-PLC programming using IECll31-3,http://www.engineeringtalk.com.
[4]楊波,葉春,等.用VC++實現(xiàn)一個通用的MDI應(yīng)用程序[J].計算機應(yīng)用,2001(7):4-7.
[5]候俊杰.深入淺出MFC(第二版)[M].武漢:華中科技大學(xué)出版社,2001.
[6]鄭慧,范忠誠,等.零基礎(chǔ)學(xué) Visual C++[M].北京:機械工業(yè)出版社,2008.