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