Modbus协议目前存在用于串口、以太网以及其他支持互联网协议的网络的版本。

主要协议不再详细赘述,网上一找一大把,也浪费文章篇幅,相信搞工控的人,这点能力还是有的。

重要的几点:

1.Modbus分主站和从站,所有的数据内容其实都存在从站里面(相当于服务器),主站只不过是请求从站中某个地址的数据内容(读和写),也就是主站请求,从站应答。主站不发请求信号,从站屁都不能放一个,这一点对于初学者的理解十分重要,一定要心里有一个概念。

2.从站里面数据分很多的存储区,大致分为离散(就是开关量)、线圈、寄存器输入、寄存器输出。

3.主站需要去从站里面取数据,首先要知道自己去哪里取,取得数据是什么内容。(就像你要从你老婆那里偷偷的拿钱,总要知道老婆把钱放那里了吧!)

4.如果主站知道了要取什么数据了,就要有对应的指令,下面列举Modbus主要功能码,

0x01: 读线圈寄存器
0x02: 读离散输入寄存器
0x03: 读保持寄存器
0x04: 读输入寄存器
0x05: 写单个线圈寄存器
0x06: 写单个保持寄存器
0x0f: 写多个线圈寄存器
0x10: 写多个保持寄存器

5.既然功能码知道了,肯定还要知道该怎么发送请求吧,既然是MODBUS通讯协议,那就有Modbus的规则。下面我就以一个读保持寄存器来详细描述整个过程。

6.以ModbusRTU为例 03号功能码对应的发送报文如下:

主站发送

主机发送表示的内容,想要读取1号从机从0x32开始的2个寄存器的内容。

ox01: 从站地址

0x03:功能码

0x00 0x32:需要读取存储区的起始地址(从0x32)开始

0x00 0x02:需要读取的数量,要读几个存储区。

0x65 0xC4(上图列举错误):CRC校验码(不知道CRC校验是什么的,看我其他文章)

从站应答

从站应答的内容主要表示为我收到了,返回4个字节,前面2个字节是要请求的第一个寄存器数据,后面2个字节是请求的第二个寄存器数据。

6.整个发送应答就是这样一个过程。

7.如果还有人不明白的话,那我就以波形分析,串口到底是怎么发送应答的。

站地址01

串口硬件发送的规定如下:波特率9600bps,起始位1位,数据位8位,校验位1位(无校验),停止位1位

所以发送一次,一共要发8+1+1=10位

上面说到主站发送报文:01 、03、00、32、00、02、 65、 C4(都是16进制)

那要发送那么多数据,总要一个字节,一个字节来发吧(初学者,这里面会混淆),所以串口要首先发送01:怎么发01这个数据呢?

0X01的二进制:000 000 01

这里面注意几点:空闲位一直是高电平,起始位是低电平,停止位是高电平,还有一点发送数据的时候是低位先发,就是00000001 ,发送的时候是10000000.低位在前!低位在前!低位在前!

发完第一个接下去就是发第二个03、00、32、00、02、65、C4.

然后等待从站应答。

以上是个人的理解,也有助于大家能透彻理解整个过程,谢谢大家,原创不容易,且行且珍惜,记得点赞关注,我是工控小桥。

