,,,
(中國石油大學(北京) 地球物理與信息工程學院,北京 102249)
及時、準確、直觀地了解每口油井的工況,對于確保生產安全、提高生產效率、做出正確生產決策等都有重要的理論和現實意義。油田生產數字化控制與管理技術適應當前油田需求,是油田管理信息化、網絡化、集成化和自動化的要求[1],是安全、節能、高效的要求,是變革生產組織方式、油田管理方式和控制投資、降低管理成本的法寶。
智能油氣水井物聯網系統由感知層、傳輸層和應用層組成。感知層主要包括安裝在生產系統上的各種傳感器和控制設備,用于實現對生產運行狀態的全面感知和各種生產設備的自動控制;傳輸層由無線傳感網、專網等組成,支持IPV4/IPV6雙棧通信協議,可實現數據的高速可靠傳輸;應用層由各種用于油氣水井生產分析與優化的油氣田開發專業軟件與專家知識庫組成。
智能油氣水井物聯網系統由油井專用RTU模塊、電量模塊、數據采集RTM模塊和一體化示功儀組成。RTU為數據采集與傳輸核心,是連接數據中心和油田現場設備的橋梁。通過RTU統一管理同一油井上的所有設備或相鄰區域的硬件設備,可有效提高數據傳輸的效率,減少數據傳輸通道,降低通信系統的傳輸負擔,提高數據傳輸效率[2]。RTU通過現場總線RS485總線,與現場采集模塊一體化示功儀、電量模塊、RTM模塊相連,采集溫度、壓力、功圖、電參量等信息;通過IPV4/IPV6協議,與數據中心實時數據庫進行數據接口,將采集數據傳輸到監控中心實時數據庫。
RTU是前端設備與后臺系統數據傳輸溝通的中轉站,也是硬件系統的核心所在,通過RTU統一管理同一油氣水井上的所有設備或相鄰區域的硬件設備,可有效提高數據傳輸的效率,減少數據傳輸通道,降低通信系統的傳輸負擔,提高數據傳輸效率。
兼容IPV4/ IPV6雙棧協議油氣生產物聯網網關系統模塊,可以滿足油井、注水井實時數據的采集、傳輸與控制。
考慮到嵌入式RTU的復雜功能和對硬件平臺處理速度需求,硬件平臺的核心處理器選用AT91SAM9263的32位嵌入式處理器。嵌入式RTU系統根據功能進行模塊劃分,由核心處理器模塊、傳感器網絡接入模塊、TCP/IP網絡模塊、存儲器模塊和電源模塊構成。
1)核心處理器模塊負責調控整個系統資源,對RTU的上下行命令以及數據分別進行判斷解析處理并對應用層協議進行解析轉換[3]。采用基于ARM9的AT91SAM9263處理器,核心處理器上運行嵌入式Linux系統和基于此系統的應用服務程序,完成系統各項服務功能,包括數據接收、數據解析、命令發送、協議轉換等功能。
2)傳感器接入模塊在設備前端與各種類型的傳感器實現數據的傳輸與通信,兼容多種傳感器設備,可接入模塊類型,如ZIGBEE模塊、RS485模塊和CAN設備等[4]。
3)TCP/IP網絡模塊將RTU連入公共網絡進行通信。是支持IPv4/IPv6雙協議棧的關鍵,RTU通過網絡模塊將傳感器子網數據通過Ethernet發送到井場中心控制室的客戶端,監控人員可通過客戶端及時查看各油井的運行情況以及油井周圍環境。
4)存儲模塊主要由DATAFLASH、NANDFLASH和SDRAM存儲設備組成。DATAFLASH和NANDFLASH均為非易失性設備,具有掉電不丟失信息的特性,利用此特性,分別用來存儲系統開機引導程序以及Linux內核和根文件系統。SDRAM即同步動態隨機存取存儲器,特點是讀寫速率高,用來提供RTU嵌入式Linux操作系統以及RTU應用程序正常運行所需的內存空間[5]。
結合McWill無線模塊和華為公司的LTE無線模塊的設計特點,系統以太網接口為標準的RJ45接口,可以為遠程無線通信模塊提供100 Mbps的通信接口,實現數據的快速傳輸和控制的實時進行。采用低功耗工業級的DM9161BI芯片,保證網絡通信的準確性,同時采用網絡隔離變壓器H1102芯片,為以太網通信提供隔離保護[6]。如圖1所示,上方為DM9161BI芯片的原理圖,下方為隔離變壓器H1102芯片的原理圖,通過電路的連接共同組成以太網接口電路設計原理圖。

