基于RTU油井遠程測控系統(tǒng)的數(shù)據(jù)采集與傳輸層軟件設(shè)計
摘要:提出了一種基于RTU油井遠程測控系統(tǒng)的數(shù)據(jù)采集和傳輸層軟件設(shè)計方案。介紹了實現(xiàn)各種傳感器的數(shù)據(jù)采集、傳輸以及外部繼電器控制的軟件設(shè)計方法,并對實現(xiàn)Modbus/RTU和Modbus/TCP的通信進行了詳細分析。分析結(jié)果顯示:通過軟件配置,可實現(xiàn)多種工作方式,有利于該系統(tǒng)在不同場合下的應用。
關(guān)鍵詞:RTU;Modbus/RTU;Modbus/TCP;主從輪詢;可配置
0 引言
每一個油田都擁有眾多的油氣井,并且分布在山川曠野里,油氣井的管理方式多為由人工每日值守,定時檢查設(shè)備運行情況,記錄相關(guān)數(shù)據(jù)。這種方式增加了用工人數(shù),加大了護井工勞動強度,最重要的是影響對設(shè)備的監(jiān)控。當抽油機、電泵出現(xiàn)微小故障時,往往很難被人工及時發(fā)現(xiàn),從而得不到有效地防護與控制。
為了能有效地發(fā)現(xiàn)油井、地層、油藏的變化,可用油井遠程測控系統(tǒng),通過在抽油機上安裝位移傳感器和載荷傳感器,檢測抽油機的工況,實時在線監(jiān)測抽油機工作參數(shù),及時發(fā)現(xiàn)故障并報警,及時維護。本文提出了一種基于RTU的油井遠程測控系統(tǒng)的數(shù)據(jù)采集與傳輸層設(shè)計方案,并將該方案用于實際的井場應用中。
1 油井遠程測控系統(tǒng)總體架構(gòu)
油井遠程測控系統(tǒng)的總體架構(gòu)如圖1所示,整個測控系統(tǒng)的組網(wǎng)架構(gòu)分為現(xiàn)場局域網(wǎng)、企業(yè)信息網(wǎng)兩大部分。網(wǎng)絡拓撲采用分層星型拓撲,是為了在中央測控室的中央測控服務器與現(xiàn)場局域網(wǎng)的各個測控代理服務器的測控對象之間建立更有效的連接方式。每個測控分站設(shè)測控代理服務器,實時發(fā)送或讀取的井場設(shè)備數(shù)據(jù)先經(jīng)測控代理服務器處理后再并行傳輸?shù)街醒霚y控服務器,這樣既讓等級高的設(shè)備預警信號得到現(xiàn)場級的及時響應,又減輕了中央測控服務器處理數(shù)據(jù)的壓力。WEB服務器與中央測控服務器通過數(shù)據(jù)庫服務器連接,這種連接方式使WEB服務器面向的對象是數(shù)據(jù)庫服務器,有利于WEB服務器在處理管理用戶的指令時與中央監(jiān)控服務器保持一定的時差,避免了相互動作間的沖突。而所有這些數(shù)據(jù)來自于代理測控服務器通過井場數(shù)據(jù)采集與傳輸層得到的。IT目前最常見的數(shù)據(jù)采集與傳輸層的工作方式有圖1所示的兩種情況。其中井場1針對安裝多個傳感器的油氣井,在每個油氣井處安裝一個RTU從站,能夠?qū)υ撚蜌饩膫鞲衅鬟M行統(tǒng)一管理,并在每個井場設(shè)置一個RTU主站,采用主叫/從響應的方式,采集各從站的傳感器數(shù)據(jù),然后將各從站數(shù)據(jù)上傳到上位機(測控代理服務器);井場2針對安裝幾個傳感器的油氣井,在每個井場放置一個RTU,直接將傳感器的數(shù)據(jù)采集后發(fā)送到上位機;為了能夠兼容這兩種工作方式,本文設(shè)計了一個基于RTU的數(shù)據(jù)采集與傳輸層系統(tǒng)軟件。
2 數(shù)據(jù)采集與傳輸層硬件基礎(chǔ)——RTU
有些油氣田由于地理原因,不易鋪設(shè)電纜,本系統(tǒng)引入物聯(lián)網(wǎng)技術(shù),加入無線通信ZigBee模塊,并利用其自組織原理,實現(xiàn)在井場無線自組織尋址和數(shù)據(jù)傳輸,可以簡單、方便地實現(xiàn)井場實時數(shù)據(jù)采集,利用這些有效數(shù)據(jù)指導油田油氣生產(chǎn),提高產(chǎn)量,其構(gòu)成一個物聯(lián)網(wǎng)回路,改變了油田生產(chǎn)方式。
油井遠程測控系統(tǒng)RTU采用Samsung公司的S3C2440A,具有400 MHz的工作頻率,主要控制數(shù)據(jù)流的輸入輸出;采用具有2 Mb存儲能力的Norflash(EN29LV160AB)存儲程序;用有128 Mb存儲能力的Nand flash(K9F2G08U0B)存儲數(shù)據(jù);利用AD轉(zhuǎn)換器ADS7952采集8通道12位模擬數(shù)據(jù);系統(tǒng)環(huán)境溫度由溫度傳感器TMP100獲得;考慮到ZigBee模塊的接口以及有線方式下的長距離傳輸?shù)纫蛩兀琑TU的串行鏈路口為RS 232及RS 485;為與代理測控服務器PC機相連,RTU采用DM9000實現(xiàn)以太網(wǎng)連接;RTU的初始配置信息采用E2PROM存儲;RTU內(nèi)還包含隔離電路、控制單元等幾個部分。RTU的硬件框圖如圖2所示。
3 數(shù)據(jù)采集與傳輸層系統(tǒng)軟件
3.1 數(shù)據(jù)采集與傳輸層通信協(xié)議
Modbus通信協(xié)議已經(jīng)非常廣泛地應用于自動控制和通信領(lǐng)域中,通過此協(xié)議,控制器相互之間、控制器經(jīng)由網(wǎng)絡(例如以太網(wǎng))和其它設(shè)備之間可以實現(xiàn)通信。Modbus網(wǎng)絡屬于一種主從網(wǎng)絡,允許一個主站和一個或多個從站通信。它采用命令/應答方式,每種命令報文都對應著一種應答報文。網(wǎng)絡中的每個從站都必須分配一個唯一的地址。主站發(fā)出的命令中含有要求訪問的從站地址,只有具有該地址的從站才會對該命令響應。
3.1.1 Modbus/RTU通信協(xié)議
RTU主/從站串口通信時,通常使用的是Modbus/RTU傳輸模式。在Modbus報文RTU幀中,如果兩個字符之間的空閑間隔大于1.5個字符時間,那就認為報文幀不完整,此時接收站應該丟棄這個報文。時長至少為3.5個字符時間的空閑間隔將報文幀區(qū)分。RTU消息幀的典型格式如表1所列。
3.1.2 Modbus/TCP通信協(xié)議
Modbus/TCP是一種應用層的協(xié)議,上層為Modbus協(xié)議,下層為TCP協(xié)議,它規(guī)定了網(wǎng)絡互聯(lián)節(jié)點間的請求/應答的通信方式。幀格式必須嚴格遵守協(xié)議所規(guī)定的ADU(Application Data Unit)格式,才能在以太網(wǎng)上實現(xiàn)數(shù)據(jù)的傳輸。圖3所示即為Modbus/TCP的數(shù)據(jù)幀格式。
MBAP報文頭(Modbus Application Protocol Header)是TCP/IP使用的專用報文頭,用來識別Modbus的應用數(shù)據(jù)單元。MBAP共有7個字節(jié),其具體組成及含義如表2所列。
國際互聯(lián)網(wǎng)編號分配管理機構(gòu)IANA(Internet Assigned Numbers Authority)專門為其賦予了一個TCP端口號502端口,利用TCP發(fā)送所有的Modbus/TCP ADU。
3.1.3 Modbus/TCP與Modbus RTU數(shù)據(jù)幀的區(qū)別
Modbus/TCP雖然包括了從站地址、功能碼和傳輸?shù)臄?shù)據(jù),但是沒有校驗控制碼,這是因為Modbus/TCP校驗功能已經(jīng)在下面的四層如TCP/IP協(xié)議和鏈路層的校驗機制得到了保證。
3.2 數(shù)據(jù)采集與傳輸層系統(tǒng)軟件設(shè)計
油井遠程測控系統(tǒng)的數(shù)據(jù)采集與傳輸層主要完成的功能:傳感器數(shù)據(jù)的采集、傳輸和對繼電器的控制。圖1中提到了兩種常見的工作方式。在井場1中存在RTU主站和從站:主站主要負責對各從站進行輪詢、數(shù)據(jù)打包和向上位機發(fā)送數(shù)據(jù),從站主要負責數(shù)據(jù)的采集、繼電器的控制和輪詢命令的響應,主從站之間的通信使用的是Modbus/RTU。在井場2中只存在一個RTU,主要完成數(shù)據(jù)的采集、繼電器的控制和向上位機發(fā)送數(shù)據(jù),通信使用的是Modbus/TCP。在數(shù)據(jù)采集與傳輸層的工作過程中,考慮到系統(tǒng)的兼容性,對RTU軟件設(shè)計提出了可配置的要求,不需要重新下載程序,只需要使用系統(tǒng)配置軟件就可選擇不同的工作方式和通信方式,這就保證了系統(tǒng)的可操作性和兼容性,系統(tǒng)的適應性大大加強。
在軟件開發(fā)過程中,考慮到串行通信速度較慢的特點,采用多線程技術(shù),故引入實時操作系統(tǒng)μC/OS_II,將Modbus/RTU通信、Modbus /TCP通信等放在單獨的線程中進行,而數(shù)據(jù)采集和控制等則采用另的線程實現(xiàn)。
3.2.1 μC/OS_II的移植
μC/OS_II是可移植、可剪裁的搶占式實時多任務操作系統(tǒng)內(nèi)核,適用于工業(yè)控制中的實時監(jiān)控。本系統(tǒng)成功地將實時操作系統(tǒng)μC/ OS_II移植到S3C2440A微處理器上,并實現(xiàn)了Modbus通信協(xié)議。
μC/OS_II可以管理64個任務,具有信號量、互斥信號量、消息隊列、任務管理、時間管理和內(nèi)存塊管理等系統(tǒng)功能。μC/OS_II的移植主要包括三部分代碼:μC/OS_II核心代碼、μC/OS_II配置代碼、μC/OS_II移植代碼。其中μC/OS_II移植代碼包括1個匯編文件、1個C程序文件和1個頭文件。這部分代碼與微處理器相關(guān),是移植的關(guān)鍵。
3.2.2 Modbus通信的實現(xiàn)
RTU與上位機使用Modbus/TCP進行以太網(wǎng)通信時,需不斷接收上位機發(fā)送的查詢命令,處于服務器(從站)狀態(tài)。RTU在使用。Modbus/ RTU進行串口通信時,需單獨完成主從站功能。在實際應用中,不存在Modbus/TCP和Modbus/RTU的從站并存在同一RTU的情況,因而在程序編寫過程中,Modbus/TCP和Modbus/RTU的從站使用同一個Modbus從站庫,但對其幀頭的處理略有不同。以下分別講述Modbus/TCP服務器(從站)在TCP/IP協(xié)議棧上的實現(xiàn)以及Modbus/RTU主站在串口通信上的實現(xiàn)。
(1)Modbus/TCP通信協(xié)議實現(xiàn)
由于操作系統(tǒng)μC/OS_II本身沒有TCP/IP協(xié)議棧,故先移植嵌入TCP/IP協(xié)議棧,再編寫Modbus/TCP服務器(從站)程序。在μC/OS_II下嵌入了TCP/IP協(xié)議棧后就監(jiān)聽TCP502端口的連接請求,只有在與客戶機建立了連接之后才能進行數(shù)據(jù)處理。服務器端在收到客戶機的請求之后,會確認和客戶機的連接,同時接收并分析客戶機的請求報文。如果MBAP報文頭正確,則讀完所有的報文,只有協(xié)議類型值為0x00時才對請求幀進行下一步操作,否則直接丟棄報文。接著分析PDU中的功能代碼,不同的功能對參數(shù)要求也不同,最后根據(jù)數(shù)據(jù)域中的參數(shù)規(guī)定,執(zhí)行相應的操作。若有錯誤出現(xiàn),直接丟棄報文,仍繼續(xù)處理PDU的數(shù)據(jù)顯得不必要,影響實時性。根據(jù)對客戶端請求報文的分析處理,有兩種響應結(jié)果,一種是正常的響應報文,另一種是異常響應報文,即返回的是錯誤信息。其Modbus/TCP的從站通信流程如圖4所示。
(2)Modbus/RTU通信協(xié)議實現(xiàn)
Modbus主站需要處理發(fā)送請求幀、等待應答、處理應答、處理差錯和等待轉(zhuǎn)換延時等事件。其主站設(shè)計流程如圖5所示。
Modbus/RTU報文幀是否完整和幀與幀之間的區(qū)分可以通過空閑間隔來實現(xiàn),但這需要使用定時器完成1.5個字符和3.5個字符的定時,并在定時到后,進入接收處理函數(shù),然后實現(xiàn)ADU數(shù)據(jù)到PDU數(shù)據(jù)的處理。
3.2.3 系統(tǒng)軟件的實現(xiàn)
系統(tǒng)上電后,首先進行初始化操作,主要包括設(shè)置串口、定時器等內(nèi)容,并讀取EEPROM中的配置信息,對RTU進行配置,包括主從工作模式選擇、IP地址設(shè)置、輪詢的通信方式選擇、傳感器的開關(guān)狀態(tài)、繼電器輸出狀態(tài)等。若處于主站狀態(tài),還可以獲取從站配置信息并配置從站,配置成功后,主站開始對各從站進行掃描,并對從站報文進行處理;每掃描完一個從站,主站就對輪詢到的數(shù)據(jù)進行存儲;在掃描從站的同時,如果主站傳感器和外部繼電器處于開狀態(tài),會同時采集模擬通道和數(shù)字通道的數(shù)據(jù)并控制外部繼電器,采集到的數(shù)據(jù)存于相應寄存器中,等待上位機請求命令,按照Modbus協(xié)議將相應數(shù)據(jù)打包,并上傳到上位機。若處于從站,采集模擬通道和數(shù)字通道的數(shù)據(jù)并控制外部繼電器,采集到的數(shù)據(jù)存于相應寄存器中,并等待RTU主站輪詢命令,當輪詢到該從站時,按Modbus協(xié)議打包數(shù)據(jù)并發(fā)送到RTU主站。不管該RTU是主站還是從站,其TCP/IP的服務器程序一直等待系統(tǒng)配置軟件的配置信息,當收到配置信息后,將數(shù)據(jù)存入EEPROM并復位系統(tǒng)程序,整個系統(tǒng)設(shè)計流程圖如圖6所示。
從圖6中可以同時看到Modbus/RTU和Modbus/TCP的從站處理函數(shù),在實際應用中,RTU處于Modbus/RTU主站時,其Modbus/RTU從站的
處理任務不運行,Modbus/TCP從站的處理任務運行,該狀態(tài)下RTU可用于圖1中井場1的RTU主站和井場2的RTU兩種情況;處于Modbus/RTU從站時,該狀態(tài)下RTU可用于圖1中井場1的從站情況,以太網(wǎng)服務器任務只等待配置信息。
4 測試
本系統(tǒng)的測試采用了第三方的Modbus測試工具Modbus Poll V4.3.3、Modbus Slave V4.3.1和實驗室自主開發(fā)的配置軟件。
4.1 輪詢測試
利用系統(tǒng)配置軟件的界面如圖7所示,設(shè)置一個RTU主站和兩個RTU從站,在一臺PC機上運行Modbus Poll程序,模擬Modbus/TCP客戶機,通過以太網(wǎng)與RTU主站相連,RTU主從站之間通過無線ZigBee模塊(或RS 485模塊)相連。串行通信的波特率設(shè)置為38 400 b/s,無校驗位,停止位為1位。
PC端的Modbus/TCP客戶機可向RTU主站發(fā)送命令,并讀取存于RTU主站輸入寄存器的從站數(shù)據(jù)。當從站的數(shù)字輸入端接高電平(24 V)時,從Modbus Poll的對應地址可讀取到1,圖8所示是Modbus/TCP客戶機接收到的輪詢數(shù)據(jù),其中地址500~507為從站1中8通道數(shù)字輸入端對應的狀態(tài)值;地址508~515為從站2中8通道數(shù)字輸入端對應的狀態(tài)值。經(jīng)多次測量,均正確無誤。
4.2 控制測試
PC端模擬的Modbus/TCP客戶機向RTU的保持寄存器寫入數(shù)據(jù),RTU會將對應寄存器的數(shù)據(jù)輸出到對應的數(shù)字輸出端口,例如地址100對應數(shù)字輸出端口0,當對地址100置1時,對應指示燈亮,輸出高電平。
4.3 數(shù)據(jù)采集測試
RTU模擬輸入端0接一定頻率的正弦波,數(shù)字輸入端接高電平信號,利用Modbus Poll查詢RTU模擬輸入端與數(shù)字輸入端的數(shù)據(jù)。
圖9所示為Modbus/TCP客戶機所接收到的采集數(shù)據(jù)。
RTU采集到數(shù)字輸入端的脈沖值以及開關(guān)狀態(tài),地址0~7對應相應通道的脈沖值,地址8~15對應相應通道的開關(guān)狀態(tài)值;地址19為RTU板上的溫度傳感器的值,當前RTU的溫度是24℃;地址20~49為模擬通道0采集到的正弦波信號,之后為其他通道采集到的AD值,每個通道的采樣點數(shù)和頻率可調(diào)。
5 結(jié)語
在油井遠程測控系統(tǒng)數(shù)據(jù)采集與傳輸層系統(tǒng)軟件設(shè)計中,由于采用了μC/OS_II的操作系統(tǒng)平臺,可實現(xiàn)Modbus/RTU和Modbus/TCP通信,還可采集各種數(shù)字、模擬傳感器的數(shù)據(jù),并能對外部繼電器進行控制,保障了本系統(tǒng)能適用于各種工作環(huán)境。此外,還可以根據(jù)實際的工作環(huán)境,利用系統(tǒng)配置軟件進行合理的配置,保證了系統(tǒng)數(shù)據(jù)采集與傳輸層工作方式的多樣性。經(jīng)過一段時間的運行,本系統(tǒng)工作穩(wěn)定、可靠。