4.0 KiB
4.0 KiB
09-emc_nml 复用评估
结论
T-029 选择:暂不直接 include 完整上游 emc_nml.hh,当前阶段采用窄 StandaloneEmcStatus / 分阶段 typedef 路线。
原因:
wasm-port/vendor/linuxcnc/src/emc/nml_intf/当前未 vendoredemc_nml.hh。- 上游
emc_nml.hh不是单纯状态结构头文件,会拉入 NML/CMS command/status message 基类和大量 interpreter/canon 依赖。 - 当前 task runtime 已有 T-028 的
RCS_STATUS等价聚合行为,T-007 已建立集中StandaloneEmcStatus容器;但完整emc_nml.hh仍需要未 promoted 的 NML/CMS/message runtime 边界,因此不直接 include。 - 直接 include 会把未设计的 NML transport、CMS serialization、command message update、RS274 active code arrays、tool/canon table 等边界提前混入 task main loop 迁移。
上游依赖清单
上游文件:linuxcnc/src/emc/nml_intf/emc_nml.hh。
直接 include 依赖:
linuxcnc.hemcpos.hemc.hhlibnml/rcs/rcs.hhlibnml/nml/cmd_msg.hhlibnml/nml/stat_msg.hhrs274ngc/modal_state.hhcanon.hhrs274ngc/rs274ngc.hh
这些依赖带来的边界:
RCS_CMD_MSG/RCS_STAT_MSG/CMS/NMLTYPEmessage runtime。update(CMS *)serialization hooks。CANON_TOOL_TABLE、CANON_UNITS、RS274 active G/M/settings arrays。- full motion/task/io/tool/coolant/aux/spindle status object graph。
需要的状态子集
当前 T-028 已闭合的最小状态字段:
| 领域 | 当前字段 | LinuxCNC 对应概念 |
|---|---|---|
| top | top_level_rcs_status |
EMC_STAT.status |
| task | task_rcs_status |
EMC_STAT.task.status |
| task | state、mode、exec_state、interp_state |
EMC_TASK_STAT.state/mode/execState/interpState |
| motion | motion_rcs_status、LcmotStatusSnapshot.status |
EMC_STAT.motion.status |
| motion.traj | queue、queueFull、in_position、paused、stepping、motion_id | EMC_TRAJ_STAT queue/inpos/pause/id 字段族 |
| motion | on_soft_limit |
EMC_MOTION_STAT.on_soft_limit |
| io | io_rcs_status、io_error |
EMC_STAT.io.status |
选择
采用分阶段 typedef / 窄 status 容器:
- T-007 已建立
StandaloneEmcStatus,集中承载 task/motion/io/top-level 必需字段。 - 字段命名和 JSON 导出继续对齐
EMC_STAT、EMC_TASK_STAT、EMC_MOTION_STAT、EMC_TRAJ_STAT、EMC_IO_STAT。 RCS_STATUS暂以"DONE"、"EXEC"、"ERROR"字符串导出,内部可在 T-030/T-032 后替换为窄 enum。- T-032+ 建立 usrmot/NML shim 后,再评估是否 vendor
emc_nml.hh及其必要依赖,或只 vendor 一个由上游字段映射驱动的 status subset header。
不采用的方案
直接 include 完整 emc_nml.hh
暂不采用。
阻塞项:
emc_nml.hh未在 vendor tree 中。- 直接 include 需要引入
libnml、CMS、RS274、canon 依赖链。 - 完整类中大量
update(CMS *)和 message 构造路径超出当前 WASM task runtime 边界。 - 会让 T-028 已闭合的 status 聚合和后续 T-032/T-040 的 runtime edge 纠缠。
只扩展现有 runtime/core/shims/nml_intf/emc.hh
仅作为短期兼容,不作为 T-029 结论。
现有 shim 只服务解释器单位字段和 source probe:
EMC_STAT.motion.traj.linearUnitsEmcJointTypeextern EMC_STAT *emcStatus
继续无限扩展该 shim 会让 interpreter 单位兼容层和 task status 容器混在一起。
后续入口
- T-007:已建立集中
StandaloneEmcStatus。 - T-030:更新 source reuse map 与 drift 文档,记录本 T-029 决策。
- T-032:设计
taskintf.ccusrmot shim,明确 NML/transport 仍是 runtime boundary。 - T-033/T-038:把 motion update 和 task update 映射到
StandaloneEmcStatus字段。
验收
T-029 的验收由 tools/verify_task_emc_nml_reuse_plan.sh 固定:
- 上游
emc_nml.hh存在。 - 当前 vendor tree 未声称完整
emc_nml.hh已 vendored。 - 本文记录直接 include 依赖、阻塞项和最终选择。
- 任务矩阵将 T-029 标为完成。