Skip to main content

如何在 reComputer R1000 上使用 rs485 和 modbus

介绍

本文主要介绍如何使用 reComputer R1000 的 485 通信功能,并测试 RS485 和 Modbus 通信功能。

开始使用

在开始这个项目之前,您可能需要按照此处描述的内容提前准备硬件和软件。

硬件准备

reComputer R1000

软件

  • 在您的 W10 PC 上使用 modbus poll。您也可以使用其他 modbus 测试工具
  • 在 reComputer R1000 和 W10 PC 上使用 modbusmechanic。您也可以使用其他 modbus 测试工具
  • 在您的 W10 PC 上使用 mobaxterm。您也可以使用其他串口测试工具
  • 您需要在 reComputer R1000 上使用以下命令下载 minicom 工具:
sudo apt-get install minicom

硬件配置

此测试使用 RS485 转 USB 模块来连接 reComputer R1000 和 W10 PC。

pir

对于 ModbusTCP,我们使用以太网线将 W10 PC 和 reComputer R1000 连接到交换机,以确保它们在同一网段内。

pir

在 reComputer R1000v1.1 上配置 minicom

注意: 在使用 minicom 与 RS485 之前,请按照此处安装 r1000 驱动程序。

首先,安装 minicom

使用以下命令在您的主机和 reComputer r1000 上安装 minicom:

sudo apt install minicom

第二,按如下配置你的 minicom

使用 Ctrl+Alt+T 打开终端,并输入如下命令:

sudo minicom -D /dev/ttyAMA*

ttyAMA* 应该是 ttyAMA2, ttyAMA3 或 ttyAMA4,这取决于您使用的是哪个 RS485。

然后输入 Ctal+A,再输入 Z,您将看到如下所示的 minicom:

pir

输入 o 来配置 minicom,并选择 Serial port setup,您将看到如下所示:

pir

然后输入 FH 使 minicom 进入 RS485 模式,结果将如下所示:

pir

最后,选择 Exit 并输入 Enter 退出配置,如下所示:

pir

reComputer R1000 v1.0 所需操作

对于 reComputer R1000 v1.0,内置 485 收发器的 DE 引脚默认处于失控状态,这意味着接口只能单向传输数据(仅接收或仅发送)。

note

要区分硬件版本(v1.0 和 v1.1),您可以参考 reComputer R1000 V1.1 产品变更详情

我们现在有两种解决方案,一种是加载一个钩住 UART 驱动程序的内核模块,我们推荐您使用这种方法,另一种是基于应用层的解决方案,简单地调用 libgpiod 来控制 DE 引脚。您可以根据需要选择其中一种。

内核模块解决方案(推荐)

安装

首先,您需要下载内核模块的源代码。这是一个独立的仓库,因此您可以直接克隆它。

git clone https://github.com/bclswl0827/r1000v1-rs485-autoflow
cd r1000v1-rs485-autoflow

接下来,你需要编译内核模块。

make

如果您在编译时遇到错误,您可能需要安装与当前运行内核对应的内核头文件。我们假设您使用的是 Raspberry Pi OS,因此您可以使用以下命令来安装内核头文件。

sudo apt-get install linux-headers-$(uname -r)

之后,您可以再次编译内核模块。

加载内核模块

编译完成后,您可以通过运行以下命令来加载内核模块。

sudo insmod r1000v1-rs485-autoflow.ko

如果内核模块成功加载,您应该在内核日志中看到以下消息,使用 dmesg 命令检查。

[  256.037465] r1000v1_rs485_autoflow: RS-485 interface has been hooked successfully

现在,您可以使用 minicom 工具来测试 RS485 通信。您也可以使用其他串口测试工具(例如 picocom)。

要在启动时加载内核,您可以使用以下命令将此模块添加到 /etc/modules 文件中。

echo "r1000v1_rs485_autoflow" | sudo tee -a /etc/modules

模块注册后,您需要重启系统以使更改生效。

sudo reboot

卸载内核模块

要卸载内核模块,您可以运行以下命令,内置的RS485接口将返回到只接收模式。

sudo rmmod r1000v1-rs485-autoflow

使用 DKMS 添加模块

DKMS(动态内核模块支持)是一个自动化构建和安装内核模块的系统,使其在管理跨多个内核版本的模块时非常有用。通过使用 DKMS,您可以确保您的模块即使在内核更新后仍保持兼容。

要使用 DKMS 添加此内核模块,请使用以下命令:

sudo make dkms_install

