段玉濤,何漢武,胡兆勇
DUAN Yu-tao, HE Han-wu, HU Zhao-yong
(廣東工業(yè)大學(xué) 機(jī)電工程學(xué)院,廣州 510006)
計(jì)算機(jī)技術(shù)的迅猛發(fā)展促使虛擬PLC技術(shù)應(yīng)運(yùn)而生。它通過(guò)借助PC完成PLC的計(jì)算、存儲(chǔ)、編譯以及通過(guò)I/O口完成于現(xiàn)場(chǎng)工業(yè)設(shè)備進(jìn)行通訊的各項(xiàng)功能[1]。
虛擬PLC結(jié)合計(jì)算機(jī)技術(shù)的發(fā)展,利用VC、VB、Delphi等高級(jí)編程語(yǔ)言及微機(jī)的圖形處理功能開(kāi)發(fā)出PLC的軟件編程平臺(tái),并構(gòu)建虛擬模型實(shí)現(xiàn)PLC的部分硬件功能[2-4]。相對(duì)于傳統(tǒng)PLC,虛擬PLC具有友好的PLC指令編輯界面和兼容性。虛擬PLC上可以很好的實(shí)現(xiàn)軟實(shí)時(shí)性,而硬實(shí)時(shí)性差成為其發(fā)展的制約因素,還未完全實(shí)現(xiàn)“零距離”的體驗(yàn)。論文就如何實(shí)現(xiàn)虛擬PLC同硬件間實(shí)時(shí)通訊的開(kāi)發(fā)與實(shí)現(xiàn)進(jìn)行了研究。
論文中的虛擬PLC運(yùn)行平臺(tái)是作者所在課題組基于Visual C++6.0環(huán)境獨(dú)立開(kāi)發(fā)的[5]。虛擬PLC基于計(jì)算機(jī)技術(shù)和虛擬現(xiàn)實(shí)技術(shù)開(kāi)發(fā)的,在保證功能效果的前提下,如何提高用戶在使用虛擬PLC時(shí)的真實(shí)感和沉浸感,是虛擬PLC要著重處理的問(wèn)題。
該虛擬PLC系統(tǒng)中建立了虛擬仿真模型,并通過(guò)將Solidworks、3DS MAX等建立的三維模型導(dǎo)入Eon Studio的方法,構(gòu)建了虛擬模型與虛擬PLC的通訊,從而可以在沒(méi)有任何硬件的情況下完成硬件PLC的各項(xiàng)仿真實(shí)驗(yàn),達(dá)到實(shí)驗(yàn)教學(xué)的目的。虛擬PLC的可視化增強(qiáng)了仿真的直觀性和逼真度,更接近工業(yè)實(shí)踐和提升學(xué)生的興趣,大大降低PLC實(shí)驗(yàn)的費(fèi)用。然而,存在著與硬件間通訊弱的問(wèn)題。它的總體框架如圖1所示。
圖1 虛擬PLC總體框架圖
論文借助Visual C++6.0的串口通訊控件MSComm來(lái)實(shí)現(xiàn)上位機(jī)與單片機(jī)間的通訊。數(shù)據(jù)經(jīng)USB口送出后,須先經(jīng)過(guò)USB口轉(zhuǎn)串口芯片處理,然后連接到單片機(jī)。最后,由單片機(jī)來(lái)連接硬件電路。虛擬PLC借助單片機(jī)可以直接驅(qū)動(dòng)硬件和采集現(xiàn)場(chǎng)信息,從而完成了整個(gè)通訊系統(tǒng)的建立。通訊系統(tǒng)總體框架圖如圖2所示。其中,整個(gè)通訊系統(tǒng)包含以下三個(gè)模塊。
1)MSComm模塊。在Visual C++6.0中,MSComm控件是Microsoft為我們提供進(jìn)行串口通訊的ActiveX控件。
圖2 通訊系統(tǒng)總體框架圖
2)USB口轉(zhuǎn)串口模塊。USB口較九針口方便易用,但須在上位機(jī)中安裝對(duì)應(yīng)于USB口轉(zhuǎn)串口芯片的驅(qū)動(dòng),以便通訊時(shí)進(jìn)行USB協(xié)議的加載和解析。該系統(tǒng)中采用的USB口轉(zhuǎn)串口芯片是PL2303hx。
3)下位機(jī)模塊。該系統(tǒng)采用的下位機(jī)是單片機(jī)STC89c52rc。
MSComm控件在進(jìn)行串行通訊時(shí)有兩種方法:事件驅(qū)動(dòng)方法和查詢法[7]。論文采用事件驅(qū)動(dòng)方法:在接收到數(shù)據(jù)時(shí)觸發(fā)事件響應(yīng)的消息,由專(zhuān)門(mén)的函數(shù)來(lái)對(duì)消息進(jìn)行處理。論文采用的串口通訊相關(guān)參數(shù)如表1所示。
表1 串口通訊參數(shù)的設(shè)置
COM口的設(shè)置須參照設(shè)備管理器中生成的虛擬COM口號(hào),該系統(tǒng)生成的虛擬口是COM3。
在添加完MSComm控件后系統(tǒng)會(huì)自動(dòng)生成CMSComm的通訊類(lèi),而我們僅需要調(diào)用該類(lèi)中的函數(shù)即可完成串行通訊的設(shè)置,論文的具體相關(guān)設(shè)置的部分代碼如下:
由于該系統(tǒng)主要是將Y口的狀態(tài)發(fā)送給下位機(jī),所以選擇的是二進(jìn)制的傳輸方式。由于USB線通訊時(shí)的數(shù)據(jù)越少越好,所以將每個(gè)Y口對(duì)應(yīng)一個(gè)bit位,每8個(gè)Y口狀態(tài)按照一定的順序進(jìn)行一次綁定。最后,將每次綁定的數(shù)據(jù)按照一定的順序統(tǒng)一打包發(fā)送給單片機(jī)。發(fā)送的部分代碼如下:
m_ctrlMSComm.SetOutput(binDT); //發(fā)送數(shù)據(jù)MSComm控件在接收到單片機(jī)發(fā)送來(lái)的數(shù)據(jù)時(shí),尋找相應(yīng)的消息響應(yīng)函數(shù)。這里,系統(tǒng)中響應(yīng)函數(shù)為OnOnCommMscomm1()。具體響應(yīng)的部分代碼如下:
該系統(tǒng)中,MSComm控件既要將虛擬PLC運(yùn)行平臺(tái)的Y口狀態(tài)發(fā)送到單片機(jī),又要接收單片機(jī)發(fā)送來(lái)的數(shù)據(jù),并對(duì)其中的有效數(shù)據(jù)處理后,影響虛擬PLC的運(yùn)行狀態(tài)。它的整個(gè)工作流程圖如圖3所示。
圖3 MSComm模塊的整體流程圖
上位機(jī)的數(shù)據(jù)發(fā)出后,首先要進(jìn)行USB傳輸協(xié)議的處理,然后發(fā)送給單片機(jī)。USB口轉(zhuǎn)串口模塊就是負(fù)責(zé)USB協(xié)議的解析和打包。
論文采用PL2303hx作為USB口轉(zhuǎn)串口芯片,須外接12.0MHZ的晶振,提供其外部的時(shí)鐘脈沖。它的輸出電平無(wú)需再經(jīng)過(guò)MAX232的調(diào)平處理,可直接與單片機(jī)引腳連接。
PL2303hx可雙向傳輸數(shù)據(jù)。一方面接收上位機(jī)模塊的數(shù)據(jù)進(jìn)行USB協(xié)議解析,并將電平轉(zhuǎn)換為標(biāo)準(zhǔn)的TTL電平,保證單片機(jī)能正常的接收數(shù)據(jù);另一方面,對(duì)單片機(jī)發(fā)送出來(lái)的數(shù)據(jù)進(jìn)行USB協(xié)議處理和電平轉(zhuǎn)換,保證數(shù)據(jù)能有效傳輸?shù)缴衔粰C(jī)。
該系統(tǒng)就是采用單片機(jī)是STC系列的89C52rc。它具有40個(gè)引腳,P0-P3各個(gè)P口有8個(gè)I/O口,其中P3.0和P3.1是負(fù)責(zé)與上位機(jī)模塊進(jìn)行串口數(shù)據(jù)的接收和發(fā)送。
單片機(jī)的多功能性使其在進(jìn)行某一特定功能時(shí),須先進(jìn)行相關(guān)的設(shè)定。該系統(tǒng)主要用到了STC89c52rc的串行通訊功能、定時(shí)器功能等。
該系統(tǒng)中單片機(jī)的外接晶振是11.0592MHz,而其所選的是可以進(jìn)行自動(dòng)重裝的工作模式2,采用定時(shí)器1作為波特率發(fā)生器。定時(shí)時(shí)間t= 1/9600,震蕩周期為1/(11.0992×106)。根據(jù)公式:
t =(28 -T1的初值)×振蕩周期×12;
計(jì)算出定時(shí)器1的初值并轉(zhuǎn)化為16進(jìn)制的形式。單片機(jī)中初始化的部分代碼如下:
該系統(tǒng)采取中斷的方式來(lái)響應(yīng)上位機(jī)發(fā)送來(lái)的數(shù)據(jù)。一旦有數(shù)據(jù)發(fā)送過(guò)來(lái)時(shí)RI被置為1,進(jìn)入中斷程序。中斷程序中先對(duì)RI復(fù)位,然后將串行緩存寄存器SBUF中的數(shù)值取出,經(jīng)處理后存儲(chǔ)在一個(gè)數(shù)組中,接著對(duì)設(shè)置的全局變量的值進(jìn)行加1,判斷全局變量是否超出了設(shè)定的上限值,超過(guò)就歸零,否則不動(dòng)作。然后進(jìn)行下一次SBUF的掃描,直到RI歸零為止。其中的全局變量取決于上位機(jī)發(fā)送來(lái)的Y口的總數(shù)。部分接收程序如下:
該系統(tǒng)設(shè)置通過(guò)P1口采集現(xiàn)場(chǎng)的硬件運(yùn)行狀況,接收用戶信號(hào)的輸入,并將采集到的數(shù)據(jù)處理后發(fā)送到上位機(jī)。這樣,使得用戶在操作時(shí)如發(fā)現(xiàn)電路運(yùn)行時(shí)序出現(xiàn)錯(cuò)誤,可以通過(guò)按下相應(yīng)的按鍵等發(fā)送特定的信息給上位機(jī),從而影響虛擬PLC的運(yùn)行時(shí)序,保證了LED等組成的控制對(duì)象和上位機(jī)運(yùn)行時(shí)序的同步及電路運(yùn)行的安全。其部分代碼如下:
圖4 單片機(jī)模塊的整體流程圖
該系統(tǒng)中采用不斷循環(huán)掃描的方式來(lái)進(jìn)行串行通訊數(shù)據(jù)的接收和現(xiàn)場(chǎng)信息的采集。首先是檢測(cè)P1口的各個(gè)引腳電平是否有變化,如有變化就發(fā)送相應(yīng)的信息給上位機(jī)。其次掃描串行通訊中斷標(biāo)志位RI是否有效,有效則處理接收到的數(shù)據(jù)。其整體工作流程圖如圖4所示。
論文選取虛擬PLC編輯的跑馬燈程序進(jìn)行通訊系統(tǒng)的驗(yàn)證。
電源模塊是由USB接口處的VCC端提供外部電源的輸入,經(jīng)穩(wěn)壓處理后分別對(duì)USB口轉(zhuǎn)串口模塊、單片機(jī)模塊、以及由LED燈組成的控制對(duì)象進(jìn)行供電。USB口轉(zhuǎn)串口芯片的供電是不經(jīng)電源開(kāi)關(guān)的,由VCC端輸出后經(jīng)濾波后直接供應(yīng);剩下的單片機(jī)模塊和LED燈則是經(jīng)電源開(kāi)關(guān)控制其電源的供應(yīng),以確保電路運(yùn)行的安全。
在硬件電路中設(shè)置了四個(gè)按鍵X0~X4,分別對(duì)應(yīng)上位機(jī)中的X000~X003按鈕,通過(guò)該按鍵可以改變P1口的輸入電平。
整體的電路連接圖如圖5所示。
論文采用9盞LED燈做為硬件控制對(duì)象,分別對(duì)應(yīng)虛擬PLC輸出口的Y000-Y007和Y010。虛擬PLC通過(guò)編輯Y口的改變來(lái)驅(qū)動(dòng)LED燈的運(yùn)行,從而實(shí)現(xiàn)虛擬PLC對(duì)硬件的控制;同時(shí),用戶可以通過(guò)按鍵來(lái)影響虛擬PLC的運(yùn)行時(shí)序。其中,X0按鍵啟動(dòng)單燈,X1按鍵啟動(dòng)雙燈跑動(dòng),X2停止單燈跑動(dòng),X3停止雙燈跑動(dòng)。其梯形圖和硬件效果對(duì)比如圖6所示。
論文針對(duì)虛擬PLC硬實(shí)時(shí)性差的問(wèn)題,研究了基于單片機(jī)的硬件通訊系統(tǒng),實(shí)現(xiàn)了虛擬PLC對(duì)LED等硬件的控制。存在的特色和創(chuàng)新之處如下:
圖5 通訊系統(tǒng)驗(yàn)證整體電路圖
圖6 實(shí)驗(yàn)效果對(duì)比圖
1)通過(guò)該系統(tǒng),可以實(shí)現(xiàn)虛擬PLC對(duì)硬件電路的控制,拓展了虛擬PLC的應(yīng)用范圍;
2)利用USB電源數(shù)據(jù)線代替DB九針使硬件仿真操作更為方便,具有很好的適用性,方便用戶操作;
3)利用單片機(jī)代替硬件PLC來(lái)作為下位機(jī),保證了PC仍是PLC運(yùn)行的核心,較傳統(tǒng)PLC降低了硬件仿真的成本。
進(jìn)一步的工作,研究驅(qū)動(dòng)功率更大,需求更為復(fù)雜的硬件模型。
[1] 歐陽(yáng)三泰,周琴,歐陽(yáng)希.軟PLC控制技術(shù)綜述[J].電氣傳動(dòng),2005,35(9):52-54.
[2] C.G.HABA.Extending the Use of PLC Simulator Software in Student Laboratory Works[J].Advances in Electrical and Computer Engineering,2010,10(1):84-89.
[3] David J.Dougall.Applications and benefits of real-time I/O simulation for PLC and PC control systems[J].ISA Transactions,1998,36(4):305-311.
[4] 劉帥軍,韓明,黃樹(shù)槐.基于NT設(shè)備驅(qū)動(dòng)程序的虛擬PLC的實(shí)現(xiàn)[J].計(jì)算機(jī)工程與應(yīng)用,2003,22:136-138.
[5] 胡兆勇,何漢武,秦兵.基于Visual C++的虛擬PLC仿真軟件開(kāi)發(fā)[J].廣東工業(yè)大學(xué)學(xué)報(bào), 2009,26(1):40-43.
[6] 秦兵,何漢武,胡兆勇.可視化虛擬PLC實(shí)驗(yàn)系統(tǒng)的研究[J].現(xiàn)代制造工程,2009,(1):131-135.
[7] 潘石柱,于仲安.VC實(shí)現(xiàn)串行通訊的三種途徑[J].電子工程師,2002,28(9):14-17.