diff --git a/README.md b/README.md
index 8495a3a..69c3833 100644
--- a/README.md
+++ b/README.md
@@ -1,259 +1,18 @@
-# 线激光器上位机与运动控制器 Modbus RTU 通信协议
+# line-laser-modbus
-## 1. 协议概述
+线激光器上位机与运动控制器的 Modbus RTU 通信模块,覆盖模式命令、设备状态、6 轴位姿、目标示教位姿和 6 轴纠偏量的读写。
-本协议用于焊缝识别设备(简称视觉设备)(主站)与运动控制器(从站)之间的双向通信,实现6轴位置/姿态数据传输、工作模式控制、设备状态反馈,覆盖系统标定、焊前示教、在线跟踪、轨迹批量复现全工作阶段。协议采用Modbus RTU标准,支持后期切换至Modbus TCP(寄存器地址、数据格式、功能码完全不变)。
+协议文档见 [docs/proto.md](docs/proto.md)。
-## 2. 基础通信参数
+## 功能
-### 2.1 串口参数
+- 基于 `pymodbus` 的 Modbus RTU 串口客户端
+- 按协议实现 uint16、float32、XYZABC 位姿和 CRC16 编解码
+- 提供无硬件内存模拟器用于测试
+- 提供模式状态机校验和 20ms 轮询运行器
+- 使用 TOML 作为运行配置入口
-| 参数名称 | 参数值 | 说明 |
-| --- | --- | --- |
-| 波特率 | 115200 bps | |
-| 数据位 | 8位 | |
-| 停止位 | 1位 | |
-| 校验位 | 无校验(8N1) | 依赖CRC16校验保证数据完整性,简化配置 |
-| 帧间隔 | ≥3.5个字符时间 | Modbus RTU标准要求,避免帧粘连 |
-
-### 2.2 协议核心规则
-
-| 规则名称 | 具体要求 | 说明 |
-| --- | --- | --- |
-| 主从角色 | 主站:视觉设备;
从站:运动控制器 | 主站主动发起读写请求,从站被动响应、执行指令 |
-| 从站地址(Slave ID) | 0x08(固定) | 后期切换Modbus TCP时,Unit ID保持一致 |
-| 寄存器类型 | 仅使用保持寄存器(Holding Register) | 支持读写操作,适配位置、姿态、命令、状态等数据传输 |
-| 核心功能码 | 0x03(读保持寄存器);0x10(写多个保持寄存器) | 不使用其他功能码 |
-| 字节序 | 大端模式(Big-Endian) | 高寄存器高字节在前,解析时需按此规则拼接数据 |
-| 编址方式 | 寄存器从0xD000开始绝对编址 | 后期可切换到Modbus TCP |
-| CRC16校验 | 多项式0xA001,初始值0xFFFF,低字节在前、高字节在后 | 每帧数据末尾添加2字节CRC校验,确保数据传输无误 |
-
-## 3. 保持寄存器地址映射
-
-| 起始地址(十六进制) | 寄存器数量 | 数据类型 | 通信方向 | 寄存器名称 | 详细说明 |
-| --- | --- | --- | --- | --- | --- |
-| 0xD000 | 1 | ushort | 视觉→控制器 | 模式命令字 | 控制控制器切换工作模式,取值范围0~5(详见4.1) |
-| 0xD001 | 1 | ushort | 控制器→视觉 | 设备状态字 | 反馈控制器当前运行状态,取值范围0~6(详见4.2) |
-| 0xD002 ~ 0xD009 | 8 | 保留 | — | 预留扩展寄存器 | 暂不使用,用于后期功能扩展(如新增参数配置) |
-| 0xD00A | 12 | float | 控制器→视觉 | 当前6轴位姿 | 反馈控制器当前实际位置(X/Y/Z)和姿态(A/B/C),具体排布详见5.1 |
-| 0xD016 | 12 | float | 视觉→控制器 | 目标示教位姿 | 激光扫描后下发的标准轨迹位姿(X/Y/Z/A/B/C),具体排布详见5.2 |
-| 0xD022 | 12 | float | 视觉→控制器 | 6轴全量纠偏量 | 实时下发的位置偏差(ΔX/ΔY/ΔZ)和姿态偏差(ΔA/ΔB/ΔC),具体排布详见5.3 |
-| 0xD02E ~ 0xD02F | 2 | 保留 | — | 标定参数预留 | 用于存储手眼标定相关参数,后期可扩展使用 |
-
-## 4. 模式命令字与设备状态字详细定义
-
-### 4.1 模式命令字(地址:0xD000,视觉→控制器)
-
-用于切换工作模式,由运动控制上位机下发到运动控制器,视觉设备轮询运动控制器读取设置值并执行对应逻辑,取值范围0~5。
-
-| 模式值 | 模式名称 | 主辅角色 | 核心功能 | 适用场景 |
-| --- | --- | --- | --- | --- |
-| 0 | 待机复位模式 | 空闲态 | 控制器停机、轨迹清空、纠偏量清零,处于就绪待命状态;视觉仅监控状态,不下发任何控制指令 | 上电初始、停机复位、模式切换前过渡 |
-| 1 | 系统标定模式 | 控制器主、视觉辅 | 控制器按标定流程自动走位到标定点;视觉读取控制器当前位姿,完成手眼标定计算,下发标定参数 | 设备首次调试、视觉与控制器坐标系校准 |
-| 2 | 焊前扫描示教模式 | 视觉主、控制器辅 | 视觉扫描工件轮廓,拟合空间轨迹,循环下发目标示教位姿;控制器跟随走位,记录轨迹点并内部保存 | 批量生产前,生成标准工艺轨迹 |
-| 3 | 在线全轴跟踪模式 | 视觉主、控制器辅 | 视觉20ms周期读取控制器当前位姿,计算6轴全量偏差并下发;控制器按“基准轨迹+实时纠偏”连续运动 | 工件偏差较大、需实时跟随的生产场景(如焊接、坡口切割) |
-| 4 | 轨迹批量复现模式 | 控制器主、视觉辅 | 控制器调用内部保存的标准轨迹,自动循环批量运行;视觉仅监控位姿,小幅下发纠偏量,超差报警 | 工件一致性好、批量量产的场景 |
-| 5 | 紧急停止模式 | 系统强制态 | 任意模式下可立即切入,控制器立刻断使能、急停刹车;视觉暂停扫描、停止下发指令,仅保持通信监听 | 设备故障、安全隐患、紧急停机场景 |
-
-### 4.2 设备状态字(地址:0xD001,控制器→视觉)
-
-用于反馈运动控制器当前的运行状态,由控制器实时更新,视觉设备读取后判断设备工况,取值范围0~6。
-
-| 状态值 | 状态名称 | 对应模式 | 详细说明 |
-| --- | --- | --- | --- |
-| 0 | 待机就绪 | 0(待机复位) | 控制器停机、无故障、无轨迹,等待模式指令下发 |
-| 1 | 运动运行中 | 2(示教)、3(跟踪)、4(复现) | 控制器正在执行运动指令(跟随示教、实时跟踪、批量复现) |
-| 2 | 示教完成 | 2(示教) | 视觉扫描示教完成,控制器已保存完整标准轨迹,可切换至跟踪或复现模式 |
-| 3 | 在线跟踪正常 | 3(跟踪) | 实时跟踪正常,纠偏量在合理范围,无超差、无故障 |
-| 4 | 设备报警 | 任意模式 | 出现异常(轨迹超差、限位触发、通信故障、电机故障等),控制器停机,等待排查 |
-| 5 | 标定完成 | 1(标定) | 系统标定流程完成,坐标系校准成功,可切换至其他运行模式 |
-| 6 | 急停已触发 | 5(急停) | 紧急停止指令已执行,控制器锁定所有运动,仅可切换至待机模式 |
-
-## 5. 6轴数据(位置/姿态/纠偏)详细格式
-
-当前位姿、目标示教位姿、6轴纠偏量均为6个32位float,排布顺序统一(X→Y→Z→A→B→C),每个float占用2个连续寄存器,大端模式存储,解析规则一致。
-
-### 5.1 当前6轴位姿(地址:0xD00A ~ 0xD015,控制器→视觉)
-
-反馈控制器当前实际的位置和姿态,视觉设备读取后用于标定计算、跟踪偏差分析、状态监控。
-
-| 寄存器地址范围 | 数据类型 | 对应物理量 | 单位 | 说明 |
-| --- | --- | --- | --- | --- |
-| 0xD00A ~ 0xD00B | float | X 位置 | mm | 空间X轴坐标,根据实际设备坐标系定义 |
-| 0xD00C ~ 0xD00D | float | Y 位置 | mm | 空间Y轴坐标 |
-| 0xD00E ~ 0xD00F | float | Z 位置 | mm | 空间Z轴坐标(垂直方向) |
-| 0xD010 ~ 0xD011 | float | A 姿态角 | °(度) | 绕X轴翻滚角 |
-| 0xD012 ~ 0xD013 | float | B 姿态角 | °(度) | 绕Y轴俯仰角 |
-| 0xD014 ~ 0xD015 | float | C 姿态角 | °(度) | 绕Z轴偏航角 |
-
-### 5.2 目标示教位姿(地址:0xD016 ~ 0xD021,视觉→控制器)
-
-激光扫描工件后,拟合生成的标准轨迹位姿,下发给控制器后,控制器跟随走位并保存轨迹,排布与当前位姿完全一致。
-
-| 寄存器地址范围 | 数据类型 | 对应物理量 | 单位 | 说明 |
-| --- | --- | --- | --- | --- |
-| 0xD016 ~ 0xD017 | float | X 目标位置 | mm | 示教轨迹的X轴坐标 |
-| 0xD018 ~ 0xD019 | float | Y 目标位置 | mm | 示教轨迹的Y轴坐标 |
-| 0xD01A ~ 0xD01B | float | Z 目标位置 | mm | 示教轨迹的Z轴坐标 |
-| 0xD01C ~ 0xD01D | float | A 目标姿态角 | °(度) | 示教轨迹的绕X轴翻滚角 |
-| 0xD01E ~ 0xD01F | float | B 目标姿态角 | °(度) | 示教轨迹的绕Y轴俯仰角 |
-| 0xD020 ~ 0xD021 | float | C 目标姿态角 | °(度) | 示教轨迹的绕Z轴偏航角 |
-
-### 5.3 6轴全量纠偏量(地址:0xD022 ~ 0xD02D,视觉→控制器)
-
-视觉设备根据当前位姿与目标轨迹的偏差,实时计算并下发纠偏数据,控制器接收后叠加到基准轨迹,实现高精度跟踪。
-
-| 寄存器地址范围 | 数据类型 | 对应偏差量 | 单位 | 说明 |
-| --- | --- | --- | --- | --- |
-| 0xD022 ~ 0xD023 | float | ΔX 偏差 | mm | X轴方向偏差,正值=正向纠偏,负值=反向纠偏 |
-| 0xD024 ~ 0xD025 | float | ΔY 偏差 | mm | Y轴方向偏差 |
-| 0xD026 ~ 0xD027 | float | ΔZ 偏差 | mm | Z轴方向偏差 |
-| 0xD028 ~ 0xD029 | float | ΔA 偏差 | °(度) | 绕X轴姿态偏差 |
-| 0xD02A ~ 0xD02B | float | ΔB 偏差 | °(度) | 绕Y轴姿态偏差 |
-| 0xD02C ~ 0xD02D | float | ΔC 偏差 | °(度) | 绕Z轴姿态偏差 |
-
-## 6. Modbus RTU 帧格式标准
-
-所有通信帧均遵循以下格式,CRC16校验码位于帧末尾,用于验证数据完整性;仅使用0x03(读)和0x10(写)两个功能码。
-
-### 6.1 读保持寄存器(功能码:0x03)
-
-用于视觉设备读取控制器的寄存器数据(如当前位姿、设备状态字),控制器被动响应并返回数据。
-
-#### 6.1.1 请求帧格式(主站→从站)
-
-| 字节位置 | 字节长度 | 内容 | 说明 |
-| --- | --- | --- | --- |
-| 1 | 1B | 从站地址 | 固定为0x08 |
-| 2 | 1B | 功能码 | 0x03(读保持寄存器) |
-| 3~4 | 2B | 起始寄存器地址 | 大端模式,如读取模式+状态,起始地址为0xD000 |
-| 5~6 | 2B | 读取寄存器数量 | 大端模式,如读取2个寄存器(模式+状态),数量为0x0002 |
-| 7~8 | 2B | CRC16校验码 | 低字节在前、高字节在后 |
-
-#### 6.1.2 响应帧格式(从站→主站)
-
-| 字节位置 | 字节长度 | 内容 | 说明 |
-| --- | --- | --- | --- |
-| 1 | 1B | 从站地址 | 固定为0x08,与请求帧一致 |
-| 2 | 1B | 功能码 | 0x03,与请求帧一致 |
-| 3 | 1B | 数据字节长度 | 后续数据的总字节数(1个16位ushort=2B,1个float=4B) |
-| 4~N | NB | 寄存器数据 | 按大端模式排列,连续存储 |
-| N+1~N+2 | 2B | CRC16校验码 | 低字节在前、高字节在后 |
-
-### 6.2 写多个保持寄存器(功能码:0x10)
-
-用于视觉设备向控制器下发数据(如模式命令、目标位姿、纠偏量),控制器接收后执行并返回确认帧。
-
-#### 6.2.1 请求帧格式(主站→从站)
-
-| 字节位置 | 字节长度 | 内容 | 说明 |
-| --- | --- | --- | --- |
-| 1 | 1B | 从站地址 | 固定为0x08 |
-| 2 | 1B | 功能码 | 0x10(写多个保持寄存器) |
-| 3~4 | 2B | 起始寄存器地址 | 大端模式,如写模式命令,起始地址为0xD000 |
-| 5~6 | 2B | 写入寄存器数量 | 大端模式,如写1个寄存器(模式命令),数量为0x0001 |
-| 7 | 1B | 后续字节数 | 写入数据的总字节数(1个16位ushort=2B,1个float=4B) |
-| 8~N | NB | 寄存器数据 | 按大端模式排列,连续存储 |
-| N+1~N+2 | 2B | CRC16校验码 | 低字节在前、高字节在后 |
-
-#### 6.2.2 响应帧格式(从站→主站)
-
-控制器接收并执行写指令后,返回确认帧,仅反馈写指令的关键信息,不返回写入的数据。
-
-| 字节位置 | 字节长度 | 内容 | 说明 |
-| --- | --- | --- | --- |
-| 1 | 1B | 从站地址 | 固定为0x08,与请求帧一致 |
-| 2 | 1B | 功能码 | 0x10,与请求帧一致 |
-| 3~4 | 2B | 起始寄存器地址 | 与请求帧一致,大端模式 |
-| 5~6 | 2B | 写入寄存器数量 | 与请求帧一致,大端模式 |
-| 7~8 | 2B | CRC16校验码 | 低字节在前、高字节在后 |
-
-## 7. 常用指令帧示例
-
-以下指令帧均为十六进制格式,CRC16校验码已计算(可根据实际数据重新校验),适配所有工作阶段,直接下发即可执行。
-
-| 指令用途 | 指令帧(十六进制) | 说明 |
-| --- | --- | --- |
-| 读模式命令字+设备状态字(一次读2个寄存器) | 08 03 D0 00 00 02 FC 52 | 从站0x08,读起始地址0xD000,读2个寄存器,CRC= FC 52 |
-| 写模式:进入待机复位模式(0xD000=0) | 08 10 D0 00 00 01 02 00 00 1D CD | 从站0x08,写起始地址0xD000,写1个寄存器,数据=0x0000,CRC=1D CD |
-| 写模式:进入系统标定模式(0xD000=1) | 08 10 D0 00 00 01 02 00 01 DC 0D | 数据=0x0001,CRC= DC 0D |
-| 写模式:进入焊前扫描示教模式(0xD000=2) | 08 10 D0 00 00 01 02 00 02 9C 0C | 数据=0x0002,CRC=9C 0C |
-| 写模式:进入在线全轴跟踪模式(0xD000=3) | 08 10 D0 00 00 01 02 00 03 5D CC | 数据=0x0003,CRC=5D CC |
-| 写模式:进入轨迹批量复现模式(0xD000=4) | 08 10 D0 00 00 01 02 00 04 1C 0E | 数据=0x0004,CRC=1C 0E |
-| 写模式:紧急停止(0xD000=5) | 08 10 D0 00 00 01 02 00 05 DD CE | 数据=0x0005,CRC= DD CE |
-| 读当前6轴位姿(起始0xD00A,读12个寄存器) | 08 03 D0 0A 00 0C 5D 94 | 读X/Y/Z/A/B/C当前位姿,CRC=5D 94 |
-| 写6轴全量纠偏量(起始0xD022,写12个寄存器) | 08 10 D0 22 00 0C 18 3F 80 00 00 40 00 00 00 40 40 00 00 00 00 00 00 3F 80 00 00 40 00 00 00 3D 5C | 示例数据:ΔX=1.0、ΔY=2.0、ΔZ=3.0、ΔA=0.0、ΔB=1.0、ΔC=2.0,CRC=3D 5C |
-| 读设备状态字(单独读,起始0xD001,读1个寄存器) | 08 03 D0 01 00 01 ED 93 | 单独读取当前设备状态,CRC= ED 93 |
-
-## 8. 各模式下通信行为规范
-
-明确各工作模式下,主站(视觉)与从站(控制器)的通信职责,确保主辅关系清晰、通信高效,避免数据冲突。
-
-### 8.1 待机复位模式(0)
-
-控制器:轴停机、轨迹清空、纠偏清零、就绪待命。
-
-视觉设备:只读取状态字与当前位姿,不下发目标位姿、不下发纠偏量。
-
-### 8.2 系统标定模式(1)
-
-控制器:按标定流程自动走标定点位。
-
-视觉设备:周期读取 6 轴当前位姿,进行手眼标定计算,不启用示教与实时纠偏。
-
-### 8.3 焊前扫描示教模式(2)
-
-控制器:跟随激光下发的目标 6 轴位姿运动,自动记录并保存完整轨迹。
-
-视觉设备:扫描工件轮廓,连续生成并下发 XYZABC 目标示教位姿。
-
-### 8.4 在线全轴跟踪模式(3)
-
-视觉设备以 20ms 固定周期轮询:
-
-读取控制器当前 6 轴位姿;
-
-对比理论轨迹,计算 ΔX ΔY ΔZ ΔA ΔB ΔC 全量偏差;
-
-写入 6 轴纠偏量寄存器。
-
-控制器:基准轨迹叠加实时全轴纠偏,连续插补运动。
-
-### 8.5 轨迹批量复现模式(4)
-
-控制器主导:调用内部已保存标准轨迹,自动循环批量运行。
-
-视觉辅助:仅周期读取位姿做轨迹监控;仅小装夹偏差做微量 6 轴纠偏;偏差超阈值直接报警停机,不重新规划轨迹。
-
-### 8.6 紧急停止模式(5)
-
-任意模式可立即切入;控制器立刻停止所有轴运动、锁定使能;视觉设备停止轨迹下发、停止纠偏输出,仅保持通信监听。
-
-## 9 模式状态机切换规则
-
-- (1)任意模式可随时切换至 0 待机、5 急停;
-
-- (2)急停 5 只能退回 0 待机,不能直接进入运行模式;
-
-- (3)标定完成自动回待机;
-
-- (4)示教完成可切待机、在线跟踪、批量复现;
-
-- (5)在线跟踪与轨迹批量复现可互相切换;
-
-- (6)非法模式值控制器直接拒收不执行。
-
-## 10 通信时序与稳定性要求
-
-- (1)视觉设备独立线程轮询周期:20ms;
-
-- (2)单帧通信超时:50ms,超时重发,多次超时判定通信断开;
-
-## 11 Python 实现说明
-
-本仓库提供 `line_laser_modbus` Python 模块,使用 Python 3.12 和 `uv` 管理依赖。真实串口通信基于 `pymodbus`,无硬件测试使用内存模拟器。
-
-### 11.1 安装与测试
+## 安装与测试
```powershell
python -m uv sync --default-index https://mirrors.ustc.edu.cn/pypi/simple
@@ -261,7 +20,7 @@ python -m uv run pytest
python -m uv run ruff check
```
-### 11.2 模拟运行
+## 模拟运行
```powershell
python -m uv run line-laser-modbus --simulate read-status
@@ -270,7 +29,7 @@ python -m uv run line-laser-modbus --simulate poll-once --target 1 2 3 0 1 2
python -m uv run line-laser-modbus --simulate demo
```
-### 11.3 TOML 配置
+## TOML 配置
外部配置入口参考 `config.example.toml`。真实串口运行时可使用:
@@ -279,3 +38,7 @@ python -m uv run line-laser-modbus --config config.example.toml read-status
```
配置文件包含 `[serial]` 和 `[polling]` 两段,其中 `[polling]` 用于配置 20ms 轮询周期和连续超时判定次数。
+
+## 类型标记
+
+`src/line_laser_modbus/py.typed` 是 PEP 561 类型标记文件。它可以为空,文件存在本身就表示这个包发布后应被类型检查器按 typed package 处理。
diff --git a/docs/proto.md b/docs/proto.md
new file mode 100644
index 0000000..1d1b964
--- /dev/null
+++ b/docs/proto.md
@@ -0,0 +1,251 @@
+# 线激光器上位机与运动控制器 Modbus RTU 通信协议
+
+## 1. 协议概述
+
+本协议用于焊缝识别设备(简称视觉设备)(主站)与运动控制器(从站)之间的双向通信,实现6轴位置/姿态数据传输、工作模式控制、设备状态反馈,覆盖系统标定、焊前示教、在线跟踪、轨迹批量复现全工作阶段。协议采用Modbus RTU标准,支持后期切换至Modbus TCP(寄存器地址、数据格式、功能码完全不变)。
+
+## 2. 基础通信参数
+
+### 2.1 串口参数
+
+| 参数名称 | 参数值 | 说明 |
+| --- | --- | --- |
+| 波特率 | 115200 bps | |
+| 数据位 | 8位 | |
+| 停止位 | 1位 | |
+| 校验位 | 无校验(8N1) | 依赖CRC16校验保证数据完整性,简化配置 |
+| 帧间隔 | ≥3.5个字符时间 | Modbus RTU标准要求,避免帧粘连 |
+
+### 2.2 协议核心规则
+
+| 规则名称 | 具体要求 | 说明 |
+| --- | --- | --- |
+| 主从角色 | 主站:视觉设备;
从站:运动控制器 | 主站主动发起读写请求,从站被动响应、执行指令 |
+| 从站地址(Slave ID) | 0x08(固定) | 后期切换Modbus TCP时,Unit ID保持一致 |
+| 寄存器类型 | 仅使用保持寄存器(Holding Register) | 支持读写操作,适配位置、姿态、命令、状态等数据传输 |
+| 核心功能码 | 0x03(读保持寄存器);0x10(写多个保持寄存器) | 不使用其他功能码 |
+| 字节序 | 大端模式(Big-Endian) | 高寄存器高字节在前,解析时需按此规则拼接数据 |
+| 编址方式 | 寄存器从0xD000开始绝对编址 | 后期可切换到Modbus TCP |
+| CRC16校验 | 多项式0xA001,初始值0xFFFF,低字节在前、高字节在后 | 每帧数据末尾添加2字节CRC校验,确保数据传输无误 |
+
+## 3. 保持寄存器地址映射
+
+| 起始地址(十六进制) | 寄存器数量 | 数据类型 | 通信方向 | 寄存器名称 | 详细说明 |
+| --- | --- | --- | --- | --- | --- |
+| 0xD000 | 1 | ushort | 视觉→控制器 | 模式命令字 | 控制控制器切换工作模式,取值范围0~5(详见4.1) |
+| 0xD001 | 1 | ushort | 控制器→视觉 | 设备状态字 | 反馈控制器当前运行状态,取值范围0~6(详见4.2) |
+| 0xD002 ~ 0xD009 | 8 | 保留 | — | 预留扩展寄存器 | 暂不使用,用于后期功能扩展(如新增参数配置) |
+| 0xD00A | 12 | float | 控制器→视觉 | 当前6轴位姿 | 反馈控制器当前实际位置(X/Y/Z)和姿态(A/B/C),具体排布详见5.1 |
+| 0xD016 | 12 | float | 视觉→控制器 | 目标示教位姿 | 激光扫描后下发的标准轨迹位姿(X/Y/Z/A/B/C),具体排布详见5.2 |
+| 0xD022 | 12 | float | 视觉→控制器 | 6轴全量纠偏量 | 实时下发的位置偏差(ΔX/ΔY/ΔZ)和姿态偏差(ΔA/ΔB/ΔC),具体排布详见5.3 |
+| 0xD02E ~ 0xD02F | 2 | 保留 | — | 标定参数预留 | 用于存储手眼标定相关参数,后期可扩展使用 |
+
+## 4. 模式命令字与设备状态字详细定义
+
+### 4.1 模式命令字(地址:0xD000,视觉→控制器)
+
+用于切换工作模式,由运动控制上位机下发到运动控制器,视觉设备轮询运动控制器读取设置值并执行对应逻辑,取值范围0~5。
+
+| 模式值 | 模式名称 | 主辅角色 | 核心功能 | 适用场景 |
+| --- | --- | --- | --- | --- |
+| 0 | 待机复位模式 | 空闲态 | 控制器停机、轨迹清空、纠偏量清零,处于就绪待命状态;视觉仅监控状态,不下发任何控制指令 | 上电初始、停机复位、模式切换前过渡 |
+| 1 | 系统标定模式 | 控制器主、视觉辅 | 控制器按标定流程自动走位到标定点;视觉读取控制器当前位姿,完成手眼标定计算,下发标定参数 | 设备首次调试、视觉与控制器坐标系校准 |
+| 2 | 焊前扫描示教模式 | 视觉主、控制器辅 | 视觉扫描工件轮廓,拟合空间轨迹,循环下发目标示教位姿;控制器跟随走位,记录轨迹点并内部保存 | 批量生产前,生成标准工艺轨迹 |
+| 3 | 在线全轴跟踪模式 | 视觉主、控制器辅 | 视觉20ms周期读取控制器当前位姿,计算6轴全量偏差并下发;控制器按“基准轨迹+实时纠偏”连续运动 | 工件偏差较大、需实时跟随的生产场景(如焊接、坡口切割) |
+| 4 | 轨迹批量复现模式 | 控制器主、视觉辅 | 控制器调用内部保存的标准轨迹,自动循环批量运行;视觉仅监控位姿,小幅下发纠偏量,超差报警 | 工件一致性好、批量量产的场景 |
+| 5 | 紧急停止模式 | 系统强制态 | 任意模式下可立即切入,控制器立刻断使能、急停刹车;视觉暂停扫描、停止下发指令,仅保持通信监听 | 设备故障、安全隐患、紧急停机场景 |
+
+### 4.2 设备状态字(地址:0xD001,控制器→视觉)
+
+用于反馈运动控制器当前的运行状态,由控制器实时更新,视觉设备读取后判断设备工况,取值范围0~6。
+
+| 状态值 | 状态名称 | 对应模式 | 详细说明 |
+| --- | --- | --- | --- |
+| 0 | 待机就绪 | 0(待机复位) | 控制器停机、无故障、无轨迹,等待模式指令下发 |
+| 1 | 运动运行中 | 2(示教)、3(跟踪)、4(复现) | 控制器正在执行运动指令(跟随示教、实时跟踪、批量复现) |
+| 2 | 示教完成 | 2(示教) | 视觉扫描示教完成,控制器已保存完整标准轨迹,可切换至跟踪或复现模式 |
+| 3 | 在线跟踪正常 | 3(跟踪) | 实时跟踪正常,纠偏量在合理范围,无超差、无故障 |
+| 4 | 设备报警 | 任意模式 | 出现异常(轨迹超差、限位触发、通信故障、电机故障等),控制器停机,等待排查 |
+| 5 | 标定完成 | 1(标定) | 系统标定流程完成,坐标系校准成功,可切换至其他运行模式 |
+| 6 | 急停已触发 | 5(急停) | 紧急停止指令已执行,控制器锁定所有运动,仅可切换至待机模式 |
+
+## 5. 6轴数据(位置/姿态/纠偏)详细格式
+
+当前位姿、目标示教位姿、6轴纠偏量均为6个32位float,排布顺序统一(X→Y→Z→A→B→C),每个float占用2个连续寄存器,大端模式存储,解析规则一致。
+
+### 5.1 当前6轴位姿(地址:0xD00A ~ 0xD015,控制器→视觉)
+
+反馈控制器当前实际的位置和姿态,视觉设备读取后用于标定计算、跟踪偏差分析、状态监控。
+
+| 寄存器地址范围 | 数据类型 | 对应物理量 | 单位 | 说明 |
+| --- | --- | --- | --- | --- |
+| 0xD00A ~ 0xD00B | float | X 位置 | mm | 空间X轴坐标,根据实际设备坐标系定义 |
+| 0xD00C ~ 0xD00D | float | Y 位置 | mm | 空间Y轴坐标 |
+| 0xD00E ~ 0xD00F | float | Z 位置 | mm | 空间Z轴坐标(垂直方向) |
+| 0xD010 ~ 0xD011 | float | A 姿态角 | °(度) | 绕X轴翻滚角 |
+| 0xD012 ~ 0xD013 | float | B 姿态角 | °(度) | 绕Y轴俯仰角 |
+| 0xD014 ~ 0xD015 | float | C 姿态角 | °(度) | 绕Z轴偏航角 |
+
+### 5.2 目标示教位姿(地址:0xD016 ~ 0xD021,视觉→控制器)
+
+激光扫描工件后,拟合生成的标准轨迹位姿,下发给控制器后,控制器跟随走位并保存轨迹,排布与当前位姿完全一致。
+
+| 寄存器地址范围 | 数据类型 | 对应物理量 | 单位 | 说明 |
+| --- | --- | --- | --- | --- |
+| 0xD016 ~ 0xD017 | float | X 目标位置 | mm | 示教轨迹的X轴坐标 |
+| 0xD018 ~ 0xD019 | float | Y 目标位置 | mm | 示教轨迹的Y轴坐标 |
+| 0xD01A ~ 0xD01B | float | Z 目标位置 | mm | 示教轨迹的Z轴坐标 |
+| 0xD01C ~ 0xD01D | float | A 目标姿态角 | °(度) | 示教轨迹的绕X轴翻滚角 |
+| 0xD01E ~ 0xD01F | float | B 目标姿态角 | °(度) | 示教轨迹的绕Y轴俯仰角 |
+| 0xD020 ~ 0xD021 | float | C 目标姿态角 | °(度) | 示教轨迹的绕Z轴偏航角 |
+
+### 5.3 6轴全量纠偏量(地址:0xD022 ~ 0xD02D,视觉→控制器)
+
+视觉设备根据当前位姿与目标轨迹的偏差,实时计算并下发纠偏数据,控制器接收后叠加到基准轨迹,实现高精度跟踪。
+
+| 寄存器地址范围 | 数据类型 | 对应偏差量 | 单位 | 说明 |
+| --- | --- | --- | --- | --- |
+| 0xD022 ~ 0xD023 | float | ΔX 偏差 | mm | X轴方向偏差,正值=正向纠偏,负值=反向纠偏 |
+| 0xD024 ~ 0xD025 | float | ΔY 偏差 | mm | Y轴方向偏差 |
+| 0xD026 ~ 0xD027 | float | ΔZ 偏差 | mm | Z轴方向偏差 |
+| 0xD028 ~ 0xD029 | float | ΔA 偏差 | °(度) | 绕X轴姿态偏差 |
+| 0xD02A ~ 0xD02B | float | ΔB 偏差 | °(度) | 绕Y轴姿态偏差 |
+| 0xD02C ~ 0xD02D | float | ΔC 偏差 | °(度) | 绕Z轴姿态偏差 |
+
+## 6. Modbus RTU 帧格式标准
+
+所有通信帧均遵循以下格式,CRC16校验码位于帧末尾,用于验证数据完整性;仅使用0x03(读)和0x10(写)两个功能码。
+
+### 6.1 读保持寄存器(功能码:0x03)
+
+用于视觉设备读取控制器的寄存器数据(如当前位姿、设备状态字),控制器被动响应并返回数据。
+
+#### 6.1.1 请求帧格式(主站→从站)
+
+| 字节位置 | 字节长度 | 内容 | 说明 |
+| --- | --- | --- | --- |
+| 1 | 1B | 从站地址 | 固定为0x08 |
+| 2 | 1B | 功能码 | 0x03(读保持寄存器) |
+| 3~4 | 2B | 起始寄存器地址 | 大端模式,如读取模式+状态,起始地址为0xD000 |
+| 5~6 | 2B | 读取寄存器数量 | 大端模式,如读取2个寄存器(模式+状态),数量为0x0002 |
+| 7~8 | 2B | CRC16校验码 | 低字节在前、高字节在后 |
+
+#### 6.1.2 响应帧格式(从站→主站)
+
+| 字节位置 | 字节长度 | 内容 | 说明 |
+| --- | --- | --- | --- |
+| 1 | 1B | 从站地址 | 固定为0x08,与请求帧一致 |
+| 2 | 1B | 功能码 | 0x03,与请求帧一致 |
+| 3 | 1B | 数据字节长度 | 后续数据的总字节数(1个16位ushort=2B,1个float=4B) |
+| 4~N | NB | 寄存器数据 | 按大端模式排列,连续存储 |
+| N+1~N+2 | 2B | CRC16校验码 | 低字节在前、高字节在后 |
+
+### 6.2 写多个保持寄存器(功能码:0x10)
+
+用于视觉设备向控制器下发数据(如模式命令、目标位姿、纠偏量),控制器接收后执行并返回确认帧。
+
+#### 6.2.1 请求帧格式(主站→从站)
+
+| 字节位置 | 字节长度 | 内容 | 说明 |
+| --- | --- | --- | --- |
+| 1 | 1B | 从站地址 | 固定为0x08 |
+| 2 | 1B | 功能码 | 0x10(写多个保持寄存器) |
+| 3~4 | 2B | 起始寄存器地址 | 大端模式,如写模式命令,起始地址为0xD000 |
+| 5~6 | 2B | 写入寄存器数量 | 大端模式,如写1个寄存器(模式命令),数量为0x0001 |
+| 7 | 1B | 后续字节数 | 写入数据的总字节数(1个16位ushort=2B,1个float=4B) |
+| 8~N | NB | 寄存器数据 | 按大端模式排列,连续存储 |
+| N+1~N+2 | 2B | CRC16校验码 | 低字节在前、高字节在后 |
+
+#### 6.2.2 响应帧格式(从站→主站)
+
+控制器接收并执行写指令后,返回确认帧,仅反馈写指令的关键信息,不返回写入的数据。
+
+| 字节位置 | 字节长度 | 内容 | 说明 |
+| --- | --- | --- | --- |
+| 1 | 1B | 从站地址 | 固定为0x08,与请求帧一致 |
+| 2 | 1B | 功能码 | 0x10,与请求帧一致 |
+| 3~4 | 2B | 起始寄存器地址 | 与请求帧一致,大端模式 |
+| 5~6 | 2B | 写入寄存器数量 | 与请求帧一致,大端模式 |
+| 7~8 | 2B | CRC16校验码 | 低字节在前、高字节在后 |
+
+## 7. 常用指令帧示例
+
+以下指令帧均为十六进制格式,CRC16校验码已计算(可根据实际数据重新校验),适配所有工作阶段,直接下发即可执行。
+
+| 指令用途 | 指令帧(十六进制) | 说明 |
+| --- | --- | --- |
+| 读模式命令字+设备状态字(一次读2个寄存器) | 08 03 D0 00 00 02 FC 52 | 从站0x08,读起始地址0xD000,读2个寄存器,CRC= FC 52 |
+| 写模式:进入待机复位模式(0xD000=0) | 08 10 D0 00 00 01 02 00 00 1D CD | 从站0x08,写起始地址0xD000,写1个寄存器,数据=0x0000,CRC=1D CD |
+| 写模式:进入系统标定模式(0xD000=1) | 08 10 D0 00 00 01 02 00 01 DC 0D | 数据=0x0001,CRC= DC 0D |
+| 写模式:进入焊前扫描示教模式(0xD000=2) | 08 10 D0 00 00 01 02 00 02 9C 0C | 数据=0x0002,CRC=9C 0C |
+| 写模式:进入在线全轴跟踪模式(0xD000=3) | 08 10 D0 00 00 01 02 00 03 5D CC | 数据=0x0003,CRC=5D CC |
+| 写模式:进入轨迹批量复现模式(0xD000=4) | 08 10 D0 00 00 01 02 00 04 1C 0E | 数据=0x0004,CRC=1C 0E |
+| 写模式:紧急停止(0xD000=5) | 08 10 D0 00 00 01 02 00 05 DD CE | 数据=0x0005,CRC= DD CE |
+| 读当前6轴位姿(起始0xD00A,读12个寄存器) | 08 03 D0 0A 00 0C 5D 94 | 读X/Y/Z/A/B/C当前位姿,CRC=5D 94 |
+| 写6轴全量纠偏量(起始0xD022,写12个寄存器) | 08 10 D0 22 00 0C 18 3F 80 00 00 40 00 00 00 40 40 00 00 00 00 00 00 3F 80 00 00 40 00 00 00 3D 5C | 示例数据:ΔX=1.0、ΔY=2.0、ΔZ=3.0、ΔA=0.0、ΔB=1.0、ΔC=2.0,CRC=3D 5C |
+| 读设备状态字(单独读,起始0xD001,读1个寄存器) | 08 03 D0 01 00 01 ED 93 | 单独读取当前设备状态,CRC= ED 93 |
+
+## 8. 各模式下通信行为规范
+
+明确各工作模式下,主站(视觉)与从站(控制器)的通信职责,确保主辅关系清晰、通信高效,避免数据冲突。
+
+### 8.1 待机复位模式(0)
+
+控制器:轴停机、轨迹清空、纠偏清零、就绪待命。
+
+视觉设备:只读取状态字与当前位姿,不下发目标位姿、不下发纠偏量。
+
+### 8.2 系统标定模式(1)
+
+控制器:按标定流程自动走标定点位。
+
+视觉设备:周期读取 6 轴当前位姿,进行手眼标定计算,不启用示教与实时纠偏。
+
+### 8.3 焊前扫描示教模式(2)
+
+控制器:跟随激光下发的目标 6 轴位姿运动,自动记录并保存完整轨迹。
+
+视觉设备:扫描工件轮廓,连续生成并下发 XYZABC 目标示教位姿。
+
+### 8.4 在线全轴跟踪模式(3)
+
+视觉设备以 20ms 固定周期轮询:
+
+读取控制器当前 6 轴位姿;
+
+对比理论轨迹,计算 ΔX ΔY ΔZ ΔA ΔB ΔC 全量偏差;
+
+写入 6 轴纠偏量寄存器。
+
+控制器:基准轨迹叠加实时全轴纠偏,连续插补运动。
+
+### 8.5 轨迹批量复现模式(4)
+
+控制器主导:调用内部已保存标准轨迹,自动循环批量运行。
+
+视觉辅助:仅周期读取位姿做轨迹监控;仅小装夹偏差做微量 6 轴纠偏;偏差超阈值直接报警停机,不重新规划轨迹。
+
+### 8.6 紧急停止模式(5)
+
+任意模式可立即切入;控制器立刻停止所有轴运动、锁定使能;视觉设备停止轨迹下发、停止纠偏输出,仅保持通信监听。
+
+## 9 模式状态机切换规则
+
+- (1)任意模式可随时切换至 0 待机、5 急停;
+
+- (2)急停 5 只能退回 0 待机,不能直接进入运行模式;
+
+- (3)标定完成自动回待机;
+
+- (4)示教完成可切待机、在线跟踪、批量复现;
+
+- (5)在线跟踪与轨迹批量复现可互相切换;
+
+- (6)非法模式值控制器直接拒收不执行。
+
+## 10 通信时序与稳定性要求
+
+- (1)视觉设备独立线程轮询周期:20ms;
+
+- (2)单帧通信超时:50ms,超时重发,多次超时判定通信断开;
+