PC與PLC通信軟件的設計開(kāi)發(fā)
為了便于對工業(yè)設備的運作進(jìn)行統一監控,生產(chǎn)上經(jīng)常需要通過(guò)一臺PC與多臺PLC(Programmable Logic Controller)進(jìn)行數據交換,特別是通過(guò)PLC將現場(chǎng)設備的一些關(guān)鍵參數傳輸到PC上并顯示出來(lái)。為了迎合顧客的這個(gè)需求,各大PLC生產(chǎn)廠(chǎng)家都花大力氣開(kāi)發(fā)出了一系列以各類(lèi)協(xié)議為基準的功能強大的管理監控軟件,譬如Siemens公司開(kāi)發(fā)的WINCC應用軟件,其功能就令人眼花繚亂。
本文引用地址:http://dyxdggzs.com/article/2810.htm但同時(shí)應該指出的是,這些軟件大都價(jià)格昂貴,而且其繁多的功能在許多小規模的生產(chǎn)場(chǎng)合或是教學(xué)使用中也并不十分必要,種種實(shí)際因素的限制使得購買(mǎi)這些軟件對于很大一部分用戶(hù)來(lái)說(shuō)是不合算的。在這樣一個(gè)背景下,開(kāi)發(fā)一個(gè)簡(jiǎn)易實(shí)用的通信程序就體現出一定的價(jià)值。
本設計的主要目的是要滿(mǎn)足中小用戶(hù)及教學(xué)中利用PC對PLC進(jìn)行監控的需要。在實(shí)現通信的過(guò)程中,PLC被設置為Freeport自由口通信模式,所以用戶(hù)只需要使用普通的PC和PLC,以PC/PPI電纜外加雙絞線(xiàn)將其依次連接就可以了。另外本設計中用到的PC至少要有一個(gè)串行通信口,PLC方面則主要是以帶DP口的Siemens S7 200 系列PLC為例進(jìn)行說(shuō)明。
本軟件在功能上主要包括PLC->PC和PC->PLC兩部分,在實(shí)際編寫(xiě)時(shí)PC和PLC兩方面均須編程。其中PC程序用Visual Basic6.0編寫(xiě),以其自帶的MSComm通信控件作主要的通信控制,PLC程序則在STEP7 MicroWIN環(huán)境中編寫(xiě)。同時(shí)假定一臺PC與七臺PLC進(jìn)行通信。
整個(gè)軟件實(shí)現的基本功能就是當用戶(hù)需要讀取數據時(shí),在控制界面(如圖1)上選擇某臺PLC并點(diǎn)擊“接收數據”按鈕后,相應PLC將會(huì )把存儲在發(fā)送區的數據發(fā)送過(guò)來(lái),發(fā)送結束后,數據接收框顯示“數據接收完”;當用戶(hù)需要發(fā)送數據給某臺PLC時(shí),也先選擇需要的PLC,再在數據發(fā)送框中填入要發(fā)送的數據,點(diǎn)擊“發(fā)送數據”按鈕,PC就會(huì )將用戶(hù)填入的數據送到PLC中接收數據區,PLC同時(shí)還會(huì )把接收到的這個(gè)數據顯示出來(lái)。并且整個(gè)程序可以很方便地進(jìn)行功能擴展。
下面就分別從PC和PLC兩個(gè)方面具體說(shuō)明通信的實(shí)現過(guò)程。
這里,PC程序是占主導地位的,其流程圖示于圖2。由PC程序來(lái)傳達用戶(hù)究竟是要進(jìn)行讀還是寫(xiě)操作,以及具體對哪臺PLC進(jìn)行操作。這幾項命令在軟件中由一個(gè)控制字來(lái)表達,其定義如圖3。
當PC方面程序開(kāi)始運行后,MSComm控件將把串口初始化,而后程序等待用戶(hù)選擇要進(jìn)行操作的PLC并點(diǎn)擊“發(fā)送數據”或“接收數據”按鈕。根據用戶(hù)的操作,程序會(huì )自動(dòng)生成一個(gè)相應的控制字,并將其傳送給PLC。如果此時(shí)用戶(hù)是要讀取某臺PLC的數據,則PC在發(fā)送完控制字后會(huì )停下來(lái)等待相應PLC將數據發(fā)送過(guò)來(lái)。一旦接收到數據,PC會(huì )首先判斷是否結束幀,如不是,就將此數據裝入數據接收區,然后發(fā)送確認幀給PLC,并把接收到的數據在控制界面上的接收數據框中顯示出來(lái)提供給用戶(hù)。如果是結束幀,PC就會(huì )顯示在數據接收框中顯示出“數據接收完”,而后程序停止運行直至用戶(hù)再次進(jìn)行操作。
如果用戶(hù)是要向某臺PLC發(fā)送數據,PC將會(huì )在發(fā)送完相應控制字后打開(kāi)一個(gè)定時(shí)器,時(shí)間到后便讀取PLC已經(jīng)送來(lái)的EOF文件結束字符(ASCII碼為26)。讀取這個(gè)字符可以觸發(fā)MSComm的OnComm事件,并使其CommEvent屬性值為comEvEOF。這樣,通過(guò)一個(gè)以CommEvent為表達式的條件分支語(yǔ)句就可以使程序轉入發(fā)送有效數據(即用戶(hù)寫(xiě)入控制界面上發(fā)送數據框的數據)的操作。這里設置定時(shí)器的目的會(huì )在下面介紹PLC方面程序時(shí)予以具體說(shuō)明。PC執行完發(fā)送程序段就會(huì )暫停下來(lái)等待用戶(hù)的下一步指示。
PLC在初始化結束之后就根據PC送來(lái)的控制字進(jìn)行相應的操作,其程序流程圖如圖4所示。PLC首先將接收到的控制字拆分,判斷出用戶(hù)的具體要求,然后調用相應的子程序。如用戶(hù)需要讀取數據,PLC將會(huì )把存儲在發(fā)送緩沖區的數據依次發(fā)送過(guò)來(lái)。每次發(fā)送完一個(gè)數據后,PLC就等待PC發(fā)一個(gè)確認幀過(guò)來(lái),只有接收到這個(gè)確認幀,PLC才會(huì )將下一個(gè)數據發(fā)送出去,以此保證通信雙方保持同步。并且,PLC在每次發(fā)送數據前要檢驗一下這個(gè)數據是不是結束幀,由于在預處理PLC的發(fā)送表時(shí)將其統統裝入了結束幀,而后才從頭依次裝入有效數據,故一旦有效數據發(fā)完,PLC必然會(huì )發(fā)出一個(gè)結束幀。當PLC檢測到要發(fā)送的是結束幀后將會(huì )把這個(gè)結束幀發(fā)出,然后程序暫停運行直至PC再次送來(lái)讀/寫(xiě)指令。
如果用戶(hù)是要進(jìn)行寫(xiě)操作,PLC在對控制字進(jìn)行相應判斷后,將會(huì )發(fā)送一個(gè)EOF給PC,以此觸發(fā)PC發(fā)送有效數據。前面提到了在PC程序中設置定時(shí)器,其目的是要保證PC能夠可靠地讀到PLC發(fā)來(lái)的EOF,由于程序的運行是需要一定時(shí)間的,故PLC不可能在PC發(fā)送完控制字后立即回送EOF。根據筆者的測試,設置定時(shí)器在2s左右是比較合適的。PLC在接收完數據后就會(huì )停下來(lái)等待PC發(fā)送新的控制字。
由于采用了事件驅動(dòng)的Visual Basic為編程語(yǔ)言,并且還用到了它自帶的MSComm通信控件進(jìn)行對數據傳輸的主要控制,整個(gè)軟件體系思路清晰,代碼易于編寫(xiě),并且在功能上很容易進(jìn)行擴展。以此設計中軟件為藍本,用戶(hù)可以方便地根據自身具體需要開(kāi)發(fā)出更加符合自己要求的軟件,而在硬件方面就根本不需要添加什么設備?!?/font>
參考文獻
1鐘肇新.王灝. 可編程控制器入門(mén)教程,華南理工大學(xué)出版社,1995.5
2宋偉.吳建國. Visual Basic 6.0編程基礎,清華大學(xué)出版社,1999.2
評論