MODBUS入门

纸鸢|工业物联网通讯协议Modbus协议详解 目录 Modbus简介 格式总览 从机地址 功能码寄存器 PLC地址Modbus协议地址 功能码总览 异常分析 Modbus简介 Modbus 是一种串行通信协议,是 Modicon 于 1979 年,为使用可编程逻辑控制器(PLC)而发表的。Modbus 是工业领域通信协议的业界标准,并且现在是工业电子设备之间相当常用的连接方式。 格式总览 从机地址 功能码寄存器 PLC地址Modbus协议地址 PLC地址 PLC 的地址,是指控制器中 阅读详情

一、基本术语

1 word、字节byte、位bit

1 word = 2 byte 例如十六进制00 13

1 byte = 8 bit   例如十六进制13   1*161+3*160=19(十进制)

2  校验码(知道有这个就行,不必知道如何算)

校验码是由前面的数据通过某种算法得出的,用以检验该组数据的正确性。代码作为数据在向计算机或其它设备进行输入时,容易产生输入错误,为了减少这种输入错误,编码专家发明了各种校验检错方法,并依据这些方法设置了校验码。

常用的校验有:累加和校验SUM、字节异或校验XOR、纵向冗余校验LRC、循环冗余校验CRC……

3  协议和接口

(1)协议是一种规范和约定,是一种通讯的语言,规定了通信双方能够识别并使用的消息结构和数据格式。

(2)接口是一种设备的物理连接,指的是在物理层上的定义,像RS422/RS232/RS485/以太网口等。协议和接口并不是一个概念,不能混淆。

(3)Modbus协议一般运行在RS485物理接口上,半双工的,是一种主从协议。

 

二、Modbus协议概述

Modbus协议是应用于电子控制器上的一种通用语言,实现控制器之间、控制器由网络和其它设备之间的通信,支持传统的RS232/RS422/RS485和最新发展的以太网设备。它已经成为一种通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中控制。此协议定义了一个控制器能认识使用的消息结构。

Modbus协议是一种请求——应答方式的协议。

三、两种传输方式

1  ASCII模式(可忽略,用得少,知道即可)

ASCII:美国标准信息交换代码

2  RTU模式

RTU:远程终端单元

①     消息中每个8bit字节包含两个4bit的十六进制字符,因此,在波特率相同的情况下,传输效率比ascii传输方式大

②     1个起始位、8个数据位、1个奇偶校验位和1个停止位(或者两个停止位)

③      错误检测域是CRC检验

目前常用的是RTU传输方式,下面的将以RTU传输方式为例

 

四、报文格式

  1. 读数据:

下行报文:(主站发信息给从站,例如监控LCU5要10kV系统地刀的状态信号)

从机地址

功能码

寄存器起始地址高字节

寄存器起始地址低字节

读取寄存器个数高字节

读取寄存器个数低字节

CRC校验低

CRC校验高

上行报文:(从站根据主站要求,反馈的数据,例如10kV系统反馈地刀状态信号)

从机地址

功能码

返回字节个数

寄存器数据

CRC校验

  1. 写数据:(用的少,可忽略)

下行报文:

从机地址

功能码

寄存器起始地址

写寄存器个数

要写的数据

CRC校验

上行报文:

从机地址

功能码

寄存器起始地址

写寄存器个数

写入的数据

CRC校验

  1. 从机地址范围

1~247,0为广播地址,占一个字节。

理论上Modbus协议可以接247个从机,但若用于485接口上则由于接口的限制,在没有中继情况下,最多可以接32个从机

  1. 功能码

1~255,占一个字节,电力系统中modbus协议的数据主要分为四类:离散量输入对应开入(遥信),线圈状态对应开出(遥控),输入寄存器对应只读的模拟量(遥测),保持寄存器对应可读可写的模拟量(遥测、遥调)。

电力系统中常用功能码表

数据类型

读功能码

写功能码

对象类型

离散量输入(DI)

02

 

单个位

线圈状态(DO)

01

05,15

单个位

输入寄存器(AI)

04

 

16位字

保持寄存器(AI/AO)

03

06,16

16位字

上表中是对应数据类型的标准功能码,但在实际应用中,厂家通常会根据实用性做些变通(柴油机项目:综保装置比较正常,柴油机控制器比较异类),但并不影响数据的读写。

  1. 寄存器起始地址

寄存器起始地址占两个字节,高字节在前,低字节在后。

Modbus协议中数据模型常用的有两种,带有4个独立块的modbus数据模型和仅有1个块的modbus数据模型,对于不同的数据模型参数地址的编制不同。一般采用1个块的modbus数据模型,如下

 

数据类型

