Modbus协议介绍及解析

1.Modbus简介

Modbus是一种广泛应用于工业控制领域串行通信协议,以其开放性、高可靠性、高效简单性、免费等优点,成为了工业领域通信协议的业界标准,是工业现场电子设备之间常用的连接方式。Modbus按其格式可分为Modbus-RTU,Modbus-ASCII,Modbus-TCP,其中前两者适用于串行通信控制网络中,例如RS485,RS232等,而Modbus-TCP主要应用于基于以太网TCP/IP通信的控制网络中。通过此协议,控制器相互之间、或控制器和其它设备之间进行通信。Modbus协议使用的是主从通讯技术,即由主设备主动查询和操作从设备。一般将主控设备方所使用的协议称为Modbus Master,从设备方使用的协议称为Modbus Slave。典型的主设备包括工控机和工业控制器等;典型的从设备如PLC可编程控制器等。Modbus通讯物理接口可以选用串口(包括RS232和RS485),也可以选择以太网口。

2.报文类型及格式

2.1协议描述

Modbus协议定义了一个与基础通信层无关的简单协议数据单元(PDU)。特定总线或网络上的 Modbus协议映射能够在应用数据单元(ADU)上引入一些附加域,启动Modbus事务处理的客户机创建Modbus 应用数据单元。如图1所示。Modbus-RTU方式的通讯数据帧格式如图2所示。

2.2通讯信息传输过程

当命令由主机发送至从机时,符合相应地址码的从机处理命令,根据功能码作相应任务。如果CRC校验无误,则执行相应的任务,然后把数据返送给主机。如果CRC校验出错就不返回任何信息,主机应当有相应的超时处理。如果接收正确,但不能处理,返回异常报文。对字型数据发送顺序为先高字节后低字节;对浮点数按照正常的顺序发送;信文总长度(包括地址码和CRC校验码)不超过256字节。

2.3 应用数据单元

应用数据单元(ADU)由地址码、功能码、数据区、错误校验码构成。

地址码:

地址码是通讯信息帧的第一字节,从0到255。每个从机有唯一的地址码,并且只有符合地址码的从机才能响应回送信息。0xFF为广播地址。

功能码:

功能码向服务器指示将执行哪种操作。Modbus协议建立了客户机启动的请求格式,用一个字节编码 Modbus数据单元的功能码域,当从客户机向服务器设备发送报文时,功能码域通知服务器执行哪种操作。

数据区:

数据区可以是数据(如:开关量输入/输出、模拟量输入/输出、寄存器等等)、参考地址等。均为二进制数。各种数据参考地址在综合控制装置中均从1开始,在通讯过程中则从0开始,所以读写地址N时使用的地址数据为N-1。

错误校验码(CRC校验):

由于电子噪声或一些其它干扰,信息在传输过程中有时会发生错误,CRC校验可以检验主机或从机在通讯数据传送过程中的信息是否有误,错误的数据可以放弃(无论是发送还是接收),这样增加了系统的安全和效率。
Modbus通讯协议的CRC(冗余循环码)包含2个字节,即16位二进制数。CRC码由发送设备(主机)计算,放置于发送信息帧的尾部。接收信息的设备(从机)再重新计算接收到信息的CRC,比较计算得到的CRC是否与接收到的相符,如果两者不相符,则表明出错。在进行CRC计算时只用8个数据位,起始位及停止位,如有奇偶校验位也包括奇偶校验位,都不参与CRC计算。

3.主要功能码说明

(1)读取内部线圈(接点)

功能码:0x01
描述:读从机多个内部线圈数据。不支持广播命令。(地址0XXXX)
查询
查询信息指定要读取的线圈开始地址和线圈数量。线圈地址从0开始。
以读取地址为17的从机中第7~15号内部线圈的值为例:

响应
响应报文格式:

计算机发送命令:[设备地址] [功能码01] [起始寄存器地址高8位] [低8位] [读取的寄存器数高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位]
设备响应:[设备地址] [功能码01] [返回的字节个数][数据1][数据2]…[数据n][CRC校验的低8位] [CRC校验的高8位]

(2)读取开关量输入

功能码:0x02
描述:读从机多个开入。不支持广播命令。(地址1XXXX,只读)
查询和响应同0x01功能码

(3)写数字量(线圈状态)

功能码:0x05
例:[11][05][00][AC][FF][00][CRC低][CRC高]
1.功能码:写数字量的命令号固定为05。
2.需下置的寄存器地址高8位,低8位:表明了需要下置的开关的地址。
3.下置的数据高8位,低8位:表明需要下置的开关量的状态。例子中为把该开关闭合。注意,此处只可以是[FF][00]表示闭合[00][00]表示断开,其他数值非法。
4.此命令一条只能下置一个开关量的状态。
计算机发送命令:[设备地址] [功能码05] [需下置的寄存器地址高8位] [低8位] [下置的数据高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位]
设备响应:如果成功把计算机发送的命令原样返回,否则不响应。

(4)取多个保持寄存器(数据寄存器)

功能码:0x03
描述:读从机多个保持寄存器二进制数据。不支持广播命令。(地址4XXXX)
查询
查询信息指定要读取的寄存器开始地址和寄存器数量。寄存器地址从0开始。
以读取地址为17的从机中第108~第110号寄存器为例:
查询报文格式

响应
响应报文格式:

计算机发送命令:[设备地址] [功能码03] [起始寄存器地址高8位] [低8位] [读取的寄存器数高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位]
设备响应:[设备地址] [功能码03] [返回的字节个数][数据1][数据2]…[数据n][CRC校验的低8位] [CRC校验的高8位]

