From 17c6d9aa90bb30ff878a4914654460e7ebf030ea Mon Sep 17 00:00:00 2001 From: chuan Date: Wed, 13 May 2026 15:29:13 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=20TODO=20=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E5=92=8C=E6=9B=B4=E6=96=B0=E5=8D=8F=E8=AE=AE=E6=96=87?= =?UTF-8?q?=E6=A1=A3=EF=BC=8C=E5=A2=9E=E5=BC=BA=E5=8A=9F=E8=83=BD=E6=8F=8F?= =?UTF-8?q?=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TODO.md | 12 ++++++++++++ docs/proto.md | 3 +-- src/line_laser_modbus/models.py | 4 +++- tests/test_state_machine.py | 18 ++++++++++++++++++ 4 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 TODO.md diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..ea1a2c7 --- /dev/null +++ b/TODO.md @@ -0,0 +1,12 @@ +# TODO + +- [ ] 补充 CLI 常用命令:读取当前位姿、写目标示教位姿、写纠偏量、持续轮询。 +- [ ] 明确标定参数协议:地址、数量、顺序、单位、数据类型和写入时机。 +- [ ] 实现标定参数写入接口,前提是协议参数定义已确认。 +- [ ] 增加 CLI 模拟模式测试,覆盖常用命令输出和参数校验。 +- [ ] 增加轮询异常测试,覆盖连续超时、恢复计数和不可恢复错误。 +- [ ] 增加真实串口硬件联调记录,确认状态字、当前位姿、模式写入、目标位姿和纠偏量读写。 +- [ ] 验证 20ms 轮询稳定性,记录实际通信耗时、超时次数和重试表现。 +- [ ] 完善发布元数据,包括 license、authors、classifiers 和 project URLs。 +- [ ] 评估是否加入类型检查和覆盖率统计。 +- [ ] 根据现场设备参数更新或补充配置示例。 diff --git a/docs/proto.md b/docs/proto.md index 68b6d8a..2f651d9 100644 --- a/docs/proto.md +++ b/docs/proto.md @@ -235,7 +235,7 @@ - (2)急停 5 只能退回 0 待机,不能直接进入运行模式; -- (3)标定完成自动回待机; +- (3)标定完成自动回待机;控制器内部处理。 - (4)示教完成可切待机、在线跟踪、批量复现; @@ -248,4 +248,3 @@ - (1)视觉设备独立线程轮询周期:20ms; - (2)单帧通信超时:50ms,超时重发,多次超时判定通信断开; - diff --git a/src/line_laser_modbus/models.py b/src/line_laser_modbus/models.py index 1ee8bbb..fe476fb 100644 --- a/src/line_laser_modbus/models.py +++ b/src/line_laser_modbus/models.py @@ -106,7 +106,9 @@ def can_switch_mode( return True if current_mode is ModeCommand.EMERGENCY_STOP: return False - if current_status in {DeviceStatus.CALIBRATION_DONE, DeviceStatus.TEACHING_DONE}: + if current_status is DeviceStatus.CALIBRATION_DONE: + return False + if current_status is DeviceStatus.TEACHING_DONE: return target_mode in { ModeCommand.ONLINE_TRACKING, ModeCommand.TRAJECTORY_REPLAY, diff --git a/tests/test_state_machine.py b/tests/test_state_machine.py index f7fb482..8c2313c 100644 --- a/tests/test_state_machine.py +++ b/tests/test_state_machine.py @@ -27,6 +27,24 @@ def test_teaching_done_can_enter_tracking_or_replay() -> None: ) +def test_calibration_done_waits_for_controller_to_return_standby() -> None: + assert can_switch_mode( + ModeCommand.CALIBRATION, + ModeCommand.STANDBY_RESET, + DeviceStatus.CALIBRATION_DONE, + ) + assert not can_switch_mode( + ModeCommand.CALIBRATION, + ModeCommand.ONLINE_TRACKING, + DeviceStatus.CALIBRATION_DONE, + ) + assert not can_switch_mode( + ModeCommand.CALIBRATION, + ModeCommand.TRAJECTORY_REPLAY, + DeviceStatus.CALIBRATION_DONE, + ) + + def test_invalid_transition_raises() -> None: with pytest.raises(ValueError, match="Illegal mode switch"): validate_mode_switch(ModeCommand.EMERGENCY_STOP, ModeCommand.ONLINE_TRACKING)