摘 要:介紹了借助于Delphi7.0 的Server/Client Socket通訊控件,以及GSM/GPRS Modem短信模塊,采用modbus通訊協議對三相三線電式子多功能電表、數字式廠(所)用變保護測控裝置以及直流屏實現遙測、遙信、遙控、遙調。利用C8051F020單片機完成不同通訊協議數據的MODBUS協議封裝與解包。本文祥述通訊過程的實現,給出了設計程序。
關鍵詞:modbus協議,GSM/GPRS Modem, C8051F020,Server/Client Socket, RS-485
Abstract: By using Server/Client Socket component of Delphi7.0, as well as GSM / GPRS Modem, this research realizes remote control of the Multi-function ammeter , the digital circuit protector and DC-screen with modbus protocol and using C8051F020 MCU to complete the data of different communication protocols of package and unpackage in MODBUS protocol. This paper describes the realization of communication process, giving the design procedure.
Keywords:Modbus protocol, GSM/GPRS Modem,C8051F020,Server/Client Socket, RS-485
1.概述:
本項目主要完成對35KV/A變電站的遠程實時控制與數據采集。是基于以太網傳輸的主從式應答方式的通訊。在整個項目中三個被控對象有各自的內部通訊協議,多功能電表遵循645通訊規約,直流屏遵循451通訊規約,線路保護器遵循103通訊規約,三個不同通訊協議的數據最終要與監控中心的上位機實現全雙工通訊。實現遙測、遙信、遙控、遙調如:對變電站功率因數、電能量等運行實時參數遙測,對各級電壓回路的斷路器和主變壓器分頭遙控,對直流屏母線電壓,電表的時段費率等進行遙調。為了保證整個傳輸過程中數據的可靠性,將三種協議統一成同一種通訊協議,本文以對多功能電表的控制為例說明整個項目的實現方法。將三種裝置自身的數據幀(如電表協議:幀起始符,地址域,幀起始符,控制碼,數據長度域,數據域,校驗碼,結束符)作為Modbus協議的數據單元,為每種通訊裝置增加Modbus協議的地址、功能單元,以及Modbus數據幀的CRC校驗和結束符。如表(一)、表(二)所示,利用C8051F020單片機完成監控中心與三個被控裝置之間數據幀的MODBUS封裝和解殼(還原為各被控裝置的數據幀)。利用短信模塊完成數據的遠傳。數據流如圖(一)所示:
表(一) 多能電表645規約數據幀格式
表(二) 封裝MODBUS協議的電表數據幀
[align=center]

圖(一)數據流示意圖[/align]
2.上位機通訊程序
利用DELPHI7.0的Server/Client Socket控件來實現上位機數據的發送與接收,由于上位機既要接收數據也要發送數據,因此既要作為服務器也要做為客戶端。Server Socket的屬性、方法及事件設置如下:
ServerSocket1.Port:=5000;
//偵聽端口號5000
ServerSocket1.Active:=true;
//打開服務器
ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
Begin
//偵聽5000號端口,接收GSM/GPRS Modem傳來的數據。并調用相應的procedure和function完成對接收數據的處理及顯示。
end;
ClientSocket的屬性、方法及事件設置如下:
Procedure TForm5.initButClick(Sender: TObject);
begin
ClientSocket1.Host:=218.195.248.91;
//服務器的IP地址
form1.ClientSocket1.Port:=5000;
form1.ClientSocket1.Open;
//打開客戶端
end;
利用ClientSocket1.Socket.SendText();發送命令數據幀。
//CRC校驗碼求解
procedure TForm1.GetCRC(Data:array of byte;Nums:integer;var CRCH, CRCL: byte);
var
i,j:integer;
CRC:integer;
begin
CRC:=$FFFF;
for i:=0 to Nums-1 do
begin
CRC:=CRC xor ord(Data[i]);
for j:=0 to 7 do
begin
if (CRC mod 2=1) then
begin
CRC:= CRC div 2;
CRC:=$A001 xor CRC
end
else begin
CRC:= CRC div 2;
end;
end;
end;
CRCH := crc mod 256;
CRCL := crc div 256;
end;
3.GSM/GPRS Modem 設置
設置GPRS 短信模塊為透傳模式,本研究中用的是北京嘉復欣科技的DTU模塊,利用它提供的配置工具(或者串口調試助手)完成,DTU模塊的設置如串口設置,服務器IP及端口,如圖(二)所示。
[align=center]

圖(二)GPRS模塊設置[/align]
4.下位機程序
下位機采用C8051F020單片機完成與MODBUS相關的協議轉換, C8051F020提供了兩個串口UART0和 UART1,本研究中采用了4片C8051F020制成4個協議轉換模塊,其中三個與被控對象連接,UART1與被控對象的RS485總線相連接,UART0通過RS485與第4個協議轉換模塊UART1連接。第四個協議轉換模塊的UART0與GSM/GPRS Modem相連。
下位機部分程序代碼:
void UART0_Init (void)
?。?//UART0_Init初始化
PCON |= 0x90;
SCON0 = 0xd0;
// SCON0:方式1 enable RX
CKCON |= 0x20;
T2CON = 0x30;
//定時器2作為UART0波特率發生器
RCAP2=65536-(SYSCLK/BAUDRATE0/32);
T2=RCAP2; // 定時器24的計數初值
TR2 = 1;}
void UART1_Init (void)
?。?/ UART10_Init初始化
SCON1 = 0x50;
CKCON |= 0x40;
T4CON = 0x30; //定時器4作為UART0波特率發生器
RCAP4 =65536-(SYSCLK/BAUDRATE/32);
T4 = RCAP4; // 定時器4的計數初值
T4CON |= 0x04;}
下位機采用查表的方式求解CRC校驗碼。
[align=center]

圖(三)上位機控制子界面[/align]
5.結論
本研究以MODBUS協議對不同通訊格式數據幀的封裝,實現對不同被控裝置的分散控制、集中管理。
參考文獻
[1]鮑可進.C8051F單片機原理及應用[M].北京:中國電力出版社,2006.
[2] 趙蘭濤, 蘇彥華.Delphi 串口通信技術與工程實踐[M]. 北京:人民郵電出版社,2004.