摘 要:介绍了借助于Delphi7.0 的Server/Client Socket通讯控件,以及GSM/GPRS Modem短信模块,采用modbus通讯协议对三相三线电式子多功能电表、数字式厂(所)用变保护测控装置以及直流屏实现遥测、遥信、遥控、遥调。利用C8051F020单片机完成不同通讯协议数据的MODBUS协议封装与解包。本文祥述通讯过程的实现,给出了设计程序。 关键词:modbus协议,GSM/GPRS Modem, C8051F020,Server/Client Socket, RS-485
关键词: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协议的电表数据帧
图(一)数据流示意图
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 );
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及端口,如图(二)所示。
图(二)GPRS模块设置
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校验码。
图(三)上位机控制子界面
5.结论
本研究以MODBUS协议对不同通讯格式数据帧的封装,实现对不同被控装置的分散控制、集中管理。
参考文献
[1]鲍可进.C8051F单片机原理及应用[M].北京:中国电力出版社,2006.
[2] 赵兰涛, 苏彦华.Delphi 串口通信技术与工程实践[M]. 北京:人民邮电出版社,2004.