Modbus在江湖上已经有三十多年的历史了,最先由莫迪康(Modicon)于1979年发明,因其简单实用,且易开发,迅速赢得了工程师的喜好,已应用到成千上万的控制器中,目前也成为我国国家标准工业通讯协议中的重要一员。微信
记得第一次接触Modbus是在08,09年间,那时正值新能源发电大力兴起之时,为了响应国家节能减排的号召,一时间,大量的单位开始研发光伏发电,Modbus也成了光伏逆变器必配的一种通信协议。当第一次面对开发这个协议软件的时候,我是手足无措,由于不懂,因此无知,因而就晚上大量查阅网上资料,白天写程序调试,最后终于成功将Modbus协议引入逆变器。自此,对Modbus有了初步的认识。其实软件的流程图就在协议的文档中,只要扎实理解了协议的描述,就能开发出Modbus通信软件。网络
Modbus具备如下几个特色:spa
(1)标准、开放,用户能够免费、放心地使用Modbus协议,目前,支持Modbus的厂家超过几百家,支持Modbus的产品超过几百种。.net
(2)Modbus能够支持多种电气接口,如RS-232,RS422,RS-485等,还能够在各类介质上传送,如双绞线、光纤、无线等。调试
(3)Modbus的帧格式简单、紧凑,通俗易懂。用户使用容易,厂商开发简单。接口
MODBUS 是一个请求/应答协议,而且提供功能码规定的服务。经常使用的有图片
Modbus ASCII,开发
Modbus RTU,文档
Modbus TCP/IPget
RTU是必需要支持的,其他可选,Modbus RTU 帧最大为 256 字节。
若是你留意就会发现,其实市场上的产品,好多并非彻底遵照Modbus标准,有的硬件工程师对电气标准也不是很清楚,其实Modbus对电缆规格,长度,以及波特率,终端电阻,接地,链接器,通讯状态的LED指示,都有电气标准,我一直有一个观点,若是有既有的标准,那么你的开发就应该建议按照标准来执行。
有兴趣的童鞋能够看看你接触到的是否按照了标准来执行,举个简单的例子,标准中对LED指示的要求。
在RTU模式的软件实现上,
默认的通讯配置是波特率9600bps,8位数据位,偶校验,一位中止位。
奇校验和无校验是可选的。系统必须支持默认的配置,而且对配置错误有异常管理。
由发送设备将 Modbus报文构造为带有已知起始和结束标记的帧。这使设备能够在报文的开始接收新帧,而且知道什么时候报文结束。不完整的报文必须可以被检测到而错误标志必须做为结果被设置。在RTU模式,报文帧由时长至少为 3.5 个字符时间的空闲间隔
在软件的实现上,主要是对帧开始,帧结束的中断,串口接收中断的实现,在高波特率的状况下,必须严格按照标准的要求实现帧检测,协议文档中都有状态机和流程图供开发工程师参考,每种波特率,对发送方,要求其精度必须高于1%,而对接收方,必须容许2%偏差。Modbus报文帧格式以下:
另一点须要注意的就是Modbus是大端模式,就是好比一个16位的电流有效值,是先发送高字节,在发送低字节,但在CRC校验域切记是先发送低字节,在发送高字节,每一个字节是先发送低位在发送高位,以下图所示。
对异常诊断的管理是每个通信协议都要求的,常常会有工程师只注意实现正常通讯的功能,对异常的管理不重视,这样在通讯异常的时候,就不便主机的诊断。
本文部分图片来自网络,图片版权归原做者全部
本文分享自微信公众号 - 嵌入式程序猿(InterruptISR)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。