modbus 协议基础知识

这篇具有很好参考价值的文章主要介绍了modbus 协议基础知识。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Modbus的内容是什么

协议种类
Modbus-RTU+Modbus-ASCII
Modbus-TCP
Modbus-Plus
通讯过程:
Modbus是主从方式通信,也就是说,不能同步进行通信,总线上每次只有一个数据进行传输,即主机发送,从机应答,主机不发送,总线上就没有数据通信

Modbus-RTU+Modbus-ASCII

协议是基于异步串行通信上,一般的介质有:RS-232,RS485,RS-422上,这也是工业上使用的最多的;

对于串行连接,存在两个变种,它们在数值数据表示不同和协议细节上略有不同。
Modbus RTU是一种紧凑的,采用二进制表示数据的方式,Modbus ASCII是一种人类可读的,冗长的表示方式。
RTU格式后续的命令/数据带有循环冗余校验的校验和,而ASCII格式采用纵向冗余校验的校验和。

Modbus-RTU协议

  1. 帧结构
    帧结构 = 地址 + 功能吗 + 数据 + 校验

地址: 占用一个字节,范围0-255,其中有效范围是1-247,其他有特殊用途,比如255是广播地址(广播地址就是应答所有地址,正常的需要两个设备的地址一样才能进行查询和回复)

功能码:占用一个字节,功能码的意义就是,知道这个指令是干啥的,比如你可以查询从机的数据,也可以修改数据,所以不同功能码对应不同功能.

数据: 根据功能码不同,有不同结构,在后续的实例中有说明;

校验: 为了保证数据不错误,增加这个,然后再把前面的数据进行计算看数据是否一致,如果一致,就说明这帧数据是正确的,我再回复;如果不一样,说明你这个数据在传输的时候出了问题,数据不对的,所以就抛弃了;

实战

查询 0x03
功能描述:
现在我是主机,我要查询从机地址为1的数据.

  1. 主机发送: 01 03 00 00 00 01 84 0A
  2. 从机回复: 01 03 02 12 34 B5 33
  1. /*发送数据解析*/
  2. 01-地址
  3. 03-功能码,代表查询功能,其他功能后面再说
  4. 00 00-代表查询的起始寄存器地址.说明从0x0000开始查询.
  5. (这里需要说明以下,Modbus把数据存放在寄存器中,通过查询寄存器来得到不同变量的值,一个寄存器地址对应2字节数据;)
  6. 00 01-代表查询了一个寄存器.结合前面的00 00,意思就是查询从0开始的1个寄存器值;
  7. 84 0A-循环冗余校验,是modbus的校验公式,从首个字节开始到84前面为止;
  8. (这里新手可能不懂,这个校验就是保证数据传输过程没有错误的一种手段,不同的协议这种校验公式不一样,
  9. 只需了解这个就足够了,具体怎么求的,可以直接在输出数据得到结果,地址如下:
  10. http://www.ip33.com/crc.html)
  11. /*回复解析*/
  12. 01-地址
  13. 03-功能码
  14. 02-代表后面数据的字节数,因为上面说到,一个寄存器有2个字节,所以后面的字节数肯定是2*查询的寄存器个数;
  15. 12 34-寄存器的值是12 34,结合发送的数据看出,01这个寄存器的值为12 34
  16. B5 33-循环冗余校验

修改 0x06功能码

  1. 主机发送: 01 06 00 00 00 01 48 0A
  2. 从机回复: 01 06 00 00 00 01 48 0A
  1. *发送数据解析*/
  2. 01-主机要查的地址
  3. 06-功能码,代表修改单个寄存器功能,修改有些不同,有修改一个寄存器和修改多个寄存器;
  4. 00 00-代表修改的起始寄存器地址.说明从0x0000开始.
  5. 00 01-代表修改的值为00 01.结合前面的00 00,意思就是修改0号寄存器值为00 01;
  6. 48 0A-循环冗余校验,是modbus的校验公式,从首个字节开始到48前面为止;
  7. /*回复解析*/
  8. 01-从机返回的地址,说明这就是主机查的从机
  9. 06-功能码,代表修改单个寄存器功能;
  10. 00 00-代表修改的起始寄存器地址.说明是0x0000.
  11. 00 01-代表修改的值为00 01.结合前面的00 00,意思就是修改0号寄存器值为00 01;
  12. 48 0A-循环冗余校验,是modbus的校验公式,从首个字节开始到48前面为止;

修改-0x10功能码

  1. 主机发送: 01 10 00 00 00 01 02 11 22 2A 19
  2. 从机回复: 01 10 00 00 00 01 01 C9
  1. *发送数据解析*/
  2. 01-主机要查的地址
  3. 10-功能码,代表修改多个寄存器功能;
  4. 00 00-代表修改的起始寄存器地址.说明从0x0000开始.
  5. 00 01-代表修改的寄存器数量,这里开始于0x06的修改不同;
  6. 02 -表示修改的总字节数,由于只修改了1个寄存器,所以数据要有两个字节;
  7. 11 22-表示修改的值,结合上面,就是从第0000寄存器开始修改一个寄存器值为11 22,就是把0000寄存器改为11 22;
  8. 2A 19-循环冗余校验,是modbus的校验公式,从首个字节开始到22前面为止;
  9. /*回复解析*/
  10. 01-从机返回的地址,说明这就是主机查的从机
  11. 10-功能码
  12. 00 00-代表修改的起始寄存器地址.说明是0x0000.
  13. 00 01-代表修改的寄存器数量,只需要回复这么多久足够了,从机告诉主机,你修改了哪几个寄存器就足够了;
  14. 01 C9-循环冗余校验;
  1. 主机发送: 01 10 00 00 00 02 04 11 22 33 44 42 5A
  2. 从机回复: 01 10 00 00 00 02 41 C8

modbus RTU协议只需要看懂功能码0x03,0x06,0x10这三个基本的就已经足够了;分别回想下其数据域部分:
0x03-主机需要发送起始地址+寄存器数量,从机回复总字节数+数据;
0x06-主机发送起始地址+数据内容(因为你只需要修改一个,所以起始地址就是所要修改的地址),从机返回起始地址+数据内容
0x10-主机发送起始地址+寄存器个数+总字节数+数据,从机返回起始地址+寄存器数量

Modbus-ACSII协议

概述
一般只需要了解RTU协议,因为前面有说过,必须要有RTU协议的,所以只需要了解了RTU协议,就可以读出设备信息了,至于ACSII协议,做个大概了解

1.帧形式
对于RTU协议,比如RTU发送一个字节:0x12;
ASCII协议则需要发送2个字节:一个字节代表1,一个代表2,即31和32,才能代表0x12.
所以,acsii协议的效率比较低。
modbus 协议基础知识
从上面的图中,看出:
1)比RTU多了起始段 :, 多个结束符CR,LF
2)地址和功能都变成了2个字节;
3)数据部分更加繁琐,但是更符合人们的查看;

