zoukankan      html  css  js  c++  java
  • modbus-tcp协议讲解

    MODBUS功能码简介 

    代码

    中文名称

    位操作/字操作

    操作数量

    01h

    读线圈状态

    位操作

    单个或多个

    02h

    读离散输入状态(只能读到0或1)

    位操作

    单个或多个

    03h

    读保持寄存器(保持寄存器可以通过06h功能写入)

    字操作

    单个或多个

    04h

    读输入寄存器(输入寄存器只能读取,不能通过06h功能写入)

    字操作

    单个或多个

    05h

    写单个线圈(线圈表示用来控制输出IO控制)

    位操作

    单个

    06h

    写单个保持寄存器

    字操作

    单个

    0Fh

    写多个线圈

    位操作

    多个

    10h

    写多个保持寄存器

    字操作

    多个

    Modbus TCP介绍

    示例-通过03功能码读寄存器(从寄存器00开始,读取两个值,读到01寄存器结束)

    客户端发送 01 02 00 00 00 06 01 03 00 00 00 02

    01 02 00 00 00 06 (固定报文头)

    • 01 02:   客户端发出的检验信息, server端会将这两个字节内容复制到回应的报文第一二位.一般我们会将第一二位进行不停递加,然后根据服务器返回的相应内容, 来验证服务器回应信息的时效性
    • 00 00:   表示tcp/ip 的协议的modbus的协议
    • 00 06:   表示客户端发送的后面带了多少字节.

    01 03 00 00 00 02(用户数据)

    • 01:   表示设备地址
    • 03:  表示读保持寄存器功能码
    • 00 00:  表示客户端读取的寄存器起始地址
    • 00 02:  表示读取的寄存器值个数(由于为02,所以会读出寄存器00h和01h的值)

    返回值如下图所示:

     

    服务器返回值  01 02 00 00 00 07 01 03 04 04 7B 00 FF

    • 01 02:  服务器回应的检验信息
    • 00 00: 表示tcp/ip 的协议的modbus的协议
    • 00 07: 表示服务器发送的后面带了多少字节.
    • 01:  表示设备地址
    • 03:  表示功能码
    • 04:  表示后面发送的寄存器00的字节长度
    • 04 7B:  表示寄存器00的值
    • 00 FF:  表示寄存器01的值

     

    示例-06功能码写单个寄存器(向寄存器03地址里写值)

    客户端发送 01 02 00 00 00 06 01 06 00 03 00 FF

    01 02 00 00 00 06 (固定报文头)

    • 01 02:  客户端发出的检验信息
    • 00 00:  表示tcp/ip 的协议的modbus的协议
    • 00 06:  表示客户端发送的后面带了多少字节.

    01 06 00 03 00 FF (用户数据)

    • 01:   表示设备地址
    • 06:   表示写单个保持寄存器功能码
    • 00 03 00 FF:  表示写入寄存器03h的值为0xFF

    返回值如下图所示:

     

    服务器返回  01 02 00 00 00 06 01 06 00 03 00 FF

    后面的06 00 03 00 FF:表示客户端使用06功能码成功向寄存器03h分别写入了0xFF值

     

    示例-10功能码写多个寄存器(向寄存器03~06地址里写不同值)

    客户端发送 01 02 00 00 00 0F 01 10 00 03 00 04 08 FF FF 00 0A 00 0F 00 06

    01 02 00 00 00 0F (固定报文头)

    • 01 02:  客户端发出的检验信息
    • 00 00:  表示tcp/ip 的协议的modbus的协议
    • 00 0F:  表示客户端发送的后面带了多少字节.

    01 10 00 03 00 04 08 FF FF 00 0A 00 0F 00 06 (用户数据)

    • 01:  表示设备地址
    • 10:  表示写多个保持寄存器功能码
    • 00 03:  表示客户端写入的寄存器起始地址
    • 00 04:  表示写入的寄存器值个数(由于为04,所以会写入寄存器03h~06h的值)
    • 08:   表示后面写入的字节个数
    • FF FF:  表示写入寄存器03h的值
    • 00 0A:  表示写入寄存器04h的值
    • 00 0F:  表示写入寄存器05h的值
    • 00 06:  表示写入寄存器06h的值

    返回值如下图所示:

     

    服务器返回 01 02 00 00 00 06 01 10 00 03 00 04

    后面的10 00 03 00 04:表示客户端使用10功能码成功向寄存器03h~06h分别写入了值

     

    部分参考内容:https://blog.csdn.net/mikasoi/article/details/81782159

  • 相关阅读:
    JS在ff和ie区别(未完,待续...)
    得出一年中已过的天数
    div高度随浏览器变化
    offsetTop,offsetLeft
    完美的DIV三行三列自适应高度布局
    YUI Compressor
    Android repo 出现error.GitError: manifests revlist ('^12303f87b9f90c07bf4aec4c4353ba514ee70c8a', 'HEAD', ''): fatal: bad revision 'HEAD'
    1、ECharts(中国地图篇)的使用
    2012年新浪微博用户密码泄露漏洞(图片解析)
    铁道部购票网站可能造成另一次的密码危机(转)
  • 原文地址:https://www.cnblogs.com/lifexy/p/11311112.html
Copyright © 2011-2022 走看看