• Modbus协议介绍及Modbus TCP


    一、Modbus起源

    1.起源

    Modbus由Modicon公司于1979年开发,是一种工业现场总线协议标准。
    Modbus通信协议具有多个变种,其中有支持串口,以太网多个版本,其中最著名的是Modbus RTUModbus ASCIIModbus TCP三种
    其中Modbus TCP是在施耐德收购Modicon后1997年发布的。

    2.分类

    1)Modbus RTU
    运行在串口上的协议,采用二进制的表现形式以及紧凑型数据结构通信效率高,应用比较广泛
    2)Modbus ASCII
    运行在串口上的协议,采用ASCII码进行传输,并且利用特殊字符作为字节开始和结束的标志传输效率远远低于Modbus RTU ,只有通信数据量比较少时才会考虑它
    3)Modbus TCP
    运行在以太网上的协议

    3.优势

    免费、简单、容易使用

    4.应用场景

    Modbus协议是现在国内工业领域应用最多的协议,不只PLC设备,各种终端设备,比如水控机、水表、电表、工业秤、各种采集设备

    5.ModbusTCP特点⭐⭐⭐

    1)采用主从问答方式通信
    2)Modbus TCP协议属于应用层协议,基于传输层TCP进行传输
    3)Modbus TCP默认端口号502

    二、Modbus TCP协议格式

    ModbusTcp协议包含三部分:报文头、功能码、数据
    在这里插入图片描述
    Modbus TCP/IP协议最大数据帧长度为260字节

    1.报文头

    包含7个字节,分别是:
    在这里插入图片描述

    2.寄存器

    寄存器分类:线圈离散量输入保持寄存器输入寄存器

    • 1)离散量和线圈 其实就是位寄存器(每个寄存器数据占1字节),工业上主要用于控制IO设备。
      • 线圈寄存器,类比为开关量,每一个bit都对应一个信号的开关状态。所以一个byte就可以同时控制8路的信号。比如控制外部8路io的高低。 线圈寄存器支持读也支持写,写在功能码里面又分为写单个线圈寄存器和写多个线圈寄存器。
        对应上面的功能码也就是:0x01 0x05 0x0f
      • 离散输入寄存器,离散输入寄存器就相当于线圈寄存器的只读模式,他也是每个bit表示一个开关量,而他的开关量只能读取输入的开关信号,是不能够写的。比如我读取外部按键的按下还是松开。
        所以功能码也简单就一个读的 0x02
    • 2)输入和保持寄存器是字寄存器(每个寄存器数据占2个字节),工业上主要用于存储工业设备的值。
      • 保持寄存器,这个寄存器的单位不再是bit而是两个byte,也就是可以存放具体的数据量的,并且是可读写的。比如我我设置时间年月日,不但可以写也可以读出来现在的时间。写也分为单个写和多个写
        所以功能码有对应的三个:0x03 0x06 0x10
      • 输入寄存器,这个和保持寄存器类似,但是也是只支持读而不能写。一个寄存器也是占据两个byte的空间。类比我我通过读取输入寄存器获取现在的AD采集值
        对应的功能码也就一个 0x04

    📢线圈寄存和保持寄存器是可读可写的,离散输入寄存器和输入寄存器只能读不可写。

    3.功能码

    在这里插入图片描述

    4.协议包书写模板总结

    • 读操作

      • 主机->从机:
        报文头(7字节) + 功能码(1字节) + 起始地址(2字节) + 数量(2字节)

      • 从机->主机:
        报文头(7字节) + 功能码(1字节) + 字节计数(1字节) + 数据(n字节)

    • 写单个

      • 主机->从机:
        报文头(7字节) + 功能码(1字节) + 地址(2字节) + 数据/断通标志(2字节)
        断通标志:0xff 00(开) 0x00 00(关)
      • 从机->主机:
        原文返回
    • 写多个:

      • 主机->从机:
        报文头(7字节) + 功能码(1字节) + 起始地址(2字节) + 数量(2字节,线圈数/寄存器数) + 字节计数(1字节) + == 数据==(n字节)
      • 从机->主机:
        报文头(7字节) + 功能码(1字节) + 起始地址(2字节) + 数量(2字节,线圈数/寄存器数)
  • 相关阅读:
    JS(一)
    分析了60款链游,发现40%的玩家都是机器人
    conda安装Tensorflow2.9的GPU版本
    【python百炼成魔】Python循环语句:掌握while循环的实战应用
    缓存行/伪共享问题,验证优化
    【漏洞复现】Apache Log4j Server 反序列化命令执行漏洞(CVE-2017-5645)
    C++中多态使用详细讲解
    素问·风论原文
    数据同步工具DataX从Mysql同步数据到HDFS实战
    「运维有小邓」通过审计用户活动和AD域内部变化来确保GDPR合规
  • 原文地址:https://blog.csdn.net/weixin_43624626/article/details/132839809