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。

485示例1

  • 原理图:

示例2

  • 引脚解释:

  1. RE DE 控制传输方向
  2. DI 输入
  3. 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
posted @ 2023-05-31 10:35  劉鵬杰  阅读(847)  评论(0编辑  收藏  举报