1 引言
PLC以其高可靠性、適應工業過程現場、強大的聯網功能等特點被廣泛使用,是機電一體化的發展方向。Windows以圖形化界面給用戶提供了良好的人機界面,并且被很多人所掌握,所以我們考慮使用PLC作為工業控制下位機,使用PC作為上位機進行人機交互界面。這就涉及了使用PC如何控制PLC,PC如何與PLC進行通訊的問題。
以Schneider公司的TSX Neza系列PLC為例,上位PC機與PLC通訊進行一些探討。
2 計算機與Neza PLC通訊方式。
Neza系列PLC提供了三種通訊方式,分別為:Modbus方式、ASCII方式、Unitelway方式。
(1) Modbus方式
MODBUS是Schneider公司為該公司生產的PLC設計的一種通信協議,通過24種總線命令實現PLC與外界的信息交換。具有Modbus協議的PLC可以方便的進行組態。
使用Modbus進行PLC通訊時需要使用PLC的擴展口,而多個PLC進行通訊時也要使用這唯一的擴展口,也就是如果使用Modbus進行通訊時PLC無法與其他PLC進行通訊。Schneider公司早期產品不支持該協議。
(2) Unitelway方式
Unitelway是基于Schneider公司的Xway通訊協議的,經過發展現在Neza使用的是Unitelway V2,它與UnitelwayV1.1基本兼容。通過Unitelway提供的各項命令我們可以方便的訪問PLC的各項資源,對PLC進行各項操作。在Modicon公司NAZA系列PLC中編好的程序就是使用Unitelway下載入PLC。Unitelway使用編程口并不占用擴展口。在通訊方式中Unitelway是最為理想的方式,但是Unitelway協議并沒有完全公開,一般用戶無法使用。
(3) ASCII方式
ASCII碼方式在很多PLC上都可以使用名稱也不一而足:ASCII方式、自由口模式等等。在自由口模式下,通信協議是由用戶定義的。用戶要根據自己的需要確定自己和PLC的通訊協議。自由碼也是使用編程口與上位機進行通訊,并不占用擴展口。但是它的通訊協議需要自己確定,需要在PLC編程和上位機中確定唯一的通訊方法。
3 通訊過程
每一次PC機和PLC數據交換有3個步驟,說明如下:
(1) 通訊是由在PLC中確定的時間觸發, 發送一組字符給PC機
在Neza系列PLC使用ASCII通訊時,通訊是由在PLC中確定的時間觸發的。在確定的時間到達后,PLC要求數據發送時,PLC會發送一組字符過去。通常該字符第一個字符就是前導碼,PC機根據前導碼確定是否應該讀取該字符串、該字符屬于哪一個命令集合,以及用什么格式去讀取字符串等。前導碼不會是一般的符號字符,通常是一些不可見的字符(位于ASCII碼表的前30個)或極少被使用的符號字符,這是因為避免數據字符與前導碼一樣而發生錯誤判斷。在前導碼之后是站號,通常是以兩個字符代表,單純以RS232連接的單一設備也許不需要站號的設置,但是如果以RS485進行網絡連接,就需要用站號來辨認命令是屬于那一個設備。站號后面就是設備解讀的命令或者數據。(本例為單機不需要站號)一般的通訊都需要進行數據的校驗,在Neza系列PLC使用ASCII通訊中,PLC沒有對數據的處理能力,所以沒有設置校驗位。為了保證通訊的正確,可以在PC中對數據進行一定處理。在數據后一般為這個幀的結束碼,來保證數據幀的完整性。
(2) PC收到要求的字符串,并判讀
當PC收到要求的字符串,并經過判讀確定后,同樣按照相同的協議,按照用戶需要對PLC進行的操作送出數據,數據被送出時會在數據之前加上前導碼和站號。數據中攜帶了PC機對PLC要求的操作。
(3) PLC將數據發給PC
在 PLC收到PC發來的數據包后經過判讀確定后,進行一定的操作然后在觸發時間到達后將PLC的狀態寫入數據發給PC,這樣就完成了一次數據交換。
4 應用實例
下面介紹所開發的系統是由下位機(PLC)—上位機(PC)組成,系統框圖如圖1所示。程序使用VB6,整個程序設計分為四部分:上位機程序設計;下位機程序設計;通訊硬件設計;通訊協議。
圖1 系統框圖
(1) 通訊格式的確定
作者使用的通訊參數:9600波特率,8位數據位、1位停止位,奇校驗。本實例中定義整個幀長22個字節。
幀格式:
[NextPage]
(2) 上位機程序設計
上位機程序設計包括兩個模塊:用戶應用程序和串行通訊程序.用戶應用程序是圖形化的供用戶操作的界面。串行通訊程序是底層運行的程序,它負責與下位機的通訊。
上位機通訊程序:
Sub Form_Load() ‘窗體加載打開串口
MSComm1.PortOpen = True
Mscomm1.settings="9600,o,8,1"
End Sub
Sub MSComm1_OnComm() ‘有數據輸入
If MSComm1.CommEvent = comEvReceive Then
If MSComm1.InBufferCount = 22 Then
buffer = MSComm1.Input
If buffer(0) = &HFF And buffer(1) = &HFF And buffer(21) = &HCC Then
Call StateToBuffer‘將讀入的數據讀入應
‘用程序處理
Call IniState ‘初始化狀態
Call StateToBuffer‘確定發送給PLC的
‘數據
MSComm1.Output =Buffer‘發出數據
Else
MSComm1.InBufferCount = 0
End If
Else
MSComm1.InBufferCount = 0
MSComm1.PortOpen = False‘通訊失敗關閉串口
‘然后重新打開
MSComm1.PortOpen = True
End If
End Sub
(3) 下位機程序設計
下位機程序設計指使用PLC編程軟件對PLC進行編程,實現對電機的控制。
當TSX Neza處于ASCII模式時,狀態位%S100置為“1”。發送與接受由%MSG模塊與EXCH指令組成。%MSG模塊用來控制數據交換,EXCH指令用來控制數據交換。發送或接收幀的最大為128字節。
EXCH指令由控制區、發送區、接收區組成,如表1所示。EXCH指令有3個用途:發送;發送/接收;接收。
表1 EXCH指令
[NextPage]
控制區高位字節為命令,低位字節為發長度LgT/LgR,長度字節表示發送字符的長度(LgT),在接收的結尾被改寫為接收字符的長度(LgR)。當接收到幀的末尾字節后結束接收。結束碼可以為用戶修改(系統字%SW68的低位字節)。該字節默認值為H0D。
在使用EXCH指令的發送模式,僅需要有控制區與發送區,TSX Neza僅傳送發送區的數據。
在使用EXCH指令的發送/接收模式時,先發送,在發送結束時TSX Neza切換為等待接收的狀態。如果接收狀態正常且詢問長度(LgT)和響應(LgR)的長度都小于%Mwi保留區(長度L),那么等接收到響應后,把它復制到與發送表相關的%Mwi區。如果不是這種情況,則位%MSG.E變為1。當檢測到結束碼或接收區滿了時,接收結束。
在使用EXCH指令的接收模式,僅需要有控制區和接收區,TSX Neza僅接收數據。等接收到響應后,把它復制到與發送表相關的%Mwi區。如果不是這種情況,則位%MSG.E變為1。當檢測到結束碼或接收區滿了時,接收結束。
我們使用內部字MW1作為控制區,MW2至MW11作為發送區,其中MW2、MW3作為前導碼。MW12至MW17作為接受區。在PLC程序中讀取內部字作為工作的判定條件。
本實例PLC每450ms與PC機通訊一次。
(4) 硬件部分
硬件包括RS232與RS485轉換,如果上位機與下位機距離遠的話,還要考慮485總線上的干擾問題。
硬件設置:
TER端口可以在PLC配置對話框中修改;
類型:半雙工;
速率:9600bps;
格式:1個起始位,8個數據位、1個停止位。
校驗:ODD。
5 結束語
本實例已經在上海久事復興大廈、興業大廈污水處理系統中使用,效果良好。業主單位對上位機軟件良好的人機界面和穩定的通訊功能表示非常滿意。