RS485和Modbus还傻傻分不清?看了本文你就清楚了

 关系

        RS485是一种物理层通信标准,用于在串行通信中传输数据。它定义了电气特性、信号传输方式和连接方式等。RS485通信可以支持多个设备通过同一总线进行通信,其中一个设备作为主设备发送指令,其他设备作为从设备接收指令。

        Modbus是一种通信协议,用于在RS485总线上进行通信。它定义了一种常用的通信格式和规则,用于在主设备和从设备之间进行数据交换。Modbus协议支持不同的传输方式,包括串行通信(如RS485)和以太网通信。

        在RS485总线上使用Modbus协议进行通信时,主设备通过RS485物理层进行数据传输,而Modbus协议定义了数据的格式、命令和响应的规范。主设备可以发送Modbus格式的指令给从设备,从设备接收并执行指令,并将结果返回给主设备。

        因此,RS485提供了物理层通信的能力,而Modbus定义了通信的协议和规范。RS485通常用作Modbus通信的物理层,但RS485也可以用于其他通信协议。

        说白了就是,RS485是属于物理层上的协议,而Modbus是通信协议!他们俩可以说毫无关系,但又密不可分!(不懂的先去看计算机网络五层模型)

RS485

特点:

  1. 支持多节点:一般最大支持 32 个节点。
  2. 传输距离远:最远通讯距离可达1200米。
  3. 抗干扰能力强:差分信号传输。
  4. 连接简单:只需要两根信号线(A+和B-)就可以进行正常的通信。

RS485和Modbus还傻傻分不清?看了本文你就清楚了_第1张图片

(图来源自网络)

使用RS485,只需要将A接A,B接B便可实现通信,是不是很简单?

Modbus

        Modbus传输模式分为三种。包括ASCII、RTU(远程终端控制系统)、TCP三种报文类型。在这里就简单介绍一下常用的RTU模式。

从站地址 功能码 数据 CRC
1 byte 1 byte N bytes 2 bytes

学习使用Modbus RTU模式,首要就是要知道报文格式。其中:

  1. 地址位(Address):一个8位的二进制数,用于标识从设备的地址。主设备通过地址位来选择要通信的从设备。

  2. 功能码(Function Code):一个8位的二进制数,用于指示主设备要执行的操作类型,如读取数据、写入数据等。

  3. 数据位(Data):根据功能码的不同,数据位可以包含读取或写入的数据。

  4. 校验位(Checksum):一个16位的循环冗余校验(CRC)码,用于检测数据在传输过程中是否发生错误。

接下来介绍一下最常用的03(读寄存器)和06(写入单个寄存器)

读寄存器

设备地址

功能码

寄存器地址

读寄存器个数

CRC校验

01

03

00

3C

00

1E

85

0A

  1. "01":地址位,表示主设备选择与地址为1的从设备进行通信。

  2. "03":功能码,表示主设备要执行的操作是读取从设备的保持寄存器。

  3. "00 3C":数据位,表示要读取的寄存器的起始地址。在这个例子中,起始地址为0x003C,即60。

  4. "00 1E":数据位,表示要读取的寄存器的数量。在这个例子中,要读取的寄存器数量为0x001E,即30。

  5. "05 CE":校验位,表示根据报文内容计算得出的循环冗余校验(CRC)码。

所以,该报文的含义是主设备(地址为1)向从设备发送指令,要求读取从设备的保持寄存器,起始地址为60,要读取的寄存器数量为30。校验位用于验证报文的完整性和准确性。

写寄存器

  1. "01":地址位,表示主设备选择与地址为1的从设备进行通信。

  2. "06":功能码,表示主设备要执行的操作是写入单个寄存器。

  3. "00 40":数据位,表示要写入的寄存器的地址。在这个例子中,要写入的寄存器地址为0x0040,即64。

  4. "06 40":数据位,表示要写入的寄存器的值。在这个例子中,要写入的寄存器值为0x0640,即1600。

  5. "8A 4E":校验位,表示根据报文内容计算得出的循环冗余校验(CRC)码。

