Modbus协议简介

Modbus 就是为了实现多个设备相互通信的应用层协议。 在市面上很多数据采集设备都会采用Modbus协议。

主要包括三种报文:
ModbusRtu,ModebusAscii , ModbusTcp

  • 这三种报文的报文主体(包括从机地址+功能码+数据域)都相同,没有本质区别。
  • 注意的是,ModebusAscii 因为使用的是ASCII编码,相比Rtu 来说,占用空间更大,传输效率更低。

优点:

  • Modbus 是最开始使用RS232 、RS485等串行链路作为底层通信方式,串行总线的接口芯片成本低,而且布线简单;

  • Modbus 是简单的应用层协议,其信息格式简单易懂。

  • 开源免费

  • 可以在多种电气接口(R232,R485)和通讯介质(以太网、蓝牙、wifi等)中运行

  • 报文帧简单紧凑

  • 常用介质:串口、以太网,主要的通讯方式:
    ModbusRtu(常用在串口运行,使用原始二进制,底层使用RS485串行链路通讯)
    ModebusAscii (常用在串口运行,使用ASCII编码底层使用RS485串行链路通讯)
    ModebusUdp
    ModbusTcp
    ModebusRtuOverTcp
    ModebusAsciiOverTcp
    ModebusRtuUdp
    ModebusAsciiUdp

Rtu 和 Ascii 的区别:例如:
发送10 这个数据,使用Rtu 的话,数据被转换为 0x0A = 10,
但是Ascii会将数据转化为两个字符(1 ,0) 0x31 0x30(针对Ascii码表对应的1,0的数转的),而且还有包头包尾

Modbus总线

  • Modbus,bus总线的意思,而总线是一种网络拓扑结构,一般包括星型结构、环型、树型、总线型等多种。当然无论哪种网络拓扑结构最终都是为了实现多个设备之间的通讯。
  • Modbus 则是采用的总系型拓扑结构,如下:

特点:

  • 如图,多个设备复用同一条总线,能大大减少了布线的复杂性。

  • 此时多个设备复用同一条总线时,会出现,当同时发送数据时,数据会产生冲突,为了避免数据冲突的出现,Modbus协议就采用了一种主从通讯方式去解决这种问题。

主从通讯模式

  • 主从模式就是如图所示,在整个系统中只能存在一个主机设备(master),和 多个从机设备(slave)
  • Modbus 采用请求-应答的模式,并规定,Modbus请求只能有主机发起,即主机发送请求数据给从机,从机只能接收来自主机的请求并做出相应的应答,返回应答数据给主机。
  • 从机不能主动发起请求,只能被动接收主机的请求。
  • 为了避免数据冲突,主机不能并行发送数据,当发送完第一个数据,只有等到从机返回应答或者应答超时后,才能发送第二个数据
  • 每个从机在一个系统中只有一个从机地址,主机发送数据请求时,会在请求数据中携带目标从机的地址,当主机发送数据到总线上时,每一个从机都会接到主机的数据,但是只有与请求数据中目标地址相同的从机才会做出应答,其他从机则会忽略此请求。

Modbus存储区

数据类型,分:布尔量 寄存器
读写性,分:只读 读写

只读布尔量:输入线圈 ————规定为 1区,即寄存器1,一般情况地址范围:10001-19999
只读寄存器:输入寄存器———规定为 3区,即寄存器3,范围:30001-39999
读写布尔量:输出线圈————规定为 0区,即寄存器0,范围:00001-09999
读写寄存器:输出寄存器———规定为 4区,即寄存器4,范围:40001-49999

操作

  • 读取输入线圈
  • 读取输入寄存器
  • 读取输出线圈
  • 读取输出寄存器
  • 写入单个输出线圈
  • 写入多个输出线圈
  • 写入单个输出寄存器
  • 写入多个输出寄存器

