ZeroOne AI
← 返回文章列表

TRIO-Basic 从入门到精通(十二):Trio 实现 ModbusTCP 通讯

👁 31
分类:机器人自动化

本教程演示两台Trio控制器间基于ModbusTCP的以太网通讯,主站通过MODBUS指令对从站保持寄存器进行读写,并实现快速超时、断线重连等可靠通讯机制,适用于与PLC、传感器等从站设备的数据交换。

"# TRIO-Basic 从入门到精通(十二):Trio 实现 ModbusTCP 通讯\n\n## 一、教程背景\n\nModbusTCP 是工业自动化领域应用最广泛的以太网通讯协议之一,基于 TCP/IP 传输,具有实现简单、兼容性强的特点。在运动控制系统中,Trio 控制器常需要与 PLC、传感器、HMI 或其他控制器进行数据交换,ModbusTCP 正是完成这类任务的高效手段。\n\n本教程以两台 Trio 控制器为例,演示主站与从站之间的 ModbusTCP 通讯:主站通过以太网轮询从站的数据寄存器,实现读写操作。作为从站时,Trio 默认开启 ModbusTCP 协议,通讯端口为 502。从站可以是任何支持 ModbusTCP 协议的控制器或传感器,因此本方案具有很强的通用性。\n\n## 二、技术要点/技术方案\n\n测试配置:\n\n- 主站(Trio):IP 地址 192.168.0.251\n- 从站(Trio):IP 地址 192.168.0.250,通讯端口 502\n\n核心指令与参数:\n\n- MODBUS 指令:用于建立 ModbusTCP 连接及读写数据。建立连接时通过 MODBUS(0, -1, 192, 168, 0, 250, 502, com_index) 指定从站 IP 与端口;关闭连接使用 MODBUS(1, -1, modbus_handle)。\n- 功能码 ex_modbus_func = $03:读取保持寄存器(Holding Register)。\n- 读操作:MODBUS(ex_modbus_func, -1, VR(20), 3, 1000, 10),从寄存器地址 1000 开始读取 10 个保持寄存器值存入 VR(20) 起始的数组。\n- 写操作:MODBUS(ex_modbus_func, -1, VR(20), 16, 1010, 10),将 VR(20) 起始的 10 个值写入从寄存器地址 1010 开始的保持寄存器。\n- 通讯句柄通过 VR(com_index)(com_index=4000)保存。\n- IP_TCP_TX_TIMEOUT = 50:设置 TCP 发送超时,实现快速超时响应。\n\n程序特性:\n\n1. 通讯快速超时功能\n2. 断线自动重连功能\n3. 超时无响应自动重连功能\n\n## 三、实施步骤\n\n1. 将两台 Trio 控制器接入同一以太网,分别设置主站 IP 为 192.168.0.251、从站 IP 为 192.168.0.250。\n2. 确认从站已开启 ModbusTCP 服务(Trio 默认开启,端口 502)。\n3. 在主站编写程序:定义通讯句柄变量(com_index=4000)、功能码变量($03)、打印端口(print_port=5)及超时/轮询周期参数(read_timeout=250、loop_time=100)。\n4. 主循环中:若未连接则调用 open_mod 子程序建立连接;连接成功后依次执行读保持寄存器与写保持寄存器操作,并打印每次读写耗时(ReadUseTime)。\n5. 设置发送超时 IP_TCP_TX_TIMEOUT=50,保证通讯快速超时。\n6. 按 loop_time 周期轮询,循环执行读写;连接异常时自动重连。\n\n## 四、代码示例\n\nbasic\nDIM com_index AS INTEGER\ncom_index=4000\nmodbus_handle=VR(com_index)\nDIM ex_modbus_func AS INTEGER\nex_modbus_func = $03\n\nDIM print_port AS INTEGER\nprint_port=5\n\nDIM read_timeout,loop_time,save_looptick,read_tmptick AS INTEGER\nTICKS=0\nread_timeout=250\nloop_time=100\nsave_looptick=TICKS\nDIM tx_connectok AS BOOLEAN\ntx_connectok=FALSE\n\n'IP_TCP_TX_TIMEOUT = 1000\nIP_TCP_TX_TIMEOUT=50\n\n'==============================================================\nWHILE TRUE\n IF tx_connectok=FALSE THEN\n GOSUB open_mod\n ELSE\n read_tmptick=TICKS\n\n ' get 10 values from holding registers\n IF tx_connectok THEN tx_connectok=MODBUS (ex_modbus_func, -1, VR(20), 3 , 1000 , 10 )\n ' send 10 values to holding registers\n IF tx_connectok THEN tx_connectok=MODBUS (ex_modbus_func, -1, VR(20), 16 , 1010 , 10 )\n IF tx_connectok THEN PRINT#print_port,TIME$,\"ReadUseTime=\",ABS(read_tmptick-TICKS)\n ENDIF\n\n REPEAT\n WA(5)\n UNTIL ABS(save_looptick-TICKS)>=loop_time\n save_looptick=TICKS\nWEND\n\n'==============================================================\nWA(50)\nSTOP\n\nopen_mod:\n'Close Modbus connection\nMODBUS(1,-1,modbus_handle)\nWA(20)\n'IP Address 192.168.0.250, Port Number 502\nIF MODBUS(0,-1,192,168,0,250,502,com_index)=TRUE THEN\n modbus_handle = VR(com_index)\n PRINT #print_port,TIME$,\"connect TCP PORT ok:\",modbus_handle\n tx_connectok=TRUE\nELSE\n PRINT #0,TIME$,\"connect TCP PORT ng:\",modbus_handle\n tx_connectok=FALSE\nENDIF\nWA(20)\n\nRETURN\n\n\n## 五、应用价值\n\n1. 提供了一套完整的 Trio 主站与从站间的 ModbusTCP 通讯方案,可直接移植到项目中使用。\n2. 通过 IP_TCP_TX_TIMEOUT 实现毫秒级快速超时,避免通讯故障时长时间阻塞。\n3. 具备断线重连与超时无响应重连机制,提高系统长期运行的可靠性。\n4. 支持任意符合 ModbusTCP 标准的从站设备(PLC、传感器等),扩展性强。\n5. 主循环采用定时轮询模式,读写时序可控,便于与其他运动控制任务协同调度。\n\n## 六、SEO关键词\n\nTRIO运动控制器,TRIO-Basic,ModbusTCP通讯,翠欧控制器,以太网通讯,保持寄存器读写,断线重连,TrioWay\n\n---\n\n本文内容整理自 guimotion 的《TRIO-Basic从入门到精通教程》系列(CSDN,CC BY-SA 4.0),由 ZeroOne AI 重新组织编写。\n"

