金海琴,陈 兴,翟林鹏
(扬州大学 江苏 扬州 225127)
该数据采集系统由上位机、GPRS模块和三相多功能电量采集模块3部分组成。
文中以扬州市电网为例,实现对各个现场仪表数据的远程无线采集,及仪表的集中管理与控制,详细介绍基于C#开发平台实现Modbus通讯协议的方法,该程序可用于上位机经过GPRS模块与下位机(即三相多功能电量采集模块)的串口通讯。测试时,将下位机三相多功能电量采集模块通过RS485接口连接GPRS模块,则可以把采集的数据通过GPRS网络传给上位机,上位PC机通过虚拟串口接收发送过来的数据,并对接收到的参数进行实时数据显示、查询和管理。
Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。控制器通信使用主—从技术,即仅一设备(主设备)能初始化传输(查询),其它设备(从设备)根据主设备查询提供的数据作出相应反应。本文中的Modbus协议应用于点对多点的通信,物理层采用RS485串行通信标准。
Modbus通信协议具有两种传输模式:ASCII模式和RTU模式。使用ASCII模式,消息以“:”字符开始,以回车换行符结束。而使用RTU模式,消息发送至少要以3.5个字符时间的停顿间隔开始,因此在网络波特率下多样的字符时间,这是很容易实现的(如图1的T1—T2—T3—T4所示)。传输的第一个域是设备地址。可以使用的传输字符是十六进制的0…9,A…F。网络设备不断侦测网络总线,包括停顿间隔时间内。当第一个域(地址域)接收到,每个设备都进行解码以判断是否发往自己的。在最后一个传输字符之后,一个至少3.5个字符时间的停顿后才能发生一个新的消息。整个信息必须连续发送。如果在发送帧信息期间,出现大于1.5个字符的静止时间时,则接收设备刷新不完整的信息,并假设下一个地址数据。同样一个信息后,立即发送的一个新信息(若无3.5个字符的静止时间)这将会产生一个错误。是因为合并信息的CRC校验码无效而产生的错误。一个典型的消息帧如图1所示。
图1 RTU消息帧Fig.1 RTU message frame
RTU方式时,采用CRC(即循环冗余码校验)方法计算错误校验码,CRC校验传送的全部数据。它忽略信息中单个字符数据的奇偶校验方法。
CRC码为2个字节,16位的二进制值。由发送设备计算CRC值,并把它附到信息中去。接收设备在接收信息过程中再次计算CRC值并与CRC的实际值进行比较,若二者不一致,亦产生一个错误,校验开始时,把16位寄存器的各位都置为“1”,然后把信息中的相邻2个8位字节数据放到当前寄存器中处理,只有每个字符的8位数据用于CRC处理。起始位,停止位和校验位不参与CRC计算。
串口通信技术应用广泛,在数据通信、计算机网络以及分布式控制系统中,经常采用串行通信来交换数据和信息。文中采用Visual Studio 2010提供的SerialPort控件实现串口通信。SerialPort控件和C#的其他控件一样,都是通过对其一系列的方法、属性、事件与用户之间进行交互。只要对SerialPort控件的属性、方法、事件进行设计,就可以发送和接收数据。
软件界面设计满足清晰、简洁的要求,使得操作简单、调理清晰,易于进行测试操作。在程序运行后,首先设置串口的参数,本系统串口参数设置为:
串口号:COM3;波特率:9 600 bps;数据位:8 位;停止位:1位;校验位:无校验位。
然后打开串口,设置设备地址、功能码、起始地址、寄存器数量,进行发送。发送要查询的数据命令,模块就会作出相应的回应。如图2所示,是发送查询模块类型寄存器,即3504(HEX)。
图2 串口通信界面Fig.2 Serial communication interface
文中是以扬州仪征市电网为例,实现了现场数据的采集,以便于监控中心的实时集中监控,如图3所示。文中采集了两路电网的三相电压、电流,有功功率,无功功率,功率因素5个参数。
图3 数据实时显示界面Fig.3 Real-time data display interface
文中采用C#编程语言和串口技术实现了基于RTU模式的Modbus数据通信,解决了电网现场数据的采集及远程实时监测。系统利用三相多功能电量采集模块实现了电网数据采集的智能化,以及GPRS模块作为通讯介质,大大节省了通讯成本。同时为工控领域的应用提供了可行性参考。
[1]吴晓艳.计算机串行通信接口及其应用[J].现代电子技术.2010(18):83-86.
WU Xiao-yan,Computer serial communication interface and its application[J].Modern Electronic Technology,2010(18):83-86.
[2]吕国芳,唐海龙,李进.基于Modbus RTU的串口调试软件的实现[J].计算机技术与发展,2009(9):236-238,241.