1. 简介
- LattePanda RS485 扩展板是专为 LattePanda V1 设计的轻工业级接口扩展板,将 LattePanda 串口转换为 RS485 接口
- 采用金升阳的串口转 RS485 模块和电源模块,保证信号隔离与电源隔离
- 工业接线端子(4Pin:12V、GND、485A、485B),可方便的连接各种RS485接口设备
- 12V 电源输出,最大输出电流 150mA 左右,方便测试小负载的 RS485设备
- 沉金工艺,既美观,又保证PCB质量。双塑长脚2.0mm排针,保证排针的耐用
- 板载 120Ω 终端匹配电阻,可通过开关控制接入接出
- 随产品附赠尼龙柱,保证产品与LP连接的稳定性
2. 产品参数
- 模块运行电源:+5V
- 符合EIA/TIA-232-F标准
- 通信波特率最高 115200 bps(LP一代的TTL信号最高只能调节到115200bps)
- 最高 12V 电源输出(输出电流小于 150 mA)
- 隔离电压 2500 VDC
- 1/8 单位负载,总线负载能力高达 256 节点
- 总线失效保护和总线驱动短路保护
- 工作温度范围:-40℃ to +105℃
- ⚠注意:
不支持热插拔
3. 应用
- 在 Windows 环境下轻松开发和使用 RS485 通信接口(兼容 Linux 环境)
4. 引脚说明
LattePanda V1 引脚定义(建议参考 LattePanda 官方wiki)
5. RS485 通信协议简介
典型的串行通信标准之一。
RS485 接口具有良好的抗噪声干扰性,较长的传输距离、多站能力和布线简单等优点,因而在工业上被广泛使用。
RS485 通信协议只定义了传输的电压,阻抗等电气特性,但不对软件协议给予定义。数据信号采用差分传输方式,因此具有抑制共模干扰的能力。总线收发器具有高灵敏度,能检测低至200mV的电压。RS-485用于多点互连时非常方便,可以省掉许多信号线。它使用一对双绞线,将其中一线定义为A,另一线定义为B。通常情况下,发送驱动器A、B之间的正电平在+2~+6V,是逻辑1
状态,负电平在-2V~6V,是逻辑0
状态。其最大传输距离约为1200米,传输速率与传输距离成反比,只有在很短的距离下才能获得最高速率传输。RS485需要2个终端电阻,其阻值要求等于传输电缆的特性阻抗(一般为120Ω)。在短距离传输时可不需终端电阻,终端电阻需接在传输总线的两端。
6. ModBus 通信协议简介
Modbus 协议是一个 master/slave 架构的协议。有一个节点是 master 节点,其他使用 Modbus 协议参与通信的节点是 slave 节点。每一个 slave 设备都有一个唯一的地址。一个 ModBus 命令包含了打算执行的设备的 Modbus 地址。所有设备都会收到命令,但只有指定位置的设备会执行及回应指令(地址0例外,指定地址0的指令是广播指令,所有收到指令的设备都会运行,不过不回应指令)。所有的 Modbus 命令包含了校验码,以确定到达的命令没有被破坏。基本的 ModBus 命令能指令一个 RTU 改变它的寄存器的某个值,控制或者读取一个 I/O 端口,以及指挥设备回送一个或者多个其寄存器中的数据。
Modbus协议有多种变体:
- Modbus RTU —— 在串行通信中使用,并使用数据的紧凑二进制表示形式进行协议通信。RTU 格式遵循命令/数据,并带有循环冗余校验校验和作为错误校验机制,以确保数据的可靠性。Modbus RTU 是可用于 Modbus 的最常见的实现。Modbus RT U消息必须连续发送,且字符间不要犹豫。Modbus 消息按空闲(静默)时间段进行帧化(分隔)。
- Modbus ASCII —— 在串行通信中使用,并使用 ASCII 字符进行协议通信。ASCII 格式使用纵向冗余校验和。Modbus ASCII 消息由冒号(“:”)和换行符(CR / LF)组成。
- Modbus TCP/IP 或 Modbus TCP —— 这是 Modbus 变体,用于通过端口 502 连接的 TCP/IP 网络上的通信。它不需要校验和计算,因为较低的层已经提供了校验和保护。
7. 使用教程
这里演示 LattePanda V1 通过 RS485 接口控制 DFR0290 8路继电器。
准备硬件:
7.1 扩展板与 LattePanda V1 插接示意
需使用尼龙柱和尼龙螺丝固定扩展版与 LattePanda
7.2 连线图
如下图:
7.3 使用上位机软件
- LattePanda 与 RS485 接口扩展板插接好后,开机
- RLY-8-PoE-RS485 8路网络控制继电器模块接通电源
- LattePanda 上打开DFRobot出品的上位机软件,选择COM1串口,波特率设置115200
- 通过上位机软件即可操作继电器模块
7.4 使用串口调试助手
- 重复上述步骤
- 根据 8路网络控制继电器模块的自定义通信规则,使用串口调试工具发送正确指令,控制继电器模块
如下图,控制继电器 1 号继电器的开关
7.5 使用 ModBus 调试助手
- 重复上述步骤
- 根据 8 路网络控制继电器模块的ModBus协议规则,使用ModBus调试助手发送正确指令,控制继电器模块
如下图,获取设备名称和控制继电器 2 号继电器的开关
7.6 使用 Python 的 ModBus 库
目前 Python 关于 ModBus 协议的第三方库,比较主流的有以下几种:
- Modbus_tk
- Pymodbus
- Minimalmodbus
- Umodbus
库名称 | 源码 | 3rd party 依赖 | 主要功能 |
---|---|---|---|
modbus_tk | https://github.com/ljean/modbus-tk | pyserial | Support modbus TCP and RTU, both master and slave。Don’t support modbus ASCII。 重量级 |
pymodbus | https://github.com/riptideio/pymodbus/ | pyserial | Support modbus TCP/RTU/ASCII, master and slave。 重量级 |
minimalmodbus | https://github.com/pyhys/minimalmodbus | pyserial | Only support Modbus RTU and ASCII, and only work in master(clinet). 非常轻量级 |
uModbus | https://github.com/AdvancedClimateSystems/uModbus/ | pyserial | Support both Modbus client amd server (both TCP and RTU). Don’t support Modbus ASCII。轻量级 |
这里以 modbus_tk 的使用为例。
- 重复上述步骤
- 在 LattePanda V1 上安装 Python 和 modbus_tk 和其他依赖包
- 根据 8路网络控制继电器模块的ModBus协议规则,编写 python 代码,控制继电器模块
如下图,在命令行运行 Python 脚本,获取设备名称和控制设备依次开关所有的继电器
疑难解答
更多问题及有趣的应用,请访问论坛