鄒莉
(安徽國防科技職業(yè)學(xué)院,安徽六安237011)
隨著計算機技術(shù)、微處理器技術(shù)、控制技術(shù)、通信技術(shù)的飛速發(fā)展,傳統(tǒng)PLC的弊端日益凸顯出來,由于各PLC生產(chǎn)廠家所采用的軟硬件各不相同,組態(tài)、編程開發(fā)方法、尋址方式等都千差萬別,導(dǎo)致其技術(shù)專有性很強,使用者要經(jīng)過很長的時間才能熟練掌握一種PLC的開發(fā)方法,這給使用PLC的人帶來了困難[1].
隨著國際標準IEC61131的制定,出現(xiàn)了軟PLC,解決了傳統(tǒng)PLC兼容性差的問題.所謂軟PLC,就是在PC機上用軟件來實現(xiàn)傳統(tǒng)硬件PLC的控制、存儲、計算等功能,即將PLC的功能封裝在軟件內(nèi)運行于硬件平臺上.它具有良好的人機界面,能高速處理數(shù)據(jù),具有強大的網(wǎng)絡(luò)通信能力,有效利用了PC的各種技術(shù),硬件配置靈活.如果將軟PLC運行于嵌入式硬件平臺就形成了嵌入式軟PLC.
本文所設(shè)計的嵌入式軟PLC采用ARM嵌入式處理器,具體選用Samsung公司ARM7TDMI內(nèi)核的S3C4510芯片,采用16 MB的SDRAM,2 MB的Flash存儲器,配有通信串口和以太網(wǎng)接口;選用UCLinux作為操作系統(tǒng),為了增強其實時性,增加一個實時內(nèi)核模塊RTAI,在需要處理實時任務(wù)時,將其加載進來,形成RTAI和UCLinux雙內(nèi)核方案;采用基于ModBus/TCP協(xié)議的工業(yè)以太網(wǎng)通信.該軟硬件平臺能很好地滿足嵌入式軟PLC設(shè)計的需要.
基于嵌入式硬件平臺的軟PLC系統(tǒng)一般包括開發(fā)系統(tǒng)和運行系統(tǒng)兩部分[2].IEC61131標準規(guī)定的5種編程語言首先在開發(fā)系統(tǒng)的編輯平臺上完成程序編輯,然后在編譯器中經(jīng)過詞法分析、語法分析、語義分析,生成目標代碼,同時仿真模塊為檢查程序的運行結(jié)果正確與否提供調(diào)試環(huán)境,接著通過開發(fā)系統(tǒng)和運行系統(tǒng)的通信接口,目標代碼被下載到運行系統(tǒng).運行系統(tǒng)是整個設(shè)計的核心部分,它執(zhí)行目標代碼,進行輸入信號的處理,然后其I/O接口與外圍設(shè)備層的I/O子系統(tǒng)進行通信,將控制信號輸出,實現(xiàn)控制目的.系統(tǒng)的體系結(jié)構(gòu)框圖如圖1所示.
圖1 系統(tǒng)體系結(jié)構(gòu)Fig.1 System structure diagram
2.1.1 編輯界面 IEC61131國際標準規(guī)范了5種編程語言:梯形圖(LD)、順序功能圖(SFC)、功能塊圖(FBD)、指令表(IL)、結(jié)構(gòu)文本(ST)[3].其中梯形圖語言接近于電氣控制電路圖,直觀、簡單、易懂,所以,本文采用梯形圖作為用戶開發(fā)語言.
Qt/Embedded是圖形化界面開發(fā)工具Qt的嵌入式版本,其運行效率較高,采用面向?qū)ο缶幊?具有良好的體系結(jié)構(gòu)和編程模式.本文采用Qt編寫界面,圖2為梯形圖編輯器界面.
圖2 梯形圖編輯器Fig.2 Ladder diagram editor
2.1.2 類及繼承關(guān)系設(shè)計 采用面向?qū)ο蟮脑O(shè)計思想,將梯形圖中的對象安裝其性質(zhì)和功能分為梯形圖類(LadLadder)、程序段類(LadProgram)、梯級類(LadRung)和基類(LadElement)[4].基類是一個抽象類,為梯形圖語言各種元素的總體接口,其元素包含單個圖元和邏輯塊,通過對梯形圖圖元和邏輯塊的分析,發(fā)現(xiàn)它們各自有一些共同屬性,將其歸為圖元類的基類(LadderCell)、邏輯塊的基類(LadderBlock),再以圖元類的基類為基礎(chǔ),派生出簡單圖元類(如常開觸點、常閉觸點、輸出線圈)和復(fù)雜圖元類(如定時器、計數(shù)器),具體的圖元對象作為它們的繼承子類.類結(jié)構(gòu)如圖3所示.
圖3 類結(jié)構(gòu)Fig.3 Class diagram
2.1.3 數(shù)據(jù)結(jié)構(gòu)設(shè)計 梯形圖的整個編輯過程是一個動態(tài)的過程,行數(shù)、列數(shù)、每行的圖元數(shù)、圖元類型都是未知的,而雙向鏈表是一種動態(tài)的數(shù)據(jù)結(jié)構(gòu),所以,用雙向鏈表形式的數(shù)據(jù)結(jié)構(gòu)最適合存儲梯形圖.
對梯形圖的編輯、數(shù)據(jù)加載、數(shù)據(jù)處理等都是通過遍歷或改變數(shù)據(jù)結(jié)構(gòu)等操作來實現(xiàn)的.比如,添加一個梯形圖圖元時,只需要在內(nèi)存中建立相應(yīng)的對象,并調(diào)用鏈表的AddHead或AddTail函數(shù)加入該對象的指針;刪除一個梯形圖圖元時,就調(diào)用RemoveHead或RemoveTail函數(shù)移除該對象的指針[5].
2.2.1 LD向IL的轉(zhuǎn)換 梯形圖編輯起來非常直觀,但編譯起來難度較大,而指令表語言近似于匯編語言,容易實現(xiàn)編譯,所以,一般先將梯形圖轉(zhuǎn)換成指令表.將LD的元件映射成AOV有向圖的頂點,元件間的前驅(qū)后繼關(guān)系即連線,映射成AOV有向圖的弧.
首先,將母線映射成頂點x0,然后對除母線以外的部分從左至右、從上至下進行掃描,映射出相應(yīng)的頂點和弧,其映射的關(guān)鍵是找到每個節(jié)點的后繼節(jié)點并生成弧.如圖4的梯形圖可映射成圖5所示的AOV有向圖.
圖4 梯形圖Fig.4 Ladder diagram
圖5 AOV有向圖Fig.5 AOV diagram
AOV有向圖只能反映各元件的前驅(qū)后繼關(guān)系,而不能反映出串并聯(lián)關(guān)系,因此需要對AOV圖再次進行掃描.每次掃描可以確定一個元件的串并聯(lián)關(guān)系,并更新AOV圖,下次掃描又在新AOV圖的基礎(chǔ)上進行,周而復(fù)始,直至所有元件的串并聯(lián)關(guān)系確定完成,掃描結(jié)束,自底向上建立起一棵邏輯樹,該邏輯樹可以清晰反映各元件的邏輯關(guān)系[6].由于篇幅有限,就不作詳細分析.
圖6為圖5對應(yīng)的邏輯樹,該圖還可進行化簡.
圖6 邏輯樹Fig.6 Logic tree
對化簡后的邏輯樹進行遍歷就能快速生成指令表了.
2.2.2 分析過程 編譯器的分析部分包括詞法分析、語法分析和語義分析.本文采用Windows操作系統(tǒng)下的自動生成軟件Flex和Bison相結(jié)合的方法,來實現(xiàn)詞法分析和語法分析.
Flex生成詞法分析程序,它的文件中包含正則表達式和每個表達式被匹配時所表現(xiàn)出的動作.它接受指令表源程序,根據(jù)詞法規(guī)則逐一對各個字符進行掃描,生成單詞存放在yytext[]字符數(shù)組中,隨后將其傳遞給語法分析程序.
Bison生成語法分析程序,根據(jù)指令表語法規(guī)則識別出語法單位,并判斷輸入的單詞序列是否構(gòu)成語法上的錯誤程序.
接下來是語義分析,檢查源程序是否有語義等錯誤,將其保存在字符串數(shù)組err[]中,并收集類型信息供后面生成代碼使用.
2.2.3 生成中間代碼策略 經(jīng)編譯后產(chǎn)生的目標代碼一般有兩種存在形式,機器碼形式和內(nèi)存形式的數(shù)據(jù)碼形式.機器碼的硬件相關(guān)性太強,而內(nèi)存形式的數(shù)據(jù)碼不能復(fù)用,各有缺點,因此,設(shè)計出一種中間碼方案.該中間碼具有指定的格式,并以文件的形式存在,可以復(fù)用,要想使中間碼能在多種機型的下位設(shè)備中使用,就必須在下位設(shè)備中嵌入中間碼解釋器.這種解釋器是根據(jù)下位設(shè)備的硬件環(huán)境,使用相關(guān)的高級語言設(shè)計開發(fā)出來的,它的機器碼是硬件相關(guān)的,而中間碼與CPU的類型無關(guān).這樣,源碼無需任何改動,只需編譯成中間代碼,下載到各種類型的下位設(shè)備中,經(jīng)該機型的中間碼解釋器解釋,即可生成所需的C/C++目標代碼.如圖7所示.
圖7 生成目標代碼順序圖Fig.7 Generating object code sequence diagram
運行系統(tǒng)是嵌入式軟PLC的核心部分,它完成輸入讀取、程序執(zhí)行、輸出處理等工作.首先通過I/O口和現(xiàn)場總線讀取現(xiàn)場采集信號,將其寫入輸入映像區(qū),再根據(jù)輸入映像區(qū)信號,執(zhí)行目標代碼,并將結(jié)果寫入到輸出映像區(qū),最后將輸出映像區(qū)的數(shù)據(jù)通過I/O口和現(xiàn)場總線輸出,完成控制功能[7].
嵌入式軟PLC的運行系統(tǒng)采用模塊化的設(shè)計結(jié)構(gòu),主要包含通信模塊、虛擬機模塊和I/O驅(qū)動模塊三部分[8].所謂虛擬機就是一整套規(guī)則定義的軟件程序,能模擬實際計算機進行工作,取出并執(zhí)行指令,完成計算、數(shù)據(jù)處理等任務(wù).虛擬機的使用可提高操作系統(tǒng)的安全性,也可增強基于虛擬機之上的應(yīng)用程序的安全性,同時,實現(xiàn)了計算機程序的跨平臺使用.通信模塊完成運行系統(tǒng)與開發(fā)系統(tǒng)的數(shù)據(jù)交換.
虛擬機的實現(xiàn)主要有以下幾個步驟:
(1)開發(fā)系統(tǒng)將運行系統(tǒng)激活;
(2)在開發(fā)系統(tǒng)中編輯梯形圖程序,經(jīng)過詞法分析、語法分析、語義分析編譯產(chǎn)生中間代碼形式的PLM文件;
(3)翻譯梯形圖指令,建立宏匯編庫;
(4)利用匿名管道機制,運行系統(tǒng)接收并打開PLM文件;
(5)調(diào)用宏匯編庫,運行內(nèi)核解釋執(zhí)行PLM文件,經(jīng)過一系列轉(zhuǎn)換生成機器碼,從而產(chǎn)生可執(zhí)行的C文件;
(6)創(chuàng)建機器碼運行環(huán)境,將C文件放入嵌入式操作系統(tǒng)中執(zhí)行.
現(xiàn)要在一臺數(shù)控車床上手動和自動實現(xiàn)三坐標軸的正反向運動和停止,能自行設(shè)定運動速度,多三軸進行限位控制,產(chǎn)生越位報警等控制功能.
采用模塊化的程序設(shè)計方法,由主程序調(diào)用各個程序模塊,由于篇幅的限制,以下只給出了控制機床和主軸運動的目標代碼.
//==net 1
strcpy(m_statement.m_basicorder.address[0],"LI0.7");
m_statement.m_basicorder.funcname=INSTRUCTION_InBit;
p_execute->pstru_funclist->insertAtBack(m_statement);
strcpy(m_statement.m_basicorder.address[0],"PI2.7");
m_statement.m_basicorder.funcname=INSTRUCTION_AndInNOBit;
p_execute->pstru_funclist->insertAtBack(m_statement);
……
//==net 40
m_statement.m_basicorder.funcname=INSTRUCTION_MainProEnd;
p_execute->pstru_funclist->insertAtBack(m_statement);
將整個目標代碼傳給運行系統(tǒng),數(shù)控車床能按要求正常工作.圖8為數(shù)控車床的電機在運行中的波形圖.
圖8 電機參數(shù)波形Fig.8 Motor parameters of waveform graph
可以看出,啟動時的最大電流為55 A,調(diào)整時間為54 ms,穩(wěn)定值為8 A,測試數(shù)值與要求的數(shù)值接近,證明生成的目標代碼是正確的,驗證了該嵌入式軟PLC系統(tǒng)的可用性.
該嵌入式軟PLC具有友好的人機界面,采用梯形圖語言作為開發(fā)語言,實現(xiàn)了傳統(tǒng)PLC的功能,開發(fā)周期短,成本低,具有很好的網(wǎng)絡(luò)通信能力和數(shù)據(jù)處理能力.
本文將梯形圖轉(zhuǎn)換成指令表,對其進行各種分析后,采用中間代碼策略,在下位設(shè)備中用高級語言開發(fā)出中間碼解釋器,生成目標代碼,實現(xiàn)了軟件的硬件設(shè)備無關(guān)性,提高了程序的可移植性,適用于各種機型的下位設(shè)備.實驗證明,目標代碼經(jīng)運行系統(tǒng)調(diào)用,能滿足控制要求.
[1]張濤,李迅波.軟PLC的轉(zhuǎn)換中間語言模型的建立于研究[J].微計算機信息,2007,23(12):4-6.
[2]姜娟,馮萍,康繼昌.嵌入式軟PLC開發(fā)系統(tǒng)研究[J].科學(xué)技術(shù)與工程,2011,11(3):494-498.
[3]畢輝,程良鴻.關(guān)于軟PLC梯形圖向語句表轉(zhuǎn)換方法的研究[J].微計算機信息,2007,23(9):63-65.
[4]陳雪,劉蔭忠,楊東升.Linux環(huán)境下軟PLC開發(fā)系統(tǒng)的設(shè)計與實現(xiàn)[J].組合機床與自動化加工技術(shù),2010(11):40-43.
[5]安靜.嵌入式軟PLC編程系統(tǒng)的設(shè)計[J].電氣傳動自動化,2010,36(6):33-37.
[6]石銳,周雷,楊正益.軟PLC梯形圖到語句表轉(zhuǎn)換新策略的研究[J].計算機工程與應(yīng)用,2010,46(18):244-248.
[7]趙瑞霞,周世鵬.基于ARM的軟PLC實現(xiàn)方案[J].可編程控制器與工廠自動化,2010(4):34-38.
[8]陳佳,劉林林,熊偉,等.基于工業(yè)PC的軟PLC的設(shè)計與實現(xiàn)[J].工業(yè)控制計算機,2009,22(1):5-6.