PLC以卓越的可靠性和方便的可編程性廣泛應用于工業(yè)控制領(lǐng)域。實(shí)現PC機與PLC通信的目的是為了向用戶(hù)提供諸如工藝流程圖顯示、動(dòng)態(tài)數據畫(huà)面顯示、報表顯示、窗口技術(shù)等多種功能,為PLC提供良好的人機界面。本文詳細介紹了FX系列PLC的通信協(xié)議,并在Windows環(huán)境下,使用易語(yǔ)言開(kāi)發(fā)通信程序,實(shí)現了PC機與FX系列PLC之間的串行通信。本文對FX系列PLC的通信協(xié)議進(jìn)行了詳細的介紹,并以易語(yǔ)言為開(kāi)發(fā)工具實(shí)現了PC機與FX系列PLC的串行通信。
1 前言
PLC以卓越的可靠性和方便的可編程性廣泛應用于工業(yè)控制領(lǐng)域。實(shí)現PC機與PLC通信的目的是為了向用戶(hù)提供諸如工藝流程圖顯示、動(dòng)態(tài)數據畫(huà)面顯示、報表顯示、窗口技術(shù)等多種功能,為PLC提供良好的人機界面。本文詳細介紹了FX系列PLC的通信協(xié)議,并在Windows環(huán)境下,使用易語(yǔ)言開(kāi)發(fā)通信程序,實(shí)現了PC機與FX系列PLC之間的串行通信。
2 PC機與PLC實(shí)現通信的條件
帶異步通信適配器的PC機與PLC只有滿(mǎn)足如下條件,才能互聯(lián)通信:
(1)帶有異步通信接口的PLC才能與帶異步通信適配器的PC機互聯(lián)。還要求雙方采用的總線(xiàn)標準一致,否則要通過(guò)“總線(xiàn)標準變換單元”變換之后才能互聯(lián)。
(2)雙方的初始化,使波特率、數據位數、停止位數、奇偶校驗都相同。
(3)要對PLC的通信協(xié)議分析清楚,嚴格地按照協(xié)議的規定及幀格式編寫(xiě)PC機的通信程序。PLC中配有通信機制,一般不需用戶(hù)編程。
3 PC機及與FX系列PLC的串行通訊
3.1 硬件連接
PC機與FX系列PLC不能直接連接,要經(jīng)過(guò)FX-232AW單元進(jìn)行RS232C/RS-422的變換,下圖表示了它們之間的連接關(guān)系:
3.2 FX系列PLC的通信協(xié)議
在PC機中必須依據互聯(lián)的PLC的通信協(xié)議來(lái)編寫(xiě)通信程序,因此先介紹FX系列PLC的通信協(xié)議。
(1)數據格式
FX系列PLC采用異步格式,由1位起始位、7位數據位、1位偶校驗位及1位停止位組成,波特率為9600bps,字符為ASCII碼。格式如下:
(2)通信命令
FX系列PLC有4個(gè)通信命令,它們是讀命令、寫(xiě)命令、強制通命令、強制斷命令,如下表所示。表中X—輸入繼電器;Y—輸出繼電器;M—輔助繼電器;S—狀態(tài)元件;T—定時(shí)器;C—計數器;D—數據寄存器。
(3)通信控制字符
FX系列PLC采用面向字符的傳輸規程,用到5個(gè)通信控制字符,如下表所示。
*當PLC對PC機發(fā)來(lái)的ENQ不理解時(shí),用NAK回答。
(4)報文格式
PC機向PLC發(fā)送的報文格式如下:
其中STX為開(kāi)始標志:02H;ETX為結束標志:03H;CMD為命令的ASCII碼;SUMH,SUML為從CMD到ETX按字節求累加和,溢出不計。由于每字節十六進(jìn)制數變?yōu)閮勺止潱粒樱茫桑纱a,故校驗和為SUMH與SUML。
數據段格式與含義如下:
*寫(xiě)命令的數據段有數據,讀命令的數據段則無(wú)數據。
讀/寫(xiě)字節數為01H~40H(1~64)個(gè)。
PLC向PC機發(fā)送的應答報文格式如下:
*對讀命令的應答報文數據段為要讀取的數據,一個(gè)數據占兩個(gè)字節,分上位下位:
對寫(xiě)命令的應答報文無(wú)數據段,而用ACK及NAK作為應答內容。
(5)傳輸過(guò)程
PC機與FX系列PLC之間采用應答方式通信,傳輸出錯則組織重發(fā)。其傳輸過(guò)程如下:
PLC根據PC機的命令,在每個(gè)循環(huán)掃描結束處的END語(yǔ)句后組織自動(dòng)應答,無(wú)需用戶(hù)在PLC一方編寫(xiě)程序。
4 利用易語(yǔ)言編寫(xiě)通信程序
下面以一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明編寫(xiě)通信程序的要點(diǎn)。假設PC機要求從PLC中讀入從D123開(kāi)始的4個(gè)字節的數據(D123,D124),其傳輸應答過(guò)程及報文如下(圖略可向作者索。
命令報文中10F6H為D123的地址,04H表示要讀入4個(gè)字節的數據。校驗和SUM=30H+31H+30H+46H+36H+30H+34H+
03H=174H,溢出部分不計,故SUMH為'7',SUML為‘4’,相應的ASCII碼為“37H”,“34H”。應答報文中4個(gè)字節的十六進(jìn)制數,其相應的ASCII碼為8個(gè)字節,故應答報文長(cháng)度為12個(gè)字節。
根據PC機與FX系列PLC的傳輸應答過(guò)程編制出如下所示的通信程序流程圖略。
利用VB的MSComm控件,按照流程圖可以編寫(xiě)如下通信程序實(shí)現PC機與FX系列PLC之間的串行通信以完成數據的讀取。MSComm控件可以采用輪詢(xún)或事件驅動(dòng)的方法從端口獲取數據。在這個(gè)例子中使用了輪詢(xún)方法。
(1)通信口初始化
端口1.端口號=1
端口1.波特率=9600
端口1.數據位數=7
端口1.奇偶校檢方案=2
端口1.停止位=1
端口1.啟動(dòng)()
(2)請求通信與確認
Private Function MakeHandShaking() As Boolean
Dim InPackage As String
MSComm1.OutBufferCount = 0
MSComm1.InBufferCount = 0
MSComm1.Output = Chr(&H5)
Do
DoEvents
Loop Until MSComm1.InBufferCount = 1
InPackage = MSComm1.Input
If InPackage = Chr(&H6) Then
MakeHandShaking = True
Else
MakeHandShaking = FalseEnd If
End Function
(3)發(fā)送命令報文
Private Sub SendFrame()
Dim OutString As String
MSComm1.OutBufferCount = 0
MSComm1.InBufferCount = 0
OutStrin = Chr(&H2)+″0″+″10F604″+Chr(&H3)+″74″
MSComm1.Output = OutString
End Sub
(4)讀取應答報文
Private Sub ReceiveFrame()
Dim InString As String
Do
DoEvents
Loop Until MSComm1.InBufferCount = 12
InString = MSComm1.Input
End Sub
5 結束語(yǔ)
以本文所述機制編寫(xiě)的通信程序已成功用于以FX2N型PLC作為主控制器的高層建筑玻璃幕墻清洗機器人系統中,通過(guò)該通信程序,實(shí)現了PC機對PLC的監視和控制。同時(shí),本程序對PC機與其它型號PLC之間的通信也有一定的借鑒意義。