0 引言
隨著開放式數(shù)控系統(tǒng)統(tǒng)的發(fā)展,采用軟件控制縮小硬件規(guī)模、降低成本是目前高端數(shù)控機(jī)床的發(fā)展趨勢。軟PLC以軟件形式實(shí)現(xiàn)了傳統(tǒng)PLC的控制功能,具有開放的體系結(jié)構(gòu)、強(qiáng)大的網(wǎng)絡(luò)通訊功能和更強(qiáng)的數(shù)據(jù)處理能力等特點(diǎn)。目前,國外已有成熟的軟PLC產(chǎn)品,如:Servo Works軟件中的PLC引擎模塊、SOFTPLC公司的SoftPLC、西門子的SIMATIC WinAC等等。國內(nèi)對(duì)軟PLC也進(jìn)行了研究,取得了一些進(jìn)展。文獻(xiàn)給出了一種基于DSP/BIOS嵌入式的軟PLC執(zhí)行系統(tǒng)構(gòu)架,文獻(xiàn)提出了一種基于tLC/OS.II的軟PLC的實(shí)現(xiàn)方法,從一定程度上提升了軟PLC的穩(wěn)定性,但他們采用的是專用操作系統(tǒng),不符合開放的要求和趨勢,且軟PLC控制系統(tǒng)的功能和穩(wěn)定性與國外相比有很大差距。
五軸數(shù)控銑床具有很高的加工精度和效率,能夠一次性完成三軸銑床很難加工的大型、復(fù)雜的自由曲面,但需要其軟PLC控制系統(tǒng)更快地做出響應(yīng)。因此,性能穩(wěn)定的軟PLC和更快的數(shù)據(jù)傳輸速率非常重要。文獻(xiàn)提出了一種基于SERCOS接口的軟PLC系統(tǒng),但未對(duì)軟PLC運(yùn)行系統(tǒng)深人分析,文獻(xiàn)則詳細(xì)描述了軟PLC多任務(wù)的實(shí)現(xiàn)方法,但未給出實(shí)現(xiàn)函數(shù)等細(xì)節(jié)。因此,本文針對(duì)上述問題對(duì)五軸數(shù)控銑床的軟PLC控制系統(tǒng)進(jìn)行了研究。
1 軟PLC控制系統(tǒng)的總體結(jié)構(gòu)
1.1 軟件平臺(tái)的選擇
與其它開放的操作系統(tǒng)相比,Windows具有豐富的軟件資源和極高的市場占有率,有利于多任務(wù)軟件的開發(fā)。但它不是實(shí)時(shí)操作系統(tǒng),無法滿足軟PLC實(shí)時(shí)性的要求歸j??上騑indowsXP系統(tǒng)內(nèi)核嵌入實(shí)時(shí)擴(kuò)展子系統(tǒng)RTX(RealTime Extension)解決實(shí)這一問題。所以本文選用WindowsXP+RTX5.0作為軟PLC的開發(fā)和運(yùn)行的軟件平臺(tái),既符合開放的要求,又能滿足數(shù)控系統(tǒng)和軟PLC的實(shí)時(shí)性。
1.2 軟PLC控制系統(tǒng)的總體結(jié)構(gòu)
當(dāng)有加工信息輸入時(shí),首先軟CNC進(jìn)行分析、譯碼,然后將M、S、T等開關(guān)量信息交由軟PLC進(jìn)行處理,最后將CPU處理完的開關(guān)量信息通過I/O接口輸出,通過控制主電路電器元件通斷來驅(qū)動(dòng)銑床部件動(dòng)作。
軟PLC控制系統(tǒng)由開發(fā)系統(tǒng)和運(yùn)行系統(tǒng)兩部分組成。開發(fā)系統(tǒng)是一個(gè)標(biāo)準(zhǔn)通用的開發(fā)環(huán)境,采用國際標(biāo)準(zhǔn)IEC61131.3中的五種開發(fā)語言編寫用戶程序,利用通信接口模塊將可執(zhí)行的目標(biāo)代碼傳送給運(yùn)行系統(tǒng)。運(yùn)行系統(tǒng)是整個(gè)軟PLC控制的核心,負(fù)責(zé)解釋和執(zhí)行用戶程序,將開關(guān)量控制信息輸出給電氣部分,以驅(qū)動(dòng)設(shè)備動(dòng)作。
合理的設(shè)計(jì)軟PLC的結(jié)構(gòu)有利于提升控制系統(tǒng)的穩(wěn)定性。根據(jù)軟件組件的思想,可將軟PLC控制系統(tǒng)分為幾個(gè)具有獨(dú)立功能的模塊,模塊間定義規(guī)范的接口。
由于軟PLC開發(fā)系統(tǒng)只是提供一個(gè)開發(fā)環(huán)境和控制方案,而目標(biāo)代碼的執(zhí)行是由運(yùn)行系統(tǒng)完成,因此下面重點(diǎn)對(duì)軟PLC運(yùn)行系統(tǒng)各模塊進(jìn)行分析。
2 軟PLC運(yùn)行系統(tǒng)的設(shè)計(jì)
2.1 系統(tǒng)管理模塊
系統(tǒng)管理模塊是軟PLC運(yùn)行系統(tǒng)的大腦用于運(yùn)行時(shí)分配系統(tǒng)資源,調(diào)度任務(wù)線程并監(jiān)控系統(tǒng)的運(yùn)行狀態(tài)。在一個(gè)掃描周期內(nèi),如何調(diào)度各任務(wù)線程是保證軟PLC穩(wěn)定運(yùn)行的關(guān)鍵。本文利用RTXAPI函數(shù)庫中提供的RtSetThreadPriority()函數(shù)根據(jù)執(zhí)行的先后順序設(shè)定各任務(wù)線程優(yōu)先級(jí),當(dāng)某一任務(wù)事件觸發(fā)后,線程隊(duì)列中等級(jí)最高的線程優(yōu)先獲得CPU時(shí)間片被執(zhí)行,從而實(shí)現(xiàn)任務(wù)線程的合理調(diào)度。
2.2 通信接口模塊
通訊接口模塊用于建立軟PLC運(yùn)行系統(tǒng)與開發(fā)系統(tǒng)、軟CNC、人機(jī)操作面板以及其它應(yīng)用程序進(jìn)行數(shù)據(jù)通訊任務(wù)。其中,軟PLC開發(fā)系統(tǒng)與運(yùn)行系統(tǒng)采用COM組件方式進(jìn)行通訊,即開發(fā)系統(tǒng)作為客戶端向運(yùn)行系統(tǒng)傳送目標(biāo)代碼,運(yùn)行系統(tǒng)作為服務(wù)器端接收目標(biāo)代碼并反饋軟PLC的運(yùn)行狀態(tài)。
軟PLC運(yùn)行系統(tǒng)與軟CNC、人機(jī)操作面板通過訪問自創(chuàng)建的共享內(nèi)存區(qū)單元PLCCNCbuffer、PLCPlatebuffer進(jìn)行數(shù)據(jù)交換。由Communication類來實(shí)現(xiàn)上述通信任務(wù)。
2.3 存儲(chǔ)模塊
存儲(chǔ)模塊用來保存軟PLC運(yùn)行過程中所需的數(shù)據(jù)、操作指令和數(shù)據(jù)地址,可表示為:存儲(chǔ)模塊=數(shù)據(jù)地址+數(shù)據(jù)+操作指令,因此將其分為三個(gè)子模塊:用戶程序存儲(chǔ)模塊、數(shù)據(jù)存儲(chǔ)模塊和指令存儲(chǔ)模塊。
用戶程序存儲(chǔ)模塊用于保存開發(fā)系統(tǒng)編譯完成的目標(biāo)代碼。這些目標(biāo)代碼是C/C++語句;例如ANDx0操作對(duì)應(yīng)如下C++代碼:
{strcpy(mstatement.mbasicorder.a(chǎn)ddress[O],x0); //提取軟元件X0中保存的數(shù)據(jù)mstatement.mbasicorder.funcname=INSTRUCTIONAndBit;//提供對(duì)數(shù)據(jù)Xo的操作p_execute一>pstrufunclist一>insertAtBack(mstatement); //更新鏈表數(shù)據(jù)域中的數(shù)據(jù)}
數(shù)據(jù)存儲(chǔ)模塊用于存儲(chǔ)輸入/輸出端子的狀態(tài)、內(nèi)部繼電器、定時(shí)器的狀態(tài)和功能塊邏輯運(yùn)算的中間結(jié)果等數(shù)據(jù)。這些數(shù)據(jù)作為全局變量供軟PLC控制系統(tǒng)各模塊進(jìn)行訪問和修改。在執(zhí)行用戶程序過程中,CPU根據(jù)指令存儲(chǔ)模塊中指令參數(shù)的地址來訪問數(shù)據(jù)存儲(chǔ)模塊區(qū),獲取數(shù)據(jù)進(jìn)行邏輯運(yùn)算。
指令存儲(chǔ)模塊用于存儲(chǔ)PLC指令。每條指令對(duì)應(yīng)一個(gè)C++函數(shù),函數(shù)中封裝了對(duì)數(shù)據(jù)的操作
2.4 程序執(zhí)行模塊
程序執(zhí)行模塊用于解釋和執(zhí)行目標(biāo)代碼,通過調(diào)用相應(yīng)的C++函數(shù)對(duì)堆棧進(jìn)行操作,獲取控制信息。下面以五軸數(shù)控銑床主軸正轉(zhuǎn)梯形圖程序說明軟PLC指令的執(zhí)行過程。
圖3所示梯形圖程序執(zhí)行過程如下:
第一步:清除堆棧stack,遇到X0串聯(lián),將X0壓人棧頂;第二步:遇到xl串聯(lián),彈出棧頂元素,將xl和X0邏輯或運(yùn)算的結(jié)果壓人棧頂;第三步:遇到并聯(lián)分支點(diǎn)A;創(chuàng)建臨時(shí)變量temp=0,將棧頂元素的值賦給temp,并彈出棧頂元素;第四步:遇到)(3串聯(lián),將)(3壓人棧頂;第五步:遇到X4串聯(lián),彈出棧頂元素)(3,將X4與X3進(jìn)行邏輯或運(yùn)算,結(jié)果壓人棧頂;第六步:遇到并聯(lián)分支點(diǎn)B,彈出棧頂元素,將棧頂元素與temp進(jìn)行邏輯或運(yùn)算,結(jié)果賦給temp;第七步:遇到Y(jié)0串聯(lián),將Y0壓入棧頂;第八步:遇到Y(jié)1串聯(lián),彈出棧頂元素Y0,將Yl和Y0邏輯與運(yùn)算的結(jié)果壓入棧頂;第九步:遇到并聯(lián)分支點(diǎn)C;彈出棧頂元素,將棧頂元素與temp進(jìn)行邏輯或運(yùn)算,結(jié)果賦給temp;第十步:遇到x2串聯(lián),將temp與X2邏輯與運(yùn)算的結(jié)果壓入棧頂;第十一步:遇到Y(jié)0線圈,將棧頂元素的值賦給Y0并彈出堆棧;第十二步:將Y0值輸出,清除堆棧stack。程序執(zhí)行模塊不斷循環(huán)解釋執(zhí)行軟PLC指令,直到執(zhí)行END指令。軟PLC程序執(zhí)行模塊工作過程如圖5所示。注意:這里的跳轉(zhuǎn)指令不是指PLC系統(tǒng)中的跳轉(zhuǎn)指令,而是指梯形圖程序中復(fù)雜的并聯(lián)分支塊引起的跳轉(zhuǎn)。
2.5 I/O接口模塊
I/O接口模塊是軟PLC與輸入輸出設(shè)備進(jìn)行數(shù)據(jù)交換的通道,用于將I/O板卡采集到的機(jī)床信號(hào)寫進(jìn)輸人映像寄存器,同時(shí)將輸出映像寄存器中軟元件的狀態(tài)輸出給端子。I/O讀寫過程分為兩步:第一,根據(jù)五軸數(shù)控銑床電氣I/O端口分配表在軟PLC系統(tǒng)內(nèi)存中建立對(duì)應(yīng)物理I/O節(jié)點(diǎn)變量,完成端口配置;第二,調(diào)用I/O接口模塊內(nèi)部的讀寫函數(shù),在下一個(gè)掃描周期開始將軟元件狀態(tài)輸出,完成數(shù)據(jù)交換。
為智能讀取數(shù)據(jù)和進(jìn)一步提高I/O接口物理層的開放性。
I/O接口模塊采用按位、字節(jié)、字和雙字的尋址方式向讀寫函數(shù)提供操作數(shù)地址,并把I/O數(shù)據(jù)存儲(chǔ)器變量區(qū)劃分為6個(gè)區(qū)域,每個(gè)區(qū)域存儲(chǔ)相應(yīng)變量數(shù)據(jù)。其中,按位尋址的尾部編址采用了字節(jié)號(hào)加分隔符加位號(hào)的形式。
3 軟PLC控制系統(tǒng)的接口設(shè)計(jì)
SERCOS(Serial Real—time Communication System)是一種用于CNC和數(shù)字伺服傳動(dòng)系統(tǒng)之間通信的數(shù)字接口和數(shù)據(jù)交換協(xié)議,能夠?qū)崿F(xiàn)工業(yè)控制計(jì)算機(jī)與數(shù)字伺服系統(tǒng)、傳感器和可編程控制器I/O口之間的實(shí)時(shí)數(shù)據(jù)通信。SERCOSIII是SERCOS發(fā)展的最新階段,采用光纖傳輸,速率高達(dá)100Mbit/s;可利用軟件SoftSERCANS對(duì)主站進(jìn)行控制,縮減了數(shù)控系統(tǒng)的硬件;此外還具有雙環(huán)型拓?fù)浣Y(jié)構(gòu)引,增強(qiáng)了系統(tǒng)的安全性。軟PLC控制系統(tǒng)采用sERCOS一Ⅲ接口可縮減數(shù)據(jù)采集的時(shí)間,進(jìn)一步提升系統(tǒng)的響應(yīng)能力、開放性和可靠性。
SERCOS-III主站在接收到AT后將所有報(bào)文信息存儲(chǔ)到SofiSERCANS創(chuàng)建的共享緩存區(qū)。軟PLC和軟CNC通過指針訪問該存儲(chǔ)單元獲取所需數(shù)據(jù)。類CPLCIOControl提供了訪問該共享區(qū)域的接口。
4 軟PLC運(yùn)行系統(tǒng)的仿真測試
軟4牛-3己臺(tái)為WindowsXP+RTX5.0,硬件平臺(tái)為PC。利用VC++6.0編輯開發(fā)的軟PLC運(yùn)行系統(tǒng)仿真界面。運(yùn)行軟PLC運(yùn)行系統(tǒng),當(dāng)點(diǎn)擊主軸正轉(zhuǎn)按鈕時(shí),所對(duì)應(yīng)的軟邏輯在輸入映像區(qū)的狀態(tài)發(fā)生改變,通過調(diào)用程序中的指令,將主軸正轉(zhuǎn)控制信號(hào)輸出,主軸正轉(zhuǎn)指示燈亮。
5 結(jié)束語
通過研究傳統(tǒng)PLC對(duì)五軸數(shù)控銑床開關(guān)量信號(hào)的控制,利用C++面向?qū)ο蠹夹g(shù)和模塊化的思想編輯開發(fā)了軟PLC控制系統(tǒng),實(shí)現(xiàn)了對(duì)五軸數(shù)控銑床開關(guān)量的控制,進(jìn)一步增強(qiáng)了數(shù)控系統(tǒng)的開放性,促進(jìn)了全軟件開放式數(shù)控系統(tǒng)和軟PLC技術(shù)的進(jìn)一步發(fā)展。
(審核編輯: 智匯張瑜)
分享