首页 > 其他分享 >Modbus TCP协议

Modbus TCP协议

时间:2023-09-02 14:33:06浏览次数:52  
标签:协议 00 寄存器 TCP Modbus 线圈

Modbus介绍
1、起源
Modbus 通信协议,是一种工业现场总线协议标准。
Modbus通信协议具有多个变种,其中有支持串口,以太网多个版本,主要有以下三种:
Modbus RTU、Modbus ASCII和Modbus TCP
优势: 免费、简单、容易使用


2、分类:
(1)Modbus RTU
二进制 效率高 常用 运行在串口上的协议,采用二进制表现形式以及紧凑型数据结构,通信效率高,应用广泛
(2)Modbus ASCII
运行在串口上的协议,采用ASCII码传输,并且利用特殊字符作为其字节的开始与结束标识,其传输效率要远远低于Modbus RTU协议,一般只有在通信数据量较小的情况下才考虑使用Modbus ASCII通信协议
(3)Modbus TCP
运行在以太网上的协议


3、优势:
免费、简单、容易使用


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


5、特点:
采用主从问答方式进行通信
Modbus TCP是应用层协议,基于传输层TCP协议实现
Modbus TCP端口号默认为502


Modbus TCP协议
TCP和RTU协议非常类似,只要把RTU协议的两个字节的校验码去掉,然后在RTU协议的开始加上5个0和一个6并通过TCP/IP网络协议发送出去即可 Modbus采用主从问答方式(master/slave)通信,有一个节点是master节点,其他使用Modbus协议参与通信的节点是slave节点(可以多个),每一个slave设备都有一个唯一的地址 ModbusTCP通常使用端口502作为接收报文端口


Modbus TCP协议格式
Modbus TCP数据帧包含报文头、功能代码和数据三部分

 Modbus TCP/IP协议最大数据帧长度为260字节

1、 MBAP报文头:
Modbus TCP/IP协议包含一个7字节报文头

 

2、寄存器
Modbus TCP通过寄存器的方式存储数据。

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

离散量输入和线圈其实就是位寄存器(每个寄存器数据占1个字节),工业上主要用于控制IO设备。

输入和保持寄存器是字寄存器(每个寄存器数据占2个字节),工业上主要用于存储工业设备的值。

 

寄存器PLC地址 开头表示状态:
0开头:线圈 1开头:离散输入 3 开头:输入寄存器 4开头:保持寄存器


离散输入寄存器
离散输入寄存器就相当于线圈寄存器的只读模式,他也是每个bit表示一个开关量,而他的开关量只能读取输入的开关信号,是不能够写的。比如我读取外部按键的按下还是松开。

所以功能码也简单就一个读的 0x02

线圈寄存器
类比为开关量,每一个bit都对应一个信号的开关状态。所以一个byte就可以同时控制8路的信号。比如控制外部8路io的高低。 线圈寄存器可读可写,写在功能码里面又分为写单个线圈寄存器和写多个线圈寄存器。

对应上面的功能码也就是:0x01 0x05 0x0f

保持寄存器
这个寄存器的单位不再是bit而是两个byte,也就是可以存放具体的数据量的,并且是可读可写的。比如我我设置时间年月日,不但可以写也可以读出来现在的时间。写也分为单个写和多个写

所以功能码有对应的三个:0x03 0x06 0x10

输入寄存器
这个和保持寄存器类似,但是也是只支持读而不能写。一个寄存器也是占据两个byte的空间。类比我我通过读取输入寄存器获取现在的AD采集值

对应的功能码也就一个 0x04

 

3、功能码:
根据四种不同的寄存器设置了8种功能码,分别如下表所示

在实际使用时会根据要进行的操作选择不同的功能码

 

功能码:

读:01 ~04
01:读线圈
02:读离散输入
03:读保持寄存器
04:读输入寄存器
写: 05 06 15 16
05:写单个线圈
06:写单个保存计时器
15:写多个线圈
16:写多个保存寄存器

 

举例:(详细解)

读取保持寄存器 功能码 :03H

 报文解析

主站询问数据流:00  00  00  00 || 00  06 || 11 || 03 || 00  6B || 00  02
从左到右依次分析:
      00 00:事务标识符,类似与TCP里的seq和ack,可以随意写,回复和发送的会一致
      00 00:协议标识符,00 00表示ModbusTCP协议
      00 06:表示接下来的数据长度,单位为字节
      11:单元标识符,即新建寄存器表时候的从机ID,默认是1
      03:功能码,读保持寄存器
      00 6B:读取的寄存器起始地址,0x6B=107则对应寄存器PLC地址为40108
      00 02:读取的寄存器个数为2个,则结束地址为40108+2-1=40109
从站应答数据流:00  00  00  00 || 00  07 || 11 || 03 || 04 || 02  2B || 01  06
前八字节不再重复,同上
       04:计数的字节个数
       02 2B:第一个寄存器40108的数据值
       01 06:第二个寄存器40109的数据值

 

