上周我们简要概述了什么是modbus,这周我们将要讲解modbus协议的数据格式和通讯规则。
Modbus通讯格式有三种,这是根据物理层/传输层而做的适配。根据TCP等传输层协议的特点,modbus摇身一变,就成为了modbus TCP,使用RS485、RS232等串行物理层协议,modbus就形成了modbus RTU和modbus ASCII。
Modbus RTU和modbus ASCII都是应用在串行物理层的modbus协议,ASCII与RTU不同的是,modbus ASCII使用ASCII字符表示数据,两个ASCII字符表示一个字节(数据传输量为两个字节),而modbus RTU使用的是二进制字符(一般转换为16进制表示)表示数据,传输数据量较少。因此,相对于modbus ASCII,modbus RTU更加常见。
Modbus RTU的数据包中一般包含从站设备地址、功能码、数据和差错校验。举个例子,这是一个来自主机的16进制数据请求包,其中06是从站设备的地址,代表这个数据包是发送给地址为06的从站设备而不是网络中的其他设备,03代表的是功能码,表示主站对从站进行的操作,03功能码是读取保持寄存器中的数据,00 50代表的是开始读取的初始寄存器地址,00 04则是代表需要从寄存器中读取4个字节长度的数据。45 AF是差错校验,一般使用的是CRC校验,用来检验传输的数据是否受损。
Modbus ASCII和modbus RTU的数据内容大同小异,但是和modbus RTU不同的是,modbus ASCII在每个消息开始时会附加冒号,以回车换行结尾。同样的,还是以一个实际的数据消息为例,在这个例子中“:”表示消息的开头,06是从站地址,03是功能码,00 50是初始寄存器的地址,00 04是读取的数据长度,A3则是差错校验,一般使用LRC校验。
最后是modbus TCP协议格式了。modbus TCP协议的数据格式为三段式,即MBAP +功能码+数据。MBAP分为四个部分,分别是事务处理标识符,协议标识符、长度以及单元标识符,事务处理标识读占用2个字节,用来表示本次数据的序号,原则上每发一次数据,事务处理标识符就需要加一,也可以保持不变。协议标识符占两个字节,为固定值00,长度占用两个字节,代表长度后的数据的长度,单元标识符,简单来说就是串行从机设备地址。还是以一个实际的例子来说明,以下是一个modbus TCP从机返回的响应数据,其中00 01表示消息的序号,00 00是表示使用modbus TCP,00 05是后面数据的长度,为5个字节,03是单元标识符,04是功能码,02表示读取到的数据的长度,为2个字节,00 06是寄存器中的数据。
下周我们介绍Modbus协议的传输方式,我们下周不见不散!
今天的分享就到这里啦,EBYTE每一天都致力于更好的助力物联化、智能化、自动化的发展,提升资源利用率,更多串口服务器、数传电台、lora模块等无线数传模块产品更多资料,感兴趣的小伙伴可以登录我们的亿佰特官网和企业公众号(微信号:cdebyte)进行了解,也可以直接拨打400电话咨询技术专员!
MODBUS协议相关文章推荐:
ModBus通信中RTU、ASCII、TCP协议有什么区别?
7 X 24 销售服务热线
4000-330-990深圳办事处柯经理:18218726658 杭州办事处戴经理:17512568697
常州办事处崔经理:15906110783 南京办事处葛经理:17626012283
业务邮箱:support@cdebyte.com
全国销售投诉电话:19934352316
地址:四川省成都市高新西区西区大道199号B5栋(前台座机:028-61543675)
©© 成都亿佰特电子科技有限公司【版权所有】 蜀ICP备13019384号-3