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