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