modbus学习笔记——帧
几个需要先搞懂的概念
1.modbus的数据类型

modbus定义了四种数据类型,这四种数据类型分别叫“离散量输入”“线圈”“输入寄存器”“保存寄存器”,这四种数据类型的功能见上表,其实他这名字很容易让人搞混了,我们只要记住这四个仅仅是四种数据类型的名字就行了,不要与现实中其他同名的东西搞混就行(例如“线圈”在这了就是一个数据类型,这种数据类型是可读可写的,不要与物理上的线圈混为一谈)
数据类型功能解析:
离散量输入——只读,获取某个IO状态(1bit)。
线圈——读写,主要用于设置某个值。
输入寄存器——只读,获取某个16bit数据的值。
保持寄存器——读写,设置某个16bit数据的值。
2.modbus的功能码
下图是一个modbus的帧格式,其中PDU由两部分组成,功能码和数据。

功能码是一个8位的数据,的作用是说明该帧是干什么的。比如,0x01代表读取线圈,0x02代表读取输入离散量,详细功能见下图

下面正式开始说明modbus的帧。

上图中,左边是请求,右边是响应。
请求帧的PDU数据是:02 00 C4 00 16
02 是功能码,根据功能码的定义(上表)02的意思是读取离散数据量。
00 C4 这两个是起始地址,00是高8位,C4是低8位。离散数据量可以有很多,都被放置在一个数组中(比如A[100])。
00 16 是要读取的数据的数量,00 是高8位,16是低8位。意思就是读取0x16个数据(注意这里是16进制,转换成10进制就是22)连同上一行数据(00C4)合起来的意思就是从0x00C4开始,读取0x0016个数据。
右边是响应。
响应的PDU是:02 03 AC DB 35
02 功能码。
03 说明返回了0x03个字节的数据。
AC DB 35 这三个字节的数据就是请求中需要读取的从ox00C4开始的0x0016个数据,由于0x16(十进制是22)个数据(就是22个bit,因为离散数据量是单个bit的)在
两个字节(两个字节只有16个bit)里放不下,所有这里需要3个字节(并未全部占全,剩下的两个用0补齐)。
那么数据如何对应地址呢?
请求中需要得到的数据是0x00C5——0x00DA(共0x16个)。
于是,0xC5——0xCC、0xCD——0xD4、0xD5——0xDA。
对应的就是上面图中响应帧的204-197,212-205,218-213.注意,高位在前。
modbus学习笔记——帧的更多相关文章
- EasyARM i.mx287学习笔记——通过modbus tcp控制GPIO
0 前言 本文使用freemodbus协议栈,在EasyARM i.mx287上实现了modbus tcp从机. 在该从机中定义了线圈寄存器.当中线圈寄存器地址较低的4位和EasyARM的P2 ...
- 物联网学习笔记三:物联网网关协议比较:MQTT 和 Modbus
物联网学习笔记三:物联网网关协议比较:MQTT 和 Modbus 物联网 (IoT) 不只是新技术,还是与旧技术的集成,其关键在于通信.可用的通信方法各不相同,但是,各种不同的协议在将海量“事物”连接 ...
- freemodbus modbus TCP 学习笔记
1.前言 使用modbus有些时间了,期间使用过modbus RTU也使用过modbus TCP,通过博文和大家分享一些MODBUS TCP的东西.在嵌入式中实现TCP就需要借助一个以太网协议 ...
- 播放一个视频并用滚动条控制进度-OpenCV应用学习笔记二
今天我们来做个有趣的程序实现:利用OpenCV读取本地文件夹的视频文件,并且在窗口中创建拖动控制条来显示并且控制视频文件的读取进度. 此程序调试花费了笔者近一天时间,其实大体程序都已经很快写出,结果执 ...
- Android动画学习笔记-Android Animation
Android动画学习笔记-Android Animation 3.0以前,android支持两种动画模式,tween animation,frame animation,在android3.0中 ...
- 离屏渲染学习笔记 /iOS圆角性能问题
离屏渲染学习笔记 一.概念理解 OpenGL中,GPU屏幕渲染有以下两种方式: On-Screen Rendering 意为当前屏幕渲染,指的是GPU的渲染操作是在当前用于显示的屏幕缓冲区中进行. O ...
- cocos2dx游戏开发——微信打飞机学习笔记(三)——WelcomeScene的搭建
一.场景与层的关系: cocos2dx的框架可以说主要由导演,场景,层,精灵来构成: 1.其中导演,意如其名,就是操控整个游戏的一个单例,管理着整个游戏. 2.场景就像电影的一幕剧情,所以说,懂得如何 ...
- iOS学习笔记-精华整理
iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...
- KTHREAD 线程调度 SDT TEB SEH shellcode中DLL模块机制动态获取 《寒江独钓》内核学习笔记(5)
目录 . 相关阅读材料 . <加密与解密3> . [经典文章翻译]A_Crash_Course_on_the_Depths_of_Win32_Structured_Exception_Ha ...
随机推荐
- java并发包分析之———volitale
首要结论:volatile 变量提供了线程的可见性,并不能保证线程安全性和原子性. 什么是线程的可见性: 锁提供了两种主要特性:互斥(mutual exclusion) 和可见性(visibility ...
- DjangoRestFramework的外键反向关系序列化的一个问题
先用文档中的样例: Models定义: class Album(models.Model): album_name = models.CharField(max_length=100) artist ...
- 小试cordova
Cordova就是以前的PhoneGap捐献给Apache的最新开源版本. 安装一定要走npm网络方式,需要装Node.js,npm(windows nodejs安装包包含npm),Git.因为必须要 ...
- pymongo "ServerSelectionTimeoutError: No servers found yet" 错误的解决
系统转移过程中,擅自把aptitude安装的mongoengine换成了pip安装,系统启动以后,报这个错误 报错提示: File "/usr/local/lib/python2.7/dis ...
- 【Java入门提高篇】Day16 Java异常处理(上)
当当当当当当,各位看官,好久不见,甚是想念. 今天我们来聊聊Java里的一个小妖精,那就是异常. 什么是异常?什么是异常处理? 异常嘛,顾名思义就是不正常,(逃),是Java程序运行时,发生的预料之外 ...
- centOS7虚拟环境搭建
今天来记录一下使用WMware虚拟机来搭建centOS虚拟机的过程. 本次使用工具为VMware Workstation 14 Pro,可以从https://www.vmware.com/来获取所需工 ...
- Hibernate二级缓存简述及基于Spring4,Hibernate5,Ehcache3的二级缓存配置
Hibernate L2缓存 缓存的分类 L2缓存工作原理 放入二级缓存的数据 Ehcache 依赖 ehcache.xml 常用的memoryStoreEvictionPolicy(缓存算法) eh ...
- CentOS7搭建LAMP实战
环境配置从官网下载稳定的源码包解压预编译编译编译安装启动服务 环境配置 # yum install -y vim wget links //安装一下基本工具# systemctl stop firew ...
- 第六章 MySQL 查询
查询数据表 语法: SELECT {* | <字段列表>} [ FROM <表1>, <表2>.... [ where <表达式> ] [ group ...
- Unity3D学习(八):《Unity Shader入门精要》——透明效果
前言 在实时渲染中要实现透明效果,通常会在渲染模型时控制它的透明通道. Unity中通常使用两种方法来实现透明 :(1)透明度测试(AlphaTest)(2)透明度混合(AlphaBlend).前者往 ...