(5)读取多个输入寄存器(模拟输入寄存器)

功能码:0x04
描述:读从机多个模拟输入寄存器二进制数据。不支持广播命令。(地址3XXXX,只读)
同0x03功能码

(6)写单个寄存器

功能码:0x06
描述:写从机单个寄存器。(地址4XXXX)
命令: 命令指定要写的寄存器地址和写入的值。地址从900开始。
以将数据1写入地址为1的从机中第900号寄存器为例:
命令报文格式:

响应
响应报文格式:与命令格式相同。
计算机发送命令:[设备地址] [功能码06] [需下置的寄存器地址高8位] [低8位] [下置的数据高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位]

(7)写多个保持寄存器

功能码:0x10
描述:写从机多个保持寄存器。(地址4XXXX)
命令: 命令指定要写的寄存器地址和写入的值。地址从900开始。
以将数据1写入地址为1的从机中第900、901号寄存器为例:
命令报文格式:

响应
响应报文格式:

计算机发送命令:[设备地址] [功能码10] [需下置的寄存器起始地址高8位] [低8位] [要写的寄存器数量的高字节] [低字节] [要写的字节数(等于寄存器数目*2)] [下置的数据高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位]
设备响应:如果成功则响应:设备地址,功能码[0x10],寄存器起始地址高字节,低字节,要写的寄存器数量的高字节,低字节,CRC校验低字节,高字节

组态王与Modbus协议的地址对应规则

Modbus协议介绍及解析相关推荐

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

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

  2. Modbus协议介绍

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

  3. c# MODBUS协议 上位机 (转载)

    C#写了一款上位机监控软件,基于MODBUS_RTU协议. 软件的基本结构: 1.采用定时器(Timer控件)为时间片. 2.串口采用serialPort1_DataReceived中断接收,并进行M ...

  4. Modbus 协议从站开发通信西门子 PLC

    文章目录 1. Modbus 协议 1.1 传输模式:单工模式.全双工模式.半双工模式 1.2 广播模式.单播模式 1.3 Modbus 通信模式:ASCII.RTU 1.4 基本数据类型 2. 功能 ...

  5. 协议篇之Modbus协议入门

    目录 引言 Modbus协议介绍 1.Modbus协议是不是开源的,免费的? 2.怎么传输,有线还是无线? 3.Modbus的数据格式? 4.Modbus和RS485什么关系? 5.什么是主从机? 6 ...

  6. 三、ModBus协议实战分析

    0x01 前言 上一篇文章我们学习总结了Modbus协议相关的一些理论基础,在这篇文章中,我们将通过搭建Modbus仿真环境来对Modbus协议进行实际分析. 协议分析环境: ModbusPoll : ...

  7. Modbus协议解析--小白一看就懂的协议

    文章目录 提问三连 1.什么是Modbus? 2.Modbus用来干什么? 3.Modbus的内容是什么? 3.1 Modbus-RTU+Modbus-ASCII 3.1.1 Modbus-RTU协议 ...

  8. Modbus协议概念最详细介绍

    ★ 一文认识Modbus协议: " 1 什么是Modbus? 2 主从模式 3 协议的分类 3.1 Modbus ASCII 3.2 Modbus RTU 3.3 Modbus TCP 3. ...

  9. 工业modbus协议解析和转换

    1 什么是Modbus协议? Modbus 协议是应用于电子控制器上的一种通用语言.通过此协议,控制器相互之间.控制器经由网络(例如以太网)和其它设备之间可以通信.它已经成为一通用工业标准.有了它,不 ...

最新文章

  1. AttributeError: module ‘matplotlib’ has no attribute ‘artist’
  2. 每天一点小知识004--关于获取物体名字
  3. Delphi关于StringGrid的公用模块[转]
  4. php 转码iconv,PHP iconv()函数转字符编码的问题(转)
  5. layer调用父页面方法_Ruby for SketchUp之图层【Layer】
  6. php 多维数组 列,总结PHP实现提取多维数组指定一列的方法
  7. python代码翻译器-用python实现百度翻译的示例代码
  8. Nginx源码分析 - Event事件篇 - Nginx的Event事件模块概览(17)
  9. 什么类型网站不利于seo优化
  10. 为Eclipse安装ADT插件
  11. 移远UMTS LTE EVB Kit
  12. FPGA开发中常见报错或警告汇总
  13. 中国移动、天猫都在用的区块链抽奖,了解一下?
  14. 我的 Typora IDEA 雅黑主题
  15. 原神 Android 教程 —安卓版
  16. linux qt fscanf,fscanf QT小部件C++
  17. git、github保姆级教程(手把手交)以及如何在github上提交pr,参与开源项目
  18. 【单片记笔记】基于STM32F103的NEC红外发送接收使用同一个定时器的一体设计
  19. 河北大学计算机科学与技术考研,计算机专业考研经验贴(重)
  20. 【Pytorch】基于CNN手写汉字的识别

热门文章

  1. 密码输入框小眼睛的实现
  2. ffmpeg教程java_ffmpeg Windows开发环境搭建
  3. cocos2d纹理像素格式
  4. 最近的一些杂感-20211128
  5. 不想上班,有五万块钱闲钱,自己可以做点小生意吗?
  6. 天天象棋 残局闯关 第5关
  7. MacBook Finder 访达 显示隐藏文件夹
  8. java sts_Spring Tool Suite(STS)安装
  9. php sha256加密介绍,php SHA256WithRSA签名验签加密解密
  10. 科普,什么是“NP难”的问题。专业的解释俺看不懂。这个文章里面举了几个例子,俺一下就明白了。