归纳

由于Modbus-RTU和modbus-ACSII都是基于232和485链路的,所以其通讯模式半双工,一般是主机和从机的模式。其差别就是其字节的格式不同,一个是16进制的数据,一个是acsii数据。
Ascii多了帧头和帧尾,也就是说可以有用这个头尾判断一帧字节来判断是否结束;而RTU没有帧头和帧尾,所以协议里明确两帧之间要大于3.5个字节时间间隔(与波特率有关),作为一帧结束的判断依据。

在串口通信中,1个字符包括1位起始位、8位数据位(一般情况)、1位校验位(或者没有)、1位停止位(一般情况下),因此1个字符包括11个位,那么3.5个字符就是38.5个位,波特率表示的含义是每秒传输的二进制位的个位,因此如果是9600波特率,3.5个字符周期=1000/9600*38.5=4.01ms。

对于RS485来说,总线上一般允许最大32个设备。

Modbus-TCP
以太网作为介质进行传输,

Modbus-PLUS
高速令牌传递网络

modbus 协议基础知识

Modbus协议规定

区号 名称 读写 范围
0区 输出线圈 可读可写 00001-09999
1区 输入线圈 只读 10001-19999
3区 输入寄存器 只读 30001-39999
4区 保持寄存器 可读可写 40001-49999
功能码 功能说明
01H 读取输出线圈
02H 读取输入线圈
03H 读取保持寄存器
04H 读取输入寄存器
05H 预置单线圈
06H 预置单寄存器
0FH 预置多线圈
10H 预置多寄存器

功能码说明
Modbus协议处理的所有数据按照存储数据的类型可分为位寄存器(1bit)和16位寄存器(16bit)。因此功能码可分为位操作和字操作两类。位操作的最小单位是bit,字操作的最小单位是两个字节。

寄存器功能码说明

modbus 协议基础知识

寄存器种类说明

modbus 协议基础知识

参考文档:
Modbus协议解析--小白一看就懂的协议_panda@Code的博客-CSDN博客_modbus协议详解
ModbusRTU协议数据格式_qq_37164321的博客-CSDN博客_modbusrtu通讯协议格式
标准Modbus通讯协议格式_竹影IT程序的博客-CSDN博客_modbus数据格式文章来源地址https://www.toymoban.com/news/detail-456216.html

