Modbus协议介绍

2023-11-01

Modbus协议介绍

简介

Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气Schneider Electric)于 1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus 已经成为工业领域通信协议的业界标准(De facto),并且现在是工业电子设备之间常用的连接方式。

类型

Modbus协议属于应用层的报文传输协议,Modbus协议本身是个比较泛的说法,它有三种类型,分别是Modbus ASCII,Modbus RTU,Modbus TCP/IP,三者的协议并不相同,但有类似的地方,所以说Modbus协议时,最好说这三种类型中的一种

在这里插入图片描述

Modbus数据模型

数据模型是对可访问数据的一种抽象,Modbus协议的数据模型定义了四种可访问的数据,分别是:
在这里插入图片描述

既然数据模型是一种抽象,在实际使用时必须将其映射到真实的物理存储区才能被访问。

Modbus协议允许设备将四种数据分别映射到不同的存储区块中,各个区块之间相互独立,使用不同的功能码可读取到不同的数值,如下图所示:

在这里插入图片描述

Modbus协议也允许设备将四种数据映射到同一存储区块中,这样通过不同的功能码读取数据可能会得到相同的数据(比如:输入寄存器和保持寄存器为同一物理区块),如下图所示:

在这里插入图片描述

线圈:因为Modbus最初是为PLC服务的,所以线圈是PLC相关的术语,实际上就可以类比为开关量(继电器状态),每一个bit对应一个信号的开关状态,要么是1,要么是0;所以一个byte就可以同时控制8路的信号。比如控制外部8路io的高低。线圈寄存器支持读也支持写,写在功能码里面又分为写单个线圈和写多个线圈;

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

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

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

规律:

输入:表示这个存储区只能读,不能写

其余的则可读可写

注意:网上的资料对Modbus数据模型这一部分的介绍各不相同,一开始看这部分资料时被搞得乱七八糟,为什么同一种东西会有这么多不同的说法,无奈把说法不同但却是同一种东西汇总一下:

线圈 = 输出线圈 = 开关量输出 = 位状态

离散量输入 = 输入线圈 = 开关量输入

保持寄存器 = 输出寄存器 = 寄存器

Modbus数据模型 = PLC存储区

Modbus地址模型

也就是真实的物理存储区

存储区范围:分为5位和6位,对应了标准地址和扩展地址;如果使用的是5位标准地址,则4种存储区分别用5位地址中的首位来区分,如线圈是0,离散量是1,输入寄存器是3,保持寄存器是4,剩下的4位就从1 ~ 9999开始编址,表示一片连续的地址

有些设备是6位的地址,编址方法跟5位的类似,只不过地址最大只能到65536

数据模型 地址前缀标号 5位 6位 访问方式
线圈 0 00001 ~ 09999 000001 ~ 065536 读/写
离散量输入 1 10001 ~ 19999 100001 ~ 165536 只读
输入寄存器 3 30001 ~ 39999 300001 ~ 365536 只读
保持寄存器 4 40001 ~ 49999 400001 ~ 465536 读/写

通讯信息传输过程

通信的本质其实就是要么我说,你听,要么你说,我听,那应用到主机与从机之间时,就是要么主机往从机写入数据,要么主机往从机读取数据。

当通讯命令由发送设备(主机)发送至接收设备(从机)时,符合相应地址码的从机接收通讯命令,并根据功能码及相关要求读取信息,如果CRC校验无误,则执行相应的任务,然后把执行结果(数据)返送给主机。返回的信息中包括地址码、功能码、执行后的数据以及CRC校验码。如果CRC校验出错就不返回任何信息。

地址码

地址码是每次通讯信息帧的第一字节(8位),从0到247。其中0为广播地址,从机的实际地址范围为 1 ~ 247;这个字节表明由用户设置地址的从机将接收由主机发送来的信息。每个从机都必须有唯一的地址码,并且只有符合地址码的从机才能响应回送信息。当从机回送信息时,回送数据均以各自的地址码开始。主机发送的地址码表明将发送到的从机地址,而从机返回的地址码表明回送的从机地址。相应的
地址码表明该信息来自于何处。

