2012年4月培训资料
一、MODBUS通讯协议
1、 MODBUS通讯协议简介:
Modbus是由Modicon(现为施耐德电气公司的一个品牌)在1979年发明的,是全球第一个真正用于工业现场的总线协议。为更好地普及和推动Modbus在基于以太网上的分布式应用,目前施耐德公司已将Modbus协议的所有权移交给IDA(Interface for Distributed Automation,分布式自动化接口)组织,并成立了Modbus-IDA组织,为Modbus今后的发展奠定了基础。在中国,Modbus已经成为国家标准GB/T19582-2008。
Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如何回应来自其它设备的请求,以及怎样侦测错误并记录。
当在一Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus协议发出。
而在一个系统中,对具体命令代码执行的动作就需要对协议按照协议公约进行解析(相当于翻译的过程,确定此代码具体包含何种信息)。应用到公司生产的逆变器设备,就需要掌握公司制定的光伏并网逆变器通讯协议。
2、 MODBUS的特点:
(1)标准、开放,用户可以免费、放心地使用Modbus协议,不需要交纳许可证费,也不会侵犯知识产权。
(2)Modbus可以支持多种电气接口,如RS-232、RS-485等,还可以在各种介质上传送,如双绞线、光纤、无线等。
(3)Modbus的帧格式简单、紧凑,通俗易懂。用户使用容易,厂商开发简单。
3、 MODBUS的分类:
MODBUS通讯协议分为RTU协议和ACSII协议两种。
ASCII 模式:当控制器设为在Modbus 网络上以ASCII (美国标准信息交换代码)模式通信,在消息中的每个8位字节都作为一个ASCII 码(两个十六进制字符)发送。这种方式的主要优点是字符发送的时间间隔可达到1秒而不产生错误。
RTU 模式: 当控制器设为在Modbus 网络上以RTU (远程终端单元)模式通信,在消息中的每个8位字节包含两个4位的 十六进制字符。这种方式的主要优点是:在同样的波特率下,可比ASCII 方式传送更多的数据。 (为什么公司的通讯协议选用RTU 模式???)
两种协议的区别:
ASCII 协议和RTU 协议相比拥有开始和结束标记,因此在进行程序处理时能更加方便,而且由于传输的都是可见的ASCII 字符,所以进行调试时就更加的直观,另外它的LRC 校验(纵向冗长检测) 也比较容易。
RTU 传输的数据每一个字节ASCII 都要用两个字节来传输,比如RTU 传输一个十六进制数0xF9,ASCII 就需要传输’F’’9’的ASCII 码0x39和0x46两个字节,这样它的传输的效率就比较低。所以一般来说,如果所需要传输的数据量较小可以考虑使用ASCII 协议,如果所需传输的数据量比较大,最好能使用RTU 协议。RTU 协议采用CRC 校验(循环冗长检测) 。
二、光伏并网逆变器通讯协议
1、报文格式(上位机发送或下位机响应的报文,十六进制):
数据格式:
数据长度: 地址码:设备的地址,即逆变器上设置的485通讯地址;
功能码:
作为上位机请求发送,通过功能码告诉从机执行什么动作。
作为下位机响应,下位机发送的功能码与从上位机发送来的功能码一样,并表明下位机已响应上位机进行操作。
MODBUS 通讯规约定义功能码为0x01到0xff 。公司光伏并网逆变器仅使用功能码0x03、0x04、0x06、0x10。
各功能码定义如下:
功能码
0x03: 读取保持寄存器(读取4x 地址类型) ; 功能码
0x04: 读取输入寄存器(读取3x 地址类型) ; 功能码
0x06: 向保持寄存器写单个字(写入4x 地址类型) ; 功能码
0x10: 向保持寄存器写多个字(写入4x 地址类型)。
地址码 功能码 数据区 错误校验 1字节 1字节 N 字节 CRC 码
两类地址类型区别如下(此处地址为机器电路板上通讯芯片内部寄存器的地址,和机器的485通讯地址不同):
3x地址类型该区域地址空间只读;
4x地址类型该区域地址空间可读可写。
数据区:分三种情况
(1) 对于功能码0x03和0x04(读取数据):
上位机读取下位机数据:[要读取的寄存器前一位地址高8位(注意:是前一位,比如要读地址5000的数据,就是地址4999)] [低8位] [读取几个寄存器高8位] [低8位]
此时下位机响应的数据:[返回几个数据][数据1][数据2]...[数据n]
(2) 对于功能码0x06(写入单个数据):
16进制转换器计算器上位机写入下位机数据:[需写入的寄存器前一位地址高8位] [低8位] [写入的数据高8位] [低8位]
下位机响应的数据:[需写入的寄存器前一位地址高8位] [低8位] [写入的数据高8位] [低8位](同发送的数据一样)
(3) 对于功能码0x10(写入多个数据):
上位机写入下位机数据:[需写入的寄存器前一位地址高8位] [低8位] [写入几个寄存器高8位] [低8位] [数据1][数据2]...[数据n]
下位机响应的数据:[需写入的寄存器前一位地址高8位] [低8位] [写入几个寄存器高8位] [低8位]
错误校验:CRC校验,在COMTEST里由COMTEST软件自动完成。
2、光伏并网逆变器通讯协议的解析:
光伏并网逆变器地址定义表如下所示
“地址”栏中为需要读写的内部寄存器的地址,“数据范围”栏中为寄存器中的数据,“地址类型”栏中分3x地址和4x地址两种。
其中“设备状态”寄存器5038中的数据对应于“附录一”中的“状态码”(即逆变器的实时工作状态)一栏
如果逆变器发生故障,则在“设备状态”寄存器5038中的数据为0x0200(硬件故障)或者0x0800(模块故障),此时需要进一步读取“状态数据1”寄存器5045中的数据(对应“附录一”中的“状态数据”一栏),以确定具体的故障信息。
针对SG630KTL机型,专门开辟了地址区间:5050~5070,用于记录更多
的机器状态和故障信息。
仅当机型为SG630KTL,“设备状态”寄
存器5038中的数据才有可能为
0x5500(故障),此时需要进一步读取“故
障状态”寄存器5050和5051中的数据
(对应“附录一”中的“状态数据”一栏),
以确定具体的故障信息。
注:此时故障信息为按位读取,不再是按
字节读取。
另外SG630KTL机器增加了许多节点状态检测,可以在“节点状态”寄存
器5058和5059中读取,状态信息也是按位读取的。
3、利用COMTEST软件对通讯进行模拟
现场调试通讯时,由于现场情况复杂,很多情况下利用SolarInfo软件搜索
设备时搜索不到,无法正常建立通讯,此时可以利用COMTEST软件直接
发送报文对通讯进行模拟。
操作界面
应用实例:
以公司发布的光伏并网逆变器通讯协议上的例子来分析:
(1) 获取逆变器型号(假设逆变器为SG4KTL)
假设逆变器通讯地址为1,需要获取逆变器型号(3x地址类型的5000地址数据)。上位机发送(HEX):
01 04 13 87 00 01 85 67
逆变器回应(HEX):
01 04 02 00 22 39 29
注释:SG4KTL 设备类型码为0x0022
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论