到了这里,关于modbus 协议基础知识的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 嵌入式通信协议【Modbus】Modbus TCP的帧格式

    Client request:例: 19 B2 00 00 00 06 06 03 00 27 00 02 上面是modbus客户端发出的报文内容,为modbus tcp/ip协议格式,其前面的六个字节为头字节( header handle); 19 B2 00 00 00 06 19 B2  00 00 00 06 两个Client发出的检验信息,Sever端只是需要将这两个字节的内容copy以后再放到response的报文的相应位

    2024年02月05日
    浏览(79)
  • Modbus tcp转ETHERCAT网关modbus tcp/ip协议

    捷米JM-ECT-TCP网关能够连接到Modbus tcp总线和ETHERCAT总线中,实现两种不同协议设备之间的通讯。这个网关能够大大提高工业生产的效率和生产效益,让生产变得更加智能化。捷米JM-ECT-TCP 是自主研发的一款 ETHERCAT 从站功能的通讯网关。该产品主要功能是将 ETHERCAT 网络和 MODB

    2024年02月15日
    浏览(72)
  • C# Modbus通信从入门到精通(21)——Modbus TCP协议原理

    Modbus TCP是走网口的,也可以在同一时间内有多个从站访问主站,并且通过Modbus事务处理标识来区分同一时刻的不同Modbus事务,这是区别于Modbus ASCII和Modbus RTU的地方。 Modbus客户端通常输入Modbus服务器的IP地址和端口号来建立TCP连接,然后根据从站地址来确定具体访问哪个从站

    2024年02月15日
    浏览(60)
  • C# Modbus通信从入门到精通(12)——Modbus ASCII协议原理

    Modbus ASCII是串行链路上的协议,也就是说ModbusASCII是通过串口通信来实现的,它可以通过RS232、RS485物理层的接口来实现,同时它也是一个主从协议,在同一时间总线上只能有一个主站和一个或多个(最多247)个从站。Modbus通信总是由主站发起,从站没有接收到主站的请求时不

    2024年02月15日
    浏览(81)
  • Modbus通信协议介绍以及Modbus Poll、Slave软件使用介绍

    Modbus Slave是一个模拟Modbus协议从机的上位机软件,主要用于模拟测试跟其他主机设备通信的过程。与之成套存在的另一个软件--Modbus Poll,则是模拟Modbus协议主机的上位机软件。该软件内部封装Modbus协议,通过图形化界面使得操作更为简单。软件支持ModbusRTU、ASCII、TCP/IP协议。

    2024年02月09日
    浏览(44)
  • Profibus-DP转modbus RTU网关modbus rtu协议

    捷米JM-DPM-RTU网关在Profibus总线侧实现主站功能,在Modbus串口侧实现从站功能。可将ProfibusDP协议的设备(如:E+H流量计、倍福编码器等)接入到Modbus网络中;通过增加DP/PA耦合器,也可将Profibus PA从站接入Modbus网络。在Modbus串口侧提供RS485和RS232两种电平接口。 捷米JM-DPM-RTU网关

    2024年02月10日
    浏览(43)
  • 【正点原子STM32】RS485串行通信标准(串口基础协议 和 MODBUS协议、总线连接、通信电路、通信波形图、RS485相关HAL库驱动、RS485配置步骤、)

    一、RS485介绍 二、RS485相关HAL库驱动介绍 三、RS485配置步骤 四、编程实战 五、总结 串口、UART、TTL、RS232、RS422和RS485之间的关系可以如此理解: 串口 :是一个广义术语,通常指的是采用串行通信协议的接口,它可以包括多种具体的物理接口标准和逻辑电平标准。 UART (通用

    2024年04月13日
    浏览(64)
  • 串行通信 - Modbus协议

    Modbus协议采用的是主-从通信模式。 Modbus协议主要有Modbus RTU、Modbus ASCII和Modbus TCP三种。前两者均支持RS-485总线协议。其中RTU采用二进制数据表达形式、数据结构紧凑,通信效率高,应用广泛。 Modbus的三种传输模式 ASCII 模式:数据中每8bit的字节作为一个ASCII码发送。字符发送

    2024年02月09日
    浏览(50)
  • Modbus通讯协议学习

    Modbus协议 莫迪康(施耐德电气) 1979年 PLC在1969年诞生 为解决PLC通讯问题而发表 为不同设备之间提供了一种通用的语言 Modbus协议是一种应用层的报文传输协议,RTU/ASCII/TCP Modbus RTU通讯协议 通讯功能:读数据,写数据 存储区: 输出线圈 输入线圈 输入寄存器 保持寄存器 ​

    2024年02月12日
    浏览(42)
  • 总线(四)Modbus总线 协议

    Modbus是一种串行通信协议。 1971年,Modicon公司首次退出Modbus协议,ModbusRTU和Modbus ASCII诞生于此。 后来施耐德电气(SchneiderElectric)收购了Modicon公司,并在1997年推出了ModbusTCP协议。2004年,中国国家标准委员会正式把Modbus作为了国家标准。 Modbus成为工业领域通信协议的业界标准

    2024年02月14日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包