圖1 以太網接口設計原理圖
為保證通信的準確性,以太網通信接口的接收和發送都是由差分對組成,TD+和TD-為發送數據差分對,RD+和RD-為接收數據差分對。在數據接收時,RD+和RD-組成模式接收器,將以太網的電壓轉換成差分信號,發送時的特性類似。對測控終端電路板的測試表明,以太網接口電路的設計完全符合設計的要求。
由于整個智能物聯網系統需要較快的處理速度以滿足實時性同時要求具有較高可靠性,嵌入式操作系統因其自身具有強大的多任務處理能力和豐富的網絡協議支持而被廣泛地使用。嵌入式RTU系統中,應用程序通過系統調用接口(包括C庫)對Linux內核發出設備操作請求,Linux內核根據請求調用相應的驅動程序,并完成對地層硬件的操作。基于Linux 2.6.30內核的操作系統可以完全滿足RTU系統對處理速度的要求[7],另外,結合Linux系統本身的可裁剪性、源碼開放性、良好的移植性等諸多優點[8],本設計最終采用嵌入式Linux 2.6.30操作系統作為嵌入式RTU軟件平臺。系統軟件平臺搭好后,在嵌入式Linux操作系統上,根據嵌入式RTU系統實際功能需求開發特定的應用服務程序,實現對ZIGBEE模塊、RS485模塊、CAN模塊和網絡模塊接入,完成RTU具體功能需求。
嵌入式操作系統內核主要包括任務調度、響應中斷服務程序、內存管理及進程間通信等。驅動移植包括內存、網卡(支持IPv6)、串口的驅動程序移植。數據采集模塊包括各類智能傳感設備數據傳輸協議驅動(支持IPv6協議棧)、IO設備的驅動程序;設備管理模塊包括對RTU本身及其他從屬設備的診斷、管理、配置等。數據傳輸模塊,主要是基于嵌入式操作系統平臺上進行IPv6協議應用的開發工作,包括數據封包、解包、校驗、重傳等。
在網絡中通訊的兩個終端都要對網絡協議棧提供支持,設計的RTU設備最大特點就是支持IPv4和IPv6雙棧協議,依照模塊化設計,為了功能模塊化,linux內核的網絡協議棧也遵循了此思想。應用層函數會調用傳輸層的函數來實現傳輸層的協議,在本設計中用到的是TCP協議,之后傳輸層通過網絡層提供的接口函數來完成網絡層的IP協議。
2.1.1 IPv4協議的實現數據發送的流程
當發送網絡數據的時候,應用層協議會利用傳輸層的服務,傳輸層協議層模塊最終會調用網絡層的ip_queue_xmit()函數,此函數原型為int ip_queue_xmit(struct sk_buff *skb,int ipfragok),此函數中的參數會由傳輸層傳遞到此函數中。sk_buff接口參數skb是構造此連接用于存儲數據,參數ipfragok用于判斷是否是分片了。
首先此函數會檢測skb中是否已經含有了路由表,一般傳輸層的STCP協議會設置這個路由表,本設計用到的傳輸層協議為TCP,所以會調用__sk_dst_check()函數,此函數用來檢查路由表,如果沒有建立路由表。之后會調用ip_route_output_flow()函數,此函數用于得到路由信息,繼續向下會調用skb_push(),skb_reset_network_header(),ip_hdr()函數,也正是構造IPv4協議的關鍵之處,在此過程中會初始化IPv4數據報報頭,決定是否設置分片域,設置TTL,協議類型,IPv4源地址,數據地址字段。
完成以上步驟后調用ip_local_out()函數,此函數又會調用dst_output()函數,這個函數會將打包成IPv4協議的數據傳給下一層,最后下一層協議會把我們的構造的IPv4協議的數據包發送到網絡中去。
2.1.2 IPv6協議的實現數據發送的流程
傳輸層會調用網絡層的ip6_xmit()函數,此函數參數傳輸層會提供給它,此函數原型為int ip6_xmit(struct sock *sk,struct sk_buff *skb,struct flowi *fl,struct ipv6_txoptions *opt,int ipfragok),之后回調用函數skb_headroom(),此函數用于檢查報頭頭空間,如果空間不夠會調用skb_realloc_headroom()函數開辟空間。繼續向下會調用skb_push(),skb_reset_network_header(),ip6_hdr(),ipv6_addr_copy()函數,也正是構造IPv6協議的關鍵之處,完成舒適化IPv6協議報頭,決定是否分片,設置跳數,源和目的地址的任務,代碼片段如下:
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; //設置下一頭部協議
hdr->hop_limit = hlimit; //設置跳數
ipv6_addr_copy(&hdr->saddr,&fl->fl6_src); //設置IPv6地址
ipv6_addr_copy(&hdr->daddr,first_hop);
最后調用dst_output()函數,這個函數會將我們的構造的IPv6協議的數據包發送出去。
RTU處于傳輸層,一方面要控制底層采集模塊,另一方面要和上位機進行通信[9],所以本系統采用多線程同時執行多個任務。線程1實現了MODBUS-RTU協議,其中包含了發送命令任務和數據接收處理任務,而線程2實現了MODBUS-TCP協議,它包含了TCP連接管理任務和MODBUS-TCP數據通信任務。
ModBus協議是一種應用層協議,設計的RTU等待客戶端的連接,當客戶端連接到RTU后,RTU會進入循環程序等待客戶端以Modbus-TCP方式下發的命令,并解析命令,并將Modbus-TCP命令轉化成ModBus-RTU格式后通過RS485發送給傳感器從而控制傳感器的數據采集,之后接收來自傳感器的Modbus-RTU格式數據,并完成ModBus-RTU協議到Modbus-TCP協議的轉換工作,最后通過網口發送給客戶端。
PC客戶端是通過網口與RTU進行通訊的,用到的應用層協議是Modbus-TCP協議,通過SOCKET編程接口來完成Modbus-TCP的數據發送和接收工作的。
RTU是通過RS485串口與物理層進行通訊的,用到的應用層協議是Modbus-RTU協議,通過對RS485設備的控制來完成Modbus-RTU的數據發送和接收工作。
在程序中,我們還設置定時器以防RTM或電量模塊等傳感器因為上傳問題而引起RTU程序阻塞。在每次RTU接收傳感器數據到來前記錄當前時間并設置一個超時時間,在每次while循環中來判斷是否超時,比如傳感器突然由于某種原因不工作了就會發生超時,程序就會跳出while循環并向客戶端發送超時錯誤碼。
系統設計中環形緩沖區,可理解為內存中的一段圓環形的數據存儲空間,能夠持續在此空間進行數據的讀寫操作。在使用過程中,首先會將外部輸送的數據保存到緩沖區,再按照MODBUS協議將數據從其中讀出,并對數據進行相應的計算操作。
由于系統底層有較多的傳感器,所以在讀取傳感器數據的程序設計中有效地利用了環形緩沖區的優勢,從而減短了對傳感器數據讀取的時間,提高了軟件系統整體的運行效率。

