李躍武,袁 敏,朱海林
隨著現(xiàn)代工業(yè)技術(shù)和計(jì)算機(jī)技術(shù)的迅速發(fā)展,數(shù)據(jù)采集系統(tǒng)在各種工業(yè)領(lǐng)域中應(yīng)用的十分廣泛,對(duì)于各種制造型企業(yè),數(shù)據(jù)采集無(wú)疑是企業(yè)管理系統(tǒng)正常運(yùn)作的一個(gè)關(guān)鍵。工業(yè)控制趨于網(wǎng)絡(luò)化控制,現(xiàn)場(chǎng)總線(xiàn)技術(shù)使得各設(shè)備間的數(shù)據(jù)通信更加方便,網(wǎng)絡(luò)化的數(shù)據(jù)采集系統(tǒng)技術(shù)得到廣泛應(yīng)用。在工業(yè)控制中,PLC、DCS、智能儀表等設(shè)備采集現(xiàn)場(chǎng)數(shù)據(jù),通過(guò)現(xiàn)場(chǎng)總線(xiàn)與上位機(jī)通信,將數(shù)據(jù)發(fā)送給上位機(jī),上位機(jī)顯示并處理現(xiàn)場(chǎng)數(shù)據(jù)。隨著以太網(wǎng)技術(shù)的不斷發(fā)展,在確定性、速度和優(yōu)先法則方面有了很大提高,能夠勝任數(shù)據(jù)采集和控制對(duì)實(shí)時(shí)性、可靠性、抗干擾性的嚴(yán)格要求。以太網(wǎng)已被證明是未來(lái)數(shù)據(jù)采集和控制網(wǎng)絡(luò)的最佳解決方案。
開(kāi)放式數(shù)據(jù)采集系統(tǒng)可以通過(guò)以太網(wǎng)交換機(jī)與多個(gè)S7-1200 PLC相連,通過(guò)Prodave以S7協(xié)議為基礎(chǔ)以及Modbus/TCP協(xié)議接收S7-1200采集的數(shù)據(jù),可選擇這兩種通信方法與S7-1200建立通信。支持PLC通信方式、連接數(shù)量、IP地址、插槽號(hào)、機(jī)架號(hào)、讀寫(xiě)操作、數(shù)據(jù)類(lèi)型、數(shù)據(jù)塊號(hào)、起始域、數(shù)據(jù)長(zhǎng)度的設(shè)定。提供數(shù)據(jù)庫(kù)對(duì)采集數(shù)據(jù)匯總管理。與其他客戶(hù)端相連時(shí),可以作為服務(wù)器將采集的現(xiàn)場(chǎng)數(shù)據(jù)直接發(fā)送至其他客戶(hù)端。
開(kāi)放式數(shù)據(jù)采集系統(tǒng)包括用戶(hù)層、服務(wù)器層和現(xiàn)場(chǎng)層。如圖1所示:
圖1 開(kāi)放式數(shù)據(jù)采集系統(tǒng)的結(jié)構(gòu)
用戶(hù)層實(shí)現(xiàn)了用戶(hù)通過(guò)調(diào)用數(shù)據(jù)庫(kù)數(shù)據(jù)監(jiān)控現(xiàn)場(chǎng)數(shù)據(jù),或者通過(guò)以太網(wǎng)TCP服務(wù)直接調(diào)用采集系統(tǒng)的數(shù)據(jù);服務(wù)器層是開(kāi)放式數(shù)據(jù)采集系統(tǒng)的核心,完成了數(shù)據(jù)從現(xiàn)場(chǎng)層的采集、數(shù)據(jù)庫(kù)實(shí)現(xiàn)、數(shù)據(jù)發(fā)送等功能;現(xiàn)場(chǎng)層包括西門(mén)子S7-1200PLC等設(shè)備,用于采集現(xiàn)場(chǎng)數(shù)據(jù)。系統(tǒng)通過(guò)以太網(wǎng)交換機(jī)與若干S7-1200互聯(lián)實(shí)現(xiàn)通信,通過(guò)多線(xiàn)程接收S7-1200發(fā)送的數(shù)據(jù)。
開(kāi)放式數(shù)據(jù)采集系統(tǒng)的特點(diǎn)如表1所示:
表1 開(kāi)放式數(shù)據(jù)采集系統(tǒng)的特點(diǎn)
PC安裝Window XP操作系統(tǒng),通過(guò)Delphi軟件編程實(shí)現(xiàn)與現(xiàn)場(chǎng)設(shè)備的通信。系統(tǒng)主要通過(guò)兩種方法實(shí)現(xiàn)與現(xiàn)場(chǎng)設(shè)備的通信,分別為Prodave以太網(wǎng)通信和Modbus/TCP通信,這兩種方法可以根據(jù)實(shí)際需求供用戶(hù)選擇。系統(tǒng)數(shù)據(jù)庫(kù)服務(wù)器,支持?jǐn)?shù)據(jù)的管理和遠(yuǎn)程Internet監(jiān)控。
開(kāi)放式數(shù)據(jù)采集系統(tǒng)是以PC為硬件平臺(tái),在Windows XP操作系統(tǒng)環(huán)境下利用Delphi7通過(guò)軟件方法編程實(shí)現(xiàn)PC與S7-1200的通信。主要介紹了Delphi7利用西門(mén)子Prodave實(shí)現(xiàn)PC與S7-1200的以太網(wǎng)通信;利用Modbus/TCP協(xié)議實(shí)現(xiàn)了PC與S7-1200的以太網(wǎng)通信。從而實(shí)現(xiàn)了一種開(kāi)放式數(shù)據(jù)采集系統(tǒng)。
在工業(yè)生產(chǎn)制造過(guò)程中,由于PC應(yīng)用程序的功能越來(lái)越強(qiáng)大,對(duì)于MPI、PPI等非公開(kāi)協(xié)議無(wú)法在應(yīng)用程序中編程通信,所以西門(mén)子公司提供了Prodave軟件包,用于建立PLC于PC之間的數(shù)據(jù)連接[1]。西門(mén)子公司提供的Prodave軟件包主要應(yīng)用于S7-300系列PLC,應(yīng)用于S7-1200時(shí)需要作相應(yīng)的變通。Prodave軟件包提供了動(dòng)態(tài)鏈接庫(kù)(DLL)可以在Delphi壞境下調(diào)用。Delphi調(diào)用動(dòng)態(tài)鏈接庫(kù)的方式有靜態(tài)調(diào)用和動(dòng)態(tài)調(diào)用兩種,調(diào)用Prodave軟件包中的函數(shù)使用靜態(tài)調(diào)用的方式。使用靜態(tài)調(diào)用時(shí)需要先將DLL代碼載入到內(nèi)存中,即需要事先申明,例如申明LoadConnection_ex6函數(shù)的方式如下:
以Prodave以太網(wǎng)通信實(shí)現(xiàn)PC與S7-1200的通信。通過(guò)以太網(wǎng)連接PC與S7-1200,設(shè)置PC-PG接口,選擇TCP/IP(Auto),訪(fǎng)問(wèn)點(diǎn)選擇“S7ONLINE(STEP7)”。
通過(guò)SIMATIC TIA PORTALV11軟件在S7-1200的DB塊中寫(xiě)入數(shù)據(jù),再通過(guò)Delphi編程調(diào)用Prodave函數(shù),讀取DB塊中的內(nèi)容,以驗(yàn)證方法的可行性。
Delphi調(diào)用Prodave函數(shù)前需要將Prodave.pas文件復(fù)制到工程目錄下,同時(shí)在單元文件*.pas文件interface部分中uses字段申明Prodave,以確定本單元要使用Prodave.pas。
在Delphi7環(huán)境下建立一個(gè)TThread類(lèi)線(xiàn)程TFieldReadThread,用于實(shí)現(xiàn)PLC的讀操作。
在連接成功后,通過(guò)Delphi7提供的ListView控件顯示連接號(hào),連接方式,PLC地址,機(jī)架號(hào),插槽號(hào)以及MLFB信息?,F(xiàn)場(chǎng)共有20臺(tái)S7-1200,IP地址分別為192.168.0.10,192.168.0.11,……192.168.0.29。PC的IP地址與PLC在同一網(wǎng)段內(nèi),為192.168.0.5,子網(wǎng)掩碼為255.255.255.0。開(kāi)放式數(shù)據(jù)采集系統(tǒng)可自由添加PLC的IP地址,并自由選擇連接方式,插槽號(hào)以及機(jī)架號(hào),與若干臺(tái)PLC相連,系統(tǒng)已連接了9臺(tái)PLC,如圖2所示:
圖2 PC與S7-1200建立Prodave以太網(wǎng)通信
開(kāi)放式數(shù)據(jù)采集系統(tǒng)可對(duì)PLC的數(shù)據(jù)塊、數(shù)據(jù)起始域、長(zhǎng)度以及數(shù)據(jù)類(lèi)型設(shè)定,并進(jìn)行讀或?qū)懙牟僮?。通過(guò)Prodave以太網(wǎng)通信方式選擇10臺(tái)S7-1200與PC實(shí)現(xiàn)通信,并采用多線(xiàn)程方法讀取各個(gè)S7-1200中的數(shù)據(jù),圖3中所示當(dāng)前顯示讀取的是PLC5,IP地址為192.168.0.14的S7-1200中DB2起始域?yàn)?數(shù)據(jù)長(zhǎng)度為50字節(jié)的數(shù)據(jù),通過(guò)切換選項(xiàng)卡,可查看任意PLC的數(shù)據(jù),如圖3所示:
圖3 PC與S7-1200的Prodave以太網(wǎng)通信
2.2.1 Modbus/TCP協(xié)議簡(jiǎn)介[2,3,4]
Modbus通訊服務(wù)提供了客戶(hù)機(jī)/服務(wù)器在以太網(wǎng)上的TCP/IP網(wǎng)絡(luò)連接的設(shè)備之間的通信??捎糜趯?shí)時(shí)信息交互,為PC機(jī)和設(shè)備之間提供聯(lián)機(jī)服務(wù)。Modbus/TCP協(xié)議在應(yīng)用層采用Modbus消息定義,在傳輸層和網(wǎng)絡(luò)層采用TCP/IP,用于以太網(wǎng)通訊。
一般的Modbus協(xié)議定義了一個(gè)獨(dú)立于底層通信層的簡(jiǎn)單的協(xié)議數(shù)據(jù)單元PDU(Protocol Data Unit)。Modbus協(xié)議的映射在特定的總線(xiàn)或網(wǎng)絡(luò)可以在應(yīng)用數(shù)據(jù)單元ADU(Application Data Unit)介紹一些額外的字段,其幀格式如圖3所示。當(dāng)Modbus協(xié)議封裝在TCP/IP網(wǎng)絡(luò)上時(shí)其幀格式如圖4所示:
圖4 一般Modbus協(xié)議格式
Modbus協(xié)議常用的功能碼有01(讀線(xiàn)圈狀態(tài))、02(讀離散輸入量)、03(讀保持寄存器)、04(讀輸入寄存器)、05(寫(xiě)單線(xiàn)圈)、06(寫(xiě)單保持寄存器)、15(寫(xiě)多線(xiàn)圈)、16(寫(xiě)多保持寄存器)等。
Modbus應(yīng)用協(xié)議頭(Modbus Application Protocol Header),分4個(gè)域,共7個(gè)字節(jié),分別為事物標(biāo)志、協(xié)議標(biāo)志、長(zhǎng)度、單元標(biāo)志。所有的Modbus/TCPADU通過(guò)TCP上注冊(cè)的502端口上發(fā)送。
2.2.2 Modbus/TCP通信的實(shí)現(xiàn)
在Delphi 7編程環(huán)境下,在PC機(jī)建立Modbus客戶(hù)端,以西門(mén)子公司的S7-1200 PLC作為服務(wù)器,通過(guò)以太網(wǎng)實(shí)現(xiàn)Modbus/TCP通信。S7-1200 PLC的IP地址為192.168.0.1,通過(guò)以太網(wǎng)將PC機(jī)和S7-1200連接起來(lái),并設(shè)置本地連接TCP/IP協(xié)議屬性,使用IP地址192.168.0.5,子網(wǎng)掩碼255.255.255.0,這樣PC機(jī)和S7-1200就構(gòu)成了客戶(hù)端/服務(wù)器模式。
通過(guò)SIMATIC TIA PORTAL V11軟件對(duì)S7-1200編寫(xiě)Modbus/TCP服務(wù)器程序,對(duì)DB2數(shù)據(jù)塊寫(xiě)入數(shù)據(jù),在PC機(jī)上,使用Delphi 7編寫(xiě)Modbus/TCP客戶(hù)端程序。通過(guò)Delphi 7提供的VCL組件IdTCPClient來(lái)創(chuàng)建TCP服務(wù),在IdTCPClient控件的對(duì)象監(jiān)視器中設(shè)置其Port屬性為502。Modbus/TCP協(xié)議讀寫(xiě)保持寄存器程序流程圖,如圖5所示:
下面給出Modbus協(xié)議請(qǐng)求協(xié)議數(shù)據(jù)單元主要代碼:
通過(guò)以太網(wǎng)實(shí)現(xiàn)PC機(jī)與S7-1200的通信后,對(duì)S7-1200持寄存器進(jìn)行讀取和寫(xiě)入操作,如圖6所示:
圖6 Modbus/TCP通訊流程圖
通過(guò)Modbus/TCP協(xié)議對(duì)PLC8,IP地址為192.168.0.17進(jìn)行采集,圖中顯示為Modbus/TCP協(xié)議報(bào)文。
對(duì)現(xiàn)場(chǎng)設(shè)備所采集的數(shù)據(jù)的記錄管理很重要,PC內(nèi)安裝MySQL數(shù)據(jù)庫(kù)管理系統(tǒng),用于記錄管理PC接收到的數(shù)據(jù)。MySQL數(shù)據(jù)庫(kù)管理系統(tǒng)是開(kāi)源、小型、關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),支持SQL,應(yīng)用廣泛。
2.3.1 建立數(shù)據(jù)庫(kù)
通過(guò)MySQL Command Line Client客戶(hù)端軟件使用SQL語(yǔ)句建立數(shù)據(jù)庫(kù)db_sjhz,用于存儲(chǔ)開(kāi)放式數(shù)據(jù)采集控制器所采集的數(shù)據(jù)。在數(shù)據(jù)庫(kù)db_sjhz內(nèi)建立兩個(gè)表tab_mbtcp和tab_prodave,分別用來(lái)記錄和管理Modbus/TCP通信的數(shù)據(jù)和Prodave通信的數(shù)據(jù)。主要語(yǔ)句如下:
2.3.2 實(shí)現(xiàn)數(shù)據(jù)庫(kù)管理
通過(guò)Microsoft OLE DB Provider for ODBC Drivers實(shí)現(xiàn)delphi7與MySQL數(shù)據(jù)庫(kù)db_sjhz的連接。連接結(jié)構(gòu),如圖7所示:
圖7 PC與S7-1200的Modbus/TCP通信
Delphi 7通過(guò)ADOConnection實(shí)現(xiàn)與MySQL的連接,如圖8所示:
圖8 數(shù)據(jù)表結(jié)構(gòu)
將數(shù)據(jù)顯示在數(shù)據(jù)控制組件DBGrid中,如圖9所示:
圖9 通信數(shù)據(jù)錄入數(shù)據(jù)庫(kù)表中
DBGrid所顯示數(shù)據(jù)為Prodave通信采集數(shù)據(jù)??梢酝ㄟ^(guò)切換選項(xiàng)卡,選擇Prodave或Modbus/TCP數(shù)據(jù)的匯總,分別將兩者通信方式所采集的數(shù)據(jù)錄入表tab_prodave和tab_mbtcp中。
PC采集現(xiàn)場(chǎng)的數(shù)據(jù)可以通過(guò)兩種方式發(fā)送,一是通過(guò)數(shù)據(jù)庫(kù)發(fā)送,由客戶(hù)端調(diào)用數(shù)據(jù)庫(kù)數(shù)據(jù)監(jiān)控現(xiàn)場(chǎng)數(shù)據(jù);二是建立TCP服務(wù)器,通過(guò)以太網(wǎng)直接將數(shù)據(jù)發(fā)送至其他客戶(hù)端。
如10圖所示:
圖10 數(shù)據(jù)發(fā)送
TCP服務(wù)器啟動(dòng)服務(wù)后,IP地址為192.168.0.3的TCP客戶(hù)端與服務(wù)器建立連接,發(fā)送請(qǐng)求數(shù)據(jù),服務(wù)器做出響應(yīng)信息發(fā)送至客戶(hù)端,完成數(shù)據(jù)的發(fā)送。
以PC為硬件,在Windows XP環(huán)境下通過(guò)Delphi7編程實(shí)現(xiàn)Prodave和Modbus/TCP通信,實(shí)現(xiàn)了開(kāi)放式數(shù)據(jù)采集控制器。實(shí)驗(yàn)結(jié)果說(shuō)明這種方法通信效果穩(wěn)定良好,可以依據(jù)不同的工作情況選擇Prodave和Modbus/TCP兩種通信方式中的一種,或者兩種通信方式同時(shí)運(yùn)行,對(duì)數(shù)據(jù)的監(jiān)控更加實(shí)時(shí)可靠。通過(guò)數(shù)據(jù)庫(kù)技術(shù)實(shí)現(xiàn)對(duì)采集數(shù)據(jù)的高效管理。以MySQL數(shù)據(jù)庫(kù)或者TCP服務(wù)器的方式將數(shù)據(jù)發(fā)送至其他客戶(hù)端的方式,使得采集控制更加靈活便利。另外通過(guò)Prodave也可以實(shí)現(xiàn)與西門(mén)子S7-300,S7-200等PLC實(shí)現(xiàn)通信。
[1]SIEMENS.PRODAVE MPI/IE V6.0[G]Manual,2005,5
[2]Modbus Messaging Implementation Guide v1.[OL]http:www.modbus.org.2002,5
[3]MODBUS Application Protocol Specification[J]V1.1b,Modbus-IDA,2006,10
[4]OPEN MODBUS/TCP SPECIFICATION[M]Release 1.0,1999
[5]MySQL 5.5 Reference[G]Manual,2013