摘 要:介紹了借助于Delphi7.0 的Server/Client Socket通訊控件,以及GSM/GPRS Modem短信模塊,采用modbus通訊協(xié)議對三相三線電式子多功能電表、數(shù)字式廠(所)用變保護測控裝置以及直流屏實現(xiàn)遙測、遙信、遙控、遙調(diào)。利用C8051F020單片機完成不同通訊協(xié)議數(shù)據(jù)的MODBUS協(xié)議封裝與解包。本文祥述通訊過程的實現(xiàn),給出了設(shè)計程序。
關(guān)鍵詞:modbus協(xié)議,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變電站的遠程實時控制與數(shù)據(jù)采集。是基于以太網(wǎng)傳輸?shù)闹鲝氖綉鸱绞降耐ㄓ?。在整個項目中三個被控對象有各自的內(nèi)部通訊協(xié)議,多功能電表遵循645通訊規(guī)約,直流屏遵循451通訊規(guī)約,線路保護器遵循103通訊規(guī)約,三個不同通訊協(xié)議的數(shù)據(jù)最終要與監(jiān)控中心的上位機實現(xiàn)全雙工通訊。實現(xiàn)遙測、遙信、遙控、遙調(diào)如:對變電站功率因數(shù)、電能量等運行實時參數(shù)遙測,對各級電壓回路的斷路器和主變壓器分頭遙控,對直流屏母線電壓,電表的時段費率等進行遙調(diào)。為了保證整個傳輸過程中數(shù)據(jù)的可靠性,將三種協(xié)議統(tǒng)一成同一種通訊協(xié)議,本文以對多功能電表的控制為例說明整個項目的實現(xiàn)方法。將三種裝置自身的數(shù)據(jù)幀(如電表協(xié)議:幀起始符,地址域,幀起始符,控制碼,數(shù)據(jù)長度域,數(shù)據(jù)域,校驗碼,結(jié)束符)作為Modbus協(xié)議的數(shù)據(jù)單元,為每種通訊裝置增加Modbus協(xié)議的地址、功能單元,以及Modbus數(shù)據(jù)幀的CRC校驗和結(jié)束符。如表(一)、表(二)所示,利用C8051F020單片機完成監(jiān)控中心與三個被控裝置之間數(shù)據(jù)幀的MODBUS封裝和解殼(還原為各被控裝置的數(shù)據(jù)幀)。利用短信模塊完成數(shù)據(jù)的遠傳。數(shù)據(jù)流如圖(一)所示:
表(一) 多能電表645規(guī)約數(shù)據(jù)幀格式
表(二) 封裝MODBUS協(xié)議的電表數(shù)據(jù)幀
[align=center]

圖(一)數(shù)據(jù)流示意圖[/align]
2.上位機通訊程序
利用DELPHI7.0的Server/Client Socket控件來實現(xiàn)上位機數(shù)據(jù)的發(fā)送與接收,由于上位機既要接收數(shù)據(jù)也要發(fā)送數(shù)據(jù),因此既要作為服務(wù)器也要做為客戶端。Server Socket的屬性、方法及事件設(shè)置如下:
ServerSocket1.Port:=5000;
//偵聽端口號5000
ServerSocket1.Active:=true;
//打開服務(wù)器
ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
Begin
//偵聽5000號端口,接收GSM/GPRS Modem傳來的數(shù)據(jù)。并調(diào)用相應的procedure和function完成對接收數(shù)據(jù)的處理及顯示。
end;
ClientSocket的屬性、方法及事件設(shè)置如下:
Procedure TForm5.initButClick(Sender: TObject);
begin
ClientSocket1.Host:=218.195.248.91;
//服務(wù)器的IP地址
form1.ClientSocket1.Port:=5000;
form1.ClientSocket1.Open;
//打開客戶端
end;
利用ClientSocket1.Socket.SendText();發(fā)送命令數(shù)據(jù)幀。
//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 設(shè)置
設(shè)置GPRS 短信模塊為透傳模式,本研究中用的是北京嘉復欣科技的DTU模塊,利用它提供的配置工具(或者串口調(diào)試助手)完成,DTU模塊的設(shè)置如串口設(shè)置,服務(wù)器IP及端口,如圖(二)所示。
[align=center]

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

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