圖2 環形緩沖區讀操作和寫操作示意圖
如圖2所示為環形緩沖區讀操作和寫操作的流程示意圖。在對環形緩沖區進行讀寫操作之前(初始狀態),讀、寫指針同時處在申請的緩沖區的起始位置,也就是在圖2(a)所示“位置1”處;當有數據寫操作時,寫指針也就是圖中的input順時針到了 “位置2”,而讀指針仍然在“位置1”保持不變,如圖2(b)所示;如果讀和寫同時發生時,則環形緩沖區的讀和寫指針分別順時針移動,如圖2(c)所示。在環形緩沖區中,對數據的讀和寫就是按照這樣的規律持續進行,互不干擾,節省了讀寫時間,極大地提高了系統的運行效率。
設計的智能油氣水井物聯網系統,油田現場通過RS485總線,與現場采集模塊一體化示功儀、電量模塊、RTM模塊相連,采集溫度、壓力、功圖、電參量信息;通過IPV4/IPV6協議,與數據中心實時數據庫進行數據接口,將采集數據傳輸到監控中心實時數據庫。
在華北、大港、青海等油田應用測試,現場系統工作正常,運行穩定,采集油井的溫度、壓力、功圖、電量參數準確,數據可成功上傳至監控中心實時數據庫,完全滿足油田需求。
監控中心數據分析發布平臺調用實時數據庫,能夠及時有效地查詢全部油井或指定油井數據信息,并通過數據進行實時診斷分析,計算產量[10],同時可選擇查詢產量的歷史信息,分析油井的產量波動情況。客戶端實時分析診斷界面如圖3所示。

圖3 圖形查詢功圖
提供功圖的圖形模式查詢,直觀形象的同時查看診斷多井功圖信息。應用于結合功圖算產數據,為油田工況分析診斷提供了依據[11]。客戶端圖形查詢功圖界面如圖4所示。

圖4 實時分析診斷
結合物聯網技術理念與最新成果研發的智能油氣水井生產物聯網系統,采用ARM+Linux系統架構設計,系統支持IPV4/IPV6雙棧協議,系統集成了Zigbee、WiFi、RS485、CAN等感知層信息采集接口,支持與不同生產廠家、多種不同的通訊方式的各類井口傳感器實現數據交互。系統在華北、大港、青海等油田應用,實現了油氣水井生產工況的實時采集、實時診斷、實時優化、實時控制、智能預測功能,油井的系統效率得到提高,同時對于提升油田整體開發水平具有積極的意義。