功能码简解:

读线圈状态寄存器: 功能码 01H

 

读离散输入寄存器 : 功能码02H

 

读取保持寄存器 : 功能码03H

 

读输入寄存器 : 功能码04H

 

写单个线圈寄存器 : 功能码05H

 

写单个保持寄存器 : 功能码06H

 

写多个线圈状态 : 功能码0FH(15)

 

写(预置)多个保持寄存器 : 功能码10H(16)

 

 

标签:协议,00,寄存器,TCP,Modbus,线圈
From: https://www.cnblogs.com/Kirito-Asuna-Yoyi/p/ModbusTCP.html

相关文章

  • TCP KEEPALIVE以获得更好的POSTGRESQL体验进程
    如果您听说过TCPkeepalive但不确定它是什么,请继续阅读。如果您曾经对以下错误消息感到惊讶:serverclosedtheconnectionunexpectedlySSLSYSCALLerror:EOFdetectedunexpectedEOFonclientconnectioncouldnotreceivedatafromclient:Connectionresetbypeer......
  • 用tcpdump抓包做网络分析
    tcpdump不指定任何参数,监听第一块网卡上经过的数据包tcpdump-ieth0监听特定网卡tcpdumphost192.168.0.1监听特定主机的通信包tcpdumpsrchosthostname  特定来源tcpdumpdsthosthostname  特定目标tcpdumpport80           特定端口监听TC......
  • BL110支持BACnet IP、Modbus TCP等多种协议转换
    在工业自动化领域,不同的设备和系统通常采用不同的通信协议进行数据交换。为了实现不同设备之间的无缝连接和数据共享,协议转换网关成为了一种关键的工具。BL110是一款功能强大的协议转换网关,能够实现多种协议之间的转换,包括PLC协议、ModbusRTU、ModbusTCP、DL/T645、IEC101、IEC10......
  • Linux tcp连接数监控实战shell脚本
     tcp连接数监控可用于存储维护中前端业务访问量的统计:使用命令netstat-anpProto:表示协议类型,Recv-Q:表示收包数量, Send-Q:表示发包数量实战示例:#!/bin/bash#thisscriptisusedforcountthequantityofsessionoverstocklog=/ap/log/session_overstock_count.loglog......
  • 钡铼科技打造的BL122:完美集成Modbus与Profinet通信的利器
        钡铼技术BL122协议转换网关是一款专业的设备,用于将Modbus协议转换为Profinet协议。BL122采用了先进的嵌入式ARMMCU和基于LinuxOS系统的开发,具备出色的性能和高度的稳定性。BL122支持多种下行采集方式,包括ModbusRTU、ModbusTCP和ModbusASCII等。通过将这些不同的......
  • 简单描述下HTTP协议和TCP协议之间的关系以及TCP三次握手, 四次挥手
    TCP三次握手,四次挥手TCP(传输控制协议)是一种用于在计算机网络中建立可靠连接的协议。TCP连接的建立和终止分别使用了"三次握手"和"四次挥手"的过程。三次握手:-第一步:客户端发送一个带有SYN(同步)标志的TCP数据包,请求建立连接。-第二步:服务器收到请求后,回复一个带有SYN和ACK(确......
  • BL122:钡铼技术助力实现高效Modbus到Profinet协议转换
     钡铼技术BL122协议转换网关是一款专业的设备,用于将Modbus协议转换为Profinet协议。BL122采用了先进的嵌入式ARMMCU和基于LinuxOS系统的开发,具备出色的性能和高度的稳定性。BL122支持多种下行采集方式,包括ModbusRTU、ModbusTCP和ModbusASCII等。通过将这些不同的Modbus协......
  • Opcserver 连接 Modbus 设备数据类型设置的探索
     一个电子秤通过modbus串口服务器连接到网络可以用iotclient工具读取到报文但是用kepsrver总是获取不到正确的数据 至此无解决问题头绪后来经网友提醒用modbus poll采集试试连接后数据可以采集到但是看起来怪怪的,都是科学计数法试着调整数据类型,最......
  • MQTT协议
    1.MQTT协议介绍官网:http://mqtt.p2hp.com/MQTThttps://blog.csdn.net/weixin_36173034/article/details/1125110142.MQTT协议原理3.MQTT协议数据包结构Byte1:低4位MQTT消息质量QoS取决于发布者发布消息的Qos与订阅者订阅消息的Qos,取他们两者Qos最小的,即”木桶原理......
  • 07 网络层协议(IPv4协议)
    网络层在数据封装时,网络层的IP协议会为数据包封装IP头部IP协议为网络层的设备提供逻辑地址,协议规定了IP地址的格式,以及封装时的格式,负责数据包的寻址和转发办法IPv4,IPv6IPv4报文格式Version:4bit,4:表示为IPv4;6:表示为IPv6。HeaderLength:4bit,首部长度,如果不带Option......