参数地址,寄存器编号

离散量输入

00001~0FFFF

线圈状态

10001~1FFFF

输入寄存器

30001~3FFFF

保持寄存器

40001~4FFFF

Modbus协议中寄存器地址从1开始,而实际存储中地址从0开始。假如要读取寄存器编号为40005(4为块编号,5为modbus中寄存器地址)的寄存器的数据,则应把00 04放入报文的地址域。寄存器定义,又名码表或者信息点表,应由厂家提供的。

举例干式变的温控器:

寄存器编号

属性

定义

系数

40001

RO

A相温度

 0.1

40002

RO

B相温度

 0.1

如要读A相温度,则应将0x00 0x00放入寄存器起始地址域中。

  1. 要读取的寄存器个数

寄存器个数占两个字节,同样是高字节在前,低字节在后,下行报文使用。

  1. 数据的字节数

数据的字节数,占一个字节,上行报文用,不同于寄存器个数。

  1. 数据域

数据域占n个字节,也是高字节在前,低字节在后

  1. CRC校验

CRC校验占两个字节,低字节在前,高字节在后

 

五、报文实例

读40001、40002两个寄存器是温控器存储A、B相温度的,功能码03,假设从机地址为1

下行报文:01 03 00 00 00 02 85 ca

从机地址

功能码

寄存器起始地址

读取寄存器个数

CRC校验

01

03

00 00

00 02

85 ca

上行报文:01 03 04 00 36 00 3C 21 33

从机地址

功能码

返回字节个数

寄存器40005数据

寄存器40006数据

CRC校验

01

03

04

00 36(54℃)

00 3C(60℃)

21 33

 

小程序access_token未超时报失效:40001的原因 前言:背景是由于需要实时生成小程序二维码,使用接口B。我们需要获取小程序的access_token,但是获取access_token的请求次数是有限制的(一天2000次),为了避免超出这个限制,后台一般做法是使用redis限时(一般小于7200秒)保存。但是发现时不时出现小程序access_token未超时报失效:40001的错误 接口B文档:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxa. 阅读详情

相关推荐

Modbus协议的数据模型地址模型,Modbus寄存器40001,30001是什么意思?

线圈(Coils);其中,离散量输入线圈只支持以位(bit)的方式进行访问,输入寄存器保持寄存器只支持以字(WORD)的方式进行访问;比如本文开头提到到地址40001就是保持存储器的第一个值的地址,而10001就是离散量输入的第一个值的地址;要注意的是,保持寄存器输入寄存器的每个值的大小为16bits(字),而线圈离散量输入每个值的大小为1bit(位);数据模型中的每一种数据都最多允许有65536个元素(编号1~65536),元素的地址编号从0开始,因此地址的范围为:0~65535;

bobozai86的博客 5965

Modbus协议简易入门教程

大家好,我是小麦,以前写过一篇文章是关于modbus协议的,只是简单地做了一下介绍,这次对于modbus RTU协议进行了深入的学习。背景介绍modbus rtu之前,我们可以了解到,Mo...

一名热爱技术的工程师的博客。分享技术干货,记录美好生活。永远相信美好的事情即将发生。 7806

Modbus 协议快速入门

Modbus 协议快速入门

zinbin的博客 1529

微信开发 | 模板消息推送时报错‘errcode‘: 40001, ‘errmsg‘: access_token 过期的种种可能

关于模板消息推送时报错'errcode': 40001, 'errmsg': access_token 过期的种种可能

红星编程实验室 1万+

微信报错:“code“:“40001

{"code":"40001","message":"invalid credential, access_token is invalid or not latest rid: 6285b05b-6dc11ee1-4a77d5ba"}

baidu_28767649的博客 8242

Modbus协议开发入门

Modbus协议开源库 libmodbus pymodbus QModbus

深之JohnChen的专栏 981

java modbus tcp_modbus tcp 入门详解

前言:但是上面的两篇文章是已经封装好的API,只要调用就可以实现功能了,对于想了解modbus tcp的原理的人可能就不适合了,最近有不少网友的想要了解这个协议,所以在这里再写一篇介绍Modbus tcp的文章,不过这篇文章是简易版本的,未来我再研究深入的话,再开一篇高级版,在简易版中,就略去了成功标志位及其他数据标志,这些到等到后面再说。先分享一下,我自己学习的地址来源:http://blog....

weixin_42617406的博客 1571

Modbus4j 教程:入门与实践

**Modbus4j** 是一个高性能且易用的 Java 实现的 Modbus 协议库,支持 ASCII、RTU、TCP UDP 传输方式,既可以作为 Modbus 主站(Master),也可以作为从站(Slave)。该项目由 Infinite Automation 提供,旨在提供自动请求分区、响应数据类型解析等功能,以简化在 Java 应用中集成 Modbus 的工作。 ## 2. 项目快...