功能码

对存储区的操作有:读和写,分别有以下的组合,再给这些操作编个号,就是功能码

功能码是每次通讯信息帧传送的第二个字节。ModBus通讯规约可定义的功能码为1到127。有些PLC器件仅用到其中的一部分功能码。作为主机请求发送,通过功能码告诉从机应执行什么动作。作为从机响应,从机返回的功能码与从主机发送来的功能码一样,就表明从机已响应主机并且已进行相关的操作。

在这里插入图片描述

数据区

数据区包括需要由从机返送何种信息或执行什么动作。这些信息可以是数据(如︰开关量输入/输出、模拟量输入/输出、寄存器、参考地址等。例如,主机通过功能码03告诉从机返回寄存器的值(包含要读取寄存器的起始地址及读取寄存器的长度),则返回的数据包括寄存器的数据长度及数据内容。对于不同的从机,地址和数据信息都不相同

CRC校验

主机或从机可用校验码进行判别接收信息是否正确。由于电子噪声或一些其它干扰,信息在传输过程中有时会发生错误,错误校验码(CRC)可以检验主机或从机在通讯数据传送过程中的信息是否有误,错误的数据可以放弃(无论是发送还是接收),这样增加了系统的
安全和效率。

MODBUS 通讯协议的CRC(冗余循环码)包含2个字节,即16位二进制数。CRC码由发送设备(主机)计算,放置于发送信息帧的尾部。接收信息的设备(从机)再重新计算接收到信息的CRC,比较计算得到的CRC是否与接收到的相符,如果两者不相符,则表明出错。

CRC校验码可用一些工具计算出,在软件编程中一般用查数组的方式

报文格式

Modbus RTU报文格式:从机地址(设备编号)+ 功能码 + 数据 + 校验 (只要是Modbus协议,都遵循这样的报文格式,其中数据是个泛指,还分为读取和回应两种不同的数据)

在这里插入图片描述

读单个或多个线圈(位状态)

主机发送:从机地址 01 起始地址 读取数据个数 CRC校验

从机返回:从机地址 01 读取到的数据长度 数据DATA1…DATAN CRC校验

在这里插入图片描述

写单个线圈(位状态)

主机发送:从机地址 05 起始地址 要写入的数据 CRC校验

从机返回:从机地址 05 起始地址 写入的数据 CRC校验

写数据时,从机返回的数据与主机发送的数据一样

在这里插入图片描述

实际例子

读单个或多个线圈(开关量)

例如︰主机要读取地址为01,开关量DO1,DO2的输出状态。从机数据寄存器的地址和数据为︰

起始位地址 D0寄存器数据(16进制) 备注
0000 02 DO2输出状态为1,DO1输出状态为0

主机发送的报文格式:

主机发送 字节数 发送的信息 备注
从机地址 1 01 发送至地址为01的从机
功能码 1 01 读开关量输出状态
起始地址 2 0000 起始位地址为0000
读数据长度 2 0002 读取两个开关量状态
CRC码 2 BDCB 由主机计算得到CRC码

从机响应返回的报文格式:

从机响应 字节数 返回的信息 备注
从机地址 1 01 来自从机01
功能码 1 01 读开关量输出状态
数据长度 1 01 1个字节(8个bit位)
D0状态数据 1 02 D0寄存器内容
CRC码 2 D049 由从机计算得到CRC码

写单个保持寄存器

例如∶主机要把数据07D0,保存到地址为002C的从机寄存器中去(从机地址码为01)。

主机发送的报文格式:

主机发送 字节数 发送的信息 备注
从机地址 1 01 发送至地址为01的从机
功能码 1 06 写单个保持寄存器
起始地址 2 002C 要写入的寄存器地址
写入数据 2 07D0 写入的新数据
CRC码 2 4BAF 由主机计算得到的CRC码

从机响应返回的报文格式:

与主机发送的报文格式及数据内容完全相同。

注意:主机发送的报文数据中,寄存器的起始地址是相对地址,像002C是相对40001来说的,00001、10001这些是绝对地址;

通过相对地址算出绝对地址要先确定数据模型的地址,如读保持寄存器,起始地址是006B,那006B是107,对应的地址就是40108,

如果是输入寄存器,起始地址也是006B,那对应的地址就是30108

可挂载的设备数量

首先在485总线上,MODBUS RTU协议理论是可以挂200+台设备,但实际应用中,由于阻抗等原因,一般是32台,除去自身的话,就是31台。

​ RS485总线可以连接256个设备,但测试后发现这个数字有比较大的差异。有一种说法认为专门开发串行嵌入式的RS485总线只能连接32个节点,这由自身的驱动能力决定的。有人说网上的各种485总线产品可以支持128个,也有人说可以支持256个,甚至高达400个,那么RS485转换器到底支持多少个?

485通信中的一个串行端口能控制多少台设备的问题,由485网络中的电特性和协议特性决定。电特性就是,为了保证485网络中的特征阻抗在允许范围内,应该是120欧姆左右,因为连接的设备越多特征阻抗越小,所以在485网络中一般是120欧姆的终端,同时保证信号的衰减在允许的范围内。因此,有长距离传输和中继的情况。协议特性是在485网络上传输的协议支持的地址范围,Modbus应该是32个,能连接31个设备。

连接方式

RS-485连接采用菊花链方式连接,而不能采用星型网络拓扑

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Modbus协议介绍 的相关文章

随机推荐

  • 每天一个小题目——喷水装置

    题目描述 小赛家有一块草坪 长为20米 宽为2米 妈妈要他给草坪浇水 在草坪上放置半径为Ri的喷水装置 每个喷水装置可以给以它为中心的半径为实数Ri 1 Ri 15 的圆形区域浇水 他家有充足的喷水装置i 1 i 600 个 并且一定能把草
  • 多态+多态对象模型

    多态 字面意思即为多种形态 C 多态性是通过虚函数来实现的 虚函数允许子类重新定义成员函数 而子类重新定义父类的做法称为覆盖或者称为重写 当使用基类的指针或引用调用重写的虚函数时 当指向父类调用的就是父类的虚函数 指向子类的就是子类的虚函数
  • 专题详解-5G接入控制:CAG新特性(3)-end

    相关文章会在公众号同步更新 公众号 5G通信大家学 持续更新的相关5G内容都是直接根据3GPP整理 保证更新内容的准确性 避免通过二手 甚至多手的资料 以讹传讹误导网友 稀稀拉拉经过这么长时间的分析 5G网络的接入控制基本算是分析完了 目前
  • 为什么使用GB28181而不是直接rtsp拉流

    1 GB sip和rtsp 实际上 sip协议和rtsp协议大同小异 并没有什么本质上得不同 那为什么我们不使用rtsp 而转而使用GB28181国标得sip协议 原因是 使用得方向不同 我们使用rtsp拉流是作为客户端 这时摄像机是服务端
  • 【问题解决】partially initialized module ‘cv2‘ has no attribute

    使用 MMOCR 时报错 partially initialized module cv2 has no attribute 可能是 opencv 的版本问题 也可能是 opencv 和当前环境不能完全匹配的问题 可以使用下面的方法重新安装
  • 分享一个 ChatGPT可免费使用的AI助手

    现在 多种行业都已经开始广泛地采用聊天机器人ChatGPT 有一个与之相关的国内免费网站可以供大家使用 多御浏览器 这是一款安全快速 高效稳定的浏览器 该网站客户端软件中 有很多实用工具 其中之一就是当下非常流行的 ChatGPT 这对于开
  • python 更换pip安装源

    pip源 默认从国外源安装 安装速度比较慢 现在我们指定国内源安装源 阿里源 豆瓣源 Ubuntu源 1 指令配置源 pip3 install xlrd i https pypi tuna tsinghua edu cn simple 2
  • Qt - QSetting的使用

    欢迎转载 请注明出处 https blog csdn net qq 39453936 spm 1010 2135 3001 5343 原文链接 https blog csdn net qq 39453936 article details
  • Allegro快捷键

    env文件替换路径C Cadence SPB 16 6 share pcb text
  • mac启动pg数据库失败 “Is another postmaster (PID 370) running in data directory“

    解决办法 进入目录 usr local var postgres 删除文件 postmaster pid 启动pg命令 pg ctl D usr local var postgres l usr local var postgres ser
  • 挖矿病毒的特点

    挖矿病毒的特点 1 文件 定时任务删除失败 文件只读属性保护 2 文件 定时任务删完又出现 系统文件替换 下载进程残留 3 病毒进程刚刚删完又被拉起 恶意进程守护 4 主机严重卡顿但找不到挖矿进程 系统命令劫持 5 主机杀干净后一段时间又出
  • 【云原生之kubernetes】在kubernetes集群下的映射外部服务—Eendpoint

    云原生之kubernetes 在kubernetes集群下的映射外部服务 Eendpoint 一 Eendpoint介绍 1 endpoint简介 2 endpoint的使用 二 检查本地k8s状态 1 检查工作节点状态 2 检查系统pod
  • Modelsim、Matlab在远程桌面下打开的异常及处理

    此方法可以解决远程桌面下启动MATLAB时的License Manager Error 103错误 也能够解决远程桌面下启动modelsim的错误 方法如下 1 打开C Program Files MATLAB R2015b license
  • kafka基础介绍

    目录 前言 一 kafka架构 1 kafka基础架构 2 kafka多副本架构 二 kafka基础概念 1 produce 2 Consumer 3 Broker 4 Topic 5 Partition 6 Replicas 7 Offs
  • C++数据结构X篇_12_树的基本概念和存储

    学习二叉树之前先学习树的概念 文章目录 1 树的基本概念 1 1 树的定义 1 2 树的特点 1 3 若干术语 2 树的表示法 2 1 图形表示法 2 2 广义表表示法 3 树的存储 3 1 双亲表示法 保存父节点关系 3 2 孩子表示法
  • 伴随矩阵的特征值和特征向量

    结 论 伴 随 矩 阵 的 特
  • winsock

    今天上午学习了 winsock的使用的过程 现将学习的收获总结如下 Winsock的属性 1 Localport 设定本机的端口号 端口号从0 65536 其中1024一下一般为专用的端口 如21为ftp默认端口 80为http默认端口 2
  • 关于对CSDN这些技术博客类网站的一些个人看法

    今天这篇文章其实是自己的一个分享与感悟 分享一下自己从技术小白到有点小实力的这个过程中对自己帮助的一些技术博客类网站的看法 关于我为什么会想写这么一篇文章呢 起因是我有一次查CSDN网站时候 看到了一篇文章 第一眼看到这篇文章的时候我觉得首
  • Java多线程 - - -线程安全问题

    Java 多线程学习笔记 二 线程安全问题的出现 当一个进程中的多个线程共享资源或数据的时候 就会出现安全隐患 例如 三个售票窗口同时售票 如果没有进行线程安全的处理 则会出现重票 错票等线程安全问题 package com fff 实现R
  • Modbus协议介绍

    Modbus协议介绍 简介 Modbus是一种串行通信协议 是Modicon公司 现在的施耐德电气Schneider Electric 于 1979年为使用可编程逻辑控制器 PLC 通信而发表 Modbus 已经成为工业领域通信协议的业界标