工业控制已从单机控制走向集中监控、集散控制,如今已进入网络时代,工业控制器连网也为网络管理提供了方便。modbus就是工业控制器的网络协议中的一种。
丨modbus通信协议简介
modbus协议,首先从字面理解它包括mod和bus两部分,首先它是一种bus,即总线协议,和i2c、spi类似,总线就意味着有主机,有从机,这些设备在同一条总线上。
modbus支持单主机,多个从机,最多支持247个从机设备。关于mod,因为这种协议最早被用在plc控制器中,准确的说是modicon公司的plc控制器,这也是mod-bus名称的由来。
后来modicon被施耐德(schneider)收购,modbus协议广泛应用在工业控制器、hmi和传感器上,逐渐被其他厂商所接受,成为了一种主流的通讯协议,用于和外围设备进行通讯。
modbus在7层osi参考模型中属于第七层应用层,数据链路层有两种:基于标准串口协议和tcp协议,物理层可使用3线232、2线485、4线422,或光纤、网线、无线等多种传输介质。
modbus协议是一种请求/应答方式的交互过程,主机主动发起通讯请求,从机响应主机的请求,从机在没有收到主机的请求时,不会主动发送数据,从机之间不会进行通讯。
目前关于modbus比较权威的官方标准文档有两个:
1.modbus_application_protocol_specification_v1.1b3.pdf
2.基于modbus协议的工业自动化网络规范gb-t19582.1-2008.pdf
*大部分的书籍和网络资料都是翻译自这两篇文档,文末获取标准文档下载方法。
丨modbus 通信协议特点
(1)标准、开放,用户可以免费、放心地使用modbus协议,不需要交纳许可证费,也不会侵犯知识产权。
(2)modbus可以支持多种电气接口,如rs-232、rs-485等,还可以在各种介质上传送,如双绞线、光纤、无线等。
(3)modbus的帧格式简单、紧凑,通俗易懂。用户使用容易,厂商开发简单。
丨modbus4种数据类型
modbus协议规定,进行读写操作的数据类型,按照读写属性和类型可分为以下4种:
1.离散量输入(discretes input ):1位,只读
2.线圈(coils):1位,读写
3.输入寄存器(input registers ):16位,只读
4.保持寄存器(holding registers):16位,读写
丨modbus协议版本
modbus协议目前存在用于串口、以太网以及其他支持互联网协议的网络的版本。
大多数modbus设备通信通过串口eia-485物理层进行。
对于串行连接,存在两个变种,它们在数值数据表示不同和协议细节上略有不同。modbus rtu是一种紧凑的,采用二进制表示数据的方式,modbus ascii是一种人类可读的,冗长的表示方式。这两个变种都使用串行通信(serial communication)方式。rtu格式后续的命令/数据带有循环冗余校验的校验和,而ascii格式采用纵向冗余校验的校验和。被配置为rtu变种的节点不会和设置为ascii变种的节点通信,反之亦然。
对于通过tcp/ip(例如以太网)的连接,存在多个modbus/tcp变种,这种方式不需要校验和计算。
对于所有的这三种通信协议在数据模型和功能调用上都是相同的,只有封装方式是不同的。
modbus有一个扩展版本modbusplus(modbus+或者mb+),不过此协议是modicon专有的,和modbus不同。它需要一个专门的协处理器来处理类似hdlc的高速令牌旋转。它使用1mbit/s的双绞线,并且每个节点都有转换隔离装置,是一种采用转换/边缘触发而不是电压/水平触发的装置。连接modbus plus到计算机需要特别的接口,通常是支持isa(sa85),pci或者pmcia总线的板卡。
所以当我们提及modbus协议时,要确定是哪种模式,不同的模式之间区别还是很大的。
丨modbus数据帧格式
首先我们要知道一帧正常的modbus数据帧包含的内容有:地址域 + 功能码 + 数据 + 差错校验,再者无论是上述哪种协议版本,modbus帧格式都是一样的:
主要包括:
1.地址域:即主站要访问的从站地址,其范围0~247
2.功能码:即主站想要对从站进行何种操作。
3.数据:如果主站的请求是读数据,那么该“数据”要包含的信息有:从哪里开始读数据 + 读多少数据。如果主站的请求是向从站写数据,那么该“数据”要包含的信息有:从哪里开始写数据 + 写多少个字节数据 + 要写的具体数据。
4.差错校验:为了保证数据传输的正确性,modbus协议会在数据帧最后面加上两个字节的差错校验。
丨modbus功能码
modbus功能码,是写在主机请求数据帧中的,决定主机进行读还是写操作,是读线圈、离散量还是寄存器,是写单个寄存器还是多个寄存器等等,决定主机请求什么类型的数据。
主要包括3类功能码:公共功能码、用户定义功能码和保留功能码
1.公共功能码
·是较好地被定义的功能码
·保证是唯一的
·modbus 组织可改变的
·公开证明的
·具有可用的一致性测试
·mb ietf rfc 中证明的
·包含已被定义的公共指配功能码和未来使用的未指配保留供功能码
2.用户定义功能码
·有两个用户定义功能码的定义范围, 即65至72和十进制100至110
·用户没有 modbus 组织的任何批准就可以选择和实现一个功能码
·不能保证被选功能码的使用是唯一的
·如果用户要重新设置功能作为一个公共功能码,那么用户必须启动 rfc,以便将改变引入公共分类中,并且指配一个新的公共功能码。
3.保留功能码
·一些公司对传统产品通常使用并且对公共使用是无效的功能码。
实际最常用的是公共功能码中的4个功能码:03/04/06/10
0x03:读多个保持寄存器
0x04:读输入寄存器
0x06:写单个保持寄存器
0x10:写多个保持寄存器
因为plc主要控制的是继电器触点,所以在plc上还会经常对线圈(coils)进行读写。这里需要特别注意的一点是:写保持寄存器,需要区分0x06写单个寄存器和0x10写多个寄存器,而读保持寄存器不区分读单个和读多个,当需要读单个保持寄存器时,也是使用0x03指令,指定读取数量为1。
以上就是关于modbus协议的一些基础知识,如果您想要获取*modbus权威的官方标准文档,可关注微信公众号【恩智测控ngi】,并在后台发送“modbus协议”即可。
朗迪集团拟收购集成电路企业甬矽电子部分股权
分析协议层注册进内核以及被socket的过程
安卓创始人的Essential还未发布,新机规划已在进行?
通信技术的发展过程
伺服驱动器的技术要求
关于Modbus协议的一些基础知识
山西开展第三代半导体核心技术攻关,解决制约产业发展的难题
如何确保无线协议的互联互通?未来IoT的发展又会是什么情况?
语音芯片如何使用?简单易上手的语音ic有哪些?WT588F
台湾NCC出台草案不准电信设备标示中国台湾
耦合电路中怎么判断同名端
续航能力再提升 萤石C3A全无线电池摄像机给你持续安全感
揭示卤素掺杂Sn基催化剂促进CO2电还原制甲酸盐原因
无线应用技术用途有哪些
Maxis与华为将开展全面的5G试验合作
H.323协议详解
到2035年止,通用汽车将只生产电动汽车
大众汽车MEB电动汽车平台采用恩智浦电池管理解决方案
日本研发超导微芯片 MANA:频率 2.5 GHz,80 倍能效
如何根据电机的参数选择电缆