1 引言
隨著計(jì)算機(jī)通訊技術(shù)的日益成熟及企業(yè)對(duì)工業(yè)自動(dòng)化程度要求的提高,自動(dòng)控制系統(tǒng)從傳統(tǒng)的集中式控制向多級(jí)分布式控制方向發(fā)展,構(gòu)成控制系統(tǒng)的PLC也就必須具備通信聯(lián)網(wǎng)功能。在具體應(yīng)用過程中,若要監(jiān)視PLC內(nèi)部的數(shù)據(jù)與運(yùn)行狀況,選用市場(chǎng)上的人機(jī)界面或組態(tài)軟件,雖然功能豐富,但大都價(jià)格昂貴,尤其在一些中小規(guī)模的生產(chǎn)場(chǎng)合。所以許多企業(yè)希望能自己用高級(jí)語言開發(fā)一個(gè)簡(jiǎn)易實(shí)用的通信程序,通過面向?qū)ο蟮目梢暬幊陶Z言VB6.0很容易地實(shí)現(xiàn)分布式監(jiān)控。PLC等下位機(jī)控制生產(chǎn)過程,本地計(jì)算機(jī)進(jìn)行實(shí)時(shí)監(jiān)測(cè)或參與控制生產(chǎn)現(xiàn)場(chǎng)的參數(shù)。本文通過對(duì)OMRON的CPM1A小型機(jī)與上位計(jì)算機(jī)通信原理和通信方法的研究,介紹了如何用VB6.0實(shí)現(xiàn)上位計(jì)算機(jī)對(duì)PLC的實(shí)時(shí)監(jiān)控,并取得了良好的效果。
2 監(jiān)控原理
2.1 通信方法
上位機(jī)作為主站要能夠通過PLC監(jiān)控下層設(shè)備的狀態(tài),首先要實(shí)現(xiàn)上位機(jī)與PLC間的通信。由于串行通信具有線路簡(jiǎn)單、應(yīng)用靈活、可靠性高等優(yōu)點(diǎn),并且普通計(jì)算機(jī)均帶有串行口,所以PC與PLC間通常采用串行通信方式。串行通信可以通過Windows的API函數(shù)實(shí)現(xiàn),也可以串行通信控件實(shí)現(xiàn),但后者較容易,本文采用VB的通信控件。如果只實(shí)現(xiàn)對(duì)一臺(tái)CPM1APLC的監(jiān)控,需要CPM1-CIFO1(OMRON提供的專用的RS232適配器)形成RS232C口與上位機(jī)通信;如果是實(shí)現(xiàn)對(duì)多臺(tái)PLC的監(jiān)控,則需用RS232—RS422/RS485轉(zhuǎn)換器ADAM-4520和CPM1-CIF11(OMRON提供的專用RS422適配器)與上位機(jī)通信,最多可連接32臺(tái)PLC,連接方式如圖1所示。
[align=center]
圖1 系統(tǒng)通信原理[/align]
在通信過程中上位機(jī)始終處于主動(dòng)方,PLC則處于從動(dòng)方,所有的數(shù)據(jù)交換只能在主站和從站之間進(jìn)行,從站之間不能直接交換數(shù)據(jù),如果從站之間需要交換數(shù)據(jù),必須通過主站中轉(zhuǎn)1。首先上位機(jī)向PLC發(fā)送指令幀,PLC接收了上位機(jī)的指令后,先進(jìn)行FCS校驗(yàn),看其是否正確,如果正確,則接收并向上位機(jī)傳送響應(yīng)幀(包含首尾校驗(yàn)字節(jié)),否則,PLC拒絕向上位機(jī)傳送數(shù)據(jù)。需要說明的是,整個(gè)通信過程中因PLC中配有通信機(jī)制,一般不需要對(duì)PLC進(jìn)行編程。上位機(jī)接收到PLC傳送的數(shù)據(jù),也要判斷正確與否,如果正確,則接收,完成一次正常通信,否則,通信需重新開始。
2.2 通訊協(xié)議
(1)通訊條件設(shè)計(jì)。要使上位機(jī)與下位機(jī)正確地交換數(shù)據(jù),必須確保以下幾點(diǎn):
● 雙方在初始化時(shí)要使波特率、數(shù)據(jù)位數(shù)、停止位數(shù)、奇偶校驗(yàn)均保持一致;
● 要嚴(yán)格按照PLC的通信協(xié)議的規(guī)定及幀格式編寫PC的通信程序。
(2)通訊的命令幀設(shè)計(jì)。OMRON公司的CPMIA小型PLC的傳輸協(xié)議的一般格式為:
(3)通訊的響應(yīng)幀設(shè)計(jì)
其中,@為前導(dǎo)字符,表示開始;設(shè)備號(hào)為00-31(本例限設(shè)到10),共可設(shè)置32個(gè)站號(hào),用來識(shí)別所連接的PLC,可通過PLC的DM6653的低8位來設(shè)定,默認(rèn)站號(hào)為00;命令碼為CPMIA小型PLC規(guī)定的對(duì)其操作的命令代碼;正文為需要讀或?qū)懙臄?shù)據(jù)地址以及數(shù)據(jù);FCS為幀校驗(yàn)代碼,用于及時(shí)發(fā)現(xiàn)通信過程中的錯(cuò)誤,以備處理;*和CR表示命令結(jié)束[2]。
命令幀為PC機(jī)傳向PLC的幀格式,響應(yīng)幀為PLC傳向PC機(jī)的幀格式,其命令幀與響應(yīng)幀中的各個(gè)部分除數(shù)據(jù)區(qū)不同外,其他部分的含義是相同的。
2.3 MSComm控件介紹
VB中的MSComm控件具有功能完善的串口數(shù)據(jù)發(fā)送和接收功能。 MSComm控件具有兩種通信方式:事件驅(qū)動(dòng)方式和查詢方式[3]。因?yàn)椴樵兎绞秸加肅PU時(shí)間太多,我們采用事件驅(qū)動(dòng)方式。要完成通信,必需正確設(shè)置MSComm控件的相關(guān)屬性,本設(shè)計(jì)在窗體中對(duì)其進(jìn)行初始化,主要包括端口設(shè)置,波特率設(shè)置,奇偶設(shè)置等。主要屬性如表1所示。
[align=center]表1 MSComm控件屬性
[/align]
[b]2 通信程序設(shè)計(jì)
[/b]
本系統(tǒng)以PC對(duì)基于PLC的交通燈控制系統(tǒng)的監(jiān)控為例,在上位機(jī)與PLC正常通信的前提下,設(shè)計(jì)如下界面。窗體的內(nèi)容主要包括,四大區(qū):端口、站號(hào)選擇區(qū),設(shè)定時(shí)間輸入?yún)^(qū),監(jiān)控顯示區(qū),控制按紐區(qū)。從站號(hào)選擇區(qū)選擇不同站號(hào)即不同PLC,實(shí)現(xiàn)對(duì)多個(gè)PLC的實(shí)時(shí)監(jiān)控。
3.1 串口初始化程序
If MSComm1.PortOpen <> True Then
MSComm1.PortOpen=True
End If
MSComm1.Settings=“9600,E,7,2”
MSComm1.InputLen=0
MSComm1.InBufferCount=0
MSComm1.InputMode=comInputModeText
MSComm1.Handshaking=comNone
3.2 計(jì)算機(jī)與PLC通信的VB程序
Public Function ReadData(ByVal InputStr As String, ByVal Num1 As Integer, ByVal Num2 As Integer) As String
Dim OutputStr As String
Dim InString As String
Dim ReturnStr As String
Dim EndString As String
Dim FCSString As String
Dim ReturnFCSString As String
Form1.MSComm1.InBufferCount=0
OutputStr=InputStr+FCS(InputStr)+“*”
If Form1.MSComm1.PortOpen=True Then
Form1.MSComm1.Output=OutputStr+Chr$(13)’按照PLC幀格式輸出
End If
Do
DoEvents
Loop Until Form1.MSComm1.InBufferCount >=Num2’返回幀的長(zhǎng)度
InString=Form1.MSComm1.Input
EndString=Mid$(InString,6,2)’取返回幀的響應(yīng)碼
If EndString <> “00”Then
ReadData=“Error”
Exit Function
End If
EndString=Mid$(InString,1,Len(InString)-4)
ReturnFCSString=Mid$(InString, Len(InString) -3,2)’取返回幀校驗(yàn)碼
FCSString=FCS(EndString)
If FCSString <> ReturnFCSString Then
ReadData=“Error”
Exit Function
End If
If Len(InString)>=Num2 Then
ReturnStr=Mid$(InString, Len(InString)-Num1-3, Num1)’取返回幀的數(shù)據(jù),其度為Num1
ReadData = ReturnStr
End If
End Function
4 結(jié)束語
本文給出了利用VB中的MSCOMM控件實(shí)現(xiàn)上位機(jī)與多個(gè)PLC之間的通信方法,實(shí)現(xiàn)了上位機(jī)對(duì)多個(gè)PLC的實(shí)時(shí)監(jiān)控。對(duì)于分布是控制系統(tǒng)大幅度地減小了通訊成本,具有一定的推廣價(jià)值。