1. MODBUS RTU通信基础与ROS2集成
在工业自动化领域,MODBUS RTU协议因其简单可靠的特点,成为PLC与上位机通信的黄金标准。当它与ROS2的实时通信架构结合时,能构建出响应迅速、扩展性强的工业控制系统。本文将手把手带你完成从环境配置到实际通信的全流程实现。
1.1 环境准备与库安装
MODBUS RTU通信的核心是pymodbus库,但安装时需要注意版本兼容性问题。以下是经过实测的安装方案:
bash复制# 优先检查系统仓库版本(通常较旧)
sudo apt search python3-pymodbus
# 若存在旧版建议先卸载(避免冲突)
sudo apt remove python3-pymodbus
# 推荐使用pip安装最新版(3.x版本)
pip3 install --user --upgrade pymodbus
关键细节:使用
--user参数可避免污染系统Python环境,特别在ROS2工作空间中尤为重要。实测在Ubuntu 22.04 + ROS2 Humble环境下,pymodbus 3.1.4版本稳定性最佳。
验证安装成功的正确姿势:
bash复制python3 -c "from pymodbus.client import ModbusSerialClient; print('Import OK')"
1.2 串口设备配置实战
工业现场最常遇到的坑就是串口权限问题。完整排查流程如下:
bash复制# 1. 物理层确认
lsusb # 确认USB转串口设备已被识别
# 典型输出:Bus 001 Device 004: ID 0403:6001 Future Technology Devices International, Ltd FT232 Serial (UART) IC
# 2. 设备节点定位
ls /dev/ttyUSB* # 插拔对比确认设备号
# 输出示例:/dev/ttyUSB0
# 3. 权限组配置
sudo usermod -a -G dialout $USER # 将当前用户加入dialout组
groups $USER # 验证是否生效
避坑指南:修改用户组后需要重新登录才会生效,这是新手最常忽略的点。如果仍报权限错误,可临时使用
sudo chmod 666 /dev/ttyUSB0,但生产环境不建议这样做。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. MODBUS RTU通信核心实现
2.1 客户端完整实现代码
以下是一个工业级强度的MODBUS RTU客户端实现,包含重试机制和异常处理:
python复制from pymodbus.client import ModbusSerialClient
import time
import logging
# 配置诊断日志(生产环境建议记录到文件)
logging.basicConfig()
log = logging.getLogger()
log.setLevel(logging.INFO)
class ModbusRTUCo
