Modbus协议介绍及Modbus TCP

2023-09-12 21:00:49

一、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字节,线圈数/寄存器数)
更多推荐

GSMA SGP.21协议学习

GSMASGP.21协议学习1简介1.1概述本文档提供了一种体系结构方法,作为所有市场中设备的远程SIM配置的建议解决方案。体系结构的主要目标是为设备的远程SIM配置提供必要的凭据以获取移动网络访问权限。该版本专注于消费类市场的设备。请注意,SGP.21V1.0[23]尚未弃用。1.2范围本文档的目的是定义一个通用架构

图像识别在自动驾驶和智能安防中的关键应用

图像识别在自动驾驶和智能安防中的关键应用随着人工智能和深度学习技术的发展,图像识别已经成为了自动驾驶和智能安防领域的关键应用之一。图像识别技术能够通过处理和分析图像数据,帮助自动驾驶车辆和智能安防系统实现更准确、更高效的运行。本文将介绍图像识别在自动驾驶和智能安防中的关键应用及其相关技术。一、图像识别在自动驾驶中的应用

设计模式实战:模版方法

1.模版方法概述在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。例如,去银行办理业务一般要经过以下4个流程:取号、排队、办理具体业务、对银行工作人员进行评分等,其中取号、排队和对银

并发编程系列-分而治之思想Forkjoin

我们介绍过一些有关并发编程的工具和概念,包括线程池、Future、CompletableFuture和CompletionService。如果仔细观察,你会发现这些工具实际上是帮助我们从任务的角度来解决并发问题的,而不是让我们陷入线程之间如何协作的繁琐细节(比如等待和通知等)。对于简单的并行任务,你可以使用“线程池+F

数据库顶会 VLDB 2023 论文解读 - Krypton: 字节跳动实时服务分析 SQL 引擎设计

“Krypton源于DC宇宙中的氪星,它是超人的故乡,以氪元素命名”。引言近些年,在复杂的分析需求之外,字节内部的业务对于实时数据的在线服务能力也提出了更高的要求。大部分业务不得不采用多套系统来应对不同的Workload,虽然能满足需求,但也带来了不同系统数据一致性的问题,多个系统之间的ETL也浪费了大量的资源,同时对

区块链(1):区块链简介

区快链是通过密码技术保护的分布式数据库这是比特币背后的技术。本文将逐步带您了解区块链。1区块链BLOCKCHAIN的类的定义区块链有一个区块列表。它从一个单独的块开始,称为genesisblock【创世区块】2区块链BLOCK的类的定义第一个区块叫做Genesis[创世]block,每个块存储以下信息:IndexTim

Android 查看按键信息的常用命令详解

Android查看按键信息的常用命令详解文章目录Android查看按键信息的常用命令详解一、主要命令:二、命令详解1、getevent2、getevent-l3、dumsysinput4、catXXX.kl4、cat/dev/input/eventX5、getevent其他命令6、inputkeyeventXX三、简单

【性能测试】JMeter:集合点,同步定时器的应用实例!

一、集合点的定义在性能测试过程中,为了真实模拟多个用户同时进行操作以度量服务器的处理能力,可以考虑同步虚拟用户以便恰好在同一时刻执行操作或发送请求。通过插入集合点可以较真实模拟多个用户并发操作。(注意:虽然通过加入集合点可以约束请求同时发送,但不能确保请求同时到达服务器,所以只能说是较真实模拟并发)在JMeter中可以

Android SurfaceFlinger导读(03)MessageBase

该系列文章总纲链接:AndroidGUI系统之SurfaceFlinger系列文章目录说明:关于导读:导读部分主要是方便初学者理解SurfaceFlinger代码中的机制,为后面分析代码打下一个更好的基础,这样就可以把更多的精力放在surfaceFlinger的业务逻辑分析上。关于代码分支:以下代码分析均在androi

用Jmeter进行压测详解

简介:1.概述一款工具,功能往往是很多的,细枝末节的地方也很多,实际的测试工作中,绝大多数场景会用到的也就是一些核心功能,根本不需要我们事无巨细的去掌握工具的所有功能。所以本文将用带价最小的方式讲解如何快速上手使用jmeter来进行压测。JMeter,一款接口测试工具,是Java程序,需要JDK环境,建议使用JDK8或

GaussDB技术解读系列:高级压缩之OLTP表压缩

8月16日,第14届中国数据库技术大会(DTCC2023)在北京国际会议中心顺利举行。在GaussDB“五高两易”核心技术,给世界一个更优选择的专场,华为云数据库GaussDB首席架构师冯柯对华为云GaussDB数据库的高级压缩技术进行了详细的解读。GaussDB高级压缩全景高级压缩是面向业务全场景的数据库压缩解决方案

热文推荐