一、Modbus介绍

Modbus是一种通讯协议,主要应用于电子控制器上的一种通用语言。Modbus支持多种电气接口,如RS232、RS485、TCP/IP等。多数Modbus设备通信是通过串口或TCP/IP进行连接。

通常情况下 Modbus是主从架构,即通信节点是Master,其它使用Modbus协议参与通信的是slave节点(最多247个,地址范围为1-247,0节点是广播地址)。每个slave设备都具有一个唯一的地址。总线上只能有一个Master节点。

Modbus传输模式可分为 ASCII和RTU两种模式,同一网络中所有设备必须保持统一,要么是ASCII,要么统一为RTU模式,两者不可共存。相对来说RTU模式传输效率较高,

ASCII模式下,消息以冒号字符开始,以回车换行字符结束。

RTU模式下,消息发送和接收至少间隔3.5字符时间的停顿间隔作为标志。

Modbus寄存器介绍

所有数据都存在寄存器中,寄存器可指物理寄存器,也可是一块内存区域。Modbus根据数据类型及各自读写特性,将寄存器分为了4个部分,分别如下。

Modbus地址、功能码、数据域介绍

Modbus消息帧的地址,在ASCII模式下包含2个字符,在RTU模式下包含1个字符。单个设备地址实际范围是在1-247值之间。0为广播地址、248-255为保留地址。

功能码由1个字节构成,因此取值范围1-255。常用功能码如下:

01:读线圈状态

02:读输入状态

03:读保持寄存器

04:读输入寄存器

05:强制单线圈

06:预制单寄存器

15:强制多线圈

17:报告从设备ID

22:屏蔽写寄存器

23:读/写寄存器

数据内容与功能码紧密相关,存放功能码需要操作的具体数据,数据域以字节为单位,长度可变,对于有些功能码此域可为空。

二、Modbus协议解析

ModbusTCP通常使用端口502作为接收报文端口。

ModbusTCP包含一个应用报文头,该头占用7个字节。Modbus TCP/IP协议最大数据帧长度为260字节。

传输标识:Transaction Identifier。占用2个字节。标记某个Modbus 查询/应答的传输过程,可设置为0,每次通讯+1;由客户端生成(主站设备),应答时复制该值。

协议标识:Protocol Identifier。占用2个字节。 Modbus协议为 0x00。由客户端生成,应答时复制该值。

字节长度:Length。占用2个字节。高4位为设置为0X00,因此后续字节必须在256个字节内;第四位记录后续的字节个数;由客户端生成(主站设备),应答时重新生成。

单位标识符:Unit Identifier。占用1个字节。用以识别从机设备。由客户端生成,应答时复制该值。

0x01 读取线圈输出状态

下图为query请求报文,Modbus传输内容为 “05 91 00 00 00 06 ff 01 00 00 00 0a”。

05 91(十六进制) 为传输标识,即1425(十进制);

00 00为协议标识;

00 06为字节长度;

ff为单位标识符,即255(十进制);

01为功能码,占1个字节;

00 为Modbus起始地址高位;

00 为Modbus起始地址低位;

00 为寄存器高位;

0a为寄存器低位。

下图为query后的响应报文,Modbus传输内容为 “05 91 00 00 00 05 ff 01 02 01 00”。

05 91(十六进制) 为传输标识,即1425(十进制);

00 00为协议标识;

00 05为字节长度;

ff为单位标识符,即255(十进制);

01为功能码,占1个字节;

02为数据域字节数;

01 00 为数据字段。响应报文的数据字段中,每个线圈占用1位(bit),01=0000 0001,00=0000 0000。1=ON,0=OFF。如果最后的数据字节不能填满8个线圈的状态(1个字节),则由0填充。

0x02 读取离散量输入值

下图为query请求报文,Modbus传输内容为 “05 92 00 00 00 06 ff 02 00 00 00 0b”。

05 92(十六进制) 为传输标识,即1426(十进制);

00 00为协议标识;

00 06为字节长度;

ff为单位标识符,即255(十进制);

02为功能码;

00 为Modbus起始地址高位;

00 为Modbus起始地址低位;

00 为寄存器高位;

0b为寄存器低位。

下图为query后的响应报文,Modbus传输内容为 “05 92 00 00 00 05 ff 02 02 02 00”。

05 92(十六进制) 为传输标识,即1426(十进制);

00 00为协议标识;

00 06为字节长度;

ff为单位标识符,即255(十进制);

02为功能码;

02为数据域字节数

02 00 为数据字段。响应报文的数据字段中,每个线圈占用1位(bit),02=0000 00010,00=0000 0000。1=ON,0=OFF。如果最后的数据字节不能填满8个线圈的状态(1个字节),则由0填充。

0x04 读取输入寄存器值

下图为query请求报文,Modbus传输内容为 “07 45 00 00 00 06 ff 04 01 8f 00 02”。下图请求报文大体含义为:需读取输入寄存器地址30144-30145,共计2个寄存器内容。即读取Modbus协议地址143至144的内容。

07 45(十六进制) 为传输标识,即1861(十进制);

00 00为协议标识;

00 06为字节长度;

ff为单位标识符,即255(十进制);

04为功能码;

01 为Modbus起始地址高位;

8f 为Modbus起始地址低位,起始地址为143。

