跳到正文
PreciSim
dev

Modbus 地址表

让 PLC 直接驱动虚拟机台,用于「PLC 逻辑先在虚拟设备上跑通」。

开启

设置 → 接口 → Modbus TCP,默认监听 0.0.0.0:502,Unit ID = 1。

502 端口在 Windows 上需要管理员权限。装到非标准端口(如 5020)更省事, 大多数 PLC 侧都能配端口。

数据类型约定

约定
字节序 大端(Modbus 标准),32 位量高字在前
位置量 int32,单位 0.001 mm(即 120500 = 120.500 mm)
角度量 int32,单位 0.0001 deg
速度量 int32,单位 0.001 mm/s
布尔量 线圈 / 离散输入

统一用定点整数而不是浮点:不同 PLC 对 IEEE754 的字序处理不一致, 用整数能彻底躲开这个经典麻烦。

线圈(读写,功能码 01/05/15)

地址 名称 说明
00001 CMD_HOME_ALL 上升沿触发全轴回零
00002 CMD_STOP_ALL 置 1 立刻停止所有轴
00003 CMD_RESET 上升沿清报警
00011 CMD_X_MOVE 上升沿按 40011 的目标值运动
00012 CMD_Y_MOVE 同上,目标在 40013
00013 CMD_Z_MOVE 同上,目标在 40015
00021 CMD_GRAB 上升沿抓一帧
00031–00046 DO_01DO_16 数字输出

离散输入(只读,功能码 02)

地址 名称 说明
10001 ST_READY 所有轴已回零且无报警
10002 ST_BUSY 有轴在运动
10003 ST_ALARM 有报警未清除
10004 ST_ESTOP 急停被按下
10011 ST_X_INPOS X 到位
10012 ST_Y_INPOS Y 到位
10013 ST_Z_INPOS Z 到位
10031–10046 DI_01DI_16 数字输入

保持寄存器(读写,功能码 03/06/16)

地址 名称 类型 说明
40011–40012 X_TARGET int32 X 目标位置,0.001 mm
40013–40014 Y_TARGET int32 Y 目标位置
40015–40016 Z_TARGET int32 Z 目标位置
40021–40022 SPEED int32 运动速度,0.001 mm/s
40031 CALIB_PROC uint16 1=C1 2=C2 3=C3 4=C4 5=C5 6=C6
40032 CALIB_CMD uint16 1=开始 2=中止

输入寄存器(只读,功能码 04)

地址 名称 类型 说明
30011–30012 X_POS int32 X 当前位置,0.001 mm
30013–30014 Y_POS int32 Y 当前位置
30015–30016 Z_POS int32 Z 当前位置
30021 ALARM_CODE uint16 当前报警码,0 = 无
30031 CALIB_STATE uint16 0=空闲 1=运行 2=通过 3=失败
30032–30033 CALIB_DEV_UM int32 最近一次标定偏差,µm

一个完整的 PLC 侧流程

1) 等 ST_READY = 1
2) 写 X_TARGET = 120500, Y_TARGET = 96000
3) CMD_X_MOVE ↑, CMD_Y_MOVE ↑
4) 等 ST_X_INPOS = 1 且 ST_Y_INPOS = 1
5) CMD_GRAB ↑
6) 写 CALIB_PROC = 1, CALIB_CMD = 1
7) 等 CALIB_STATE ≥ 2
8) 读 CALIB_DEV_UM,与容差比较

【坑】上升沿触发的命令位,PLC 侧必须自己复位。 一直保持为 1 不会重复触发,但会让 ST_BUSY 的时序看起来很怪。

最后更新: 2026/9/21
这页有帮助吗?