陳志偉 徐世許
摘要: 為了將稱重?cái)?shù)據(jù)實(shí)時(shí)傳送到DCS中方便管理,本文以青島某堿廠采集的20多種生產(chǎn)原料數(shù)據(jù)為例,基于自由口協(xié)議和Modbus RTU協(xié)議,設(shè)計(jì)應(yīng)用了稱重?cái)?shù)據(jù)遠(yuǎn)傳系統(tǒng)。系統(tǒng)由上位機(jī)、可編程邏輯控制器(programmable logic controller,PLC)和分布式控制系統(tǒng)(distributed control system,DCS)組成。上位機(jī)從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)并經(jīng)過(guò)轉(zhuǎn)換寫入PLC內(nèi)存區(qū);DCS設(shè)有RS485接口,且只能識(shí)別Modbus RTU協(xié)議,于是DCS經(jīng)RS485光纖轉(zhuǎn)換器與PLC相連,實(shí)時(shí)讀取PLC中的數(shù)據(jù)。本方案主要應(yīng)用西門子自由口協(xié)議和Modbus協(xié)議,編寫PLC內(nèi)部程序,上位機(jī)方面使用VB60編寫上位機(jī)與PLC的串行端口數(shù)據(jù)傳輸程序,同時(shí)應(yīng)用ADO方式對(duì)結(jié)構(gòu)化查詢語(yǔ)言(structured query language,SQL)數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)操作,實(shí)現(xiàn)數(shù)據(jù)的查詢、導(dǎo)出和刪除。該系統(tǒng)已成功應(yīng)用于堿廠生產(chǎn)現(xiàn)場(chǎng),能夠滿足對(duì)數(shù)據(jù)遠(yuǎn)程實(shí)時(shí)監(jiān)控的要求。
關(guān)鍵詞: 自由口協(xié)議; Modbus RTU協(xié)議; 通信; DCS
中圖分類號(hào): TP393.04文獻(xiàn)標(biāo)識(shí)碼: A
近年來(lái),隨著工業(yè)的迅速發(fā)展,傳統(tǒng)的通信方式已不能適應(yīng)現(xiàn)代工業(yè)生產(chǎn)的需求,將自動(dòng)化設(shè)備采集的數(shù)據(jù)傳送到計(jì)算機(jī)并進(jìn)行相關(guān)的分析處理,已經(jīng)成為交通、電力、冶金等相關(guān)行業(yè)的重要目標(biāo)[1]。通常情況下,需要運(yùn)用企業(yè)資源計(jì)劃(enterprise resource planning,ERP)系統(tǒng)[2],實(shí)現(xiàn)對(duì)計(jì)算機(jī)數(shù)據(jù)的遠(yuǎn)程監(jiān)控和分析,但是過(guò)高的成本使小型集散控制系統(tǒng)失去經(jīng)濟(jì)效益。DCS憑借操作簡(jiǎn)單、網(wǎng)絡(luò)通信能力好等優(yōu)點(diǎn),在很多領(lǐng)域得到了普遍應(yīng)用,但是DCS無(wú)法與其他系統(tǒng)共享信息,使得整個(gè)系統(tǒng)信息封閉[34]。為了將Toledo地磅系統(tǒng)中的稱重?cái)?shù)據(jù)傳送至該廠的DCS系統(tǒng)中,實(shí)現(xiàn)對(duì)生產(chǎn)現(xiàn)場(chǎng)實(shí)時(shí)監(jiān)控,需要設(shè)計(jì)一個(gè)稱重?cái)?shù)據(jù)遠(yuǎn)傳系統(tǒng),解決DCS系統(tǒng)信息封閉的缺點(diǎn)?;诖耍疚脑O(shè)計(jì)了一個(gè)由上位機(jī)、PLC和DCS組成的稱重?cái)?shù)據(jù)遠(yuǎn)傳系統(tǒng),并應(yīng)用自由口協(xié)議和Modbus RTU協(xié)議[57]實(shí)現(xiàn)數(shù)據(jù)采集、傳輸和存儲(chǔ)。該系統(tǒng)通過(guò)在上位機(jī)上使用高級(jí)語(yǔ)言編寫程序,使地磅系統(tǒng)數(shù)據(jù)庫(kù)中的數(shù)據(jù)先傳送至PLC指定區(qū)域中存放,再由DCS系統(tǒng)主動(dòng)查詢PLC中的數(shù)據(jù),從而降低成本,并充分運(yùn)用DCS的功能。稱重?cái)?shù)據(jù)遠(yuǎn)傳系統(tǒng)能夠?qū)崟r(shí)將地磅上傳到SQL Server數(shù)據(jù)庫(kù)中的數(shù)據(jù)傳送到DCS系統(tǒng)中,滿足了廠家對(duì)數(shù)據(jù)實(shí)時(shí)監(jiān)管的需求。該研究提高了工廠的工作效率和管理水平。
1稱重?cái)?shù)據(jù)遠(yuǎn)傳系統(tǒng)硬件結(jié)構(gòu)
稱重?cái)?shù)據(jù)遠(yuǎn)傳系統(tǒng)由上位計(jì)算機(jī)、PLC和DCS組成,稱重?cái)?shù)據(jù)遠(yuǎn)傳系統(tǒng)硬件結(jié)構(gòu)如圖1所示。PLC選用含有兩個(gè)RS485通信端口的西門子S7200 226系列,并運(yùn)用自由口協(xié)議與上位機(jī)通信,運(yùn)用Modbus RTU協(xié)議與DCS通信。DCS使用的是FOXBORO I/A Series,控制器為FCP270,通訊卡采用FBM231或Modbus板卡[810]。由于DCS只能作為主站,實(shí)時(shí)主動(dòng)查詢指定區(qū)域內(nèi)的數(shù)據(jù),所以需要在從機(jī)PLC內(nèi)對(duì)數(shù)據(jù)進(jìn)行分區(qū),供DCS查詢[11]。
考慮PLC與DCS的通信距離過(guò)遠(yuǎn)且傳送過(guò)程中有電磁干擾,采用RS485串口通信不能保證信號(hào)的實(shí)時(shí)性和穩(wěn)定性,于是采用了一套R(shí)S485光纖轉(zhuǎn)換器(光端機(jī))來(lái)實(shí)現(xiàn)數(shù)據(jù)的遠(yuǎn)距離通信[12]。
該數(shù)據(jù)遠(yuǎn)傳系統(tǒng)的工作原理是將地磅傳感器傳送到AVS AC系統(tǒng)的數(shù)據(jù)存入SQL Server數(shù)據(jù)庫(kù),然后通過(guò)編寫的VB軟件將SQL Server中的數(shù)據(jù)經(jīng)過(guò)MSComm控件調(diào)用Windows的底層應(yīng)用程序編程接口(application programming interface,API)發(fā)送到PLC的內(nèi)存區(qū)(V區(qū))。
由于上位機(jī)用到的串口過(guò)多,于是安裝了Moxa板卡進(jìn)行串口拓展。將Moxa端口1設(shè)置為RS232接口后,利用Moxa的端口1連接到PLC的Port 1進(jìn)行數(shù)據(jù)傳輸,數(shù)據(jù)傳送至PLC后,由PLC內(nèi)部的程序?qū)?shù)據(jù)進(jìn)行相應(yīng)的分區(qū),從而實(shí)現(xiàn)數(shù)據(jù)的定位存儲(chǔ),然后DCS通過(guò)FBM231板卡或Modbus板卡對(duì)PLC中固定區(qū)域的數(shù)據(jù)每05 s采集一次,采集完成后在DCS的監(jiān)控界面中顯示當(dāng)前正確的數(shù)據(jù)和歷史數(shù)據(jù)的趨勢(shì)圖。
2上位機(jī)程序設(shè)計(jì)
2.1上位機(jī)程序流程圖
稱重?cái)?shù)據(jù)遠(yuǎn)傳系統(tǒng)在上位機(jī)上的軟件操作系統(tǒng)通過(guò)VB 60編程實(shí)現(xiàn)。上位機(jī)程序流程圖如圖2所示。
2.2上位機(jī)自由口通信指令
自由口通信需要在上位機(jī)和PLC內(nèi)分別編程來(lái)實(shí)現(xiàn)。在VB 60中編寫的上位機(jī)自由口通信寫指令格式是固定的,由起始字符、數(shù)據(jù)段和結(jié)束字符組成:
Send(0)=&H21‘起始字符
Send(1)~Send(18)‘由數(shù)據(jù)庫(kù)數(shù)據(jù)轉(zhuǎn)換為二進(jìn)制的數(shù)據(jù)段
Send(19)=&H0A‘結(jié)束字符
設(shè)置結(jié)束字符是為了方便人為識(shí)別指令在何處結(jié)束。
PLC向上位機(jī)返回的響應(yīng)指令格式固定,由起始字符、數(shù)據(jù)段和結(jié)束字符組成:
Receive(0)=&H21‘起始字符
Receive (1)~Receive(18)‘返回存入PLC中的信息碼
Receive(19)=&H0A‘結(jié)束字符
2.3MSComm控件的使用
為了使應(yīng)用程序更加便捷、快速地使用串行接口接收和發(fā)送數(shù)據(jù),Microsoft公司開(kāi)發(fā)了微軟通信控制(microsoft communications control,MCC)。該控件簡(jiǎn)化了Windows下串行通信的編程,并通過(guò)事件驅(qū)動(dòng)(eventdriven)方法和查詢法對(duì)通訊過(guò)程中產(chǎn)生的問(wèn)題進(jìn)行相應(yīng)處理[13]。MSComm控件程序段如下:
With Mscomm1
.MSComm1.CommPort = 3‘使用3號(hào)串口
.MSComm1.Settings = "9 600,n,8,1"‘波特率為9 600,無(wú)校驗(yàn),8位數(shù)據(jù)位,1位停止位
.MSComm1.InputLen = 0‘一次讀取全部數(shù)據(jù)
.MSComm1.PortOpen = True‘打開(kāi)端口
.MSComm1.InputMode = ComInputModeBinary‘Input屬性以二進(jìn)制方式取回
MSComm1.InBufferCount=0‘清空接收緩沖區(qū)
MSComm1.Output=send‘將自由口通信寫指令以二進(jìn)制形式發(fā)送
Do
Doevents
Loop until MSComm1.InBufferCount>=20‘返回字符個(gè)數(shù)大于等于20個(gè)時(shí)Receive=MSComm1.Input‘接收返回碼
運(yùn)用自由口協(xié)議和MSComm控件,經(jīng)過(guò)編程后實(shí)現(xiàn)上位機(jī)和PLC的通信。在VB 60環(huán)境下,開(kāi)發(fā)的上位機(jī)程序界面如圖3所示。
2.4使用ADO控件實(shí)現(xiàn)對(duì)SQL Server和Excel的操作
ADO Data控件是通過(guò)Microsoft ActiveX數(shù)據(jù)對(duì)象(activeX data object,ADO)建立符合OLE DB規(guī)范數(shù)據(jù)源連接的數(shù)據(jù)綁定控件。在VB 60的環(huán)境下使用ADO控件對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)表進(jìn)行操作,具體操作步驟如下[1416]:
1)在工程中選擇“部件”命令,添加Adodc控件與DataGrid控件。
2)用Adodc中的ConnectionString屬性或Connection對(duì)象連接數(shù)據(jù)庫(kù)。
3)用Adodc中的RecordSource屬性或者Recordset對(duì)象從數(shù)據(jù)源中需要的數(shù)據(jù),選擇打開(kāi)的記錄集。
4)用Recordset對(duì)象中的屬性對(duì)記錄集中的記錄實(shí)現(xiàn)讀取、查詢、刪除和導(dǎo)出等功能。
5)通過(guò)DataGrid控件中的Datasource屬性設(shè)置在DataGrid控件中顯示的數(shù)據(jù)內(nèi)容,在此處將該屬性設(shè)置為Adodc 1,即可將數(shù)據(jù)直觀的顯示在程序界面。
6)該軟件能夠根據(jù)日期、貨物代號(hào)、車牌號(hào)或車輛代號(hào)對(duì)數(shù)據(jù)進(jìn)行查詢、刪除、導(dǎo)出等功能,數(shù)據(jù)查詢與清理界面如圖4所示。
3PLC程序設(shè)計(jì)
3.1自由口通信的程序設(shè)計(jì)
S7200 PLC通信協(xié)議的類型有很多,主要有點(diǎn)對(duì)點(diǎn)接口(point to point interface,PPI)協(xié)議、多點(diǎn)接口(multipoint interface,MPI)協(xié)議、PROFIBUS協(xié)議、Modbus RTU協(xié)議、自由口協(xié)議等。PPI協(xié)議不能一次性傳輸足夠長(zhǎng)的數(shù)據(jù),而且需要使用用于過(guò)程控制的(OLE for process control,OPC)服務(wù)器[1718]對(duì)程序進(jìn)行開(kāi)發(fā),過(guò)程復(fù)雜。自由口協(xié)議是由用戶自定義與其他設(shè)備的串行通信協(xié)議,使用簡(jiǎn)單方便,于是該設(shè)計(jì)選擇自由口協(xié)議作為該系統(tǒng)的通信協(xié)議。S7200 CPU的通信口可以設(shè)置為自由口模式,設(shè)置后,端口0或端口1由PLC內(nèi)部程序來(lái)控制,于是整個(gè)通信過(guò)程就由發(fā)送指令XMT、接收指令RCV、接收完成中斷、字符中斷和發(fā)送完成中斷來(lái)控制。S7200自由口通信是基于RS485通信基礎(chǔ)的半雙工通信的,在該協(xié)議下發(fā)送和接收指令不能同時(shí)執(zhí)行[19]。
自由端口模式的使用需要在特殊寄存器(SM)中進(jìn)行參數(shù)設(shè)置。因?yàn)槎丝?與上位機(jī)通信,所以要對(duì)SMB130、SMB187、SMB188、SMB190、SMB192、SMB194進(jìn)行設(shè)置。
SMB130為端口1的控制字節(jié),自由端口模式控制字節(jié)如圖5所示。圖5中,pp為奇偶檢驗(yàn)選擇,選擇無(wú)校驗(yàn),所以是00;d為每個(gè)字符的數(shù)據(jù)位,選擇8位/字符,所以是0;bbb為自由端口的波特率,選擇9 600,所以是010;mm為協(xié)議的選擇,選擇自由端口模式,所以是01。綜上所述,控制字節(jié)的二進(jìn)制表示形式為00001001,轉(zhuǎn)化為十六進(jìn)制則為09。
SMB186為消息接收狀態(tài)字節(jié),當(dāng)該字節(jié)非零時(shí),RCV指令未被激活或接收已經(jīng)結(jié)束。
SMB187~SMB194為RCV指令開(kāi)始、終止接收數(shù)據(jù)的條件。
SMB187為消息接收控制字節(jié),消息接收控制字節(jié)如圖6所示。圖6中,en為禁止或允許接收消息,此處為1,表示允許接收消息;sc為起始字符檢測(cè),此處為1,使用起始字符檢測(cè);ec為結(jié)束字符檢測(cè),此處為0,不使用結(jié)束字符檢測(cè);il為空閑線時(shí)間檢測(cè),此處為1,使用空閑線檢測(cè);c/m為1,使用消息定時(shí)器來(lái)檢測(cè)數(shù)據(jù)接收結(jié)束狀態(tài);tmr為1,使SWM192中的時(shí)間有效;bk為0,忽略break條件。
SMB188字節(jié)中存放消息的起始字符,SMB190中存放以ms為單位的空閑線時(shí)間間隔,SMB192中存放以ms為單位的字符間/消息間定時(shí)器的超時(shí)值,若超出該時(shí)間段,則停止接收消息,SMB194為接收的最大字符數(shù)(1~255B)。
3.2Modbus RTU從站協(xié)議的通信程序設(shè)計(jì)
工廠中應(yīng)用的DCS只能識(shí)別Modbus RTU協(xié)議,所以在PLC中使用Modbus協(xié)議通信時(shí)需要安裝STEP 7Micro/WIN V32指令庫(kù)[20],然后在庫(kù)文件中找到“Modbus Slave Port 0”,調(diào)用MBUS_INIT指令和MBUS_SLAVE指令。MBUS_INT指令如圖7所示,MBUS_SLAVE指令如圖8所示。
輸入?yún)?shù)Mode為1時(shí),分配Modbus協(xié)議并啟用該協(xié)議。Addr用于設(shè)置從站地址,該地址為6,Baud將波特率設(shè)置為9 600,Parity為0是無(wú)校驗(yàn),Delay是以ms為單位的Modbus消息結(jié)束的延遲時(shí)間。主設(shè)備能夠訪問(wèn)PLC的V存儲(chǔ)區(qū)的最大字個(gè)數(shù)用MaxHold表示,PLC中V存儲(chǔ)區(qū)內(nèi)保持寄存器的起始地址用HoldStart表示。
指令添加之后要分配庫(kù)存儲(chǔ)器,Modbus指令需要780B的V存儲(chǔ)區(qū),為了使MBUS_INIT指令中用HoldStart和MaxHold參數(shù)分配的V存儲(chǔ)區(qū)不重疊,庫(kù)存儲(chǔ)區(qū)的起始地址應(yīng)該在V存儲(chǔ)區(qū)之外。該工程的庫(kù)存儲(chǔ)區(qū)設(shè)置在VB4000。
4DCS對(duì)PLC的數(shù)據(jù)讀取
FOXBORO I/A Series的DCS具有強(qiáng)大的功能,能夠?qū)?shù)字信息進(jìn)行實(shí)時(shí)采集和監(jiān)控。DCS通過(guò)FBM231板卡上的RS485接口連接到PLC,然后通過(guò)組態(tài)軟件對(duì)PLC內(nèi)存區(qū)中20多個(gè)固定的存儲(chǔ)區(qū)域進(jìn)行數(shù)據(jù)采集,每05 s掃描一次所有內(nèi)存區(qū)。由于DCS對(duì)數(shù)據(jù)的讀取方式與PLC的數(shù)據(jù)存儲(chǔ)方式不同,所以需將采集的數(shù)據(jù)進(jìn)行高字節(jié)與低字節(jié)互換,才能得到正確的數(shù)據(jù)形式,最后將正確的數(shù)據(jù)顯示在DCS的監(jiān)控界面中,并產(chǎn)生歷史趨勢(shì)圖。
5結(jié)束語(yǔ)
本文基于自由口協(xié)議和Modbus RTU協(xié)議,設(shè)計(jì)了由上位機(jī)、PLC和DCS組成的稱重?cái)?shù)據(jù)遠(yuǎn)傳系統(tǒng),實(shí)現(xiàn)了將上位機(jī)數(shù)據(jù)遠(yuǎn)程傳送到DCS中監(jiān)控的功能,開(kāi)發(fā)了DCS的信息共享功能。該系統(tǒng)結(jié)構(gòu)精簡(jiǎn),經(jīng)濟(jì)性好,并且能夠滿足工業(yè)現(xiàn)場(chǎng)對(duì)數(shù)據(jù)進(jìn)行實(shí)時(shí)監(jiān)控的要求。該系統(tǒng)運(yùn)用ADO方式對(duì)數(shù)據(jù)進(jìn)行操作,方便了現(xiàn)場(chǎng)工作人員對(duì)數(shù)據(jù)的使用和管理,減少了數(shù)據(jù)查詢時(shí)的錯(cuò)誤,同時(shí)提高了企業(yè)的管理效率和管理水平,節(jié)約生產(chǎn)成本。
參考文獻(xiàn):
[1]鄧?yán)? 工業(yè)實(shí)時(shí)數(shù)據(jù)在線分析平臺(tái)研究[D]. 武漢: 華中科技大學(xué), 2012.
[2]蘭德瑞, 陳美彤. 國(guó)內(nèi)ERP應(yīng)用狀況分析[J]. 化工管理, 2016, 14: 67.
[3]丁善達(dá), 趙景萍, 黃龍, 等. PLC、DCS、FCS三大類型控制系統(tǒng)的基本特點(diǎn)[J]. 中國(guó)科技縱橫, 2016(19): 76, 191.
[4]李曉. 淺析PLC、DCS、FCS三大控制系統(tǒng)[J]. 黑龍江科技信息, 2017(6): 158159.
[5]徐世許, 朱妙其, 王毓順. 可編程序控制器: 原理·應(yīng)用·網(wǎng)絡(luò)[M]. 合肥: 中國(guó)科學(xué)技術(shù)大學(xué)出版社, 2008.
[6]Ma Y H, So P L, Gunawan E. Performance Analysis of OFDM System for Broadband Power Line Communications Under Impulsive Noise and Multipath Effects[J]. IEEE Transactions on Power Delivery, 2005, 20(2): 674682.
[7]劉輝, 師寧. S7200與FX2N PLC實(shí)時(shí)數(shù)據(jù)通信的研究[J]. 通信電源技術(shù), 2013, 30(4): 7678.
[8]王永強(qiáng). FOXBORO DCS系統(tǒng)和從設(shè)備之間的通訊測(cè)試方法[J]. 數(shù)字技術(shù)與應(yīng)用, 2016(10): 3.
[9]李紅, 劉大飛, 徐壽永. 橫河CS3000與FOXBOROI/A DCS系統(tǒng)對(duì)比[J]. 化工管理, 2014(3): 14.
[10]雷釗, 陳翔, 謝林, 等. ModBus在FOXBORO系統(tǒng)中的應(yīng)用[J]. 自動(dòng)化與儀器儀表, 2012(1): 7578.
[11]王吉林, 祝鈴鈺, 許軼, 等. 基于OPC通訊的實(shí)時(shí)流程模擬技術(shù)研究[J]. 現(xiàn)代化工, 2008, 28(S1): 174176.
[12]張宏磊, 馬應(yīng)成, 張松寶, 等. 西霞院水電站電量數(shù)據(jù)傳輸方式優(yōu)化[J]. 水電與抽水蓄能, 2008, 32(2): 2627.
[13]明日科技. Visual Basic控件參考大全[M]. 北京: 人民郵電出版社, 2006.
[14]明日科技. Visual Basic開(kāi)發(fā)經(jīng)驗(yàn)技巧寶典[M]. 北京: 人民郵電出版社, 2007.
[15]邵超, 張斌, 張巧榮. 數(shù)據(jù)庫(kù)實(shí)用教程SQL Server 2008[M]. 北京: 清華大學(xué)出版社, 2009.
[16]伍經(jīng)紋, 徐世許, 王鵬. 基于工業(yè)以太網(wǎng)FINS通信的配料監(jiān)管系統(tǒng)設(shè)計(jì)[J]. 青島大學(xué)學(xué)報(bào): 工程技術(shù)版, 2016, 31(4): 5255.
[17]張俊彪, 王鴻輝, 何長(zhǎng)安. 基于OPC Server的PC與S7300/400的通信[J]. 電力自動(dòng)化設(shè)備, 2007, 27(4): 8386.
[18]田茂琴. OPC數(shù)據(jù)訪問(wèn)服務(wù)器研究與應(yīng)用[J]. 現(xiàn)代電子技術(shù), 2015, 38(21): 7275.
[19]廖常初. S7200 PLC編程及應(yīng)用[M]. 北京: 機(jī)械工業(yè)出版社, 2007.
[20]袁金云, 尹生強(qiáng), 李俊杰, 等. 基于Modbus協(xié)議的PLC與多臺(tái)電表通信研究[J]. 青島大學(xué)學(xué)報(bào): 工程技術(shù)版, 2015, 30(3): 5963.