【无标题】

本文详细介绍了Modbus通信协议,包括其单主/多从的特性,不同类型的寄存器如线圈状态、离散输入状态、保持寄存器和输入寄存器的定义与读写权限。此外,还阐述了ASCII和RTU两种消息帧格式的区别,以及LRC和CRC校验方法的应用。通过对Modbus协议的理解,有助于深入掌握工业控制系统中的数据交换原理。
摘要由CSDN通过智能技术生成

1.概要

在这里插入图片描述

Modbus是一种单主/多从的通信协议,特点:在同一时间总线上只能有一个主设备,但可以有一个或者多个从设备(最多247);从设备不会主动上报数据;

2.Modbus寄存器

2.1寄存器种类

线圈状态:输出端口:可设置可读
离散输入状态:输入端口:可读不可写(拨码开关)
保持寄存器:输出参数或保持参数;可读可写
输入寄存器:输入参数:可读不可写

2.2 存储区

输出线圈 0 00001-09999
离散输入状态:1 10001-19999
保持寄存器:4 40001-49999
输入寄存器:3 30001-39999
寄存器种类

寄存器PLC地址寄存器modbus协议地址简称读写状态
线圈状态00001-0ffff0000H-FFFFH0X可读可写
离散输入状态10001-1ffff0000H-FFFFH1X只读
保持寄存器40001-4ffff0000H-FFFFH4X可读可写
输入寄存器30001-3ffff0000H-FFFFH3X只读

扩展 :因为对于寄存器的操作无非 就是读与写;因此相对于基础功能码为

读输出线圈01
读离散输入状态02
读保持寄存器03
读输入寄存器04
写单个线圈05
写单个保持寄存器06
写多个线圈15
写多个保持寄存器16

3串行消息帧格式

3.1ASCII

传输过程中每个8位(b)的字节都将作为两个ASCII字符发送。
优点:字符发送时间间隔可达1s,且不产生错误;
消息帧格式

起始位: 冒号“ : ”(0x3A)
结束符: 回车(0D)和换行(0A)
数据表示:将一个字节的十六进制拆分成了两个字节的字符表示
例如:0x12表示成 字符 “1“”2”

在ASCII模式下,每个8位的字节被拆分成两个ASCII字符进行发送,比如十六进制0xAF(1010 1111),会被分解成ASCII字符“A”(对应的十六进制 41 0100 0001)和”F”(对应的十六进制 46 0100 0110)进行发送,其发送量显然比RTU增加一倍。ACII模式的好处是允许两个字符之间间隔的时间长达1s而不引发通信故障,该模式采用纵向冗余校验(LRC)。

3.2RTU

消息的接收和发送以至少3.5个字符时间的停顿间隔为标志。如果消息中两个字符之间的空闲间隔大于1.5个字符时间,则认为报文帧不完整。

4 校验

4.1 LRC校验

每一个需要传输的数据字节迭加后取反加1即可。它检测了消息帧中除开始的冒号及结束的回车换行号外的内容,即不包括起始和结束标志。

4.2 CRC校验

相关知识点:

1.异或运算(XOR/“⊕”)相同得0,相异得1;

  • 		 	0101010
    			1011001
    			1110011(XOR)
    

2.多项式 CRC用到的除数,即多项式的各项系数组成

eg: 多项式 x6+x4+x^2+x+1
那么提取系数为 1010111

3.原始数据末端添加n个0;n值取决于多项式最高阶数值;

eg:多项式 x6+x4+x^2+x+1 最高次幂为6
准备传输的数据串为 1101011011
那么进行CRC校验前是需要在 传输数据串 添加6个0;即1101011011000000

4.CRC校验码计算示例

现假设选择的 CRC生成多项式为 G(X)= x6+x4+x^2+x+1,要求出二进制序列 1101011011的 CRC校验码。下面是具体的计算过程 :
①将多项式转化为二进制序列,由 G(X)= x6+x4+x^2+x+1可知序列为1010111
②多项式的最高次幂为n=6,则在数据帧的后面加上6位0,数据帧变为 1101011011000000,然后使用模2除法除以除数111011,得到余数。(CRC校验码位数比除数位数少一位,如果前面位是0也不能省略,或者不足(n-1)位时,需要在得到余数左侧补0)

步骤    商数              余数
(  0)   1  0111100011000000
(  1)   1   010111111000000
(  2)   1    00010001000000
(  3)   0     0010001000000
(  4)   0      010001000000
(  5)   1       00100110000
(  6)   0        0100110000
(  7)   1         001101100
(  8)   0          01101100
(  9)   1           0111011
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值