所以,该报文的含义是主设备(地址为1)向从设备发送指令,要求写入从设备的单个寄存器,寄存器地址为64,写入的寄存器值为1600。校验位用于验证报文的完整性和准确性。

设备地址

功能码

寄存器地址

写入数据

CRC校验

01

06

00

40

06

40

8A

4E

通信示例

接下来就使用RS485与Modbus完成计算机与设备的通信。

RS485和Modbus还傻傻分不清?看了本文你就清楚了_第2张图片

在进行modbus通信之前。首要要保证的是RS485正确连接:

  1. 连接硬件:将485转USB适配器插入计算机的USB接口,并使用RS-485通信线缆将适配器连接到设备的RS-485接口。确保适配器和设备的电源都正常连接并开启。

  2. 安装驱动程序:根据485转USB适配器的型号和品牌,在计算机上安装适配器的驱动程序。这通常需要从适配器的制造商网站下载最新的驱动程序,并按照提供的说明进行安装。

通过软件通信

这里使用python进行串口通信

import serial

# 配置串口参数
ser = serial.Serial(
    port='com6',  # 根据实际情况修改串口端口
    baudrate=9600,  # 根据设备要求修改波特率
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS,
    timeout=1  # 设置超时时间
)

# 打开串口
ser.close()
ser.open()

# 设置发送的Modbus格式报文
message = bytearray.fromhex("01 06 00 46 00 00 68 1F")#停止
# message = bytearray.fromhex("01 06 00 46 00 03 28 1E")# 启动 3

# 发送报文
ser.write(message)
# 接收数据
received_data = ser.read(10)  # 读取10个字节的数据

# 打印接收到的数据
print("接收到的数据:", received_data)
# 关闭串口
ser.close()

在正确配置串口,波特率等信息后,进行串口通信,发送modbus格式报文实现通信。

RS485和Modbus还傻傻分不清?看了本文你就清楚了_第3张图片

通过modbus poll通信

Modbus Poll是一款常用的Modbus通信测试工具,它提供了一种便捷的方式来测试和调试Modbus设备。以下是Modbus Poll的便捷性方面的一些优点:

  1. 用户友好的界面:Modbus Poll具有直观的用户界面,使用户能够轻松设置和配置Modbus通信参数,如串口设置、从站地址、寄存器地址等。

  2. 快速连接和通信:Modbus Poll支持多种通信方式,包括串口和TCP/IP,用户只需简单设置即可快速连接到Modbus设备并进行通信。

  3. 实时监控和数据显示:Modbus Poll提供了实时监控和数据显示功能,用户可以方便地查看和分析Modbus设备的寄存器数据、输入/输出状态等。

  4. 批量读写操作:Modbus Poll支持批量读写操作,用户可以一次性读取或写入多个寄存器或线圈,提高了测试和调试的效率。

下载modbus poll

链接:https://pan.baidu.com/s/1F0HnTITrfP5Cix2OpTjS3w?pwd=z4fq 
提取码:z4fq

点击Connection,正确配置之后,点击连接

RS485和Modbus还傻傻分不清?看了本文你就清楚了_第4张图片

连接之后。可以实时看到数据。

RS485和Modbus还傻傻分不清?看了本文你就清楚了_第5张图片

双击数据:

RS485和Modbus还傻傻分不清?看了本文你就清楚了_第6张图片

即可进行数据输入,是不是很方便呢?

当然,modbus poll 也可以实时看到报文的收发情况。点击Display->communication

RS485和Modbus还傻傻分不清?看了本文你就清楚了_第7张图片即可实时监测报文收发。

通过串口发送

modbus poll也提供串口通信,支持手动发送报文功能。在正确连接之后,点击function->Test Center即可进入串口界面

RS485和Modbus还傻傻分不清?看了本文你就清楚了_第8张图片

输入报文后点击send,即可发送

RS485和Modbus还傻傻分不清?看了本文你就清楚了_第9张图片

可以看到。报文成功发送,并且收到设备传回的报文!

结语

看完本文,你是不是对RS485和Modbus有了进一步的认识呢?如果有任何疑惑,请在评论区指出。

如果本文对你有一点帮助的话,请你点个赞吧!

你可能感兴趣的:(网络,单片机,python)