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