核心:使用埃斯顿官方库 ER_ModbusTcp,包含 RobModbusCnctState、ReadModbusReg、WriteModbusReg 这几个功能块,在线监控功能块引脚 + 变量表,是最标准的方式
一、前期准备
电脑网线直连 iER 控制器网口,电脑 IP 和控制器同网段
打开 Multiprog 工程,程序里已经调用 ER_ModbusTcp 库的功能块(主站,对接梅卡曼德 Modbus 从站)
梅卡曼德侧:Modbus TCP Slave 已经启动、IP / 端口 / 字节序配置好
二、第一步:在线连接控制器,进入在线监控模式
菜单栏:在线 → 连接,选择机器人控制器 IP,建立连接
连接成功后,点 启动监控(Debug),程序进入在线模式,所有引脚实时刷新
必须先把工程下载到控制器,再在线监控;离线模式看不到实时数值
三、监控【TCP 链路连接状态】(RobModbusCnctState)
这个块专门看底层 TCP 是否连上,优先看这个:
输入:
Enable→ 置 TRUE,持续检测连接输出:
ModbusConcted(BOOL):TRUE=TCP 连接成功;FALSE = 断开这个只能判断链路通断,不等于寄存器读写正常(连上也可能地址错、功能码报错)
四、监控读 / 写功能块(ReadModbusReg / WriteModbusReg)
引脚含义
EnRead / EnWrite:使能,TRUE 才发起读写请求RegIndex:要读写的寄存器编号(梅卡曼德标准:100 状态码、101 指令寄存器)RegValue:读到 / 要写入的寄存器原始值(WORD)Valuevalid(BOOL):TRUE = 本次读写收到有效应答;FALSE = 无应答 / 报错Error(BOOL):异常标志ErrorID(INT):错误码ErrorID=0:读写正常
非 0:超时、非法地址、从站拒绝、SlaveID 错误等
梅卡曼德是 3D 视觉,6 维位姿是32 位浮点数,一个浮点数占用 2 个连续 WORD 寄存器,你要在 Multiprog 里自己做 WORD 拼接转 REAL,这里很容易踩字节序坑
两种监控方式
方式 1:直接在程序界面监控功能块引脚
找到 ReadModbusReg/WriteModbusReg 方块,在线时:
引脚会实时变色:TRUE 绿色、FALSE 灰色
直接看
Valuevalid、Error、ErrorID、RegValue写指令(给梅卡曼德写 101 启动、206 取位姿):看 Write 块的 Valuevalid 是否变 TRUE,代表梅卡曼德已经收到这条写指令
方式 2:变量表监控
打开【变量】窗口,把所有接收变量、状态变量添加到监视列表
可以自定义变量:
状态字:
Mech_Status(对应寄存器 100)指令输出:
Mech_Cmd(寄存器 101,写 101/206)X_Word1、X_Word2:拼接成 REAL X 坐标
在线后,变量表自动刷新;可以添加强制(Force),手动写寄存器给梅卡曼德发测试指令
五、逻辑分析仪
Multiprog 自带逻辑分析仪(Logic Analyzer)
把
ModbusConcted、Valuevalid、Error、Mech_Status添加到采集通道启动采集,抓取时序:
机器人发 101 指令 → 梅卡曼德处理 → 状态码变成 2100 → 读坐标
适合排查偶发断连、丢应答、旧坐标不刷新
六、结合梅卡曼德日志联合判断
Multiprog 看到:
ModbusConcted=TRUE,但Valuevalid一直FALSE→ TCP 连上了,但是寄存器地址、SlaveID、功能码不对;去梅卡曼德日志看有没有收到请求Valuevalid=TRUE,读到状态码 = 2100 , 寄存器读写完全成功,视觉匹配 OK,坐标有效Valuevalid=TRUE,状态码 = 0 或者其他错误码 → 通讯正常,但是视觉没有匹配到工件读到浮点数数值乱跳、超大负数 → 字节序不匹配
七、标准握手监控流程
埃斯顿 Multiprog:WriteModbusReg 写 101 到寄存器 101 → 看 Write 块
Valuevalid=1轮询 ReadModbusReg 读寄存器 100(状态码)
读到状态码 = 2100 → 读取 102 开始的 6 个浮点数(XYZ Rx Ry Rz)
抓取完成,写清除指令,进入下一轮
八、常见错误码速查
ErrorID=1:超时
ErrorID=2:非法寄存器地址
ErrorID=3:从站异常应答
ErrorID=0、Valuevalid=TRUE:本次读写交互正常.

