网站首页 > 技术文章 正文
一、定义Modbus通信协议,最主要的是Modbus RTU (RS-485总线)转232接线ABB的COM口,Modbus ASCII和Modbus TCP(以太网)三种。Modbus RTU协议,一般大家说的基于串口通信的Modbus通信协议都是指Modbus RTU通信协议。Modbus ASCII协议:报文使用 ASCII 字符。ASCII 格式使用纵向冗余校验和。Modbus ASCII 报文由冒号 (“:”)开始 和换行符 (CR/LF) 结尾构成。Modbus TCP协议,则是在RTU协议上加一个MBAP报文头,并且由于TCP是基于可靠连接的服务,RTU协议中的CRC校验码就不再需要,所以在Modbus TCP协议中是没有CRC校验码的,所以就常用一句比较通俗的话来说:Modbus TCP协议就是ModbusRTU协议在前面加上五个0以及一个6,然后去掉两个CRC校验码字节就OK。通讯模式:轮询(读0.1s,写0.1s)二、协议
存储区
读写特性 | 数据类型 | 只读线圈 | 读写线圈 | 只读寄存器 | 读写寄存器 |
只读不可写 | 线圈(BOOL) | 输入线圈 | 输出线圈 | 输入寄存器 | 输出寄存器 |
可读可写 | 寄存器(num) | 1区 | 0区 | 3区 | 4区 |
寄存器地址范围
存储区类型 | 相对地址 | 长地址 | 短地址 |
1区 | 0-65535 | 100001-165535 | 10001-19999 |
0区 | 0-65535 | 000001-065535 | 00001-09999 |
3区 | 0-65535 | 300001-365535 | 30001-39999 |
4区 | 0-65535 | 400001-465535 | 40001-49999 |
通讯格式
波特率:4800 9600 19200数据位:8校验位:O/E/N停止位:1奇校验ODD(奇数个1为0)偶校验EVEN(偶数个1为0)无校验NONE
起始 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 奇偶 | 停止 |
0 | 0/1 | 0/1 | 0/1 | 0/1 | 0/1 | 0/1 | 0/1 | 0/1 | 0/1 | 1 |
发送格式
发送格式:设备地址+功能代码+数据(起始寄存器+寄存器数量)+校验(CRC)
接受格式:设备地址+功能代码+数据(字节计数+具体数据)+校验(CRC)
功能码
Modbus的功能码使用16进制
读取输出线圈 | 读取输入线圈 | 读取输出寄存器 | 读取输入寄存器 | 写入单个线圈 | 写入单个寄存器 | 写入多个线圈 | 写入多个寄存器 |
0X01 | 0X02 | 0X03 | 0X04 | 0X05 | 0X06 | 0X0F | 0X10 |
三、CRC校验在RTU 模式包含一个对全部报文内容执行的,基于循环冗余校验 (CRC - Cyclical RedundancyChecking) 算法的错误检验域。CRC 域检验整个报文的内容。不管报文有无奇偶校验,均执行此检验。CRC 包含由两个8 位字节组成的一个16 位值。CRC 域作为报文的最后的域附加在报文之后。计算后,首先附加低字节,然后是高字节。CRC高字节为报文发送的最后一个子节。附加在报文后面的CRC 的值由发送设备计算。接收设备在接收报文时重新计算CRC 的值,并将计算结果于实际接收到的CRC 值相比较。如果两个值不相等,则为错误。CRC 的计算, 开始对一个16 位寄存器预装全1。然后将报文中的连续的8 位子节对其进行后续的计算。只有字符中的8个数据位参与生成CRC 的运算,起始位,停止位和校验位不参与CRC计算。CRC 的生成过程中, 每个 8–位字符与寄存器中的值异或。然后结果向最低有效位(LSB)方向移动(Shift) 1位,而最高有效位(MSB)位置充零。然后提取并检查LSB:如果LSB 为1, 则寄存器中的值与一个固定的预置值异或;如果LSB 为 0, 则不进行异或操作。这个过程将重复直到执行完8 次移位。完成最后一次(第8 次)移位及相关操作后,下一个8位字节与寄存器的当前值异或,然后又同上面描述过的一样重复8 次。当所有报文中子节都运算之后得到的寄存器忠的最终值,就是CRC。.
ABB机器人Modbus RTU通讯协议
http://bbs.plcjs.com/forum.php?mod=viewthread&tid=501564&fromuid=1
(出处: PLC论坛-全力打造可编程控制器专业技术论坛)
猜你喜欢
- 2024-12-20 微软确认Win10更新出现问题:建议完全重置系统
- 2024-12-20 【MFRC522】STM32 MFRC522 IC读卡 程序及原理图
- 2024-12-20 win10更新又双叒翻车 这几天出了这些问题都是它的锅
- 2024-12-20 微软 Win10 KB5003173 更新安装失败,原因是没有新版 Edge浏览器
- 2024-12-20 今年最后一次可选更新:微软Win11推送26100.2454
- 2024-12-20 关于BIOS的入口地址0xFFFF0 bios information
- 2024-12-20 部分Win11 24H2用户反馈微软12月更新BUG:安装失败、蓝屏等
- 2024-12-20 Win10用户反馈安装微软3月更新时遇到0xd0000034错误
- 2024-12-20 Win11 22H2 (KB5017321) 安装更新失败如何修复
- 2024-12-20 R730调整风扇转速 r710风扇速度设置
- 02-21走进git时代, 你该怎么玩?_gits
- 02-21GitHub是什么?它可不仅仅是云中的Git版本控制器
- 02-21Git常用操作总结_git基本用法
- 02-21为什么互联网巨头使用Git而放弃SVN?(含核心命令与原理)
- 02-21Git 高级用法,喜欢就拿去用_git基本用法
- 02-21Git常用命令和Git团队使用规范指南
- 02-21总结几个常用的Git命令的使用方法
- 02-21Git工作原理和常用指令_git原理详解
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)