如何进行上面的操作——功能码

  • 读取输入线圈1—————0x02
  • 读取输入寄存器3————0x04
  • 读取输出线圈0—————0x01
  • 读取输出寄存器4————0x03
  • 写入单个输出线圈0———0x05
  • 写入多个输出线圈0———0x0F
  • 写入单个输出寄存器4——0x06
  • 写入多个输出寄存器4——0x10

Modbus 调试工具:
ModbusPoll (扮演客户端或者主站的角色)
ModbusSlave(扮演服务器或者从站的角色)

VSPD(扮演虚拟串口)

Modbus报文格式 / 消息帧格式

前面已经说过了Modus 通讯协议主要包括以下三种报文
主要包括三种报文:
ModbusRtu,ModebusAscii , ModbusTcp

  • 这三种报文的报文主体(包括从机地址+功能码+数据域)都相同,没有本质区别。

从机地址:

首先从机地址是唯一的,用户可以自定义配置设备的从机地址,但是必须保证从机地址是唯一的。
从机地址范围为1-247, 0为广播地址, 248-255为预留地址

功能码:

功能码就对应了设备提供的某个服务或者功能,Modbus 标准中把功能码分为了3类:
(1)公共功能码:modbus已经规定好的,其功能已经被明确的
(2)用户自定义功能码:设备根据需求自定义的功能码,取值范围为 65-72 和 100-110
(3)保留功能码:目前没有使用,可忽略。

  • 读取输入线圈1—————0x02
  • 读取输入寄存器3————0x04
  • 读取输出线圈0—————0x01
  • 读取输出寄存器4————0x03
  • 写入单个输出线圈0———0x05
  • 写入多个输出线圈0———0x0F
  • 写入单个输出寄存器4——0x06
  • 写入多个输出寄存器4——0x10

数据域

数据域用来存放真正要通讯的数据,数据域是以字节为单位的,长度可变的,数据域的格式可变,而具体的格式是由功能码决定的。

  • 数据地址
    Modbus读写时必须要数据地址,理论上每种寄存器的数据地址的取值范围都为0x0000-0xFFFF,注意不同种类的寄存器的数据地址是独立的。

Modbus TCP

由于以太网的流行,所以modbus也引进了TCP/IP作为通信方式。尽管RS485串行链路比以太网链路简单。毕竟Modbus是应用层协议,不管底层使用RS485链路还是TCP,应用层变化不大。

Modbus 的 TCP通信的相较于串口通讯的特点
前面提到过了Modbus 主从通信模式主要是为了避免多个设备的数据冲突,而TCP 底层已经使用CSMA/CD(我目前还不懂)解决了数据冲突的问题,而且TCP是全双工通讯,RS485是半双工,这就使得Modbus TCP的从机可以主动发送报文到系统中而不会产生冲突,(尽管这种操作是不符合Modbus标准的),所以在使用TCP连接时,Modbus 系统可以实现 多主/多从的通信模式。

