工业自动化技术领跑者
一种向下兼容的Modbus扩展协议在变频器通信系统中的应用
引言
Modbus是工业领域通信协议的业界标准,并且是工业电子设备之间相当常用的连接方式,在变频器应用领域中,绝大多数的变频器都支持Modbus通信,尤其是Modbus-RTU(Remote Terminal Unit)通信。随着PLC、触摸屏、PC上位机监控等设备应用越来越广泛,这些设备与变频器通信交互数据量越来越大,导致Modbus通信出现一些新的问题,比如数据字长最长为16bit、数据即时保存、跨型号变频器参数地址检索等问题。针对这些问题,七喜变频器在原Modbus协议基础上,向下兼容进行协议扩展及优化,有效地解决了上述问题。
1、MODBUS分析
通常变频器都会内嵌Modbus通信协议(最常使用RTU报文传输方式),支持常用的寄存器读写,其帧格式如图1所示。以下我们仅对PDU部分进行扩展。
bit、数据即时保存、跨型号变频器参数地址检索等问题。针对这些问题,七喜变频器在原Modbus协议基础上,向下兼容进行协议扩展及优化,有效地解决了上述问题。
图1
Modbus协议中,不同的命令码对应不同的变频器功能码参数操作的请求,当前变频器最常使用的命令码是03H,06H,10H,其中:
1) 03H:读一个或多个连续的参数;
2) 06H:写一个参数,变频器掉电后,修改的值不保存;
3) 10H:写多个连续的参数,变频器掉电后,修改的值不保存;
数据字长最大为16bit,若通信的数据字长为8bit,则默认高字节为0x00。
在变频器应用领域中,使用Modbus组网的最常见方式如图2所示,使用PC或PLC或其他智能设备作为主机,通过Modbus监控多个作为从机的变频器,实现多台电机协同工作,完成某个特定的工艺环节。
图2
2、变频器Modbus通信新问题
七喜变频器在某钢厂客户应用中,客户主机通信数据有32bit格式长度数据,且从机变频器有不同品牌和型号,有些通信参数需要即时保存。而现有Modbus协议不能满足钢厂客户这些需求,因此需要对原Modbus协议进行向下兼容扩展。下面对Modbus协议在不同客户应用中出现类似问题作如下归纳和分析:
2.1数据字长最大为16bit
Modbus的数据操作对象固定为16bit,但目前许多客户主机通信需要的一些数据格式长度为32bit,比如,变频器能量仪表,变频器运行时间等。而现有Modbus无法满足32bit数据的通信要求。
2.2 功能码参数即时保存
在Modbus操作功能码列表中,针对常用的保持寄存器操作功能码里,没有即时保存的操作功能码,当客户有需要即时保存的需求时,现有的Modbus协议无法满足要求。
2.3跨型号变频器参数地址检索
有些客户需要使用不同系列和型号的变频器,变频器的功能码参数列表也不尽相同,为了使主机通信设备与变频器完美结合,需要将变频器的功能码参数列表都预置在主机通信设备中,既麻烦又容易出错,甚至无法实现,显然原Modbus协议不能满足跨型号参数的有效地址检索。
3、七喜变频器向下兼容Modbus扩展协议
3.1 扩展协议背景
Modbus协议提供了19个用户定义命令码的空间可以利用。当前变频器最常使用的命令码是03H,06H,10H。目前的实际应用中,变频器功能码参数对于Modbus通信有如下新的需求:
1) 32bit字长数据的读写操作(结合变频器实际应用情况,由于64bit及以上字长的变频器功能参数非常稀有,我们仅扩展对32bit字长数据的访问);
2) 功能码参数数值的即时保存;
3) 功能码参数属性的访问;
4) 跨型号功能码参数的地址检索;
3.2 扩展协议内容
针对32bit字长数据的新需求,对应于目前最常使用的3个命令码,增加3个新命令码:
41H:读一个或多个连续32bit字长参数;
42H:写一个32bit字长的参数;
43H:写多个连续的32bit字长参数;
针对数据的即时保存新需求,增加4个新命令码,对应于06H,10H,42H,43H操作功能码:
45H:写一个16bit参数并保存;
46H:写多个连续的16bit参数并保存;
47H:写一个32bit参数并保存;
48H:写多个连续的32bit参数并保存。
针对功能码参数属性访问新需求,新增一个全新的操作功能码64H,用于获取某功能码参数的详细属性。
针对跨型号参数有效地址检索新需求,新增一个命令码6EH,用于扩展变频器功能码参数的地址检索等功能。
4、七喜变频器向下兼容Modbus扩展协议实现方法
七喜变频器分别对以上需求作相应的协议扩展,下面以41H、47H、6EH这3种命令码的通信帧格式为例,简述扩展协议的实现方法。
4.1 41H -- 读一个或多个连续地址的32bit参数
主机查询
命令码 | 1 Byte | 0x41 |
参数地址 | 2 Bytes | 0x0000 to 0xFFFF |
查询的参数个数 | 2 Bytes | 1 to 62(0x3E) |
从机正常响应(N为功能码参数个数)
命令码 | 1 Byte | 0x41 |
数值字节数 | 1 Byte | N×4 |
参数数值 | N×4 Bytes |
|
从机故障响应
错误识别码 | 1 Byte | 0xC1 |
异常类型码 | 1 Byte | 01 or 02 or 03 or 04 |
4.2 47H -- 写一个32bit的参数并固化
主机查询
命令码 | 1 Byte | 0x47 |
参数地址 | 2 Bytes | 0x0000 to 0xFFFF |
参数数值 | 4 Bytes | 0x00000000 to 0xFFFFFFFF |
从机正常响应
命令码 | 1 Byte | 0x47 |
参数地址 | 2 Bytes | 0x0000 to 0xFFFF |
参数数值 | 4 Bytes | 0x00000000 to 0xFFFFFFFF |
从机故障响应
错误识别码 | 1 Byte | 0xC7 |
异常类型码 | 1 Byte | 01 or 02 or 03 or 04 |
4.3 6EH -- 扩展变频器功能码检索等
主机查询
命令码 | 1 Byte | 0x6E |
二级命令码 | 2 Bytes | 0x0000 to 0xFFFF |
参数地址 | 2 Bytes | 0x0000 to 0xFFFF |
从机正常响应
命令码 | 1 Byte | 0x47 |
二级命令码 | 2 Bytes | 0x0000 to 0xFFFF |
字节数 | 1 Bytes |
|
结论数据 | N×2 Bytes |
|
从机故障响应
错误识别码 | 1 Byte | 0xEE |
异常类型码 | 1 Byte | 01 or 03 or 04 |
二级命令码定义如下:
二级命令码 | 功能描述 | |
高字节 | 低字节 | |
01 | 00 | 初始参数组编号 |
01 | 01 | 前一个有效的参数组编号 |
01 | 02 | 后一个有效的参数组编号 |
01 | 10 | 参数的初始组内编号 |
01 | 11 | 前一个有效参数的组内编号 |
01 | 12 | 后一个有效参数的组内编号 |
同理,可以根据应用和设计的需要对这个Modbus操作功能码继续进行扩展,来实现一些需要简化通信的功能,如获取变频器当前状态,获取变频器型号,等等。
5、结论
七喜变频器向下兼容Modbus协议扩展的方法,是基于Modbus在OSI网络模型中应用层上的升级。因此不仅适用于RTU模式,同样适用于ASCII模式和TCP模式。向下兼容的升级方式决定了新的变频器软件完全可以兼容原有变频器的应用,节省了升级的成本,同时增强了变频器的兼容性,可靠性。尤其是新增的64H和6EH功能码的结合使用,可以使远程控制设备无须与固定型号的变频器绑定使用。
此扩展协议,基本上解决当前面临的变频器-Modbus应用问题,并且改造通信协议的升级方式,可以有效降低变频器产品升级维护成本。而且,这种协议的改造方法主要由软件工作实现,只需在软件上作升级,方便了产品的升级换代。在实际客户应用中,得到广泛的认可。