段玉濤,何漢武,胡兆勇
DUAN Yu-tao, HE Han-wu, HU Zhao-yong
(廣東工業大學 機電工程學院,廣州 510006)
計算機技術的迅猛發展促使虛擬PLC技術應運而生。它通過借助PC完成PLC的計算、存儲、編譯以及通過I/O口完成于現場工業設備進行通訊的各項功能[1]。
虛擬PLC結合計算機技術的發展,利用VC、VB、Delphi等高級編程語言及微機的圖形處理功能開發出PLC的軟件編程平臺,并構建虛擬模型實現PLC的部分硬件功能[2-4]。相對于傳統PLC,虛擬PLC具有友好的PLC指令編輯界面和兼容性。虛擬PLC上可以很好的實現軟實時性,而硬實時性差成為其發展的制約因素,還未完全實現“零距離”的體驗。論文就如何實現虛擬PLC同硬件間實時通訊的開發與實現進行了研究。
論文中的虛擬PLC運行平臺是作者所在課題組基于Visual C++6.0環境獨立開發的[5]。虛擬PLC基于計算機技術和虛擬現實技術開發的,在保證功能效果的前提下,如何提高用戶在使用虛擬PLC時的真實感和沉浸感,是虛擬PLC要著重處理的問題。
該虛擬PLC系統中建立了虛擬仿真模型,并通過將Solidworks、3DS MAX等建立的三維模型導入Eon Studio的方法,構建了虛擬模型與虛擬PLC的通訊,從而可以在沒有任何硬件的情況下完成硬件PLC的各項仿真實驗,達到實驗教學的目的。虛擬PLC的可視化增強了仿真的直觀性和逼真度,更接近工業實踐和提升學生的興趣,大大降低PLC實驗的費用。然而,存在著與硬件間通訊弱的問題。它的總體框架如圖1所示。

圖1 虛擬PLC總體框架圖
論文借助Visual C++6.0的串口通訊控件MSComm來實現上位機與單片機間的通訊。數據經USB口送出后,須先經過USB口轉串口芯片處理,然后連接到單片機。最后,由單片機來連接硬件電路。虛擬PLC借助單片機可以直接驅動硬件和采集現場信息,從而完成了整個通訊系統的建立。通訊系統總體框架圖如圖2所示。其中,整個通訊系統包含以下三個模塊。
1)MSComm模塊。在Visual C++6.0中,MSComm控件是Microsoft為我們提供進行串口通訊的ActiveX控件。

圖2 通訊系統總體框架圖
2)USB口轉串口模塊。USB口較九針口方便易用,但須在上位機中安裝對應于USB口轉串口芯片的驅動,以便通訊時進行USB協議的加載和解析。該系統中采用的USB口轉串口芯片是PL2303hx。
3)下位機模塊。該系統采用的下位機是單片機STC89c52rc。
MSComm控件在進行串行通訊時有兩種方法:事件驅動方法和查詢法[7]。論文采用事件驅動方法:在接收到數據時觸發事件響應的消息,由專門的函數來對消息進行處理。論文采用的串口通訊相關參數如表1所示。

表1 串口通訊參數的設置
COM口的設置須參照設備管理器中生成的虛擬COM口號,該系統生成的虛擬口是COM3。
在添加完MSComm控件后系統會自動生成CMSComm的通訊類,而我們僅需要調用該類中的函數即可完成串行通訊的設置,論文的具體相關設置的部分代碼如下:


由于該系統主要是將Y口的狀態發送給下位機,所以選擇的是二進制的傳輸方式。由于USB線通訊時的數據越少越好,所以將每個Y口對應一個bit位,每8個Y口狀態按照一定的順序進行一次綁定。最后,將每次綁定的數據按照一定的順序統一打包發送給單片機。發送的部分代碼如下:
m_ctrlMSComm.SetOutput(binDT); //發送數據MSComm控件在接收到單片機發送來的數據時,尋找相應的消息響應函數。這里,系統中響應函數為OnOnCommMscomm1()。具體響應的部分代碼如下:


該系統中,MSComm控件既要將虛擬PLC運行平臺的Y口狀態發送到單片機,又要接收單片機發送來的數據,并對其中的有效數據處理后,影響虛擬PLC的運行狀態。它的整個工作流程圖如圖3所示。