多个线程对串口读取 modbus_看完这个,如果还不懂Modbus,那您去撞豆腐吧相关推荐

  1. 图解 | 看完这篇还不懂高并发中的线程与线程池,你来打我!

    来源 | 码农的荒岛求生 头图 | 视觉中国 一切要从CPU说起 你可能会有疑问,讲多线程为什么要从CPU说起呢?原因很简单,在这里没有那些时髦的概念,你可以更加清晰的看清问题的本质. CPU并不知道 ...

  2. 看完这篇还不懂高并发中的线程与线程池你来打我

    int len; void* start_point; - }; 接下来就是起名字时刻. 这个数据结构总要有个名字吧,这个结构体用来记录什么信息呢?记录的是程序在被 <一线大厂Java面试题解析 ...

  3. 看完这篇还不懂Redis的RDB持久化,你们来打我!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 一.为什么需要持久化 redis里有10gb数据,突然停电或者意外 ...

  4. 为什么子进程每次执行顺序不一样_看完这篇还不懂Redis的RDB持久化,你来打我...

    推荐观看: Redis缓存穿透的终极解决方案,手写布隆过滤器_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com P8架构师串讲:Redis,zookeeper,ka ...

  5. 看完这篇还不懂 MySQL 主从复制,可以回家躺平了~

    我们在平时工作中,使用最多的数据库就是 MySQL 了,随着业务的增加,如果单单靠一台服务器的话,负载过重,就容易造成宕机. 这样我们保存在 MySQL 数据库的数据就会丢失,那么该怎么解决呢? 其实 ...

  6. 看完这篇还不懂 MySQL 主从复制?那就回家葛优躺吧!

    前言 我们在平时工作中,使用最多的数据库就是 MySQL 了,随着业务的增加,如果单单靠一台服务器的话,负载过重,就容易造成宕机. 这样我们保存在 MySQL 数据库的数据就会丢失,那么该怎么解决呢? ...

  7. 看完这篇还不懂HashMap的扩容机制,那我要哭了~

    HashMap 发出的 Warning:这是<Java 程序员进阶之路>专栏的第 56 篇.那天,小二垂头丧气地跑来给我诉苦,"老王,有个学弟小默问我' HashMap 的扩容机 ...

  8. 蔚来一面:HashMap 的 hash 方法原理是什么?看完这篇还不懂HashMap的hash原理,那我要哭了~

    Warning:这是<Java 程序员进阶之路>专栏的第 55 篇.那天,小二去蔚来面试,面试官老王一上来就问他:HashMap 的 hash 方法的原理是什么?当时就把裸面的小二给蚌埠住 ...

  9. 看完这个你还不理解右值引用和移动构造 你就可以来咬我(中)

    共分三篇,这是第2篇.另外两篇,看完这个你还不理解右值引用和移动构造 你就可以来咬我(上),看完这个你还不理解右值引用和移动构造 你就可以来咬我(下). 看完上篇,应该对右值引用和移动构造有了总体上的 ...

最新文章

  1. msp430入门学习16
  2. 熟悉scala命令,scala语言运行超级素数和猴子大王
  3. 使用QEMU创建虚拟机
  4. 鲍姆-韦尔奇算法 数学推导
  5. 搜索引擎反作弊之:链接作弊与隐藏作弊
  6. 第02课:简单好用的中文分词利器 jieba 和 HanLP
  7. 固定在左右两侧不动的广告条 样式
  8. 第十一篇:(顺序)容器的好伴侣 --- 容器适配器
  9. Silverlight实用窍门系列:63.Silverlight中的Command,自定义简单Command
  10. Delphi非应用程序主窗口创建MDI
  11. pythoncontinue函数_Python continue语句
  12. HEXO Nunjucks Error
  13. 190531每日一句
  14. java.lang.stringind_为什么越界了? java.lang.StringIndexOutOfBoundsException
  15. python游戏小抄
  16. 微信公众号怎么赚钱?
  17. pytorch 预训练模型
  18. Python开发基础----数据类型----[列表]
  19. 支付宝免签 个人支付宝到银行卡
  20. 生活中的定律——墨菲定律

热门文章

  1. Django 2.0 学习(12):Django 模板语法
  2. 骨牌覆盖问题总结!hihoCoder/ NYOJ-1273宣传墙1151
  3. 2015软件测试面试题第二篇
  4. 1000道Python题库系列分享16(10道填空题)
  5. Win10系统配置Python3.6+OpenGL环境详细步骤
  6. 哪些手机搭载鸿蒙,鸿蒙2.0搭载手机吗-有什么功能
  7. lane是什么意思_什么是Trunk?Trunk详解
  8. 基于队列的迷宫求解实现
  9. python numpy库安装 mac_MAC系统下安装Python模块
  10. isscalar matlab,大数的素性检测(用MATLAB仿真)