推荐阅读

更多工业 AI、智能制造与技术实践文章

工业互联网

MY-BASIC 应用(一):轻量级嵌入式 BASIC 解析器介绍

MY-BASIC 是一个用标准 C 语言编写的轻量级 BASIC 解释器:不足 128KB 内存占用、可嵌入可扩展、支持原型编程与 Lambda 函数式编程、Unicode、列表/字典集合,适合嵌入式设备脚本化控制。

工业互联网

Linux系统篇(七)——工具篇(二):一篇搞懂 C 语言程序从代码到可执行文件的完整旅程

拆解 C 程序预处理、编译、汇编、链接四步变身流程,讲透条件编译与静态、动态链接差异,附分步实操与报错排查。

AI视觉

树莓派推送RTSP视频流实战:FFmpeg + rtsp-simple-server(MediaMTX)搭建局域网视频直播服务

本文面向树莓派视频流、Python视觉开发、RTSP视频监控和边缘AI视觉初学者,介绍如何在Raspberry Pi上搭建简单、稳定的RTSP视频流服务。项目采用FFmpeg + rtsp-simple-server(MediaMTX)方式,将树莓派摄像头采集的视频转换并推送到RTSP服务器,再由电脑、NVR、VLC、OpenCV或AI视觉程序访问。文章从安装FFmpeg并验证版本开始,下载适用于ARM64架构的MediaMTX v1.8.1,配置Linux Systemd服务实现RTSP服务器开机自启,最后将摄像头视频推送到RTSP地址,形成树莓派摄像头 → FFmpeg → RTSP服务器 → 客户端播放/AI检测的完整视频流架构。

AI视觉

YOLO目标检测模型调参入门:从训练参数到检测效果优化

YOLO目标检测模型调参入门指南:详解 epochs、imgsz、batch、模型大小、conf、IoU 等核心参数的作用与调节方法,给出工业视觉、疲劳驾驶、缺陷检测等 AI 项目的调参顺序与实验对比思路,帮助初学者在精度、速度与显存之间找到平衡。

工业互联网

Linux系统篇(二十三)——通信(一):什么是进程间通信?一文搞懂背景与全貌

通过实验揭示进程隔离的本质,系统梳理Linux进程间通信的六种机制:管道、消息队列、共享内存、信号量、信号与Socket,并给出选型方法。

机器人自动化

SOEM-EtherCAT 源代码解析(二):已知的从站配置信息列表

解析 SOEM 主站库的从站配置信息列表:ec_configlist_t 结构体字段含义、dtype 设备类型解释、倍福 EK1100/EL 系列端子预配置表,以及未知从站如何回退到 EEPROM 读取配置。

评论(0)