,,,
(中國石油大學(xué)(北京) 地球物理與信息工程學(xué)院,北京 102249)
及時、準(zhǔn)確、直觀地了解每口油井的工況,對于確保生產(chǎn)安全、提高生產(chǎn)效率、做出正確生產(chǎn)決策等都有重要的理論和現(xiàn)實(shí)意義。油田生產(chǎn)數(shù)字化控制與管理技術(shù)適應(yīng)當(dāng)前油田需求,是油田管理信息化、網(wǎng)絡(luò)化、集成化和自動化的要求[1],是安全、節(jié)能、高效的要求,是變革生產(chǎn)組織方式、油田管理方式和控制投資、降低管理成本的法寶。
智能油氣水井物聯(lián)網(wǎng)系統(tǒng)由感知層、傳輸層和應(yīng)用層組成。感知層主要包括安裝在生產(chǎn)系統(tǒng)上的各種傳感器和控制設(shè)備,用于實(shí)現(xiàn)對生產(chǎn)運(yùn)行狀態(tài)的全面感知和各種生產(chǎn)設(shè)備的自動控制;傳輸層由無線傳感網(wǎng)、專網(wǎng)等組成,支持IPV4/IPV6雙棧通信協(xié)議,可實(shí)現(xiàn)數(shù)據(jù)的高速可靠傳輸;應(yīng)用層由各種用于油氣水井生產(chǎn)分析與優(yōu)化的油氣田開發(fā)專業(yè)軟件與專家知識庫組成。
智能油氣水井物聯(lián)網(wǎng)系統(tǒng)由油井專用RTU模塊、電量模塊、數(shù)據(jù)采集RTM模塊和一體化示功儀組成。RTU為數(shù)據(jù)采集與傳輸核心,是連接數(shù)據(jù)中心和油田現(xiàn)場設(shè)備的橋梁。通過RTU統(tǒng)一管理同一油井上的所有設(shè)備或相鄰區(qū)域的硬件設(shè)備,可有效提高數(shù)據(jù)傳輸?shù)男?,減少數(shù)據(jù)傳輸通道,降低通信系統(tǒng)的傳輸負(fù)擔(dān),提高數(shù)據(jù)傳輸效率[2]。RTU通過現(xiàn)場總線RS485總線,與現(xiàn)場采集模塊一體化示功儀、電量模塊、RTM模塊相連,采集溫度、壓力、功圖、電參量等信息;通過IPV4/IPV6協(xié)議,與數(shù)據(jù)中心實(shí)時數(shù)據(jù)庫進(jìn)行數(shù)據(jù)接口,將采集數(shù)據(jù)傳輸?shù)奖O(jiān)控中心實(shí)時數(shù)據(jù)庫。
RTU是前端設(shè)備與后臺系統(tǒng)數(shù)據(jù)傳輸溝通的中轉(zhuǎn)站,也是硬件系統(tǒng)的核心所在,通過RTU統(tǒng)一管理同一油氣水井上的所有設(shè)備或相鄰區(qū)域的硬件設(shè)備,可有效提高數(shù)據(jù)傳輸?shù)男?,減少數(shù)據(jù)傳輸通道,降低通信系統(tǒng)的傳輸負(fù)擔(dān),提高數(shù)據(jù)傳輸效率。
兼容IPV4/ IPV6雙棧協(xié)議油氣生產(chǎn)物聯(lián)網(wǎng)網(wǎng)關(guān)系統(tǒng)模塊,可以滿足油井、注水井實(shí)時數(shù)據(jù)的采集、傳輸與控制。
考慮到嵌入式RTU的復(fù)雜功能和對硬件平臺處理速度需求,硬件平臺的核心處理器選用AT91SAM9263的32位嵌入式處理器。嵌入式RTU系統(tǒng)根據(jù)功能進(jìn)行模塊劃分,由核心處理器模塊、傳感器網(wǎng)絡(luò)接入模塊、TCP/IP網(wǎng)絡(luò)模塊、存儲器模塊和電源模塊構(gòu)成。
1)核心處理器模塊負(fù)責(zé)調(diào)控整個系統(tǒng)資源,對RTU的上下行命令以及數(shù)據(jù)分別進(jìn)行判斷解析處理并對應(yīng)用層協(xié)議進(jìn)行解析轉(zhuǎn)換[3]。采用基于ARM9的AT91SAM9263處理器,核心處理器上運(yùn)行嵌入式Linux系統(tǒng)和基于此系統(tǒng)的應(yīng)用服務(wù)程序,完成系統(tǒng)各項(xiàng)服務(wù)功能,包括數(shù)據(jù)接收、數(shù)據(jù)解析、命令發(fā)送、協(xié)議轉(zhuǎn)換等功能。
2)傳感器接入模塊在設(shè)備前端與各種類型的傳感器實(shí)現(xiàn)數(shù)據(jù)的傳輸與通信,兼容多種傳感器設(shè)備,可接入模塊類型,如ZIGBEE模塊、RS485模塊和CAN設(shè)備等[4]。
3)TCP/IP網(wǎng)絡(luò)模塊將RTU連入公共網(wǎng)絡(luò)進(jìn)行通信。是支持IPv4/IPv6雙協(xié)議棧的關(guān)鍵,RTU通過網(wǎng)絡(luò)模塊將傳感器子網(wǎng)數(shù)據(jù)通過Ethernet發(fā)送到井場中心控制室的客戶端,監(jiān)控人員可通過客戶端及時查看各油井的運(yùn)行情況以及油井周圍環(huán)境。
4)存儲模塊主要由DATAFLASH、NANDFLASH和SDRAM存儲設(shè)備組成。DATAFLASH和NANDFLASH均為非易失性設(shè)備,具有掉電不丟失信息的特性,利用此特性,分別用來存儲系統(tǒng)開機(jī)引導(dǎo)程序以及Linux內(nèi)核和根文件系統(tǒng)。SDRAM即同步動態(tài)隨機(jī)存取存儲器,特點(diǎn)是讀寫速率高,用來提供RTU嵌入式Linux操作系統(tǒng)以及RTU應(yīng)用程序正常運(yùn)行所需的內(nèi)存空間[5]。
結(jié)合McWill無線模塊和華為公司的LTE無線模塊的設(shè)計特點(diǎn),系統(tǒng)以太網(wǎng)接口為標(biāo)準(zhǔn)的RJ45接口,可以為遠(yuǎn)程無線通信模塊提供100 Mbps的通信接口,實(shí)現(xiàn)數(shù)據(jù)的快速傳輸和控制的實(shí)時進(jìn)行。采用低功耗工業(yè)級的DM9161BI芯片,保證網(wǎng)絡(luò)通信的準(zhǔn)確性,同時采用網(wǎng)絡(luò)隔離變壓器H1102芯片,為以太網(wǎng)通信提供隔離保護(hù)[6]。如圖1所示,上方為DM9161BI芯片的原理圖,下方為隔離變壓器H1102芯片的原理圖,通過電路的連接共同組成以太網(wǎng)接口電路設(shè)計原理圖。
圖1 以太網(wǎng)接口設(shè)計原理圖
為保證通信的準(zhǔn)確性,以太網(wǎng)通信接口的接收和發(fā)送都是由差分對組成,TD+和TD-為發(fā)送數(shù)據(jù)差分對,RD+和RD-為接收數(shù)據(jù)差分對。在數(shù)據(jù)接收時,RD+和RD-組成模式接收器,將以太網(wǎng)的電壓轉(zhuǎn)換成差分信號,發(fā)送時的特性類似。對測控終端電路板的測試表明,以太網(wǎng)接口電路的設(shè)計完全符合設(shè)計的要求。
由于整個智能物聯(lián)網(wǎng)系統(tǒng)需要較快的處理速度以滿足實(shí)時性同時要求具有較高可靠性,嵌入式操作系統(tǒng)因其自身具有強(qiáng)大的多任務(wù)處理能力和豐富的網(wǎng)絡(luò)協(xié)議支持而被廣泛地使用。嵌入式RTU系統(tǒng)中,應(yīng)用程序通過系統(tǒng)調(diào)用接口(包括C庫)對Linux內(nèi)核發(fā)出設(shè)備操作請求,Linux內(nèi)核根據(jù)請求調(diào)用相應(yīng)的驅(qū)動程序,并完成對地層硬件的操作?;贚inux 2.6.30內(nèi)核的操作系統(tǒng)可以完全滿足RTU系統(tǒng)對處理速度的要求[7],另外,結(jié)合Linux系統(tǒng)本身的可裁剪性、源碼開放性、良好的移植性等諸多優(yōu)點(diǎn)[8],本設(shè)計最終采用嵌入式Linux 2.6.30操作系統(tǒng)作為嵌入式RTU軟件平臺。系統(tǒng)軟件平臺搭好后,在嵌入式Linux操作系統(tǒng)上,根據(jù)嵌入式RTU系統(tǒng)實(shí)際功能需求開發(fā)特定的應(yīng)用服務(wù)程序,實(shí)現(xiàn)對ZIGBEE模塊、RS485模塊、CAN模塊和網(wǎng)絡(luò)模塊接入,完成RTU具體功能需求。
嵌入式操作系統(tǒng)內(nèi)核主要包括任務(wù)調(diào)度、響應(yīng)中斷服務(wù)程序、內(nèi)存管理及進(jìn)程間通信等。驅(qū)動移植包括內(nèi)存、網(wǎng)卡(支持IPv6)、串口的驅(qū)動程序移植。數(shù)據(jù)采集模塊包括各類智能傳感設(shè)備數(shù)據(jù)傳輸協(xié)議驅(qū)動(支持IPv6協(xié)議棧)、IO設(shè)備的驅(qū)動程序;設(shè)備管理模塊包括對RTU本身及其他從屬設(shè)備的診斷、管理、配置等。數(shù)據(jù)傳輸模塊,主要是基于嵌入式操作系統(tǒng)平臺上進(jìn)行IPv6協(xié)議應(yīng)用的開發(fā)工作,包括數(shù)據(jù)封包、解包、校驗(yàn)、重傳等。
在網(wǎng)絡(luò)中通訊的兩個終端都要對網(wǎng)絡(luò)協(xié)議棧提供支持,設(shè)計的RTU設(shè)備最大特點(diǎn)就是支持IPv4和IPv6雙棧協(xié)議,依照模塊化設(shè)計,為了功能模塊化,linux內(nèi)核的網(wǎng)絡(luò)協(xié)議棧也遵循了此思想。應(yīng)用層函數(shù)會調(diào)用傳輸層的函數(shù)來實(shí)現(xiàn)傳輸層的協(xié)議,在本設(shè)計中用到的是TCP協(xié)議,之后傳輸層通過網(wǎng)絡(luò)層提供的接口函數(shù)來完成網(wǎng)絡(luò)層的IP協(xié)議。
2.1.1 IPv4協(xié)議的實(shí)現(xiàn)數(shù)據(jù)發(fā)送的流程
當(dāng)發(fā)送網(wǎng)絡(luò)數(shù)據(jù)的時候,應(yīng)用層協(xié)議會利用傳輸層的服務(wù),傳輸層協(xié)議層模塊最終會調(diào)用網(wǎng)絡(luò)層的ip_queue_xmit()函數(shù),此函數(shù)原型為int ip_queue_xmit(struct sk_buff *skb,int ipfragok),此函數(shù)中的參數(shù)會由傳輸層傳遞到此函數(shù)中。sk_buff接口參數(shù)skb是構(gòu)造此連接用于存儲數(shù)據(jù),參數(shù)ipfragok用于判斷是否是分片了。
首先此函數(shù)會檢測skb中是否已經(jīng)含有了路由表,一般傳輸層的STCP協(xié)議會設(shè)置這個路由表,本設(shè)計用到的傳輸層協(xié)議為TCP,所以會調(diào)用__sk_dst_check()函數(shù),此函數(shù)用來檢查路由表,如果沒有建立路由表。之后會調(diào)用ip_route_output_flow()函數(shù),此函數(shù)用于得到路由信息,繼續(xù)向下會調(diào)用skb_push(),skb_reset_network_header(),ip_hdr()函數(shù),也正是構(gòu)造IPv4協(xié)議的關(guān)鍵之處,在此過程中會初始化IPv4數(shù)據(jù)報報頭,決定是否設(shè)置分片域,設(shè)置TTL,協(xié)議類型,IPv4源地址,數(shù)據(jù)地址字段。
完成以上步驟后調(diào)用ip_local_out()函數(shù),此函數(shù)又會調(diào)用dst_output()函數(shù),這個函數(shù)會將打包成IPv4協(xié)議的數(shù)據(jù)傳給下一層,最后下一層協(xié)議會把我們的構(gòu)造的IPv4協(xié)議的數(shù)據(jù)包發(fā)送到網(wǎng)絡(luò)中去。
2.1.2 IPv6協(xié)議的實(shí)現(xiàn)數(shù)據(jù)發(fā)送的流程
傳輸層會調(diào)用網(wǎng)絡(luò)層的ip6_xmit()函數(shù),此函數(shù)參數(shù)傳輸層會提供給它,此函數(shù)原型為int ip6_xmit(struct sock *sk,struct sk_buff *skb,struct flowi *fl,struct ipv6_txoptions *opt,int ipfragok),之后回調(diào)用函數(shù)skb_headroom(),此函數(shù)用于檢查報頭頭空間,如果空間不夠會調(diào)用skb_realloc_headroom()函數(shù)開辟空間。繼續(xù)向下會調(diào)用skb_push(),skb_reset_network_header(),ip6_hdr(),ipv6_addr_copy()函數(shù),也正是構(gòu)造IPv6協(xié)議的關(guān)鍵之處,完成舒適化IPv6協(xié)議報頭,決定是否分片,設(shè)置跳數(shù),源和目的地址的任務(wù),代碼片段如下:
hdr = ipv6_hdr(skb);
/* Allow local fragmentation.*/
if (ipfragok)
skb->local_df = 1;
hlimit =-1; //填充IPv6報文頭
if (np)
hlimit = np->hop_limit;
if (hlimit < 0)
hlimit = ip6_dst_hoplimit(dst);
tclass =-1;
if (np)
tclass = np->tclass;
if (tclass < 0)
tclass = 0;
*(__be32 *)hdr = htonl(0x60000000 | (tclass << 20)) | fl->fl6_flowlabel;
hdr->payload_len = htons(seg_len);
hdr->nexthdr = proto; //設(shè)置下一頭部協(xié)議
hdr->hop_limit = hlimit; //設(shè)置跳數(shù)
ipv6_addr_copy(&hdr->saddr,&fl->fl6_src); //設(shè)置IPv6地址
ipv6_addr_copy(&hdr->daddr,first_hop);
最后調(diào)用dst_output()函數(shù),這個函數(shù)會將我們的構(gòu)造的IPv6協(xié)議的數(shù)據(jù)包發(fā)送出去。
RTU處于傳輸層,一方面要控制底層采集模塊,另一方面要和上位機(jī)進(jìn)行通信[9],所以本系統(tǒng)采用多線程同時執(zhí)行多個任務(wù)。線程1實(shí)現(xiàn)了MODBUS-RTU協(xié)議,其中包含了發(fā)送命令任務(wù)和數(shù)據(jù)接收處理任務(wù),而線程2實(shí)現(xiàn)了MODBUS-TCP協(xié)議,它包含了TCP連接管理任務(wù)和MODBUS-TCP數(shù)據(jù)通信任務(wù)。
ModBus協(xié)議是一種應(yīng)用層協(xié)議,設(shè)計的RTU等待客戶端的連接,當(dāng)客戶端連接到RTU后,RTU會進(jìn)入循環(huán)程序等待客戶端以Modbus-TCP方式下發(fā)的命令,并解析命令,并將Modbus-TCP命令轉(zhuǎn)化成ModBus-RTU格式后通過RS485發(fā)送給傳感器從而控制傳感器的數(shù)據(jù)采集,之后接收來自傳感器的Modbus-RTU格式數(shù)據(jù),并完成ModBus-RTU協(xié)議到Modbus-TCP協(xié)議的轉(zhuǎn)換工作,最后通過網(wǎng)口發(fā)送給客戶端。
PC客戶端是通過網(wǎng)口與RTU進(jìn)行通訊的,用到的應(yīng)用層協(xié)議是Modbus-TCP協(xié)議,通過SOCKET編程接口來完成Modbus-TCP的數(shù)據(jù)發(fā)送和接收工作的。
RTU是通過RS485串口與物理層進(jìn)行通訊的,用到的應(yīng)用層協(xié)議是Modbus-RTU協(xié)議,通過對RS485設(shè)備的控制來完成Modbus-RTU的數(shù)據(jù)發(fā)送和接收工作。
在程序中,我們還設(shè)置定時器以防RTM或電量模塊等傳感器因?yàn)樯蟼鲉栴}而引起RTU程序阻塞。在每次RTU接收傳感器數(shù)據(jù)到來前記錄當(dāng)前時間并設(shè)置一個超時時間,在每次while循環(huán)中來判斷是否超時,比如傳感器突然由于某種原因不工作了就會發(fā)生超時,程序就會跳出while循環(huán)并向客戶端發(fā)送超時錯誤碼。
系統(tǒng)設(shè)計中環(huán)形緩沖區(qū),可理解為內(nèi)存中的一段圓環(huán)形的數(shù)據(jù)存儲空間,能夠持續(xù)在此空間進(jìn)行數(shù)據(jù)的讀寫操作。在使用過程中,首先會將外部輸送的數(shù)據(jù)保存到緩沖區(qū),再按照MODBUS協(xié)議將數(shù)據(jù)從其中讀出,并對數(shù)據(jù)進(jìn)行相應(yīng)的計算操作。
由于系統(tǒng)底層有較多的傳感器,所以在讀取傳感器數(shù)據(jù)的程序設(shè)計中有效地利用了環(huán)形緩沖區(qū)的優(yōu)勢,從而減短了對傳感器數(shù)據(jù)讀取的時間,提高了軟件系統(tǒng)整體的運(yùn)行效率。
圖2 環(huán)形緩沖區(qū)讀操作和寫操作示意圖
如圖2所示為環(huán)形緩沖區(qū)讀操作和寫操作的流程示意圖。在對環(huán)形緩沖區(qū)進(jìn)行讀寫操作之前(初始狀態(tài)),讀、寫指針同時處在申請的緩沖區(qū)的起始位置,也就是在圖2(a)所示“位置1”處;當(dāng)有數(shù)據(jù)寫操作時,寫指針也就是圖中的input順時針到了 “位置2”,而讀指針仍然在“位置1”保持不變,如圖2(b)所示;如果讀和寫同時發(fā)生時,則環(huán)形緩沖區(qū)的讀和寫指針分別順時針移動,如圖2(c)所示。在環(huán)形緩沖區(qū)中,對數(shù)據(jù)的讀和寫就是按照這樣的規(guī)律持續(xù)進(jìn)行,互不干擾,節(jié)省了讀寫時間,極大地提高了系統(tǒng)的運(yùn)行效率。
設(shè)計的智能油氣水井物聯(lián)網(wǎng)系統(tǒng),油田現(xiàn)場通過RS485總線,與現(xiàn)場采集模塊一體化示功儀、電量模塊、RTM模塊相連,采集溫度、壓力、功圖、電參量信息;通過IPV4/IPV6協(xié)議,與數(shù)據(jù)中心實(shí)時數(shù)據(jù)庫進(jìn)行數(shù)據(jù)接口,將采集數(shù)據(jù)傳輸?shù)奖O(jiān)控中心實(shí)時數(shù)據(jù)庫。
在華北、大港、青海等油田應(yīng)用測試,現(xiàn)場系統(tǒng)工作正常,運(yùn)行穩(wěn)定,采集油井的溫度、壓力、功圖、電量參數(shù)準(zhǔn)確,數(shù)據(jù)可成功上傳至監(jiān)控中心實(shí)時數(shù)據(jù)庫,完全滿足油田需求。
監(jiān)控中心數(shù)據(jù)分析發(fā)布平臺調(diào)用實(shí)時數(shù)據(jù)庫,能夠及時有效地查詢?nèi)坑途蛑付ㄓ途當(dāng)?shù)據(jù)信息,并通過數(shù)據(jù)進(jìn)行實(shí)時診斷分析,計算產(chǎn)量[10],同時可選擇查詢產(chǎn)量的歷史信息,分析油井的產(chǎn)量波動情況??蛻舳藢?shí)時分析診斷界面如圖3所示。
圖3 圖形查詢功圖
提供功圖的圖形模式查詢,直觀形象的同時查看診斷多井功圖信息。應(yīng)用于結(jié)合功圖算產(chǎn)數(shù)據(jù),為油田工況分析診斷提供了依據(jù)[11]??蛻舳藞D形查詢功圖界面如圖4所示。
圖4 實(shí)時分析診斷
結(jié)合物聯(lián)網(wǎng)技術(shù)理念與最新成果研發(fā)的智能油氣水井生產(chǎn)物聯(lián)網(wǎng)系統(tǒng),采用ARM+Linux系統(tǒng)架構(gòu)設(shè)計,系統(tǒng)支持IPV4/IPV6雙棧協(xié)議,系統(tǒng)集成了Zigbee、WiFi、RS485、CAN等感知層信息采集接口,支持與不同生產(chǎn)廠家、多種不同的通訊方式的各類井口傳感器實(shí)現(xiàn)數(shù)據(jù)交互。系統(tǒng)在華北、大港、青海等油田應(yīng)用,實(shí)現(xiàn)了油氣水井生產(chǎn)工況的實(shí)時采集、實(shí)時診斷、實(shí)時優(yōu)化、實(shí)時控制、智能預(yù)測功能,油井的系統(tǒng)效率得到提高,同時對于提升油田整體開發(fā)水平具有積極的意義。