MODBUS和RS485说明
-
传输格式为帧格式
一般1号位为起始位 为低电压 10号位为停止位-- 高电压
-
波特率
模拟线路信号的速率,也称调制速率,以波形每秒的振荡数来衡量。在信息传输通道中,携带数据信息的信号单元叫码元,每秒钟通过信道传输的码元数称为码元传输速率,简称波特率。
波特率通常单位是bit/s,也就是 二进制位/秒。因为一个字节是8个bit,而一个字节通常可以表达一个ASCII码,比如一个英文字母,所以:9600的波特率的信道,理论上每秒可以传输9200/8个英文字母的数据量,也就是1200个字节,大约1.2KB。而19200则是每秒可传输2400字节。常见波特率:9600 19200 38400 115200
TTL逻辑电平范围 一般高低电平为5V 0V
受到静电干扰 电压不稳 导致传输距离近1米左右 -
RS232
全双工,只能实现点对点传输
使用MAX232改变电平大小,抗干扰能力增强,速率只有20K,19200波特率,传输距离为15米 -
RS485
485芯片吧TTL信号转化为差分信号,只需要两条线,
抗干扰能力强,可以传输更远距离,传输频率可以达到50K。
一般为半双工通信,可以实现多设备主从通信 -
485信号定义
现在很多的RS-485转换器都是兼容RS-422的,所以看到很多转换器上面的信号都是T/R+、T/R-,即对应RS-485的A+和B-
对于DB9针型的母头,RS-485有如下的接线定义示意,Pin6~Pin9为N/A不接。
DB9 | 输出信号 | RS-422全双工接线 | RS-485半双工接线 |
---|---|---|---|
1 | T/R+ | 发(A+) | RS-485(A+) |
2 | T/R- | 发(B-) | RS-485(😎 |
3 | RXD+ | 收(A+) | 空 |
4 | RXD- | 收(B-) | 空 |
5 | GND | 地线 | 地线 |
-
解释:
1.全双工是指在发送数据的同时也能够接收数据,两者同步进行,这好像我们平时打电话一样,说话的同时也能够听到对方的声音。目前的网卡一般都支持全双工
2.半双工所谓半双工是指一段时间内,只有一种动作发生,例如一条窄路,而只有一辆车可以通行,当当前有两辆车相对时,在这种情况下,只有一辆车先开,等到另一辆车的头部再开,这个例子生动地说明了原始半双工。
3.差分信号长距离布线会有信号衰减,而且引入噪声和干扰的可能性更大,在线缆A和B上的表现就是电压幅度的变化,但是,采用差分线的好处就是,差值相减就会忽略掉干扰依旧能输出正常的信号,把这种差分接收器忽略两条信号线上相同电压的能力称为共模抑制。
标准规定了,逻辑1:+2V to +6V;逻辑0:-6V to -2V。
-
原理图:
-
引脚解释:
- RE DE 控制传输方向
- DI 输入
- RO 输出
-
通讯:
硬件层: RS485 解决 的是数据传输的问题,也就是说如何将一个“0”或者“1”传输到另外一端
软件层: MODBUS 解决的是数据传输的含义(网络协议)
-
MODBUS:
- 通讯机制:主机轮询,从机应答
- 系统中只有一个设备是主机,其他都是从机(主从通信)
- 系统中的从机不可以主动向主机发送数据通讯
- 系统上电后所有的主从机设备都应该处于监听总线的状态(接收状态)
- 如果发起一次通信,必须是由主机发起
- 主机首先切换成发送模式发送数据包,立马切换成接收模式
- 报文或数据包格式:
地址码 | 功能码 | 数据区 | 校验码(CRC) |
---|---|---|---|
8bit | 8bit | N*8bit | 16bit |
-
传输方式
-
1.ASCII 模式
- 当控制器设为在 Modbus 网络上以 ASCII(美国标准信息交换代码)模式通信,在消息
中的每个 8Bit 字节都作为两个 ASCII 字符发送。这种方式的主要优点是字符发送的时间间
隔可达到 1 秒而不产生错误。 - 代码系统
十六进制,ASCII 字符 0...9,A...F
消息中的每个 ASCII 字符都是一个十六进制字符组成
每个字节的位
1 个起始位
7 个数据位,最小的有效位先发送
1 个奇偶校验位,无校验则无
1 个停止位(有校验时),2 个 Bit(无校验时)
错误检测域
LRC(纵向冗长检测) -
2.RTU模式
- 当控制器设为在 Modbus 网络上以 RTU(远程终端单元)模式通信,在消息中的每个
8Bit 字节包含两个 4Bit 的十六进制字符。这种方式的主要优点是:在同样的波特率下,可
比 ASCII 方式传送更多的数据。 - 代码系统
8 位二进制,十六进制数 0...9,A...F
消息中的每个 8 位域都是一个两个十六进制字符组成
每个字节的位
1 个起始位
8 个数据位,最小的有效位先发送
1 个奇偶校验位,无校验则无
1 个停止位(有校验时),2 个 Bit(无校验时)
错误检测域
CRC(循环冗长检测) -
03功能码
- 读从机(要求从机返回数据)
- 主机发送:Tx:000000-01 03 00 00 00 02 C4 0B
- 解释:
1.01 地址位置
2.03 读取操作
3.00 00 起始地址(从0开始)
4.00 02 读多少个寄存器(2个)
5.C40B 校验位 - 从机返回: Rx:000001-01 03 04 00 01 00 02 2A 32
- 解释:
1.01 地址位置
2.03 读取操作
3.04 字节数
4.00 01 数据1
5.00 02 数据2
6.2A32 校验位 -
06功能码
- 写从机(单个寄存器)
- 主机发送: Rx:000094-01 06 00 04 00 0C C8 0E
- 解释:
- 1.01
- 2.06
- 3.00 04 寄存器地址
- 4.00 0C 写入的值
- C80E 校验码
- 从机返回 返回值与写从机数据一致
-
16功能码
- 写多个寄存器
- 主机发送 Tx:000109-01 10 00 00 00 04 08 00 01 00 02 00 03 00 04 2E B9
- 解释:
- 1.01
- 2.10 功能码
- 3.00 00 起始位置
- 4.00 04 截至位置
- 5.08 字节数
- 6.00 01 数据
- 7.00 02 数据
- 8.00 03 数据
- 9.00 04 数据
- 10 2E B9 CRC
- 从机返回 Rx:000110-01 10 00 00 00 04 C1 CA
- 解释:
- 地址码 01
- 功能码 10
- 起始地址 00 00
- 结束地址 00 04
- CRC C1 CA