gitblog_00322的博客 1087

一口气入门Modbus协议

RS485:是硬件,是路,决定了数据能传多远、多稳、带多少设备。Modbus:是软件协议,是交规,规定了数据的具体格式传输规则,让设备之间能听懂对方的话。为什么用Modbus:因为它简单、免费、用的人最多,是工业领域里的“普通话”。学会了它,你就能市场上绝大部分的工业设备“对话”了。你先掌握了Modbus+RS485这个黄金组合,就打下了工业通信的坚实基础,以后再学其他更复杂的协议就容易多了!特性线圈寄存器保持寄存器类比开关货架数据货架存的东西状态(开/关, 是/否)数值。

2401_84570057的博客 883

ModBus入门到放弃

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考MODBUS是一种应用层消息传递协议,位于OSI模型的第7级,它提供连接在不同类型的总线或网络上的设备之间的客户端/服务器通信。通信协议栈如下图其可以在物理层上直接构建应用层,如在RS485上使用ModBus RTU模式,下图是在各种物理层上使用ModBus的例子常见各种模式的对比,主要是数据包格式不同模式传输方式。

weixin_45919563的博客 1084

一篇关于modbus入门的基础知识。

http://www.elecfans.com/rengongzhineng/596297.html modbus 入门篇,详细介绍(值得收藏)

明天乌儿会歌唱 397

Modbus协议入门基础

Modbus协议基础摘要 Modbus是一种广泛应用于工业自动化的通信协议,包含RTU、ASCIITCP三种传输模式。本文介绍了Modbus RTU与RS485的关系(物理层与通信协议的关系),以及Modbus的基本概念报文格式。 主要内容包括: Modbus存储区分类(线圈寄存器Modbus地址规则(短地址位长地址模型) 8种功能码及其用途 三种协议格式差异(RTU、ASCII、TCP) 详细解析RTU报文格式,包括读取输出线圈的报文示例 关键词:Modbus协议、RS485、RTU、存储

yue008的博客 1132

PyQt入门指南十一 Modbus下位机通信

PyQt 是一个用于创建桌面应用程序的 Python 框架,而 Modbus 是一种工业领域广泛使用的通信协议,用于设备之间的数据交换。结合 PyQt Modbus,你可以创建一个图形用户界面(GUI)应用程序,用于控制监控支持 Modbus 协议的下位机设备。

Life is not divided 478

modbus快速入门

用于 PLC、传感器、变频器、仪表、智能电表等设备之间交换数据。主从结构(传统 Modbus RTU/TCP)是被询问、返回数据或执行命令的一方。但工业现场仍然习惯叫主站/从站。在 Modbus 里面,Modbus 是一种。

qq_43085008的博客 196

Modbus协议的快速入门 (2) - 从Modbus RTU说起

Modbus协议的入门级别的基本介绍

DeviceTalk的博客 2263

Modbus通信从入门到精通_1_Modbus通信基础

Modbus通信从入门到精通中使用到的测试软件。

分享学习成长历程,Winter is coming! 3952

[AI8051U入门第五步]modbus_RTU主机

本文介绍了Modbus RTU主机程序开发与Slave软件使用方法。首先通过5个步骤详细讲解了Modbus Slave软件的配置流程,包括串口参数设置等关键环节。随后展示了Modbus通信的核心代码实现:发送函数构建完整RTU数据帧(包含地址、功能码、寄存器信息及CRC校验),以及解析函数处理从机响应(校验CRC、解析指令类型数据)。示例中通过P33按键控制LED亮灭,演示了Modbus寄存器功能。文章提供了完整的程序下载资源,适合开发者快速实现Modbus RTU主机通信功能。

sinat_58149788的博客 287

Modbus入门

Modbus是典型的半双工模式,有且只有一个master,请求由master发出,slave响应。其中 Slave相当于服务器(Modbus Slave),Poll相当于客户端(Modbus Master)。Modbus的存储区有:输入线圈(布尔,只读,代号1区),输入寄存器寄存器,只读,代号3区),输出线圈(读写,布尔,代号0区),输出寄存器寄存器,读写,代号4区)modbus使用范围广泛,广泛应用于各类仪表,PLC等。基本配置,配置完选择ok,接下来只要配置要使用的接口方式(网卡,串口等)

xiuyuandashen的博客 1771
上一篇: 三小工具构建Modbus调试环境
下一篇: Confluence 6.15.2不重装的升级
wupace
博客等级 码龄18年 2粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值