圖3 MSComm模塊的整體流程圖
上位機的數據發出后,首先要進行USB傳輸協議的處理,然后發送給單片機。USB口轉串口模塊就是負責USB協議的解析和打包。
論文采用PL2303hx作為USB口轉串口芯片,須外接12.0MHZ的晶振,提供其外部的時鐘脈沖。它的輸出電平無需再經過MAX232的調平處理,可直接與單片機引腳連接。
PL2303hx可雙向傳輸數據。一方面接收上位機模塊的數據進行USB協議解析,并將電平轉換為標準的TTL電平,保證單片機能正常的接收數據;另一方面,對單片機發送出來的數據進行USB協議處理和電平轉換,保證數據能有效傳輸到上位機。
該系統就是采用單片機是STC系列的89C52rc。它具有40個引腳,P0-P3各個P口有8個I/O口,其中P3.0和P3.1是負責與上位機模塊進行串口數據的接收和發送。
單片機的多功能性使其在進行某一特定功能時,須先進行相關的設定。該系統主要用到了STC89c52rc的串行通訊功能、定時器功能等。
該系統中單片機的外接晶振是11.0592MHz,而其所選的是可以進行自動重裝的工作模式2,采用定時器1作為波特率發生器。定時時間t= 1/9600,震蕩周期為1/(11.0992×106)。根據公式:
t =(28 -T1的初值)×振蕩周期×12;
計算出定時器1的初值并轉化為16進制的形式。單片機中初始化的部分代碼如下:

該系統采取中斷的方式來響應上位機發送來的數據。一旦有數據發送過來時RI被置為1,進入中斷程序。中斷程序中先對RI復位,然后將串行緩存寄存器SBUF中的數值取出,經處理后存儲在一個數組中,接著對設置的全局變量的值進行加1,判斷全局變量是否超出了設定的上限值,超過就歸零,否則不動作。然后進行下一次SBUF的掃描,直到RI歸零為止。其中的全局變量取決于上位機發送來的Y口的總數。部分接收程序如下:


該系統設置通過P1口采集現場的硬件運行狀況,接收用戶信號的輸入,并將采集到的數據處理后發送到上位機。這樣,使得用戶在操作時如發現電路運行時序出現錯誤,可以通過按下相應的按鍵等發送特定的信息給上位機,從而影響虛擬PLC的運行時序,保證了LED等組成的控制對象和上位機運行時序的同步及電路運行的安全。其部分代碼如下:


圖4 單片機模塊的整體流程圖

該系統中采用不斷循環掃描的方式來進行串行通訊數據的接收和現場信息的采集。首先是檢測P1口的各個引腳電平是否有變化,如有變化就發送相應的信息給上位機。其次掃描串行通訊中斷標志位RI是否有效,有效則處理接收到的數據。其整體工作流程圖如圖4所示。
論文選取虛擬PLC編輯的跑馬燈程序進行通訊系統的驗證。
電源模塊是由USB接口處的VCC端提供外部電源的輸入,經穩壓處理后分別對USB口轉串口模塊、單片機模塊、以及由LED燈組成的控制對象進行供電。USB口轉串口芯片的供電是不經電源開關的,由VCC端輸出后經濾波后直接供應;剩下的單片機模塊和LED燈則是經電源開關控制其電源的供應,以確保電路運行的安全。
在硬件電路中設置了四個按鍵X0~X4,分別對應上位機中的X000~X003按鈕,通過該按鍵可以改變P1口的輸入電平。
整體的電路連接圖如圖5所示。
論文采用9盞LED燈做為硬件控制對象,分別對應虛擬PLC輸出口的Y000-Y007和Y010。虛擬PLC通過編輯Y口的改變來驅動LED燈的運行,從而實現虛擬PLC對硬件的控制;同時,用戶可以通過按鍵來影響虛擬PLC的運行時序。其中,X0按鍵啟動單燈,X1按鍵啟動雙燈跑動,X2停止單燈跑動,X3停止雙燈跑動。其梯形圖和硬件效果對比如圖6所示。
論文針對虛擬PLC硬實時性差的問題,研究了基于單片機的硬件通訊系統,實現了虛擬PLC對LED等硬件的控制。存在的特色和創新之處如下:

圖5 通訊系統驗證整體電路圖

圖6 實驗效果對比圖
1)通過該系統,可以實現虛擬PLC對硬件電路的控制,拓展了虛擬PLC的應用范圍;
2)利用USB電源數據線代替DB九針使硬件仿真操作更為方便,具有很好的適用性,方便用戶操作;
3)利用單片機代替硬件PLC來作為下位機,保證了PC仍是PLC運行的核心,較傳統PLC降低了硬件仿真的成本。
進一步的工作,研究驅動功率更大,需求更為復雜的硬件模型。
[1] 歐陽三泰,周琴,歐陽希.軟PLC控制技術綜述[J].電氣傳動,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] 劉帥軍,韓明,黃樹槐.基于NT設備驅動程序的虛擬PLC的實現[J].計算機工程與應用,2003,22:136-138.
[5] 胡兆勇,何漢武,秦兵.基于Visual C++的虛擬PLC仿真軟件開發[J].廣東工業大學學報, 2009,26(1):40-43.
[6] 秦兵,何漢武,胡兆勇.可視化虛擬PLC實驗系統的研究[J].現代制造工程,2009,(1):131-135.
[7] 潘石柱,于仲安.VC實現串行通訊的三種途徑[J].電子工程師,2002,28(9):14-17.