【ModBus】modbus之功能码详细讲解(2)
hey-girl东拼西凑原创文章,若有歧义可留言,若需转载需标明出处
前言: 本篇主要针对modbus4种操作的数据对象进行详解。针对不同的功能码结合实际报文案例进行分析。若是新手,请先读之前的文章,在转到这篇。
以下案例来自书籍《modbus软件开发实战指南》中部分摘取,作为个人学习理解。
功能码01(读线圈状态)
- 概念:读取从设备的线圈状态
- 查询报文
查从设备地址为3,并读取从设备的Modbus地址00019-00055(线圈地址)。共计37个状态值。起始线圈地址0x13(即十进制的00019)。线圈地址是从0开始计数。
RTU:03 01 00 13 00 25 CRC - 响应报文
我们查的是37个线圈的状态。在响应的数据中。每个线圈占用1bit。状态被表示1=ON ,0=OFF。第一个数据字节的最低有效位,标识查询报文中的起始线圈的状态值。其他线圈以此类推,一直到这个数据的最高有效位。并在后续的字节中按照同样的方式由低到高排列。
也就是说在本例中。37个状态,8位一字节表示,需要5个字节保存状态。不能填满就补0。
比如20-27这一部分的状态ON-ON-OFF-ON-OFF-ON-OFF,等价11001010。二进制表示为01010011,16进制为0x53.
那下图4-3就很好理解了。数据1 一个字节(16进制)表示就是 8个线圈状态了
功能码02(读离散量输入值)
- 概念:读取从设备的离散量输入的on/off状态
- 查询报文
查从设备地址为3,读取从设备的离散,输入寄存器中的地址10101-10120。modbus地址十进制表示100-199。共计20个离散输入状态值。如果是RTU得模式报文应该就是 03(设备地址) 02(功能码) 00(起始地址高位) 64(低位) 00(寄存器数高位) 14(寄存器数低位) CRC。0x64就是十进制100
- 响应报文
RTU的情况:
03地址 02功能码 03数据域的字节数(就是数据占多少字节)
0x53 8bit(01010011),每一位代表一个状态1=on 0=off。这里取20个离散状态。也就是3个字节可以装下。和前面一样补0
功能码03(读取保持寄存器值)
- 概念:读取从设备保持寄存器的内容,不支持广播模式。消息帧必须指定要读取的寄存器开始地址和寄存器数量。
- 查询报文
查询从设备地址为7,读的保持寄存器起始地址40201-40203一共3个寄存器的内容。也就是对应modbus协议地址200-202的内容。
- 响应报文
保持寄存器以字(word)为单位,前面文章也说到过1word=2byte。上面的查询报文我发的是连续读3个寄存器内容。将返回6个字节。注意保持寄存器中各地址的具体内容和意义,是设备开发者定的。我理解就是这里响应的数据代表什么含义。需要和产品对接。
功能码04(读取输入寄存器值)
- 概念:读取输入寄存器值,不支持广播模式。消息帧中需要定义寄存器的起始地址和数量
- 查询报文
读从设备地址为7,输入寄存器地址30301-30302。共3个寄存器地址。即读取modbus协议地址300-302的内容。报文如下:
- 响应报文
也是以字为单位,连续读3个。就是6个字节
功能码05(写单个线圈或单个离散线圈)
概念:用于将单个线圈寄存器或离散输入设置为ON或者OFF,之前的操作都是读,这个是写的操作。支持广播模式。广播模式就是批量改。0XFF00表示ON,0X0000表示OFF。其他的值都是非法。并且对寄存器不起作用,并且返回异常响应
查询报文
查询报文必须有:从设备地址,需要操作的线圈的地址、要修改的值。就理解成edit操作。线圈地址从0开始计数。
例:从设备地址为3,设置线圈地址00150为ON状态。则线圈地址为0x95(十进制的149)
响应报文
针对修改的结果进行响应。成功会返回和查询报文一样的报文。失败会异常。(异常情况单独在说,这里只反映成功)
功能码06(写单个保持寄存器)
- 概念:修改单个保持寄存器的值。支持广播,也就是批量改
- 查询报文
一样的,需要改谁,改哪里,改啥样。
例:从设备地址为3,设置寄存器地址40150为1200(hex 0x04b0),即modbus地址0x95(十进制的149)
- 响应报文
和之前写线圈一样,成功就返回一样的报文,失败就异常。这里就不贴了
功能码08(诊断功能)
- 概念:只用于串行链路(个人理解就是tcp不适用),主要就是检测主从设备之间的通信故障,或者检测从设备的各种内部故障。不支持广播。为了区别诊断类型。查询报文中提供2个字节的子功能码字段。
- 时间有限这块内容,推荐看书了解。
功能码15(写多个线圈)
概念: 就是一次设置 多个连续的的线圈或者离散输出。设置为ON或者OFF.支持广播(也就是一次改多个从设备)
查询报文
从站地址为5,需要设置的线圈地址为20-30,值在下表
响应报文
成功返回写入的线圈数量,这里是0x0B(十进制的11)
功能码16(写多个保持寄存器)
概念:设置从设备保持寄存器的多个连续的地址块(1-123个寄存器)。支持广播模式
查询报文
包含了请求数据字段。各数据按每个寄存器2个字节来存放(word)
例:从站地址为5,将保持寄存器地址40020-40022设置为下表的值。
响应报文
关于异常功能码,可以参考这位作者大大写的文章异常码
【ModBus】modbus之功能码详细讲解(2)相关推荐
- 适合新手练手,用Python爬取OPGG里英雄联盟英雄胜率及选取率,详细讲解加注释(建议收藏练手)
今天来个简单的小项目,适合新手拿来练手,在OPGG上爬取英雄联盟里的法师,ADC,打野,辅助所有英雄的胜率及选取率,是不是感觉很高大上,但是却很简单,只要用三十多行代码就能实现,详细讲解每一行代码加注 ...
- Python的零基础超详细讲解(第十三天)-Python的类与对象
基础篇往期文章如下: Python的零基础超详细讲解(第一天)-Python简介以及下载 Python的零基础超详细讲解(第二天)-Python的基础语法1 Python的零基础超详细讲解(第三天)- ...
- Python的零基础超详细讲解(第十二天)-Python函数及使用
基础篇往期文章: Python的零基础超详细讲解(第一天)-Python简介以及下载_编程简单学的博客-CSDN博客 Python的零基础超详细讲解(第二天)-Python的基础语法1_编程简单学的博 ...
- Python的零基础超详细讲解(第七天)-Python的数据的应用
往期文章 Python的零基础超详细讲解(第一天)-Python简介以及下载_编程简单学的博客-CSDN博客 Python的零基础超详细讲解(第二天)-Python的基础语法1_编程简单学的博客-CS ...
- Python的零基础超详细讲解(第五天)-Python的运算符
往期文章 Python的零基础超详细讲解(第一天)-Python简介以及下载_编程简单学的博客-CSDN博客 Python的零基础超详细讲解(第二天)-Python的基础语法1_编程简单学的博客-CS ...
- java异常详细讲解_Java异常处理机制的详细讲解和使用技巧
一起学习 1. 异常机制 1.1 异常机制是指当程序出现错误后,程序如何处理.具体来说,异常机制提供了程序退出的安全通道.当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器. 1.2 ...
- 未来网络发展的趋势——IPv6详细讲解与基本配置
实验目的: 1. 掌握IPv6的基本工作原理: 2. 区别IPv6和IPv4有什么区别: 3. 掌握IPv6的一些新的特征: 4. 掌握IPv6的发展进程和部署情况: 实验拓扑: 实验步骤: 一. ...
- Php中如何记录本报时间,详细讲解PHP的日期时间函数date()
详细讲解PHP的日期时间函数date() 作者:wang 日期:2009-06-06 字体大小: 小 中 大 1,年-月-日 echo date('Y-m-j'); 2007-02-6 echo da ...
- PE格式详细讲解4 - 系统篇04|解密系列
PE格式详细讲解4 - 系统篇04 让编程改变世界 Change the world by program 到此为止,小甲鱼和大家已经学了许多关于 DOS header 和 PE header 的 ...
最新文章
- 微软Cortana全面升级神经网络语音,效果堪比真人发音
- SCA与spring集成(在spring中开发SOA)
- python Appium安装及环境配置 mitmproxy安装配置
- 学习Java--JDK的下载安装和配置
- 【CyberSecurityLearning 75】DC系列之DC-6渗透测试(WordPress)
- 淘宝2011.9.21校园招聘会笔试题
- ubuntu要更新18.04了,lei了lei了~~~
- 音频播放时,将前台服务和通知栏关闭
- axis1 c# 接口 调用_java调用c#的Webservice接口数据报错
- LeetCode 496. 下一个更大元素 I
- jvm 虚拟机的组成部分
- IOS 的loadView 及使用loadView中初始化View注意的问题。(死循环并不可怕)
- Linux虚拟文件系统(内核初始化二)
- 190609每日一句,科比·布莱恩特:这就是我成功的原因,即使身陷低谷,也要抬头仰望星空
- 目前股指期货保证金(目前股指期货保证金是多少)
- 笔记01-如何创建一个vue3的项目
- QGraphicsItem释放内存——QGraphicsRectItem
- windows命令行连接远程服务器MongoDB
- php 五角星,php使用GD库画五角星
- 关于百度快照问题的若干说明
热门文章
- 解决Error:Kotlin报错The binary version of its metadata is 1.5.1, expected version is 1.1.16问题
- 鲸享云小节点小A需求
- android 类似金山词霸 每日一句源代码 csdn,个人作业2——英语学习APP案例分析(示例代码)...
- 辞职后三个月才能走是不是违法的
- Linux 配置Nginx环境变量Nginx常用命令
- linux解压jar
- SliverLight跨域访问
- 【ML】基于LSTM的心脏病预测研究(附代码和数据集,系列1)
- 混合整数线性规划,图的最大流,图的匹配,求解
- 高性能mysql观会感_【高性能Mysql 】读书笔记(一)