2010年第30期 科技■向导 ◇高教论述◇ 基于Modbus规约的智能模块在 电量采集系统中的应用 吕凤玉马殷元 (兰州交通大学机电技术研究所甘肃兰州730070) 【摘要】在分布式电力监控系统中,为实现现场数据采集装置与监控中心计算机的通信,完成对工业现场电参数的实时采 集与监控,采用基于Modbus规约的智能模块EDA9033D作为现场数据采集装置,利用用VB6.0中的MSComm串口通信控件 作为现场数据采集装置与监控中心计算机的通信软件,来开发电量采集监控系统。系统实现了同时、快速、连续采集多个不同的 电参数,既降低了硬件成本,又增强了软件开发的灵活性和通用性。 【关键词】Modbus规约:智能模块;电量采集MSComm控件 Intelligent Module Based on Modbus Protocol in Coulomb Collection System LV Feng-yu MA Yin-yuan (Institute of Electrical and Mechanical Technology Lanzhou Jiaotong University Gansu Lanzhou 730070) [AbstractIIn distributed power monitoring system,to achieve communication between field data acquisition device and supervisory centre computer ,and to complete real-time acquisition and monitoring in industrial field of electrical parameters,power monitoring system is developed by using intelligent module EDA9033D based on Modbus protocol as field data acquisition device and MSComm ActiveX control in VB6.0 as communication software between field data acquisition device and supervisory centre computer. It can simultaneously,rapidly and continuously acquisitive a number of different electrical parameters,not only reduced hardware cost .but also increased flexibility and versatility of software development. [Key words ]Modbus protocol:Intelligent module:Coulomb collection;MSComm control 0.概述 表1EDA9033D数据帧格式 在过去传统的电力监控系统中,常采用电流,电压、功率 Adress Function Data Check 功率因素、电量等一系列变送器及测量这些变送器标准输出 8-bits 8-bits N*8-bits 16-bits 信号的输入模块作为系统的前端采集装置,这样既增加了系 1.2.1数据帧地址域 统成本,又使现场布线复杂,系统可靠性还不高。 地址域在数据帧的开始部分,由一个字节组成,地址范围 随若计算机技术的不断发展,综合了4C技术的分布式控 为0-255,EDA9033D可用的模块地址为1-247,地址0用作广 制系统的产生,实现了工业生产过程的集中管理与分散控制。 播地址,其它地址保留。每个模块在接入网络时,地址是唯一 在现代各种分布式电力监控系统及工业控制与测量系统中, 的,主计算机通过地址域来选通EDA9033D模块,模块发送回 常利用上监控中心计算机进行现场实时数据的获取与发送。 应消息时,它把自己的地址放入回应的地址域中,告诉主计算 采用简单可靠易开发的通信软件,可大大降低系统的开发难 机哪个模块正与之进行通信。 度。由于文献1没有对通信软件及通信流程进行详细介绍,本 1.22数据帧功能码 文结合具体通信实例给出了相应程序代码。 功能码告诉被寻址到的EDA9033D模块执行何种功能, 1.EDA9033D智能模块 表2列出了模块用到的主要功能码以及其含义。 在现代分布式电力监控系统中,常将数字化的智能模块 表2功能码及其含义 EDA9033D作为系统监测参数的现场数据采集装置。智能电量 功能码 含义 变送器EDA9033D采用了RS-485接口,遵循标准的Modbus-- 01H 读1/多路开关量输出状态 RTU通讯规约,且能连接到所有的计算机和终瑞并与之通讯。 02H 读1/多路开关量输入状态 1.1EDA9033D智能模块性能 EDA9033D智能模块是一智能型三相电参数数据综合采 03H 读多路寄存器 集模块,可准确输出三相相电压:三相电流:功率,正(反)向有 05H 写1路开关量输出 (无)功电度等电参数:电压、电流等的测量精度优于0.2%,其 OFH 写多路开关量输出 它电量的测量精度优于0.5%。进行通信时,数据格式、通讯速 10H 写多路寄存器 率,模块地址等参数可灵活设定。组网方便,通过使用RS-485 中继器,可将多达247个模块连接到同一网络上。 除上表中列出的常用功能码之外,EDA模块还有两个打扩” 1.2智能模块通讯格式 展功能码65H和66H,65H用于读取多个连续测量周期的实 EDA9033D通信采用Modbus--RTU通讯规约,数据传输方 时数据,66H用于实时测量数据自动上传。 1.2.3数据帧数据域 式中每个字节包括1个起始位,8个数据位(最小的有效位优 先发送),无奇偶校验位,1个终止位:数据错误检测时采用循 数据域包含了主计执行特定功能所需要的数据,或者从 机响应查询时采集到的数据。如果有错误发生,此域包含一异 环冗余校验码方式进行确认。 议代码,主机应用程序可以用来判断采取下一步行动。 进行数据交换时,主机发送的查询数据帧格式,应与 1.2.4数据帧错误校验域 EDA9033D返回的响应数据帧格式相同。发生任何错误都不会 该域允许主从设备检查传输过程中的错误。有时,由于电 有成功的响应,或者返回一个错误指示顿。数据帧格式如表1噪声和其它于扰,一组数据在传输时线路上可能会发生一些 所示。 改变,出错校验能够保证不去响应那些传输过程中发生改变 52 1994-2011 China Academic Journal Electronic Publishing House.All rights reserved.http://www.cnki.net
【References】 2010 年第 30 期 0.概述 在过去传统的电力监控系统中,常采用电流、电压、功率、 功率因素、 电量等一系列变送器及测量这些变送器标准输出 信号的输入模块作为系统的前端采集装置, 这样既增加了系 统成本,又使现场布线复杂,系统可靠性还不高。 随着计算机技术的不断发展,综合了 4C 技术的分布式控 制系统的产生,实现了工业生产过程的集中管理与分散控制。 在现代各种分布式电力监控系统及工业控制与测量系统中, 常利用上监控中心计算机进行现场实时数据的获取与发送。 采用简单可靠易开发的通信软件, 可大大降低系统的开发难 度。 由于文献 1 没有对通信软件及通信流程进行详细介绍,本 文结合具体通信实例给出了相应程序代码。 1.EDA9033D 智能模块 在现代分布式电力监控系统中, 常将数字化的智能模块 EDA9033D 作为系统监测参数的现场数据采集装置。智能电量 变送器 EDA9033D 采用了 RS-485 接口,遵循标准的 ModbusRTU 通讯规约,且能连接到所有的计算机和终端并与之通讯。 1.1EDA9033D 智能模块性能 EDA9033D 智能模块是一智能型三相电参数数据综合采 集模块,可准确输出三相相电压;三相电流;功率、正(反)向有 (无)功电度等电参数;电压、电流等的测量精度优于 0.2%,其 它电量的测量精度优于 0.5%。 进行通信时,数据格式、通讯速 率、模块地址等参数可灵活设定。 组网方便,通过使用 RS-485 中继器,可将多达 247 个模块连接到同一网络上。 1.2 智能模块通讯格式 EDA9033D 通信采用 Modbus-RTU 通讯规约,数据传输方 式中每个字节包括 1 个起始位,8 个数据位 (最小的有效位优 先发送),无奇偶校验位,1 个终止位;数据错误检测时采用循 环冗余校验码方式进行确认。 进 行 数 据 交 换 时, 主机发送的查询数据帧格式, 应 与 EDA9033D 返回的响应数据帧格式相同。发生任何错误都不会 有成功的响应,或者返回一个错误指示帧。 数据帧格式如表 1 所示。 表 1 EDA9033D 数据帧格式 1.2.1 数据帧地址域 地址域在数据帧的开始部分,由一个字节组成,地址范围 为 0-255,EDA9033D 可用的模块地址为 1-247,地址 0 用作广 播地址,其它地址保留。 每个模块在接入网络时,地址是唯一 的,主计算机通过地址域来选通 EDA9033D 模块,模块发送回 应消息时,它把自己的地址放入回应的地址域中,告诉主计算 机哪个模块正与之进行通信。 1.2.2 数据帧功能码 功能码告诉被寻址到的 EDA9033D 模块执行何种功能, 表 2 列出了模块用到的主要功能码以及其含义。 表 2 功能码及其含义 除上表中列出的常用功能码之外,EDA 模块 还 有 两 个 扩 展功能码 65H 和 66H,65H 用于读取多个连续测量周期的实 时数据,66H 用于实时测量数据自动上传。 1.2.3 数据帧数据域 数据域包含了主计执行特定功能所需要的数据, 或者从 机响应查询时采集到的数据。 如果有错误发生,此域包含一异 议代码,主机应用程序可以用来判断采取下一步行动。 1.2.4 数据帧错误校验域 该域允许主从设备检查传输过程中的错误。 有时,由于电 噪声和其它干扰, 一组数据在传输时线路上可能会发生一些 改变, 出错校验能够保证不去响应那些传输过程中发生改变 基于 Modbus 规约的智能模块在 电量采集系统中的应用 吕凤玉 马殷元 (兰州交通大学机电技术研究所 甘肃 兰州 730070) 【摘 要】在分布式电力监控系统中,为实现现场数据采集装置与监控中心计算机的通信,完成对工业现场电参数的实时采 集与监控,采用基于 Modbus 规约的智能模块 EDA9033D 作为现场数据采集装置,利用用 VB6.0 中的 MSComm 串口通信控件 作为现场数据采集装置与监控中心计算机的通信软件,来开发电量采集监控系统。系统实现了同时、快速、连续采集多个不同的 电参数,既降低了硬件成本,又增强了软件开发的灵活性和通用性。 【关键词】Modbus 规约;智能模块;电量采集;MSComm 控件 Intelligent Module Based on Modbus Protocol in Coulomb Collection System LV Feng-yu MA Yin-yuan (Institute of Electrical and Mechanical Technology Lanzhou Jiaotong University Gansu Lanzhou 730070) 【Abstract】In distributed power monitoring system, to achieve communication between field data acquisition device and supervisory centre computer ,and to complete real-time acquisition and monitoring in industrial field of electrical parameters, power monitoring system is developed by using intelligent module EDA9033D based on Modbus protocol as field data acquisition device and MSComm ActiveX control in VB6.0 as communication software between field data acquisition device and supervisory centre computer. It can simultaneously, rapidly and continuously acquisitive a number of different electrical parameters, not only reduced hardware cost ,but also increased flexibility and versatility of software development. 【Key words】Modbus protocol;Intelligent module;Coulomb collection;MSComm control Adress Function Data Check 8-bits 8-bits N*8-bits 16-bits 功能码 含义 01H 读 1/多路开关量输出状态 02H 读 1/多路开关量输入状态 03H 读多路寄存器 05H 写 1 路开关量输出 0FH 写多路开关量输出 10H 写多路寄存器 ◇高教论述◇ 52
◇高教论述◇ 科技■向导 2010年第30期 的数据,可提高系统的安全性和效率。EDA9033D模块错误校MSComm通信控件自身具有不足,不能简单发送十六进制数 验使用了CRC-16方式,其容易实现,是目前应用最广的检错 据,进行一下处理 码编码方式之一。 Dim info(1 To 8)As Byte 2.EDA9033D智能模块在电量采集系统中的应用 info(1)=&H1 2.1系统组成分析 info(2)=&H3 现代分布式电力监控系统通常是由监控中心计算机、通 info(3)=&HO 信网络,现场数据采集装置和现场电气设备4部分组成。监控 info(4)=&H40 中心计算机通过网络监控多个现场的数据采集装置,完成实 info(5)=&HO 时数据的存储和显示。现场数据采集装置与现场电气设备连 info(6)=&H1A 接,实时采集电气设备运行过程中的各项工作参数。 info(7)=&HC5“ce校验码低字节 2.2监控中心计算机通信软件 info(8)=&HD5cre校验码高字节 由于本系统采用力创公司生产的多个作为现场数据采集 MSComm1.Output=info'写串口 装置与监控中心计算机的通信软件作为现场数据采集装置 2.4.3通信事件发生 于是系统通信网络采用RS485菊花链总线结构,协议采用 在初始化程序中设定的RThreshold属性值,决定了发生 Modbus协议。监控中心计算机利用现有的RS-232接口,通过 OnComm事件之前要接收的字符数,OnComm事件发生后,将 使用RS232/485的转换器与EDA9033D模块相连接。 接收缓冲区的数据读取出来。由于此次通信事件接收缓冲区 监控中心计算机采用采用VB6.0中的串口通信控件 等待的字符数为57,部分程序代码为: MSComm作为现场数据采集装置与监控中心计算机的通信软 If MSComm1.InBufferCount 57 Then Exit Sub 件。MSComm控件可简化Windows下的串口通信编程,通过串 getbyte=MSComm1.Input'读串口 行端口来接收和传输数据,为应用程序提供串行通信功能。 For i LBound(getbyte)To UBound(getbyte) 2.3系统通信实例 buffer buffer Hex(getbyte(i))+Chr(32) 系统采用查询与应答方式进行通信,每一种查询命令都 Next i 对应着一种应答。例如,系统要求获得1号模块所连接现场设 2.4.4数据处理显示 备的相电压、电流,功率等26个实时电参数,并将其以十进制 进行数据转换处理时,采用MSComm控件的查询处理方 形式循环显示,需知道系统的4个配置参数Uo,Io,Ubb和bb 式可便捷的知道系统的4个配置参数Uo,Io,Ubb和bb,可使 才能进行数据的转换。 用Do…L0op语句循环等待接收 2.4通信程序 Do MSComm通信控件处理通信问题时有事件驱动和查询两 DoEvents"转让控制权,以便让操作系统处理其它的事件 种方式。事件驱动通信是处理串行端口交互作用的一种非常 Loop Until MSComml.InBufferCount >=15. 有效的方法。OnComm事件是MSComm控件的唯一事件。事件 此通信格式下的数据都以十六进制显示,且存放在相邻 驱动通信方式流程包括串口初始化+写串口→触发OnComm 的两个内存单元,以Uo为例,需进行如下处理: 事件→读串口一→数据处理显示。 Uo Val("&H"&(Hex(getbyte(3))+Hex(getbyte(4)))) 2.4.1串口初始化程序 将Uo,Io,Ubb和bb定义成全局变量,代入从串口读出的 为保证数据传输成功,需将EDA9033D模块数据格式,通数据,便可以真实值显示。以0041H寄存器中的数值Ub为例, 讯速率设置成和监控中心计算机一样的参数。 先定义Ub1代入公式得出Ub的真实值 MSComml.CommPort=1'设定通信瑞口号为COM1 Ubl Val("&H"(Hex(getbyte(5))+Hex(getbyte(6)))) MSComm1.InputMode comInputModeBinary Text3(1).Text CStr(Ubl Uo Ubb/10000) “设定为二进制的数据流方式 3.结束 MSComm1.RThreshold=1设定接收缓冲区每收到一个字 目前,此系统已在某分部市电量采集监控中使用,这种通 符就触发OnComm事件 信方式灵活,可扩展性强,并且结构简单,可靠性高,具有较好 MSComm1..SThreshold=0'数据发送时不产生OnComm事件 的实际价值和使用价值,可大大减轻现场操作工人的工作强 MSComml.Settings="9600.n,8,1",设定传输数据格式 度,提高工作效率。利 MSComm1.PortOpen=True打开COM1瑞口 程序启动时打开串口:退出程序时关闭串口,以便使各种 【参考文献】 操作在串口打开状态下进行。 [1]陆墩等Modbus协议在电量采集系统中的应用.水利水文自动化.2004 2.4.2写串口程序 (1) Output属性用于将要发送的数据写入传输缓冲区。按照 [2]EDA9033D.三相电参数采集模块使用说明书. Modbus-RTU规范协议写串口。当使用RTU格式是,由于 [3]范逸之.Visual Basic与RS-232串行通信控制.清华大学出版社2002. (上接第64页)4.特色与创新点 用。都 4.1利用激光测距技术,快速,准确的测量障碍物的距离: 并根据距离信息,实现单片机的控制: 【参考文献】 42手持导盲仪使用方便,探测灵活,可用于高低地势探 [1]王永仲.现代军事光学技术M.北京:科学出版社,2003. 测障碍报警: [2]何俊发,王红霞,刘晓彬.激光测距新方法研究)应用激光, 4.3利用蜂鸣器的声音频率提示障碍物距离远近,便于盲 2003,23(5):299-300. 人判断: [3]陈敏,杜小平.一种提高相位激光测距精确度的方法现代电子技 4.4结构简单实用,方便携带,可扩展性强,可长时间使 术,2005,16:114-115. 53 1994-2011 China Academic Journal Electronic Publishing House.All rights reserved.http://www.cnki.net
2010 年第 30 期 ● (上接第 64 页)4.特色与创新点 4.1 利用激光测距技术,快速,准确的测量障碍物的距离; 并根据距离信息,实现单片机的控制; 4.2 手持导盲仪使用方 便,探 测 灵 活,可用于高低地势探 测,障碍报警; 4.3 利用蜂鸣器的声音频率提示障碍物距离远近,便于盲 人判断; 4.4 结 构 简 单 实 用,方 便 携 带,可 扩 展 性 强,可 长 时 间 使 用。 科 【参考文献】 [1]王永仲.现代军事光学技术[M].北京:科学出版社,2003. [2] 何俊发, 王红霞, 刘晓彬. 激光测距新方法研究 [J]. 应用激光, 2003,23(5):299-300. [3]陈敏,杜小平.一种提高相位激光测距精确度的方法[J].现代电子技 术,2005,16:114-l15. 的数据,可提高系统的安全性和效率。 EDA9033D 模块错误校 验使用了 CRC-16 方式,其容易实现,是目前应用最广的检错 码编码方式之一。 2.EDA9033D 智能模块在电量采集系统中的应用 2.1 系统组成分析 现代分布式电力监控系统通常是由监控中心计算机、通 信网络、现场数据采集装置和现场电气设备 4 部分组成。 监控 中心计算机通过网络监控多个现场的数据采集装置, 完成实 时数据的存储和显示。 现场数据采集装置与现场电气设备连 接,实时采集电气设备运行过程中的各项工作参数。 2.2 监控中心计算机通信软件 由于本系统采用力创公司生产的多个作为现场数据采集 装置与监控中心计算机的通信软件作为现场数据采集装置, 于是系统通信网络采用 RS485 菊花链总线结构, 协 议 采 用 Modbus 协议。 监控中心计算机利用现有的 RS-232 接口,通过 使用 RS232/485 的转换器与 EDA9033D 模块相连接。 监控中心计算机采 用采用 VB6.0 中的串口通信控件 MSComm 作为现场数据采集装置与监控中心计算机的通信软 件。 MSComm 控件可简化 Windows 下的串口通信编程,通过串 行端口来接收和传输数据,为应用程序提供串行通信功能。 2.3 系统通信实例 系统采用查询与应答方式进行通信, 每一种查询命令都 对应着一种应答。 例如,系统要求获得 1 号模块所连接现场设 备的相电压、电流、功率等 26 个实时电参数,并将其以十进制 形式循环显示,需知道系统的 4 个配置参数 Uo、Io、Ubb 和 Ibb 才能进行数据的转换。 2.4 通信程序 MSComm 通信控件处理通信问题时有事件驱动和查询两 种方式。 事件驱动通信是处理串行端口交互作用的一种非常 有效的方法。OnComm 事件是 MSComm 控件的唯一事件。 事件 驱动通信方式流程包括串口初始化→写串口→触发 OnComm 事件→读串口→数据处理显示。 2.4.1 串口初始化程序 为保证数据传输成功,需将 EDA9033D 模块数据格式、通 讯速率设置成和监控中心计算机一样的参数。 MSComm1.CommPort = 1' 设定通信端口号为 COM1 MSComm1.InputMode = comInputModeBinary ' 设定为二进制的数据流方式 MSComm1.RThreshold = 1' 设定接收缓冲区每收到一个字 符就触发 OnComm 事件 MSComm1.SThreshold = 0' 数据发送时不产生 OnComm 事件 MSComm1.Settings = "9600,n,8,1"' 设定传输数据格式 MSComm1.PortOpen = True' 打开 COM1 端口 程序启动时打开串口;退出程序时关闭串口,以便使各种 操作在串口打开状态下进行。 2.4.2 写串口程序 Output 属性用于将要发送的数据写入传输缓冲区。 按照 Modbus –RTU 规范协议写串口。 当使用 RTU 格式是, 由于 MSComm 通信控件自身具有不足, 不能简单发送十六进制数 据,进行一下处理 Dim info(1 To 8) As Byte info(1) = &H1 info(2) = &H3 info(3) = &H0 info(4) = &H40 info(5) = &H0 info(6) = &H1A info(7) = &HC5 'crc 校验码低字节 info(8) = &HD5 'crc 校验码高字节 MSComm1.Output = info' 写串口 2.4.3 通信事件发生 在初始化程序中设定的 RThreshold 属性值, 决定了发生 OnComm 事件之前要接收的字符数,OnComm 事件发生后,将 接收缓冲区的数据读取出来。 由于此次通信事件接收缓冲区 等待的字符数为 57,部分程序代码为: If MSComm1.InBufferCount = 15。 此通信格式下的数据都以十六进制显示, 且存放在相邻 的两个内存单元,以 Uo 为例,需进行如下处理: Uo = Val("&H" & (Hex(getbyte(3)) + Hex(getbyte(4)))) 将 Uo、Io、Ubb 和 Ibb 定义成全局变量,代入从串口读出的 数据,便可以真实值显示。以 0041H 寄存器中的数值 Ub 为例, 先定义 Ub1 代入公式得出 Ub 的真实值 Ub1 = Val("&H" & (Hex(getbyte(5)) + Hex(getbyte(6)))) Text3(1).Text = CStr(Ub1 * Uo * Ubb / 10000)。 3.结束 目前,此系统已在某分部市电量采集监控中使用,这种通 信方式灵活,可扩展性强,并且结构简单,可靠性高,具有较好 的实际价值和使用价值, 可大大减轻现场操作工人的工作强 度,提高工作效率。 科 【参考文献】 [1]陆敏等.Modbus 协议在电量采集系统中的应用.水利水文自动化.2004, (1). [2]EDA9033D.三相电参数采集模块使用说明书. [3]范逸之.Visual Basic 与 RS-232 串行通信控制.清华大学出版社,2002. ● ● ◇高教论述◇ 53