modbus详细介绍(值得收藏)
先来简单分析一条MODBUS-RTU报文,例如:01 06 00 01 00 17 98 04
01 06 00 01 00 17 98 04
从机地址 功能号 数据地址 数据 CRC校验
这一串数据的意思是:把数据 0x0017(十进制23) 写入 1号从机地址 0x0001数据地址。
先弄明白下面的东西。
1、报文
一个报文就是一帧数据,一个数据帧就一个报文: 指的是一串完整的指令数据,就像上面的一串数据。
2、CRC校验
意义:例如上面的 98 04 是它前面的数据(01 06 00 01 00 17)通过一算法(见附录2,很简单的)计算出来的结果,其实就像是计算累加和那样。(累加和:就是010600010017加起来的值,然后它的算法就是加法)。
作用:在数据传输过程中可能数据会发生错误,CRC检验检测接收的数据是否正确。比如主机发出01 06 00 01 00 17 98 04,那么从机接收到后要根据01 06 00 01 00 17 再计算CRC校验值,从机判断自己计算出来的CRC校验是否与接收的CRC校验(98 04主机计算的)相等,如果不相等那么说明数据传输有错误这些数据不能要。
3、功能号
意义:modbus 定义。见附录1。
作用:指示具体的操作。
MODBUS-RTU
一、一个报文分析
先声明下我们的目的,我们是要两个设备通讯,用的是MODBUS协议。上面简单介绍了:“报文”“CRC校验”“功能号”。
在单片机中拿出一部分内存(RAM)进行两个设备通讯,例如:
数组后面的注释,说明
OX[20] 代表是输出线圈,用功能码 0x01,0x05,0x0F 访问, 开头地址是 0 (这个后续说明)
IX[20] 代表是输入线圈,用功能码 0x02 访问, 开头地址是 1 (这个后续说明)
另外两个一样的道理。
注意:所谓的“线圈”“寄存器”就是“位变量”“16位变量”,不要被迷惑。之所以称“线圈”我觉得应该是对于应用的设备,MODBUS协议是专门针对485总线设备(例PLC)开发的。
1、主机对从机写数据操作
如果单片机接收到一个报文那么就对报文进行解析执行相应的处理,如上面报文:
01 06 00 01 00 17 98 04
从机地址 功能号 数据地址 数据 CRC校验
假如本机地址是 1 ,那么单片机接收到这串数据根据数据计算CRC校验判断数据是否正确,如果判断数据无误,则结果是:
HoldDataReg[1] = 0x0017;
MODBUS主机就完成了一次对从机数据的写操作,实现了通讯。
2、主机对从机读数据操作
主机进行读HoldDataReg[1] 操作,则报文是:
01 03 00 01 00 01 D5 CA
从机地址 功能号 数据地址 读取数据个数 CRC校验
那么单片机接收到这串数据根据数据计算CRC校验判断数据是否正确,如果判断数据无误,则结果是:返回信息给主机,返回的信息也是有格式的:
返回内容:
01 03 02 0017 F8 4A
从机地址 功能号 数据字节个数 两个字节数据 CRC校验
MODBUS主机就完成了一次对从机数据的读操作,实现了通讯。
二、MODBUS报文模型
以上了解到了MODBUS的一帧报文是如何通讯的,其实每个报文的格式都基本一样的。
这里两个缩略词以前不知道,但是现在要明白指的是什么,“ADU”“PDU”
ADU: 应用数据单元
PDU: 协议数据单元
三、MODBUS数据模型
四、MODBUS事务处理
下列状态图描述了在服务器侧MODBUS事务处理的一般处理过程。
五、MODBUS请求与响应
看MODBUS协议手册,中文第 10 页开始,英文第 24 页开始。手册非常详细举例说明了MODBUS协议各个功能号的请求与响应。
modbus协议在单片机上实现过程
MODBUS 任务处理函数
函数中,RcvBuf 为串口接收缓冲区,如果接收了一个报文则,RcvBuf[0] 为从机地址,RcvBuf[0] 为MODBUS功能号。根据功能号做出响应,而具体的操作根据功能号在各自的函数中执行,相当于解析接收到的数据
附录1:MODBUS-RTU功能码
最常用功能码:
下面“线圈”“寄存器”其实分别直的就是“位变量”“16位变量”
01 (0x01) 读线圈
02 (0x02) 读离散量输入
03 (0x03) 读保持寄存器
04(0x04) 读输入寄存器
05 (0x05) 写单个线圈
06 (0x06) 写单个寄存器
15 (0x0F) 写多个线圈
16 (0x10) 写多个寄存器
附录2:CRC GeneraTIon
modbus详细介绍(值得收藏)相关推荐
- timed_waiting线程是否占用cpu_程序CPU占用率飙升,如何定位线程的堆栈信息?超详细,值得收藏看不懂还有配套视频 第319篇...
相关历史文章(阅读本文前,您可能需要先看下之前的系列?) 国内最全的Spring Boot系列之三 2020上半年发文汇总「值得收藏」 GraphQL的探索之路 – SpringBoot集成Graph ...
- labelimg如何调整框的颜色_PS学习之旅:如何更好调整画面明暗?明度、色阶详细介绍,收藏...
ps中调色工作其实就是调整人对三要素的感受,调色是一门比较大的学问,那么调整好明暗程度对作品来说是相关重要的,本文详细介绍如何控制画面的明暗. 1工具/原料 Adobe Photoshop CS6软件 ...
- c 获取char*的长度_C/C++编程笔记:C语言字符串比较函数,超详细,值得收藏
void *memset(void *dest, int c, size_t count); 将dest前面count个字符置为字符c. 返回dest的值. void *memmove(void *d ...
- 如何搭建socks5和ss节点_redis cluster搭建实践(非常详细,值得收藏)
一.Redis Cluster(Redis集群)简介 redis是一个开源的key value存储系统,受到了广大互联网公司的青睐. redis集群采用P2P模式,是完全去中心化的,不存在中心节点或者 ...
- c 获取char*的长度_C/C++编程笔记:C语言字符串比较函数,超详细,值得收藏!...
前方干货准备!!! void *memset(void *dest, int c, size_t count); 将dest前面count个字符置为字符c. 返回dest的值. void *memmo ...
- 值得收藏的十种常用的CSS框架,快码住!
CSS框架是预先准备好的软件框架,允许使用层叠样式表语言更容易,更符合标准的进行网页设计.大多数这些框架包含至少一个栅格设计(grid). 功能更强大的框架,还配备了更多的功能和附加的基于JavaSc ...
- 值得收藏的十种常用的CSS框架-蛙课网
CSS框架是预先准备好的软件框架,允许使用层叠样式表语言更容易,更符合标准的进行网页设计.大多数这些框架包含至少一个栅格设计(grid).功能更强大的框架,还配备了更多的功能和附加的基于JavaScr ...
- 不仅有史上最详细Docker 安装Minio Client,还附带解决如何设置永久访问和永久下载链接!!(详图)绝对值得收藏的哈!!!!
背景: 这两天在整理知识点,然后在学习Minio,一开始遇到更新,整了我不少时间,之前用的太久了,改了不少东西.用了之后发现不知道怎么设置成永久访问,就出了这篇文章. 史上最详细Docker安装最新版 ...
- 史上最详细Docker安装最新版Minio 带详解 绝对值得收藏!!! 让我们一起学会使用minio搭建属于自己的文件服务器!!走上白嫖之路!解决启动了但是浏览器访问不了的原因
让我们一起学会使用minio搭建属于自己的文件服务器!!走上白嫖之路! WARNING: Console endpoint is listening on a dynamic port (34451) ...
最新文章
- [译]Java 设计模式之命令
- java nio 阻塞_Java NIO和传统阻塞IO
- Sizzle系列之 选择元素
- java runnable 异常_JAVA 线程中的异常捕获
- android 音量键 广播,【Android 7.0 Audio】: 按键调节音量的调用过程
- 苹果的消息是从服务器接收数据,iOS 消息推送原理及简单实现
- 使用php发送Http请求,抓取网页数据
- c 字符串数组_C语言探索之旅 | 第二部分第四课:字符串
- 运维监控软件 wgcloud 更新,v3.2.7 重构告警模块
- BackTrack3(BT3破解wifi密码)
- 软件工程 超市库存管理系统 UML模型
- bootstrap批量删除操作!
- 有监督 VS 无监督
- 活性(Liveness)
- GEO数据库数据下载
- 怎么重置imac_[重置系统]如何重置Mac电脑到出厂状态
- 【pytorch EarlyStopping】深度学习之早停法入门·相信我,一篇就够。
- Angr-CTF学习笔记11-13
- Visual Basci中的几个函数split(),ubound(),lbound(),instr(),mid().
- Python-- error: [WinError 3] 系统找不到指定的路径。: 'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC