基于GSM短信息的離散油井監控系統
1、 系統組成及其功能
該系統采用由單臺監控服務器和多監控終端并行運行方案,每口油井作為一個終端單元,實時采集下接的(儀表負荷傳感器、電流互感器、電壓互感器、功率因數變換器)信息,自主運行。監控終端可以選用有線或無線兩種通信方式與監控服務器交換數據,在油井現場用筆記本電腦RS232C直接電纜連接進行參數修改和數據傳載,此時筆記本電腦充當監控服務器,使系統方便的運行;對于中心控制室,監控終端可以通過GSMmodem和監控服務器進行數據交換,但是通信費用比較高而不可取,當然也可以通過無線數傳電臺進行數據交換,通過實際應用的數據交換量的比較,有效的油井數據量一般不超過一條段信息的容量,經過試驗檢測我們知道作為最大的數據交換——示功圖也不過160個字符(測量周期100ms,沖程周期6——7s),因此選GSM短信息方式進行必要的數據交換完全滿足。監控終端根據設定的需要把油井抽油機工作狀況以短信息的方式發送到監控服務器,監控服務器對數據進行分類保存、統計供管理人員查詢、分析。工作人員可以在監控服務器根據需要以短信息的方式向終端發送控制命令,控制抽油機的運行和獲取抽油機的工作狀況。
整個系統由單井數控單元、中心控制室和GSM網絡組成。系統框圖如1所示。
其中單口油井監控單元包括:RTU、信號處理模塊和G100A短信模塊。
1.1 RTU設計
RTU作為監控單元功能實現終端,選用ZWORLD公司生產的RCM2300核心模塊,RCM2300模塊包括:工作在22.1MHz上的微處理器Rabbit200;128K SPAM和256K Flash;29個1/O線,17個可設置的l/O、8個固定輸入、4個固定輸出;3個通用串口;5個8位定時器和1個帶2個匹配寄存的10位定時器(5個定時器成對級聯)。根據需要我們擴展輸入輸出通道為:4路繼電器輸出,4路數字量輸出,8路塊數字輸入,4路12位分辨率4~20mA電流模擬量輸入,4路12位分辯率0~5V模擬量輸入,2路12位的分辨率0~4V模擬量輸出,1個RS485端口,2個3線的RS232或者一個5線的RS232端口。相應的在開發平臺Dynamic C上用單根接口電纜把PC串行口和基于Rabbit2000的目標系統連接起來就可實現軟件的開發,系統集編輯、編譯、鏈接、調試、下載于一體,可快速的進行目標系統軟件的開發。
監控終端的功能是根據檢測的抽油機工作狀態,判斷抽油機的工效,適時的對抽油機進行起停操作,保障油機的機械及其電氣設備的安全的同時,提高單口油井的產效。
1.2 信號處理模塊
對于不同的油井可能需要配備不同的一次儀表。還有企業原來遺留的一些不同信號的儀表,特別是油機必備的負荷傳感器,其輸出信號一般是0~10mV,但是隨著使用時間的遞增負荷零點會有變化,將直接影響到控制功能的實現,所以我們專門針對負荷傳感器設計了調理模塊, 除完成將0~10mV電壓信號轉換成4~20mA電流信號外,還要負責處理好隨溫度和時間變化的影響。
1.3 G100A短信模塊
北京捷麥公司的G100A短信模塊集成了使用西門子TC35的GSM信道單元、信令轉換單元、串口電平轉換單元。其信令格式及應用開發極其簡便。在應用中監控終端和監控服務器通過RS232接口連接TC35T來發送和接收GSM短和、消息,完成數據交換功能。
監控終端RTU系統軟件不僅要實時采集抽油機數據,實時控制抽油機的運行,還 要對各種信息進行處理,抽油機本身負荷功圖、電流圖、功率因數圖等都是大數據量的處理,所以系統軟件的設計必須是一個多任務系統。ZWORLD公司軟件開發平臺Dynamic C是一個開放C語言開發環境,提供有豐富的庫函數,可以開發出多任務系統。
終端控制軟件功能設計采用模塊化設計,主要包括三個方面:數據采集與處理功能模塊、邏輯處理功能模塊、I/O驅動模塊、通信模塊。設計流程如下圖2
1) 據采集與處理功能模塊:需要采集的模擬數據有光桿負荷、電機電流、電機電壓,電機功率因數和其它的油井管道壓力等數據,數字量信息包括電機狀態(運行和停止)、系統運行方式(手動/自動),位置開關狀態等。對模擬數據進行量化處理為相應的可視化圖形并按一定的時間規律間隙存儲,對數字量信息需要進行抗干擾處理,防止假錯信息進入。
2)邏輯處理功能模塊:控制系統的目的是要控制的一系列動作,根據采集的信息識別當前抽油機的工作狀態,按照抽油機的工作原理和油井的變化規律,控制和預測抽油機的動作。抽油機的控制功能主要包括:空抽控制、時間定點控制、連噴帶抽控制,根據用戶的實際應用設定需要的控制功能的同時,記錄出現的所有運行故障。
3)I/O驅動模塊:這一部分主要是針對輸入、輸出耗損時間較多的緣故,把所有輸入輸出放在一個任務里面集中處理,有利于提高系統的實時性。控制實現聲音和燈光閃爍的報警功能。
4)通信模塊:通信功能我們實現了兩種方式,在工作現場通過RS232接口通信的Modbus協議和基于GSM短信息的無線傳遞方式。Modbus協議實現已經有很多文章介紹過,這里我主要說說GSM短信息的無線傳遞的實現。
a、 連接與數據格式
G100A型GSM數傳模塊采用的是三線制串口,即TX,RX,GND三條線,沒有其他任何握手和數據流控制線。其傳輸數據格式為:1個起始位、8個數據位、1個停止位。無校驗(即51系列單片機串型通訊的方式1)。串口速率為固定的9600Bps.
b、電話號碼的表示
GSM短信模塊是用GSM模塊的短信息功能來傳輸數據的,所以在使用它傳輸數據的時候就要用到電話號碼。為了規范和方便,下面介紹數據包中電話號碼的表示方法。數據包中用6個8位二進制字節表示電話號碼,每個字節中高4位和低4位均用BCD碼表示1位十進制的電話號碼,這樣每個字節可表示兩位電話號碼,6個字節共可表示12位電話號碼,因現行的電話號碼均為11位,而6字節能表示12位十進制的BCD數,所以在傳輸數據表示電話號碼時要將電話號碼的前面補0以湊足12位。假設電話號碼是13501237654,轉換成6字節BCD碼后變為01H,35H,01H,23H,76H,54H。
將電話號碼轉換成數據包中BCD碼的格式的步驟就是:1. 在電話號碼的左邊補一個“0” 2. 從左向右每兩位分成一組 3. 分別將各組轉換成BCD碼。如果要將數據包中的數據還原成電話號碼,步驟正好相反。
c、術語
信息:信息是指GSM模塊與上位機通信的內容。
數據:上位機通過串口,發送給模塊GSM模塊,通過GSM模塊的無線發送及GSM網絡傳輸傳送給另一GSM模塊的信息叫數據。由上位機通過串口發送給GSM模塊的數據叫發送數據。由GSM模塊收到短信后傳送給上位機的數據叫接收數據。數據的起始點是上位機,目的點是另一上位機。
命令:上位機通過串口,發送給GSM模塊讓模塊執行一定的動做或GSM模塊傳送給上位機報送模塊內的一些參數或狀態的信息叫命令。若命令的起始點是上位機,目的點則是GSM模塊。
d、數據包格式
無論是數據還是命令都用下面的格式來表示
D7H│控制字節│信息
不管是命令還是數據,都有一個包頭D7H,接著就是一個控制字節。本模塊規定:當控制字節大于147時,數據包為命令,否則就為數據。比如命令D7H, FFH, 參數, D7H為包頭,FFH為控制字節,因FFH>147,故參數為命令字節。模塊就是靠數據包的第二個字節來識別您發給它的信息是命令信息還是數據信息的。
e、發送接收數據的格式
1. 發送用戶數據
語法:D7│控制字節=UDL│STA│UD
UDL:要發送的除包頭D7H以外總的數據長度。包括STA,UD和它本身的字節長度,因STA 和 UDL的字節長度一般是固定的,即固定為1+6=7個字節,所以其長度可由如下公式計算UDL數值=1+6+UD長度
STA:接受方的電話號碼,即目的地址。號碼需要進行格式轉換。
UD: 您需要發送的有效數據。其總長度小等于140個字節。因為短信息的數據長度不能超過140個字節。
例1:
假設您要發送00H,11H,22H,33H,44H,55H,共6個字節數據,接收方的電話號碼(目的地址)是13655436789,UDL=0DH(13個字節), STA=01H,36H,55H,43H,67H,89H,UD=00H,11H,22H,33H,44H,55H, 發送格式如下
D7H│0DH│01H│36H│55H│43H│67H│89H│00H│11H│22H│33H│44H│55H
2.收用戶數據
語法: D7H │ UDL │ SOA │ UD
SOA:發送方的電話號碼,即源地址。
例2:
假設您收到上面發送來的00H,11H,22H,33H,44H,55H,共6個字節數據,發送方的電話號碼(源地址)是13920855795,UDL=0DH(13個字節), SOA=01H,39H,20H,85H,57H,95H,UD=00H,11H,22H,33H,44H,55H, 接收到的數據格式如下
D7H│0DH│01H│39H│20H│85H│57H│95H│00H│11H│22H│33H│44H│55H
3 上位機監控軟件設計
上位機我們選用Delphi6.0作為開發工具。雖然Delphi沒有自帶串口通訊的控件,但是可以一方便的編寫出通信應用程序。用Delphi實現串口通訊,常用的幾種方法為:使用控件如MSCOMM和SPCOMM,使用API函數或者在Delphi中調用其它串口通訊程序。下面介紹使用SPCOMM控件來實現Modbus協議,實現PC機和RTU通信。
使用SPCOMM控件進行串口通信需要處理好兩個事件;
onReceoveData : procedure (Sender: Tobject;Buff:pointer;BufferLength:Word)of object
當輸入緩存有數據時將觸發該事件,在這里可以對串口收到的數據進行處理。Buffer中是收到的數據,bufferlength是收到的數據長度。
OnReceiveError: procedure(Sender: Tobject;EventMask: DWORD)
當接受數據時出現錯誤將觸發該事件
Modbus RTU協議是一種主從式通信協議,每次由主站發起并期望從從站得到回應,從站接收到一消息,它將建立一定回應格式并返回給發起斬主站,從站返回消息在OnReceiveData事件里處理,根據主站發起的命令字分類比較如下代碼
ProcedureTform1.Comm1ReceiveData(Sender:Tobject;Buffer:pointer;BufferLength:Word);
Var
Temp_receive:array of byte;
I,rec_len:byte;
Calculate_crc,rec_crc,reg,reg-value:word;
Begin
Rec_len:=bufferlength;
Setlength9temp_receive,bufferlength);
Move(buffer^,pchar(temp_receive)^,bufferlength);
Rec_crc:=temp_receive[rec_len-2 shl 8+temp_receive[rec-len-1];
Calculate_crc:=fcrc16(@temp_receive[0],rec_len-2);
If rec_crc<> calculate_crc then //返回數據CRC16校驗錯誤決定重發
Begin
If error_order<>order_index then
Over_num:=over_num=1;
If over_num<3 then
Begin
Make_order(order_index);
End
Else
Begin
Showmessage(′傳輸數據有誤,請檢查通信線路′);
Error_order:=order_index;
Exit;
End
End
Elsd
Over_num:=0;
Case ovder_index of//order_index Modbus function code1:
Begin
//存儲數字輸出狀態
end;
2:
begin
//存儲數字輸入狀態
end;
…
16:
begin
//存儲預置的保持寄存器值
end;
end;
end;
服務哭端數據存儲我們采用后臺Access數據庫,根據不同的油井編號對應不同的從站通信地址,把個離散油井數據分類在不同表格存儲,便于地質和勘井人員查詢分析。其他有關監控軟件頁面數據刷新處理等問題限于篇幅不再說明。
結束語
我們開發研究的這套系統首先是在調查研究了國內油田所有應用系統的基礎上,針對新疆油田特殊的地理環境,從實際需要出發,利用Dynamic C強大的處理能力,在保證了系統性能的條件下,降低了系統造價,節省了傳統的方法采用中控室使用組態軟件開發所需要的昂貴的通信設備費用。該系統經過在克拉瑪依新疆油田采油一廠、二廠、五廠投入試運行后,為采油管理人員及時地提供了準確完整的運行數據,單口油井能效比得到提高。
文章版權歸西部工控xbgk所有,未經許可不得轉載。