Modbus协议学习相关推荐

  1. modbus协议学习笔记

    前言   在学习modbus协议之前,读者最好能够具备有串行通信的基础知识.串行通信是指数据以串行的方式传输的一种通信,即仅使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度. ...

  2. Modbus 协议学习笔记及常用功能码详解

    下面的MODBUS 协议的相关知识 是自己在网上搬运的 以便以后自己查看 01. 寄存器分类 Modbus寄存器分为四种,如下表所示: 线圈寄存器:实际上可以表示一个开关量,线圈操作位(bit)一个b ...

  3. ModBus串口【01】Modbus协议介绍

    Modbus协议简介 文章目录 Modbus协议简介 1.啥是Modbus协议? 2.Modbus模型 3.Modbus协议版本 4.Modbus通信 5.Modbus不同存储区介绍: 6.Modbu ...

  4. MODBUS通讯协议学习总结

    ​ 最近学习了Modbus协议,通过UART驱动来实现控制板与上位机之间的通讯.这里把Modbus里须注意的点总结一下. 前面六点主要是对Modbus协议知识点的总结与归纳,后面记录了在开发过程中遇到 ...

  5. 485之modbus通讯协议学习笔记

    485之modbus通讯协议学习笔记 这里主要探讨两个寄存器 03 读保持寄存器 04读输入寄存器 输入寄存器其中的温度值和湿度值分别各占两个字节,一个字节八位使用十六进制00 01表示两个字节的寄存 ...

  6. Modbus通讯协议学习文档

    1 什么是Modbus通讯协议 Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表.Mo ...

  7. Modbus教程| Modbus协议,ASCII和RTU帧,Modbus工作

    转载自:https://www.rfwireless-world.com/Tutorials/Modbus-Protocol-tutorial.html 这个Modbus教程涵盖了modbus协议基础 ...

  8. 【物联网毕设基础】单片机:RS485 通信与 Modbus 协议

    文章目录 RS485 通信与 Modbus 协议 单片机 RS485 通信接口.控制线.原理图及程序实例 RS485 通信与 Modbus 协议 在工业控制.电力通讯.智能仪表等领域,通常情况下是采用 ...

  9. RS485通信和Modbus协议

    在工业控制.电力通讯.智能仪表等领域,通常情况下是采用串口通信的方式进行数据交换.最初采用的方式是 RS232 接口,由于工业现场比较复杂,各种电气设备会在环境中产生比较多的电磁干扰,会导致信号传输错 ...

最新文章

  1. Oracle exp/imp,备份或导入时注意的事项
  2. hdu 5592 ZYB's Premutation (线段树+二分查找)
  3. 信息学奥赛C++语言: 奶牛乘法
  4. Eclipse 4.16 稳定版发布
  5. 【连载】【FPGA黑金开发板】Verilog HDL那些事儿--数码管电路驱动(八)
  6. Android应用APP: 基于MobileNet和EfficientNet的图像分类模型_调试运行以及打包Tensorflow官方提供的Image classification demo
  7. 【手写字母识别】基于matlab GUI ELMAN+BP神经网络手写大写字母(A-O)识别【含Matlab源码 785期】
  8. python word转pdf图片格式_Python将word转换为PDF格式文件(包括批处理转换),Word,Pdf,包含,批量...
  9. ijkplayer知识点(1)- ijkplayer 调用流程总览思维导图
  10. 使用idea进行svn分支管理-初稿
  11. 沪深股市股票交易规则
  12. 保研计算机专硕还是学硕,考研怎么选报专硕还是学硕
  13. 文件服务器文件夹卷影副本,配置共享文件夹的卷影副本功能 - Windows Server | Microsoft Docs...
  14. 130292015015-傅志彬-第1章作业
  15. 普加项目管理甘特图使用--安装部署
  16. mysql my.cnf位置_我如何找到MySQL my.cnf位置
  17. 500~1000元价位有哪些新手入门吉他推荐?saga萨伽、VEAZEN费森和雅马哈这几个品牌怎么样?
  18. 陌上花将开,徐徐观赏
  19. 《A brief review of image denoising algorithms and beyond》
  20. SQLMAP进阶:参数讲解

热门文章

  1. 【Deepin 20 系统】error:driver pcspkr is already registered aborting
  2. 依协变量(time-dependent covariables) 兼谈分层Cox回归 依时变量
  3. 如何删除Ubuntu的GRUB启动项
  4. 学习帝国cms(2)
  5. 解决scanf造成的死循环问题
  6. Ant自动批量打包多渠道APK
  7. 创维电器拟在创业板上市:收入主要靠代工贴牌,高度依赖小米系
  8. HTML局部打印,区域打印的两种实现方法总结
  9. 漂亮好看的小姐姐高颜值美女女神说:习惯是对缺点最好的包容
  10. 【宝塔】宝塔一键安装项目模块, 数据为空时的默认提示