此命令将向 DKMS 注册模块,编译它,并为当前内核版本安装它。当将来内核升级时,DKMS 将自动为新版本重新构建和安装模块,因此您无需手动重新编译它。

应用层解决方案

使用脚本

  • 除了本文中提到的方法外,我们还提供了一个脚本,您可以使用以下命令执行。此脚本可以自动创建一个新的 /dev/ttyx,然后使用新创建的设备号执行 rs485/modbus rtu 通信即可

    curl -sSL https://raw.githubusercontent.com/Seeed-Projects/R1000-RS485-Util/main/setup_rs485.sh | sudo bash

手动设置

首先,您需要下载我们提供的C程序,然后参考ReadMe的内容。编译并运行。

git clone https://github.com/Seeed-Studio/seeed-linux-dtoverlays
cd seeed-linux-dtoverlays/tools/rs485_control_DE/
sudo apt-get install libgpiod-dev
gcc -o rs485_DE rs485_DE.c -lgpiod
sudo ./rs485_DE /dev/ttyAMA2 /dev/gpiochip0 6 /dev/ttyAMA10

这个程序将创建一个新的 ttyAMAx 设备,其中设备编号取决于您运行程序时输入的参数。

note
  • 上面的示例展示了如何使用一个 RS485 接口。如果您想使用三个 485 接口,可以使用以下脚本来实现:
sudo ./rs485_DE /dev/ttyAMA2 /dev/gpiochip0 6 /dev/ttyAMA10 &
sudo ./rs485_DE /dev/ttyAMA3 /dev/gpiochip0 17 /dev/ttyAMA11 &
sudo ./rs485_DE /dev/ttyAMA5 /dev/gpiochip0 24 /dev/ttyAMA12 &

ttyAMA10ttyAMA12 与 ttyAMA2ttyAMA5 一一对应。在您的应用程序中使用 ttyAMA10ttyAMA12 进行正常通信(ttyAMA2ttyAMA5 无法使用,您需要使用脚本新创建的设备号)

使用 Modbus RTU 测试的步骤

步骤 1:在 reComputer R1000 上输入以下脚本来打开 minicom 软件

minicom -D /dev/ttyAMAx -b 9600

其中,-D 后面跟着您要打开的设备号,-b 指的是波特率,设备号需要是第一步中新创建的设备号。然后在 W10 PC 上打开 MobaXterm,创建一个新的串口终端,选择串口号,波特率为 9600;最后,您可以与 RS485 进行双向通信。如图所示,在 reComputer R1000 上输入的内容可以通过 RS485 发送到 W10 PC,在 W10 PC 上输入的内容也可以发送到 reComputer R1000,双向通信正常。

步骤 2:测试完 RS485 功能后,您可以进行 Modbus 功能测试。此步骤允许 reComputer R1000 作为 Modbus 从站进行测试。在 reComputer R1000 上打开 ModbusMechanic 软件,选择设备号和波特率,然后点击左上角的模拟从站功能添加两个线圈;然后在 W10 中打开 Modbus poll 作为主站读取从站的线圈。然后打开 Modbus poll 的显示窗口,您可以看到 Modbus RTU 的发送和接收消息正常。

步骤 3:此步骤允许 reComputer R1000 作为 Modbus 主站进行测试。在 reComputer R1000 和 W10 PC 上都打开 ModbusMechanic 软件,并选择设备号和波特率。W10 PC 参考第三步的设置。在 reComputer R1000 上选择 Read Coils(0x01) 读取从站的线圈,将 Slave Node 设置为 1,Register 选择您要读取的地址,最后点击 Transmit packet

使用 Modbus TCP 测试的步骤

步骤 1:在 Win10 PC 和 R1000 上打开 modbusmechanic

步骤 2:R1000 作为 modbus TCP 主机。在 W10 PC 上点击 Tool => Start Slave Simulator,TYPE 选择 TCP,Slave ID 选择 1,然后添加 Coils;然后在 R1000 中输入 IP,Scan group 选择 Read Coil。输入 Slave NodeRegister,最后点击 Transmit packet。您可以看到从站数据已成功读取。

步骤 3:R1000 作为 modbus TCP 从站。配置参考第二步。您可以看到 R1000 作为从站可以正常读取数据。

在 R1000 中运行 Modbus TCP 从站程序需要监听 502 端口,这可能需要 sudo 权限。如果您的应用程序无法监听 502 端口,请尝试为其添加权限。

技术支持与产品讨论

感谢您选择我们的产品!我们在这里为您提供不同的支持,以确保您使用我们产品的体验尽可能顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。

Loading Comments...