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