00 为寄存器高位;

02为寄存器低位,读取数量为2。

下图为query后的响应报文,Modbus传输内容为 “07 45 00 00 00 07 ff 04 04 b6 00 47 7f”。

07 45(十六进制) 为传输标识,即1861(十进制);

00 00为协议标识;

00 07为字节长度;

ff为单位标识符,即255(十进制);

04为功能码;

04为数据域字节数。

b6 00 47 7f为数据字段。响应报文的数据字段中,每个线圈占用1位(bit),b6=1011 0110,00=0000 0000,47=1000 0111,7f=1111111。1=ON,0=OFF。如果最后的数据字节不能填满8个线圈的状态(1个字节),则由0填充。

三、关于Modbus数据审计/防护

Modbus数据审计/防护其核心是对协议报文进行深度解码分析,记录其操作时间、地点、操作人、和操作行为等关键要素,依托操作行为数据的有效存储和行为管控,从而实现对Modbus系统的安全日志的审计分析及异常阻断,加强组织事中管控能力,事后回溯追查、分析研判的能力。

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

  1. Modbus TCP协议解析

    在之前的文章中,我们介绍了Modbus RTU协议的内容和实现方法.最近在进行网络通讯的时候又用到了Modbus TCP协议,因此这里把自己对Modbus TCP的了解总结一下. 文章目录 一.Mod ...

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

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

  3. Modbus通信协议+Modbus串口调试工具+Java版协议解析源码

    网络与串口二合一调试助手TCPCOM: https://download.csdn.net/download/liuyuan_java/87454762 Modbus调试工具,模拟串口调试工具 htt ...

  4. mysql eof_详细介绍mysql 协议的EOF包及解析

    git https://github.com/sea-boat/mysql-protocol 概况 mysql的EOF包用于标明查询结果的结尾. mysql通信报文结构类型名字描述int<3&g ...

  5. synopsys PCIE IP协议解析

    synopsys PCIE IP协议解析 1.Overview Core支持单个Pcie内核的Loopback功能,该功能主要为了做芯片验证,以及在没有远程接收器件的情况下完成自己的回环.同时,Cor ...

  6. 详解BLE 空中包格式—兼BLE Link layer协议解析

    BLE有几种空中包格式?常见的PDU命令有哪些?PDU和MTU的区别是什么?DLE又是什么?BLE怎么实现重传的?BLE ACK机制原理是什么?希望这篇文章能帮你回答以上问题. 虽然BLE空中包(pa ...

  7. ffmpeg 怎么处理udp音频_视音频数据处理入门:UDP-RTP协议解析

    ===================================================== 视音频数据处理入门系列文章: =============================== ...

  8. 简易HTTP协议解析

    首先介绍一些必要的知识点. TCP协议为操作系统底层协议,能够保证应用层获取到完整的.顺序一直的包序列.但TCP不提供具体的分包,需要上层协议自己解决.TCP发送给上层协议的数据是一个没有意义的字符串 ...

  9. 视音频数据处理入门:UDP-RTP协议解析

    ===================================================== 视音频数据处理入门系列文章: 视音频数据处理入门:RGB.YUV像素数据处理 视音频数据处理 ...

最新文章

  1. vs连接mysql建一个表并增删查改_VS连接SQL Server数据库,增删改查详细教程(C#代码)...
  2. 机器学习(三十五)——Actor-Critic, Integrating Learning and Planning(1)
  3. java中input表单中的type=date返回类型【切记】
  4. C# HttpWebRequest GET HTTP HTTPS 请求
  5. 使用 JNA 模拟C语言结构体的完整源代码
  6. 进程之间有8种通信方式
  7. educoder 软件工程导论 结构化分析方法-数据流图
  8. 甘肃暴雨强度公式_中国城市新一代暴雨强度公式
  9. DSP芯片的基本结构
  10. word文档如何画线条流程图_word怎么画图,如何用word制作流程图
  11. Keras的Adam优化器decay理解及自适应学习率
  12. 牛客练习赛50 F tokitsukaze and Another Protoss and Zerg(分治NTT)
  13. CSS核心内容-标准流、盒子模型、浮动、定位
  14. beyond compare 4官方中文版下载
  15. 用户 不在 sudoers 文件中。此事将被报告
  16. 来看看移动端小程序技术的前世今生!小白也能看明白
  17. 阅读《A2-RL: Aesthetics Aware Reinforcement Learning for Image Cropping Debang》
  18. [转]千万不要把灯泡放进嘴里
  19. 超纯水系统中硼离子去除技术原理
  20. 给你 2 万条数据,怎么快速导入到 MySQL?写得太好了!

热门文章

  1. LCD液晶屏的问题总结
  2. 机器学习如何解决看病难?Jeff Dean详述机器学习在医疗领域应用
  3. github的项目转移到coding包含所有提交历史记录
  4. host速度 mtk usb_Openwrt MTK USB3.0 識別UASP存儲失敗的解決方案
  5. 中国水利专家黄万里先生
  6. 高通Camera Tuning AE之曝光表的配置
  7. Multisim模电仿真实验2
  8. 程序员才能看懂的段子
  9. 【Python】监测鼠标各种事件(左键/中键/右键是否点下)
  10. linux oops定位问题