在工业控制、电力通信、智能仪表等领域,数据交换通常依赖于串口通信。初,RS232接口是主流选择,然而,由于工业现场的复杂性,各种电气设备产生的电磁干扰可能导致信号传输错误。

图片

1979年,电气设计并推出了一个专为工业现场设计的总线协议,即Modbus协议。现在,许多采用RS485通信的工业场合都倾向于使用Modbus协议。在工业领域中,当涉及到RS485通信时,Modbus协议得到了广泛应用。接下来,我们将对RS485通信和Modbus通信协议进行详细介绍。


一、 RS485通信

1、在RS485之前,RS232已经问世,但RS232存在一些局限性:

1)其接口信号电平值较高,可能损坏接口电路的芯片,且与TTL电平不兼容,需要额外的转换电路与单片机电路连接。

2)RS232的共地模式通信方式容易产生干扰,并且抗干扰性能较弱。

3)其传输距离和速率均有限,远只能达到几十米,且仅支持两点之间的通信,无法实现多机联网。


2、为了克服RS232的局限性,RS485等新型接口标准应运而生。RS485具有以下特点:

1)逻辑“1”以两线间的电压差为+(2—6)V表示,逻辑“0”则以-(2—6)V表示。其接口信号电平较RS232低,更不易损坏电路芯片,且兼容TTL电平,方便与TTL电路连接。

2)RS485通信速度快,数据传输速率可达10Mbps以上。其内部采用平衡驱动器和差分接收器的组合,显著提高了抗干扰能力。

3)其传输距离远可达1200米左右,但传输速率与传输距离成反比。在100KB/s以下的传输速率下,才能实现的通信距离。若需传输更远距离,可使用中继器。

4)RS485支持多机通信,总线上可挂载多个收发器。根据现有RS485芯片,可挂载的设备数量有所不同,如32、64、128、256等。

3、RS485分为两线制和四线制。四线制仅支持点对点通信,现已较少使用。两线制为总线式拓扑结构,同一总线上多可挂接32个节点。在RS485通信网络中,通常采用主从通信方式,即一个主机带多个从机。

4、在连接RS-485通信链路时,有时仅简单地将各接口的“A”、“B”端用双绞线连接,而忽略了信号地的连接。这种连接方式虽在某些场合能正常工作,但存在隐患。原因有二:

1)共模干扰问题:RS-485接口采用差分传输方式,无需参照点检测信号。但收发器有一定的共模电压范围(-7~+12V)。当网络线路中的共模电压超出此范围时,将影响通信稳定性甚至损坏接口。

2)EMI问题:发送驱动器输出信号中的共模部分需要一个低阻返回通道。若无此通道(信号地),信号将以辐射形式返回源端,导致总线向外辐射电磁波。

5、由于PC机默认仅配备RS232接口,可通过以下方法实现PC上位机的RS485电路:

1)使用RS232/RS485转换电路将PC机串口RS232信号转换为RS485信号。对于复杂的工业环境,建议选择具有防浪涌和隔离功能的产品。

2)通过PCI多串口卡,选择输出信号为RS485类型的扩展卡。

图片

二、Modbus通信协议

Modbus功能码是Modbus通信协议中用于指示设备执行何种操作的一组指令代码。它们允许主设备(通常是计算机或PLC)与从设备(例如传感器、执行器等)进行通信,以读取或写入数据。

功能码可以大致分为位操作和字节操作两类。位操作的单位是Bit,通常用于控制如开关状态等单个位的操作。字节操作的单位是2个字节(Byte),常用于读取或写入多字节数据,如寄存器值等。

以下是一些常见的Modbus功能码及其描述:

位操作指令:

01H:读线圈状态(Read Coils Status)

02H:读离散输入状态(Read Discrete Inputs Status)

05H:写单个线圈(Write Single Coil)

0FH:写多个线圈(Write Multiple Coils)

字节操作指令:

03H:读保持寄存器(Read Holding Registers)

用于从从设备读取一个或多个保持寄存器的值。保持寄存器通常用于存储设备的参数或状态信息。

04H:读输入寄存器(Read Input Registers)

用于从从设备读取一个或多个输入寄存器的值。输入寄存器通常用于存储从外部设备(如传感器)读取的数据。

06H:写单个保持寄存器(Write Single Holding Register)

用于向从设备的单个保持寄存器写入一个值。

10H:写多个保持寄存器(Write Multiple Holding Registers)

用于向从设备的多个连续保持寄存器写入值。这通常用于设置设备的参数或状态。请注意,上述功能码是十六进制表示,并且以“H”后缀表示。在实际通信中,这些功能码会被转换为二进制格式进行传输。

图片

此外,还有其他一些功能码,如用于诊断或特定应用的功能码。这些功能码的具体用法和含义可能因设备制造商而异,因此在实际应用中需要参考设备的文档或手册。