当前位置: 首页 > news >正文

chord协议模拟实现_Modbus 通讯协议,每个工控人都应该了解的事

b1d7dcc1becd8ca25637ef8fa46086a0.png

Modbus协议可以说是工业自动化领域应用最为广泛的通讯协议,因为他的开放性、可扩充性和标准化使它成为一个通用工业标准。有了它,不同厂商的产品可以简单可靠的接入网络,实现系统的集中监控,分散控制功能。

目前Modbus规约主要使用的是ASCII, RTU, TCP等,并没有规定物理层。目前Modbus常用的接口形式主要有RS-232C,RS485,RS422,也有使用RJ45接口的,ModBus的ASCII, RTU协议则在此基础上规定了消息、数据的结构、命令和应答的方式。ModBus数据通信采用Master/Slave方式(主/从),即Master端发出数据请求消息,Slave端接收到正确消息后就可以发送数据到Master端以响应请求;Master端也可以直接发消息修改Slave端的数据,实现双向读写。

ebaacff9d5fbb43709846ab3c4371d88.png

在串行通信中,用“波特率”来描述数据的传输速率。国际上规定了一个标准波特率系列:110、300、600、1200、1800、2400、4800、9600、14.4Kbps、19.2Kbps、28.8Kbps、33.6Kbps、56Kbps。例如:9600bps,指每秒传送9600位,包含字符的数位和其它必须的数位,如起始位、停止位和奇偶校验位等。

在自动化领域我们常用RTU模式,RTU 模式中每个字节的格式:

编码系统:8 位二进制,十六进制 0-9,A-F

数据位:1 起始位

8 位数据,低位先送

奇/偶校验时 1 位;无奇偶校验时 0 位

带校验时 1 位停止位;无校验时 2 位停止位

错误校验区:循环冗余校验(CRC)

从站地址设置:信息地址包括 2 个字符(ASCII)或 8 位(RTU),有效的从机设备地址范围 0-247(十进制)。

功能码设置:信息帧功能代码包括字符(ASCII)或 8 位(RTU)。有效码范围 1-225(十进制);

数据区的内容:数据区有 2 个 16 进制的数据位,数据范围为 00-FF(16 进制),根据网络串行传输的方式,数据区可由一对 ASCII 字符组成或由一个 RTU 字符组成。

RTU方式的消息帧:

e8f9bfd5223e9c64c708d9b4af4a9daf.png

Modbus的功能码:

50d4ee0b6e36e326f6d513d865542c42.png

ModBus 功能码与数据类型对应表:

26259d6061fef3f658c2365b77c6f5a9.png

RTU 方式读取整数据的例子:

156181dedb635d5313fdfaf91a7e09ad.png

解析一下:主机发送指令,访问从站地址为1,使用功能码03(读保持寄存器),起始地址高8位、低8位:表示想读取的模拟量的起始地址(起始地址为0)。比如例子中的起始地址为38,十进制为:56。寄存器数量高8位、低8位:表示从起始地址开始读多少个模拟量。例子中为1个模拟量。注意,在返回的信息中一个模拟量需要返回两个字节。错误校验为CRC校验。

从站应答:设备地址和命令号和上面的相同。返回的字节数:表示数据的字节个数,也就是数据1,2...n中的n的值。例子中返回了1个模拟量的数据,因为一个模拟量需要2个字节所以共2个字节。数据高低字节:41和24代表返回的1个模拟量的值,即十进制的16676。错误校验为CRC校验。

相关文章:

  • 方法的重载与重写_如何从jvm角度看懂类初始化、方法重载、重写
  • 简单代码画皮卡丘_超酷!用 Python 教你绘制皮卡丘和哆啦A梦
  • 分析函数hive计算均值_Hive第六天——Hive函数(开窗函数之累计统计)
  • 蓝卡攻略_剑与远征:4.18版本的新手攻略,崛起的三巨头
  • 关抢占 自旋锁_Linux学习第28节,什么是自旋锁?内核是如何设计,如何实现它的...
  • 2019pro与air怎么选_iPad Air 2019 VS iPad Pro 10.5 | 普通人的角度简单思考
  • mysql安装教程与启动_MySql安装启动两种方法教程详解
  • apparmor mysql_Ubuntu 上更改 MySQL 数据库数据存储目录
  • mysql工程师需要会哪些_MySQL面试高频100问(工程师方向)
  • mysql 客户端 连接数_监控mysql上客户端的连接数
  • mysql带库名查询_MySQL优化
  • docker mysql 差8小时_docker之容器日志输出与系统时间相差8小时解决办法
  • java白盒测试问题_白盒测试项目实践经验总结(三)-返回码问题
  • 9点到17点半 cron_定时任务Quartz简单配置与cron表达式
  • python3 web服务器_python3实现微型的web服务器
  • JS 中的深拷贝与浅拷贝
  • 〔开发系列〕一次关于小程序开发的深度总结
  • CSS盒模型深入
  • CSS中外联样式表代表的含义
  • in typeof instanceof ===这些运算符有什么作用
  • JavaScript类型识别
  • JS 面试题总结
  • Koa2 之文件上传下载
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • webpack4 一点通
  • windows下如何用phpstorm同步测试服务器
  • 程序员最讨厌的9句话,你可有补充?
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 浮动相关
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 时间复杂度与空间复杂度分析
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 小程序开发中的那些坑
  • #1014 : Trie树
  • #include
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (Forward) Music Player: From UI Proposal to Code
  • (超详细)语音信号处理之特征提取
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • .net 设置默认首页
  • .NET连接数据库方式
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • @requestBody写与不写的情况
  • @TableLogic注解说明,以及对增删改查的影响
  • [ vulhub漏洞复现篇 ] Celery <4.0 Redis未授权访问+Pickle反序列化利用
  • [ 攻防演练演示篇 ] 利用通达OA 文件上传漏洞上传webshell获取主机权限
  • [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?
  • [2019.3.5]BZOJ1934 [Shoi2007]Vote 善意的投票
  • [ABP实战开源项目]---ABP实时服务-通知系统.发布模式
  • [AIGC 大数据基础]hive浅谈
  • [Android Pro] Notification的使用
  • [Android开源]EasySharedPreferences:优雅的进行SharedPreferences数据存储操作
  • [asp.net core]project.json(2)