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)用過(guò)程中,若要監(jiān)視PLC內(nèi)部的數(shù)據(jù)與運(yùn)行狀況,選用市場(chǎng)上的人機(jī)界面或組態(tài)軟件,雖然功能豐富,但大都價(jià)格昂貴,尤其在一些中小規(guī)模的生產(chǎn)場(chǎng)合。所以許多企業(yè)希望能自己用高級(jí)語(yǔ)言開(kāi)發(fā)一個(gè)簡(jiǎn)易實(shí)用的通信程序,通過(guò)面向?qū)ο蟮目梢暬幊陶Z(yǔ)言VB6.0很容易地實(shí)現(xiàn)分布式監(jiān)控。PLC等下位機(jī)控制生產(chǎn)過(guò)程,本地計(jì)算機(jī)進(jìn)行實(shí)時(shí)監(jiān)測(cè)或參與控制生產(chǎn)現(xiàn)場(chǎng)的參數(shù)。本文通過(guò)對(duì)OMRON的CPM1A小型機(jī)與上位計(jì)算機(jī)通信原理和通信方法的研究,介紹了如何用VB6.0實(shí)現(xiàn)上位計(jì)算機(jī)對(duì)PLC的實(shí)時(shí)監(jiān)控,并取得了良好的效果。 2 監(jiān)控原理 2.1 通信方法 ![]() 圖1 系統(tǒng)通信原理 在通信過(guò)程中上位機(jī)始終處于主動(dòng)方,PLC則處于從動(dòng)方,所有的數(shù)據(jù)交換只能在主站和從站之間進(jìn)行,從站之間不能直接交換數(shù)據(jù),如果從站之間需要交換數(shù)據(jù),必須通過(guò)主站中轉(zhuǎn)1。首先上位機(jī)向PLC發(fā)送指令幀,PLC接收了上位機(jī)的指令后,先進(jìn)行FCS校驗(yàn),看其是否正確,如果正確,則接收并向上位機(jī)傳送響應(yīng)幀(包含首尾校驗(yàn)字節(jié)),否則,PLC拒絕向上位機(jī)傳送數(shù)據(jù)。需要說(shuō)明的是,整個(gè)通信過(guò)程中因PLC中配有通信機(jī)制,一般不需要對(duì)PLC進(jìn)行編程。上位機(jī)接收到PLC傳送的數(shù)據(jù),也要判斷正確與否,如果正確,則接收,完成一次正常通信,否則,通信需重新開(kāi)始。 2.2 通訊協(xié)議 ● 雙方在初始化時(shí)要使波特率、數(shù)據(jù)位數(shù)、停止位數(shù)、奇偶校驗(yàn)均保持一致;
![]() (3)通訊的響應(yīng)幀設(shè)計(jì)
![]() 其中,@為前導(dǎo)字符,表示開(kāi)始;設(shè)備號(hào)為00-31(本例限設(shè)到10),共可設(shè)置32個(gè)站號(hào),用來(lái)識(shí)別所連接的PLC,可通過(guò)PLC的DM6653的低8位來(lái)設(shè)定,默認(rèn)站號(hào)為00;命令碼為CPMIA小型PLC規(guī)定的對(duì)其操作的命令代碼;正文為需要讀或?qū)懙臄?shù)據(jù)地址以及數(shù)據(jù);FCS為幀校驗(yàn)代碼,用于及時(shí)發(fā)現(xiàn)通信過(guò)程中的錯(cuò)誤,以備處理;*和CR表示命令結(jié)束[2>。 命令幀為PC機(jī)傳向PLC的幀格式,響應(yīng)幀為PLC傳向PC機(jī)的幀格式,其命令幀與響應(yīng)幀中的各個(gè)部分除數(shù)據(jù)區(qū)不同外,其他部分的含義是相同的。 2.3 MSComm控件介紹 表1 MSComm控件屬性 ![]() 2 通信程序設(shè)計(jì) 本系統(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 en <> True Then 3.2 計(jì)算機(jī)與PLC通信的VB程序 ![]() Dim OutputStr As String Dim InString As String Dim ReturnStr As String Dim EndString As String Dim FCSString As String Dim ReturnFCSString As String erCount=0 OutputStr=InputStr+FCS(InputStr)+“*” If en=True Then =OutputStr+Chr$(13)’按照PLC幀格式輸出 End If Do DoEvents Loop Until erCount >=Num2’返回幀的長(zhǎng)度 InString= 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é)束語(yǔ) |
(轉(zhuǎn)載)