feat: sync latest run execution updates
This commit is contained in:
@@ -93,7 +93,385 @@ M430 -> switchkins type 2 -> userk
|
||||
HAL link: motion.analog-out-03 => motion.switchkins-type
|
||||
```
|
||||
|
||||
## 3. RUN 前置状态检查
|
||||
## 3. INI definition contract
|
||||
|
||||
`RUN` 只能基于一个完整、可验证的 LinuxCNC INI 上下文启动。INI 不是展示信息,而是机床契约来源。`parseLinuxCncIni()` 和 `applyIniConfigToProfile()` 必须把下面字段转成结构化状态,RUN gate 只读取结构化状态,不在 RUN action 中重新猜测字符串。
|
||||
|
||||
### 3.1 必须存在的 INI sections
|
||||
|
||||
当前五轴 `xyzac-trt` / `xyzbc-trt` profile 至少要求这些 section:
|
||||
|
||||
| section | 是否必填 | RUN gate 用途 |
|
||||
| --- | --- | --- |
|
||||
| `[EMC]` | 必填 | 识别 machine name,确认是 switchkins 五轴 profile |
|
||||
| `[DISPLAY]` | 必填 | 提供默认打开程序、程序目录、UI 坐标提示;不能作为运动学真值 |
|
||||
| `[RS274NGC]` | 必填 | 提供 remap、subroutine path、HAL pin vars、parameter file |
|
||||
| `[KINS]` | 必填 | 提供 kinematics module 和 joint 数,是 kinematics/runtime 匹配依据 |
|
||||
| `[HAL]` | 必填 | 提供 HAL 文件、HALUI、POSTGUI_HALFILE、switchkins HALCMD |
|
||||
| `[HALUI]` | 必填 | 提供 M428/M429/M430 operator command 顺序和语义提示 |
|
||||
| `[TRAJ]` | 必填 | 提供 COORDINATES、单位、速度/加速度上限 |
|
||||
| `[EMCMOT]` | 必填 | 提供 motmod、SERVO_PERIOD、COMM_TIMEOUT |
|
||||
| `[TASK]` | 必填 | 提供 task module 和 CYCLE_TIME |
|
||||
| `[EMCIO]` | 必填 | 提供 tool table |
|
||||
| `[AXIS_*]` | 必填 | 提供各坐标轴 limit/velocity/acceleration |
|
||||
| `[JOINT_*]` | 必填 | 提供 joint 类型、home、limit、home sequence |
|
||||
|
||||
不满足这些 section 时,INI readiness 必须是 not ready,RUN 必须阻断。
|
||||
|
||||
### 3.2 必填字段与 gate 用途
|
||||
|
||||
`[EMC]`:
|
||||
|
||||
```text
|
||||
VERSION
|
||||
MACHINE
|
||||
```
|
||||
|
||||
要求:
|
||||
|
||||
```text
|
||||
xyzac-trt: MACHINE = sim-xyzac-trt-kins (switchkins)
|
||||
xyzbc-trt: MACHINE = sim-xyzbc-trt-kins (switchkins)
|
||||
```
|
||||
|
||||
用途:
|
||||
|
||||
```text
|
||||
1. 推导 profileId。
|
||||
2. 确认当前 profile 是 switchkins 五轴仿真机床。
|
||||
3. 作为 task/HAL session metadata,写入 feedback 证据。
|
||||
```
|
||||
|
||||
`[DISPLAY]`:
|
||||
|
||||
```text
|
||||
GEOMETRY
|
||||
OPEN_FILE
|
||||
JOG_AXES
|
||||
DISPLAY
|
||||
PROGRAM_PREFIX
|
||||
POSITION_OFFSET
|
||||
POSITION_FEEDBACK
|
||||
MAX_LINEAR_VELOCITY
|
||||
MAX_ANGULAR_VELOCITY
|
||||
```
|
||||
|
||||
用途:
|
||||
|
||||
```text
|
||||
1. OPEN_FILE 只能作为默认程序候选,RUN 实际程序必须来自 staged selected G-code。
|
||||
2. PROGRAM_PREFIX 用于解析 machine-file staging 的相对路径。
|
||||
3. GEOMETRY/JOG_AXES 用于 UI 呈现,不得覆盖 [TRAJ] COORDINATES。
|
||||
```
|
||||
|
||||
`[RS274NGC]`:
|
||||
|
||||
```text
|
||||
SUBROUTINE_PATH
|
||||
HAL_PIN_VARS = 1
|
||||
REMAP = M428 modalgroup=10 ngc=428remap
|
||||
REMAP = M429 modalgroup=10 ngc=429remap
|
||||
REMAP = M430 modalgroup=10 ngc=430remap
|
||||
PARAMETER_FILE
|
||||
```
|
||||
|
||||
用途:
|
||||
|
||||
```text
|
||||
1. HAL_PIN_VARS=1 是 remap 子程序读取 motion.switchkins-type 的前提。
|
||||
2. M428/M429/M430 remap 文件必须被 stage 到同一 machine context。
|
||||
3. PARAMETER_FILE 必须随 profile 区分,不能 xyzac/xyzbc 混用。
|
||||
```
|
||||
|
||||
`[KINS]`:
|
||||
|
||||
```text
|
||||
KINEMATICS
|
||||
JOINTS
|
||||
```
|
||||
|
||||
要求:
|
||||
|
||||
```text
|
||||
xyzac-trt: KINEMATICS = xyzac-trt-kins sparm=identityfirst
|
||||
xyzbc-trt: KINEMATICS = xyzbc-trt-kins sparm=identityfirst
|
||||
JOINTS = 5
|
||||
```
|
||||
|
||||
用途:
|
||||
|
||||
```text
|
||||
1. 从 KINEMATICS 推导 kinematicsModuleId。
|
||||
2. 校验 kinematics WASM moduleId。
|
||||
3. 校验 joint count 与 [JOINT_0]...[JOINT_4] 完整性。
|
||||
4. sparm=identityfirst 决定 switchkins type 0 是 identity,不能按默认 kins 猜测。
|
||||
```
|
||||
|
||||
`[HAL]`:
|
||||
|
||||
```text
|
||||
HALUI = halui
|
||||
HALFILE = LIB:basic_sim.tcl
|
||||
POSTGUI_HALFILE = switchkins_postgui.hal
|
||||
HALCMD = net :kinstype-select <= motion.analog-out-03 => motion.switchkins-type
|
||||
```
|
||||
|
||||
用途:
|
||||
|
||||
```text
|
||||
1. HALUI 存在时,UI command 与 LinuxCNC halui 行为对齐。
|
||||
2. HALFILE/POSTGUI_HALFILE 必须 stage,task/HAL runtime 才能构造同一机床上下文。
|
||||
3. switchkins HALCMD 是 M428/M429/M430 影响 motion.switchkins-type 的证据。
|
||||
```
|
||||
|
||||
`[HALUI]`:
|
||||
|
||||
```text
|
||||
MDI_COMMAND = M429
|
||||
MDI_COMMAND = M428
|
||||
MDI_COMMAND = M430
|
||||
```
|
||||
|
||||
用途:
|
||||
|
||||
```text
|
||||
1. 记录 operator 命令入口。
|
||||
2. 与 [RS274NGC] REMAP 和 [HAL] switchkins HALCMD 交叉校验。
|
||||
3. 不直接作为 RUN 自动插入命令;RUN 程序内的 M428/M429/M430 由 interpreter/remap 处理。
|
||||
```
|
||||
|
||||
`[TRAJ]`:
|
||||
|
||||
```text
|
||||
COORDINATES
|
||||
LINEAR_UNITS
|
||||
ANGULAR_UNITS
|
||||
DEFAULT_LINEAR_VELOCITY
|
||||
MAX_LINEAR_VELOCITY
|
||||
MAX_LINEAR_ACCELERATION
|
||||
DEFAULT_LINEAR_ACCELERATION
|
||||
```
|
||||
|
||||
要求:
|
||||
|
||||
```text
|
||||
xyzac-trt: COORDINATES = XYZAC
|
||||
xyzbc-trt: COORDINATES = XYZBC
|
||||
LINEAR_UNITS = mm
|
||||
ANGULAR_UNITS = deg
|
||||
```
|
||||
|
||||
用途:
|
||||
|
||||
```text
|
||||
1. COORDINATES 是 UI 轴、G-code 轴、runtime axisPose 的主契约。
|
||||
2. 单位决定 DRO 和 velocity 显示,不能由前端默认值覆盖。
|
||||
3. velocity/acceleration 是 planner/runtime limit 的来源。
|
||||
```
|
||||
|
||||
`[EMCMOT]` 与 `[TASK]`:
|
||||
|
||||
```text
|
||||
[EMCMOT]
|
||||
EMCMOT = motmod
|
||||
SERVO_PERIOD = 1000000
|
||||
COMM_TIMEOUT = 1
|
||||
|
||||
[TASK]
|
||||
TASK = milltask
|
||||
CYCLE_TIME = 0.010
|
||||
```
|
||||
|
||||
用途:
|
||||
|
||||
```text
|
||||
1. SERVO_PERIOD 用于 taskHalStatusLoop 的 servo tick 语义。
|
||||
2. CYCLE_TIME 用于 task cycle 语义和测试断言。
|
||||
3. runtime readiness 必须能报告 task/motion/HAL 三者已按这些参数初始化。
|
||||
```
|
||||
|
||||
`[EMCIO]`:
|
||||
|
||||
```text
|
||||
TOOL_TABLE
|
||||
```
|
||||
|
||||
用途:
|
||||
|
||||
```text
|
||||
1. tool table 必须 stage 到 machine files。
|
||||
2. G43/tool offset 相关状态不能用空表静默替代。
|
||||
```
|
||||
|
||||
`[AXIS_*]`:
|
||||
|
||||
```text
|
||||
MIN_LIMIT
|
||||
MAX_LIMIT
|
||||
MAX_VELOCITY
|
||||
MAX_ACCELERATION
|
||||
```
|
||||
|
||||
要求:
|
||||
|
||||
```text
|
||||
xyzac-trt: [AXIS_X] [AXIS_Y] [AXIS_Z] [AXIS_A] [AXIS_C]
|
||||
xyzbc-trt: [AXIS_X] [AXIS_Y] [AXIS_Z] [AXIS_B] [AXIS_C]
|
||||
```
|
||||
|
||||
用途:
|
||||
|
||||
```text
|
||||
1. 校验 profile coordinates 对应的 axis section 完整。
|
||||
2. 约束 UI limit、DRO 范围、preview bounds。
|
||||
3. 防止 xyzac/xyzbc 轴表混用。
|
||||
```
|
||||
|
||||
`[JOINT_*]`:
|
||||
|
||||
```text
|
||||
TYPE
|
||||
HOME
|
||||
MIN_LIMIT
|
||||
MAX_LIMIT
|
||||
MAX_VELOCITY
|
||||
MAX_ACCELERATION
|
||||
HOME_SEARCH_VEL
|
||||
HOME_SEQUENCE
|
||||
```
|
||||
|
||||
要求:
|
||||
|
||||
```text
|
||||
JOINT_0..JOINT_4 必须完整。
|
||||
JOINT_0..JOINT_2 TYPE = LINEAR。
|
||||
xyzac-trt: JOINT_3/JOINT_4 分别对应 A/C rotary。
|
||||
xyzbc-trt: JOINT_3/JOINT_4 分别对应 B/C rotary。
|
||||
```
|
||||
|
||||
用途:
|
||||
|
||||
```text
|
||||
1. 校验 [KINS] JOINTS=5 与 joint section 数量一致。
|
||||
2. home/allHomed gate 的配置来源。
|
||||
3. task/HAL runtime 初始化 joint status 的来源。
|
||||
```
|
||||
|
||||
### 3.3 INI readiness 输出
|
||||
|
||||
`parseLinuxCncIni()` 应输出或间接形成这些结构化字段:
|
||||
|
||||
```js
|
||||
{
|
||||
profileId: "xyzac-trt",
|
||||
iniPath: "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini",
|
||||
machineName: "sim-xyzac-trt-kins (switchkins)",
|
||||
traj: {
|
||||
coordinates: "XYZAC",
|
||||
linearUnits: "mm",
|
||||
angularUnits: "deg"
|
||||
},
|
||||
kinematics: {
|
||||
name: "xyzac-trt-kins",
|
||||
moduleId: "xyzac-trt",
|
||||
switchkins: true,
|
||||
identityFirst: true,
|
||||
joints: 5
|
||||
},
|
||||
rs274ngc: {
|
||||
halPinVars: true,
|
||||
remaps: ["M428", "M429", "M430"],
|
||||
subroutinePath: "./remap_subs",
|
||||
parameterFile: "xyzac.var"
|
||||
},
|
||||
hal: {
|
||||
halui: "halui",
|
||||
halFiles: ["LIB:basic_sim.tcl"],
|
||||
postguiHalFiles: ["switchkins_postgui.hal"],
|
||||
switchkinsSignal: "motion.analog-out-03 => motion.switchkins-type"
|
||||
},
|
||||
emcmot: {
|
||||
module: "motmod",
|
||||
servoPeriodNs: 1000000
|
||||
},
|
||||
task: {
|
||||
module: "milltask",
|
||||
cycleTimeSeconds: 0.010
|
||||
},
|
||||
emcio: {
|
||||
toolTable: "xyzac-trt.tbl"
|
||||
},
|
||||
axes: {
|
||||
X: { minLimit: -200, maxLimit: 200 },
|
||||
Y: { minLimit: -100, maxLimit: 100 },
|
||||
Z: { minLimit: -120, maxLimit: 120 },
|
||||
A: { minLimit: -100, maxLimit: 50 },
|
||||
C: { minLimit: -36000, maxLimit: 36000 }
|
||||
},
|
||||
joints: [
|
||||
{ index: 0, type: "LINEAR", axis: "X" },
|
||||
{ index: 1, type: "LINEAR", axis: "Y" },
|
||||
{ index: 2, type: "LINEAR", axis: "Z" },
|
||||
{ index: 3, type: "ANGULAR", axis: "A" },
|
||||
{ index: 4, type: "ANGULAR", axis: "C" }
|
||||
],
|
||||
validation: {
|
||||
ready: true,
|
||||
errors: []
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
`xyzbc-trt` 的输出必须只在 profileId、machineName、coordinates、kinematics module、parameter/tool table、rotary axis B/C 等字段上变化,不能沿用 xyzac 的 A/C axis contract。
|
||||
|
||||
### 3.4 INI contract 失败时的阻断
|
||||
|
||||
这些情况必须让 `state.iniConfigReadiness.ready=false`,并阻断 RUN:
|
||||
|
||||
```text
|
||||
缺少 [EMC] MACHINE。
|
||||
缺少 [TRAJ] COORDINATES。
|
||||
COORDINATES 不是 XYZAC 或 XYZBC。
|
||||
[KINS] KINEMATICS 不是 xyzac-trt-kins 或 xyzbc-trt-kins。
|
||||
[KINS] JOINTS 不是 5。
|
||||
缺少 M428/M429/M430 remap。
|
||||
HAL_PIN_VARS 不是 1。
|
||||
缺少 motion.analog-out-03 => motion.switchkins-type HALCMD。
|
||||
缺少 [EMCMOT] SERVO_PERIOD。
|
||||
缺少 [TASK] CYCLE_TIME。
|
||||
缺少 TOOL_TABLE。
|
||||
axis section 与 COORDINATES 不一致。
|
||||
joint section 数量与 [KINS] JOINTS 不一致。
|
||||
xyzac INI 指向 xyzbc tool table/parameter file,或反向混用。
|
||||
```
|
||||
|
||||
阻断消息建议:
|
||||
|
||||
```text
|
||||
run blocked: LinuxCNC INI contract invalid
|
||||
run blocked: INI missing required section [KINS]
|
||||
run blocked: INI coordinates do not match selected profile
|
||||
run blocked: INI switchkins remap incomplete
|
||||
run blocked: INI HAL switchkins signal missing
|
||||
run blocked: INI joint/axis contract mismatch
|
||||
```
|
||||
|
||||
### 3.5 与 RUN gate 的关系
|
||||
|
||||
INI contract 通过只是 RUN 的第一层 gate。RUN 仍必须继续检查:
|
||||
|
||||
```text
|
||||
1. kinematics WASM 已按 INI [KINS] moduleId 加载。
|
||||
2. machine files 已按同一个 INI stage。
|
||||
3. task/HAL runtime 已按同一个 INI/session 初始化。
|
||||
4. selected G-code 已通过 task plan open 打开。
|
||||
5. task status 的 opened file 与 selected staged G-code 一致。
|
||||
6. machine ON、AUTO、homed/no_force_homing 满足。
|
||||
```
|
||||
|
||||
所以不能把 `parseLinuxCncIni().validation.ready=true` 等同于 `RUN` ready。
|
||||
|
||||
## 4. RUN 前置状态检查
|
||||
|
||||
`RUN` action 进入真正执行前,应要求这些状态全部明确:
|
||||
|
||||
@@ -112,6 +490,11 @@ state.taskHalRuntimeReadiness.taskRuntimeReady === true
|
||||
state.taskHalRuntimeReadiness.motionRuntimeReady === true
|
||||
state.taskHalRuntimeReadiness.halRuntimeReady === true
|
||||
state.taskHalSession.programPath 指向当前选中的 G-code
|
||||
state.taskHalSession.openProgram === true
|
||||
state.taskHalStatus.task.file 或 openedProgram.path 指向同一个 staged G-code
|
||||
state.taskHalStatus.task.state 是 ON
|
||||
state.taskHalStatus.task.mode 是 AUTO,或 RUN 前可切换到 AUTO
|
||||
state.taskHalStatus.motion.allHomed === true,或当前仿真 profile 明确 no_force_homing
|
||||
```
|
||||
|
||||
如果任一项不满足,`RUN` 应返回明确 operatorMessage,不应进入 fixture line playback 后伪装成真实运行。
|
||||
@@ -124,11 +507,98 @@ run blocked: machine profile and INI coordinates mismatch
|
||||
run blocked: LinuxCNC kinematics runtime not ready
|
||||
run blocked: task/HAL runtime not ready
|
||||
run blocked: no machine-file G-code opened for task/HAL session
|
||||
run blocked: machine is not on
|
||||
run blocked: machine is not homed
|
||||
run blocked: task mode is not AUTO
|
||||
```
|
||||
|
||||
## 4. 详细测试计划
|
||||
## 5. LinuxCNC 源码对照结论
|
||||
|
||||
### 4.1 INI/profile 解析测试
|
||||
`RUN` 命令修改方向总体合适,但必须严格贴近 LinuxCNC 的 task 语义:
|
||||
|
||||
```text
|
||||
RUN 不是前端 sample playback。
|
||||
RUN 不是直接解析 G-code 后自增 activeLine。
|
||||
RUN 是在已打开程序、机床可运行、AUTO 模式下发送 EMC_TASK_PLAN_RUN,
|
||||
随后由 task 主循环持续 read/execute interpreter,并从 motion/HAL 状态读取反馈。
|
||||
```
|
||||
|
||||
源码证据:
|
||||
|
||||
```text
|
||||
/home/meswork/cnc_wams/linuxcnc/src/emc/usr_intf/halui.cc:1096
|
||||
sendProgramRun(int line)
|
||||
- updateStatus()
|
||||
- 如果 emcStatus->task.file 为空,直接返回 -1
|
||||
- 保存 programStartLine
|
||||
- 设置 EMC_TASK_PLAN_RUN.line
|
||||
- sendAuto()
|
||||
- emcCommandSend(EMC_TASK_PLAN_RUN)
|
||||
|
||||
/home/meswork/cnc_wams/linuxcnc/src/emc/usr_intf/shcom.cc:750
|
||||
sendProgramOpen(program)
|
||||
- 发送 EMC_TASK_PLAN_OPEN
|
||||
- 本地进程发送文件名
|
||||
- remote process 通过 remote_buffer 分块发送文件内容
|
||||
|
||||
/home/meswork/cnc_wams/linuxcnc/src/emc/usr_intf/shcom.cc:814
|
||||
sendProgramRun(int line)
|
||||
- status 为 AUTO update 时先 updateStatus()
|
||||
- task.file 为空时尝试重新打开 lastProgramFile
|
||||
- 再发送 EMC_TASK_PLAN_RUN
|
||||
|
||||
/home/meswork/cnc_wams/linuxcnc/src/emc/task/emctaskmain.cc:2164
|
||||
EMC_TASK_PLAN_OPEN
|
||||
- 接收 remote 文件或打开本地文件
|
||||
- 调用 emcTaskPlanOpen(open_msg->file)
|
||||
- 成功后写入 emcStatus->task.file
|
||||
|
||||
/home/meswork/cnc_wams/linuxcnc/src/emc/task/emctaskmain.cc:2318
|
||||
EMC_TASK_PLAN_RUN
|
||||
- 未 homed 且 no_force_homing=false 时拒绝运行
|
||||
- 清 single stepping
|
||||
- 必要时重新 emcTaskPlanOpen(emcStatus->task.file)
|
||||
- 保存 programStartLine
|
||||
- 设置 interpState=READING
|
||||
- 清 task_paused
|
||||
|
||||
/home/meswork/cnc_wams/linuxcnc/src/emc/task/emctaskmain.cc:2337
|
||||
EMC_TASK_PLAN_PAUSE
|
||||
- emcTrajPause()
|
||||
- interpState=PAUSED
|
||||
- task_paused=1
|
||||
|
||||
/home/meswork/cnc_wams/linuxcnc/src/emc/task/emctaskmain.cc:2369
|
||||
EMC_TASK_PLAN_RESUME
|
||||
- emcTrajResume()
|
||||
- 恢复 interpState
|
||||
- 清 task_paused
|
||||
|
||||
/home/meswork/cnc_wams/linuxcnc/src/emc/task/emctask.cc:543
|
||||
emcTaskPlanOpen(file)
|
||||
- 清 motionLine/currentLine/readLine
|
||||
- interp.open(file)
|
||||
- taskplanopen=1
|
||||
|
||||
/home/meswork/cnc_wams/linuxcnc/src/emc/task/emctask.cc:566
|
||||
emcTaskPlanRead()
|
||||
- interp.read()
|
||||
- 文件未打开时用 emcStatus->task.file 重新 open/read
|
||||
```
|
||||
|
||||
对当前 web runtime 的约束:
|
||||
|
||||
```text
|
||||
1. initializeTaskHalSession({ openProgram: true }) 必须等价于先完成 EMC_TASK_PLAN_OPEN。
|
||||
2. RUN gate 必须确认 opened program 与当前 selected G-code 是同一个 staged machine-file。
|
||||
3. RUN 发送 EMC_TASK_PLAN_RUN 后,UI 不能用 canonical timing 或 fixture sample 冒充 task 反馈。
|
||||
4. 连续反馈必须来自 taskHalRuntime.runCycles/readStatus,且 status 的 task/motion/HAL 字段必须同源。
|
||||
5. PAUSE/RESUME/ABORT 要按 LinuxCNC task command 修改状态循环,而不是只改前端 runState。
|
||||
```
|
||||
|
||||
## 6. 详细测试计划
|
||||
|
||||
### 6.1 INI/profile 解析测试
|
||||
|
||||
目标:证明 `RUN` 使用的不是手写机床参数,而是明确 LinuxCNC INI。
|
||||
|
||||
@@ -175,7 +645,7 @@ node web-rtcp-5axis-sim-plan/tests/node/verify_run_preconditions.mjs
|
||||
run_preconditions_ini_profile_smoke=ok
|
||||
```
|
||||
|
||||
### 4.2 运动学模块确认测试
|
||||
### 6.2 运动学模块确认测试
|
||||
|
||||
目标:证明当前机床的五轴运动学算法已经按 INI/profile 加载。
|
||||
|
||||
@@ -199,7 +669,7 @@ node web-rtcp-5axis-sim-plan/tests/node/verify_linuxcnc_kinematics_runtime.mjs
|
||||
|
||||
新增 RUN 前置测试应把这个结果纳入 `RUN` gate,而不是只作为独立 smoke。
|
||||
|
||||
### 4.3 machine-file staging 测试
|
||||
### 6.3 machine-file staging 测试
|
||||
|
||||
目标:证明 `RUN` 打开的程序、INI、remap、tool table 是同一个 LinuxCNC 机床目录上下文。
|
||||
|
||||
@@ -226,7 +696,7 @@ node web-rtcp-5axis-sim-plan/tests/node/verify_linuxcnc_kinematics_runtime.mjs
|
||||
node web-rtcp-5axis-sim-plan/tests/node/verify_machine_file_staging.mjs
|
||||
```
|
||||
|
||||
### 4.4 RUN 连续 feedback 测试
|
||||
### 6.4 RUN 连续 feedback 测试
|
||||
|
||||
目标:证明点击 `RUN` 后,不是只推进一次 `taskCycles=5`,而是持续从 task/HAL/motion 获取反馈。
|
||||
|
||||
@@ -282,7 +752,7 @@ programRuntimeFeedback.sourceMode 不是 linuxcnc-task-motion-hal-wasm。
|
||||
RTCP 状态与当前 G-code 的 M428/M429 不一致。
|
||||
```
|
||||
|
||||
### 4.5 浏览器端测试
|
||||
### 6.5 浏览器端测试
|
||||
|
||||
建议扩展:
|
||||
|
||||
@@ -318,7 +788,7 @@ qa/web-rtcp-5axis-site-test/output/run-preconditions-feedback.json
|
||||
qa/web-rtcp-5axis-site-test/screenshots/run-preconditions-feedback/*.png
|
||||
```
|
||||
|
||||
## 5. 编写 RUN 程序的实现步骤
|
||||
## 7. 编写 RUN 程序的实现步骤
|
||||
|
||||
### Step 1: 增加 `validateRunPreconditions(state)`
|
||||
|
||||
@@ -338,6 +808,8 @@ app/src/state/store.js
|
||||
5. 检查 task/HAL runtime ready。
|
||||
6. 检查 machine file staging ready。
|
||||
7. 检查 taskHalSession.programPath 指向当前 G-code。
|
||||
8. 检查 task status 的 opened file 与当前 staged G-code 一致。
|
||||
9. 检查 machine ON、AUTO mode、homed/no_force_homing。
|
||||
```
|
||||
|
||||
返回结构:
|
||||
@@ -376,21 +848,32 @@ runTaskHalCommandSequence([...], { taskCycles: 5 })
|
||||
2. validateRunPreconditions(state)
|
||||
3. initializeTaskHalSession({ openProgram: true }) 如需要
|
||||
4. 确认 readStatus() 的 openProgram/programPath 与 state.activeProgram 对齐
|
||||
5. 如果 task mode 不是 AUTO,先发送 EMC_TASK_SET_MODE AUTO 并等待 status 确认
|
||||
6. 如果 task state 不是 ON,先发送 EMC_TASK_SET_STATE ON 并等待 status 确认
|
||||
```
|
||||
|
||||
未满足前置条件时,只设置 `operatorMessage`,不推进任何 line/sample。
|
||||
|
||||
### Step 3: 拆分 task command 与执行 pump
|
||||
### Step 3: 拆分 task command 与 taskHalStatusLoop
|
||||
|
||||
`RUN` 应只发送 LinuxCNC task 命令:
|
||||
|
||||
```text
|
||||
EMC_TASK_SET_STATE ON
|
||||
EMC_TASK_SET_MODE AUTO
|
||||
EMC_TASK_PLAN_RUN line = activeLine - programStartLine
|
||||
EMC_TASK_PLAN_RUN line = linuxcncStartLine
|
||||
```
|
||||
|
||||
然后启动 feedback pump:
|
||||
说明:
|
||||
|
||||
```text
|
||||
linuxcncStartLine 应按 LinuxCNC 的 program run line 语义保存。
|
||||
普通从头运行传 0。
|
||||
run-from-line 才传明确 line,并需要单独处理 start line、previous modal state 和安全性。
|
||||
不要用 UI activeLine 自行推导 programStartLine。
|
||||
```
|
||||
|
||||
然后启动 `taskHalStatusLoop`:
|
||||
|
||||
```text
|
||||
while running:
|
||||
@@ -399,22 +882,22 @@ while running:
|
||||
dispatch TASK_HAL_STATUS_APPLIED(status)
|
||||
append feedback history
|
||||
if complete/paused/aborted/stopped:
|
||||
stop pump
|
||||
stop taskHalStatusLoop
|
||||
```
|
||||
|
||||
说明:
|
||||
|
||||
```text
|
||||
这里的 pump 可以在 store 主线程调度,也可以放到 worker 内部 postMessage 推送。
|
||||
这里的 taskHalStatusLoop 可以在 store 主线程调度,也可以放到 worker 内部 postMessage 推送。
|
||||
关键不是 timer 本身,而是每个 tick 都必须由 task/HAL/motion runtime 的 runCycles/readStatus 产生反馈。
|
||||
```
|
||||
|
||||
### Step 4: 增加 RUN pump 状态
|
||||
### Step 4: 增加 RUN status loop 状态
|
||||
|
||||
建议 state 增加:
|
||||
|
||||
```js
|
||||
taskHalRunPump: {
|
||||
taskHalStatusLoop: {
|
||||
active: false,
|
||||
sequence: 0,
|
||||
profileId: null,
|
||||
@@ -457,24 +940,24 @@ programRuntimeFeedback
|
||||
4. 运行态 axisPose、velocity、DTG、activeLine 必须来自同一个 status snapshot。
|
||||
```
|
||||
|
||||
### Step 6: STOP/ABORT/PAUSE/RESUME 控制 pump
|
||||
### Step 6: STOP/ABORT/PAUSE/RESUME 控制 taskHalStatusLoop
|
||||
|
||||
行为要求:
|
||||
|
||||
```text
|
||||
STOP/ABORT:
|
||||
send EMC_TASK_ABORT
|
||||
stop pump
|
||||
stop taskHalStatusLoop
|
||||
read final status
|
||||
|
||||
PAUSE:
|
||||
send EMC_TASK_PLAN_PAUSE
|
||||
pump 可停止或降频读取 paused status
|
||||
taskHalStatusLoop 可停止或降频读取 paused status
|
||||
runState=paused
|
||||
|
||||
RESUME:
|
||||
send EMC_TASK_PLAN_RESUME
|
||||
restart pump
|
||||
restart taskHalStatusLoop
|
||||
|
||||
STEP:
|
||||
不走 fixture sample playback
|
||||
@@ -509,7 +992,7 @@ fullLinuxCncProgramExecutionReady=false
|
||||
|
||||
在真实 `taskHalRuntime.loaded === true` 且前置条件失败时,不应退回 fixture playback。
|
||||
|
||||
## 6. 开发验收命令
|
||||
## 8. 开发验收命令
|
||||
|
||||
基础检查:
|
||||
|
||||
@@ -518,6 +1001,7 @@ node web-rtcp-5axis-sim-plan/tests/node/verify_run_preconditions.mjs
|
||||
node web-rtcp-5axis-sim-plan/tests/node/verify_linuxcnc_kinematics_runtime.mjs
|
||||
node web-rtcp-5axis-sim-plan/tests/node/verify_machine_file_staging.mjs
|
||||
node web-rtcp-5axis-sim-plan/tests/node/verify_linuxcnc_task_hal_runtime.mjs
|
||||
node web-rtcp-5axis-sim-plan/tests/node/verify_run_feedback_loop.mjs
|
||||
npm --prefix web-rtcp-5axis-sim-plan/app run build
|
||||
```
|
||||
|
||||
@@ -540,7 +1024,7 @@ QA 证据采集:
|
||||
node qa/web-rtcp-5axis-site-test/capture-toolpath-preview-cases.mjs
|
||||
```
|
||||
|
||||
## 7. 完成标准
|
||||
## 9. 完成标准
|
||||
|
||||
`RUN` 可以判定为完善,必须同时满足:
|
||||
|
||||
@@ -553,6 +1037,7 @@ node qa/web-rtcp-5axis-site-test/capture-toolpath-preview-cases.mjs
|
||||
6. RUN 后 taskCycle/servoCycle 随时间持续推进,直到 paused/stopped/complete。
|
||||
7. UI 高亮行和执行历史能复现逐行执行过程。
|
||||
8. fallback playback 不能冒充 LinuxCNC task/HAL runtime。
|
||||
9. RUN 失败时能明确区分 INI/profile、open program、machine ON、AUTO、homed、runtime readiness 哪一项未满足。
|
||||
```
|
||||
|
||||
未满足以上条件时,状态应继续标记为:
|
||||
|
||||
@@ -0,0 +1,210 @@
|
||||
# 04 RUN status loop 完成记录与下一步建议
|
||||
|
||||
生成时间:2026-06-22
|
||||
|
||||
## 1. 本轮完成范围
|
||||
|
||||
本轮完成 `03-run-step1-preconditions-complete-next-steps.md` 建议中的连续 feedback 工作,但命名从 `pump` 调整为更明确的:
|
||||
|
||||
```text
|
||||
taskHalStatusLoop
|
||||
```
|
||||
|
||||
这里的 loop 不生成 CNC 状态,不解析 G-code,也不自增行号。它只负责在 `RUN` 之后持续调度:
|
||||
|
||||
```text
|
||||
taskHalRuntime.runCycles(...)
|
||||
taskHalRuntime.readStatus()
|
||||
dispatch TASK_HAL_STATUS_APPLIED
|
||||
```
|
||||
|
||||
`activeLine`、`axisPose`、`currentVelocity`、`switchkinsType`、DRO 和 runtime feedback 仍来自同一个 task/HAL/motion status snapshot。
|
||||
|
||||
## 2. 已完成改动
|
||||
|
||||
### 2.1 store 增加 taskHalStatusLoop
|
||||
|
||||
更新:
|
||||
|
||||
```text
|
||||
app/src/state/store.js
|
||||
```
|
||||
|
||||
新增状态:
|
||||
|
||||
```text
|
||||
taskHalStatusLoop:
|
||||
active
|
||||
sequence
|
||||
profileId
|
||||
iniPath
|
||||
kinematicsModuleId
|
||||
tickCount
|
||||
batchSize
|
||||
intervalMs
|
||||
taskPeriodNs
|
||||
servoPeriodNs
|
||||
lastStatusAt
|
||||
lastError
|
||||
stopReason
|
||||
```
|
||||
|
||||
并新增:
|
||||
|
||||
```text
|
||||
programRuntimeFeedbackHistory
|
||||
```
|
||||
|
||||
最多保留 100 条 task/HAL/motion runtime feedback。
|
||||
|
||||
### 2.2 RUN 改为连续读取 task/HAL status
|
||||
|
||||
`RUN` 当前流程:
|
||||
|
||||
```text
|
||||
1. validateRunPreconditions(..., requireTaskHalSession=false)
|
||||
2. 初始化或复用当前 machine-file task/HAL session
|
||||
3. validateRunPreconditions(..., requireTaskHalSession=true)
|
||||
4. 发送:
|
||||
EMC_TASK_SET_STATE ON
|
||||
EMC_TASK_SET_MODE AUTO
|
||||
EMC_TASK_PLAN_RUN
|
||||
5. runCycles/readStatus 一次,应用首帧 status
|
||||
6. 如果 status 仍处于 READING,则启动 taskHalStatusLoop
|
||||
7. loop 持续 runCycles/readStatus,并通过 TASK_HAL_STATUS_APPLIED 更新 UI 状态
|
||||
```
|
||||
|
||||
停止条件:
|
||||
|
||||
```text
|
||||
interpState=IDLE 且 nextProgramLine >= openedLineCount -> complete
|
||||
interpState=PAUSED 或 motion.paused=true -> paused
|
||||
motion.aborted=true -> stopped
|
||||
```
|
||||
|
||||
### 2.3 STOP / ABORT / PAUSE / RESUME / STEP
|
||||
|
||||
更新行为:
|
||||
|
||||
```text
|
||||
STOP/ABORT:
|
||||
先停止 taskHalStatusLoop,再发送 EMC_TASK_ABORT,并读取一次 status。
|
||||
|
||||
PAUSE:
|
||||
先停止 taskHalStatusLoop,再发送 EMC_TASK_PLAN_PAUSE,并读取一次 paused status。
|
||||
|
||||
RESUME:
|
||||
发送 EMC_TASK_PLAN_RESUME,若 status 回到 READING,则重新启动 taskHalStatusLoop。
|
||||
|
||||
STEP:
|
||||
task/HAL runtime loaded 时不走 fixture playback。
|
||||
改为明确 runCycles({ taskCycles: 1 }) 后 readStatus 一次。
|
||||
```
|
||||
|
||||
### 2.4 新增验证
|
||||
|
||||
新增:
|
||||
|
||||
```text
|
||||
tests/node/verify_run_feedback_loop.mjs
|
||||
```
|
||||
|
||||
覆盖:
|
||||
|
||||
```text
|
||||
1. 加载 xyzac-trt INI。
|
||||
2. 加载 xyzac-trt kinematics WASM。
|
||||
3. 加载 task/HAL runtime。
|
||||
4. stage machine files。
|
||||
5. 打开 xyzac_switchkins_test_1.ngc。
|
||||
6. POWER/HOME/AUTO/RUN。
|
||||
7. 等待 programRuntimeFeedbackHistory 至少 3 条。
|
||||
8. 断言每条 feedback sourceMode 都是 linuxcnc-task-motion-hal-wasm。
|
||||
9. 断言 semanticBoundary 是 linuxcnc_task_motion_hal_wasm_simulation_runtime。
|
||||
10. 断言 taskCycle 和 servoCycle 单调递增。
|
||||
11. 断言 STOP 后 taskHalStatusLoop.active=false。
|
||||
```
|
||||
|
||||
`app/package.json` 的 `smoke:node` 已加入:
|
||||
|
||||
```text
|
||||
node ../tests/node/verify_run_feedback_loop.mjs
|
||||
```
|
||||
|
||||
## 3. 已运行验证
|
||||
|
||||
通过:
|
||||
|
||||
```bash
|
||||
node tests/node/verify_run_feedback_loop.mjs
|
||||
node tests/node/verify_linuxcnc_task_hal_runtime.mjs
|
||||
node tests/node/verify_run_preconditions.mjs
|
||||
node tests/node/verify_rtcp_store.mjs
|
||||
npm --prefix app run build
|
||||
npm --prefix app run smoke:node
|
||||
```
|
||||
|
||||
关键输出:
|
||||
|
||||
```text
|
||||
run_feedback_status_loop_smoke=ok
|
||||
linuxcnc_task_hal_runtime_smoke=ok
|
||||
run_preconditions_ini_profile_smoke=ok
|
||||
rtcp_store_smoke=ok
|
||||
gmoccapy_static_build=ok
|
||||
```
|
||||
|
||||
本轮 `npm --prefix app run smoke:node` 已完整通过,包括 native task/HAL audit。
|
||||
|
||||
## 4. 当前 RUN 状态
|
||||
|
||||
当前 `RUN` 已经从:
|
||||
|
||||
```text
|
||||
发送 task command -> runCycles({ taskCycles: 5 }) -> readStatus() 一次
|
||||
```
|
||||
|
||||
推进为:
|
||||
|
||||
```text
|
||||
发送 task command
|
||||
-> runCycles/readStatus 首帧
|
||||
-> taskHalStatusLoop 持续 runCycles/readStatus
|
||||
-> TASK_HAL_STATUS_APPLIED 持续消费同一 task/HAL/motion status 链
|
||||
```
|
||||
|
||||
重要边界仍保持:
|
||||
|
||||
```text
|
||||
不引入 JS G-code parser。
|
||||
不在 UI 自增 activeLine。
|
||||
不在 UI 自造 axisPose。
|
||||
不把 canonical timing estimate 当作真实 task/HAL runtime。
|
||||
status 内容必须来自 task/HAL/motion runtime。
|
||||
```
|
||||
|
||||
## 5. 下一步工作建议
|
||||
|
||||
下一步建议做浏览器端证据采集:
|
||||
|
||||
```text
|
||||
1. 扩展 qa/web-rtcp-5axis-site-test/capture-toolpath-preview-cases.mjs。
|
||||
2. 新增 07-run-preconditions-and-feedback case。
|
||||
3. 浏览器中执行 POWER/HOME/AUTO/RUN。
|
||||
4. 采集 t=0.2s / 0.5s / 1.0s / 2.0s state。
|
||||
5. 断言:
|
||||
- taskHalStatusLoop.tickCount 增长
|
||||
- programRuntimeFeedbackHistory 增长
|
||||
- activeLine 等于 UI 高亮行
|
||||
- DRO 读取 state.programRuntimeFeedback.axisPose
|
||||
- RTCP canvas 状态与 state.rtcpState 一致
|
||||
6. 输出 JSON 和截图证据。
|
||||
```
|
||||
|
||||
随后再考虑:
|
||||
|
||||
```text
|
||||
1. 把 M428/M429 switchkins 状态变化纳入 RUN loop 浏览器断言。
|
||||
2. 增加 xyzbc-trt 的 RUN status loop 对称测试。
|
||||
3. 如果需要更接近真实 UI 实时性,再评估是否把 loop 下沉到 worker push status,而不是 store setTimeout polling。
|
||||
```
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,149 @@
|
||||
# 06 RUN 实施完成情况矩阵与接续工作
|
||||
|
||||
生成时间:2026-06-22
|
||||
|
||||
## 1. 本轮执行范围
|
||||
|
||||
按 `05-run-program-implementation-detailed-steps.md` 核对并补强当前实现,本轮完成:
|
||||
|
||||
```text
|
||||
1. 建立 05 阶段完成情况矩阵。
|
||||
2. 补强 INI definition contract validation。
|
||||
3. 修正普通 RUN 的 EMC_TASK_PLAN_RUN 起始行为 line=0。
|
||||
4. 补充 INI runtime 测试断言。
|
||||
5. 执行 node smoke 验证。
|
||||
6. 记录剩余接续工作。
|
||||
```
|
||||
|
||||
## 2. 本轮代码改动
|
||||
|
||||
### 2.1 INI contract validation 补强
|
||||
|
||||
更新:
|
||||
|
||||
```text
|
||||
app/src/runtime/linuxcnc-ini-runtime.js
|
||||
tests/node/verify_linuxcnc_ini_runtime.mjs
|
||||
```
|
||||
|
||||
补强内容:
|
||||
|
||||
```text
|
||||
1. parseLinuxCncIni() 现在保留 sourceText。
|
||||
2. 解析并输出 emcmot.module / emcmot.servoPeriodNs。
|
||||
3. 解析并输出 task.module / task.cycleTimeSeconds。
|
||||
4. emcio.toolTable 保持结构化输出。
|
||||
5. applyIniConfigToProfile() 将 emcmot/task/emcio 写入 profile。
|
||||
6. validateIniConfig() 增加 05 要求的关键 gate:
|
||||
- required sections: [EMC], [DISPLAY], [RS274NGC], [KINS], [HAL], [HALUI], [TRAJ], [EMCMOT], [TASK], [EMCIO]
|
||||
- COORDINATES 必须是 XYZAC 或 XYZBC
|
||||
- JOINTS 必须是 5
|
||||
- JOINT_0..JOINT_4 必须存在
|
||||
- KINEMATICS 必须包含 sparm=identityfirst
|
||||
- M428/M429/M430 remap 必须完整
|
||||
- HAL_PIN_VARS=1 必须存在
|
||||
- HALCMD 必须连接 motion.analog-out-03 与 motion.switchkins-type
|
||||
- SERVO_PERIOD / CYCLE_TIME / TOOL_TABLE 必须存在
|
||||
```
|
||||
|
||||
### 2.2 RUN 起始行修正
|
||||
|
||||
更新:
|
||||
|
||||
```text
|
||||
app/src/state/store.js
|
||||
```
|
||||
|
||||
修正:
|
||||
|
||||
```text
|
||||
普通 RUN 发送 EMC_TASK_PLAN_RUN line=0。
|
||||
不再用 activeLine - programStartLine 推导普通 RUN 起始行。
|
||||
run-from-line 后续应作为独立功能处理。
|
||||
```
|
||||
|
||||
## 3. 完成情况矩阵
|
||||
|
||||
| 05 阶段 | 状态 | 证据 | 备注 |
|
||||
| --- | --- | --- | --- |
|
||||
| 阶段 0:建立当前状态基线 | 完成 | `smoke:node` 完整通过 | 当前基线可复现 |
|
||||
| 阶段 1:INI definition contract | 完成 | `verify_linuxcnc_ini_runtime.mjs` | 本轮补强 section/字段 validation |
|
||||
| 阶段 2:绑定 kinematics runtime | 完成 | `verify_linuxcnc_kinematics_runtime.mjs`, `verify_run_preconditions.mjs` | RUN gate 检查 module/frame source |
|
||||
| 阶段 3:machine-file staging | 完成 | `verify_machine_file_staging.mjs` | selected G-code 与 wasmProgramPath 同步 |
|
||||
| 阶段 4:初始化 task/HAL session | 完成 | `verify_linuxcnc_task_hal_runtime.mjs` | openProgram/session/status 链路通过 |
|
||||
| 阶段 5:RUN preconditions gate | 完成 | `verify_run_preconditions.mjs` | 仍可继续扩展更细 ON/AUTO/homed 阻断文案 |
|
||||
| 阶段 6:RUN command sequence | 完成 | `verify_run_feedback_loop.mjs` | 本轮修正普通 RUN line=0 |
|
||||
| 阶段 7:taskHalStatusLoop | 完成 | `verify_run_feedback_loop.mjs` | tick/history/STOP 断言通过 |
|
||||
| 阶段 8:统一 TASK_HAL_STATUS_APPLIED | 完成 | `verify_run_feedback_loop.mjs`, `verify_rtcp_store.mjs` | feedback history 保留 task/HAL/motion source |
|
||||
| 阶段 9:STOP/ABORT/PAUSE/RESUME/STEP | 部分完成 | `verify_linuxcnc_task_hal_runtime.mjs` | PAUSE/RESUME 有测试;STOP 有 feedback-loop 测试;STEP/ABORT 仍需专门断言 |
|
||||
| 阶段 10:UI 显示与交互 | 部分完成 | 现有 browser smoke 未在本轮执行 | 仍需 07 浏览器证据 case |
|
||||
| 阶段 11:full execution boundary | 完成 | `verify_full_execution_boundary.mjs`, native audit | web simulation boundary 通过 |
|
||||
| 阶段 12:Node smoke 集成 | 完成 | `npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node` | 完整通过 |
|
||||
| 阶段 13:浏览器证据采集 | 未完成 | 无新 JSON/截图 | 下一步工作 |
|
||||
|
||||
## 4. 本轮验证结果
|
||||
|
||||
通过:
|
||||
|
||||
```bash
|
||||
node web-rtcp-5axis-sim-plan/tests/node/verify_linuxcnc_ini_runtime.mjs
|
||||
npm --prefix web-rtcp-5axis-sim-plan/app run build
|
||||
npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node
|
||||
```
|
||||
|
||||
关键输出:
|
||||
|
||||
```text
|
||||
linuxcnc_ini_runtime_smoke=ok
|
||||
gmoccapy_static_build=ok
|
||||
run_feedback_status_loop_smoke=ok
|
||||
linuxcnc_task_hal_runtime_smoke=ok
|
||||
full_execution_boundary_smoke=ok
|
||||
machine_file_staging_smoke=ok
|
||||
rtcp_store_smoke=ok
|
||||
profile_boundary_smoke=ok
|
||||
```
|
||||
|
||||
`smoke:node` 已完整通过。
|
||||
|
||||
## 5. 剩余接续工作
|
||||
|
||||
下一步建议优先做浏览器证据采集:
|
||||
|
||||
```text
|
||||
1. 扩展 qa/web-rtcp-5axis-site-test/capture-toolpath-preview-cases.mjs。
|
||||
2. 新增 07-run-preconditions-and-feedback case。
|
||||
3. 浏览器执行 POWER/HOME/AUTO/RUN。
|
||||
4. 采集 t=0.2s / 0.5s / 1.0s / 2.0s / 5.0s state。
|
||||
5. 断言 taskHalStatusLoop.tickCount 和 programRuntimeFeedbackHistory 增长。
|
||||
6. 断言 feedback sourceMode 不含 fixture-line-playback。
|
||||
7. 输出 JSON 与截图:
|
||||
qa/web-rtcp-5axis-site-test/output/run-preconditions-feedback.json
|
||||
qa/web-rtcp-5axis-site-test/screenshots/run-preconditions-feedback/*.png
|
||||
```
|
||||
|
||||
随后补强控制类测试:
|
||||
|
||||
```text
|
||||
1. ABORT 后 loop active=false,runState/stopped status 正确。
|
||||
2. STEP 在 task/HAL loaded 时 sourceMode 仍是 linuxcnc-task-motion-hal-wasm。
|
||||
3. RUN gate 对 machine ON / AUTO / homed / opened-file 增加更细粒度失败断言。
|
||||
4. taskHalStatusLoop 的 taskPeriodNs/servoPeriodNs 从 INI CYCLE_TIME/SERVO_PERIOD 派生,而不是只使用默认值。
|
||||
5. xyzbc-trt 增加对称 RUN status loop 测试。
|
||||
```
|
||||
|
||||
## 6. 当前结论
|
||||
|
||||
当前 RUN 主链路已经满足 05 的 node 侧核心完成标准:
|
||||
|
||||
```text
|
||||
INI contract ready
|
||||
-> profile/INI/kinematics 一致
|
||||
-> machine files staged
|
||||
-> selected G-code opened by task/HAL session
|
||||
-> RUN sends LinuxCNC task commands
|
||||
-> taskHalStatusLoop continuously runCycles/readStatus
|
||||
-> UI/store consumes TASK_HAL_STATUS_APPLIED snapshots
|
||||
```
|
||||
|
||||
尚未完成的是浏览器端 JSON/截图证据,以及 ABORT/STEP/xyzbc 对称测试的补强。
|
||||
@@ -0,0 +1,135 @@
|
||||
# 07 浏览器 RUN feedback 证据完成记录与下一步
|
||||
|
||||
生成时间:2026-06-22
|
||||
|
||||
## 1. 本轮执行范围
|
||||
|
||||
按 `06-run-implementation-traceability-matrix-and-next-steps.md` 的优先级,完成浏览器端 `07-run-preconditions-and-feedback` 证据采集。
|
||||
|
||||
本轮没有继续扩展 ABORT/STEP/xyzbc 对称测试。
|
||||
|
||||
## 2. 已完成改动
|
||||
|
||||
更新:
|
||||
|
||||
```text
|
||||
qa/web-rtcp-5axis-site-test/capture-toolpath-preview-cases.mjs
|
||||
```
|
||||
|
||||
新增:
|
||||
|
||||
```text
|
||||
07-run-preconditions-and-feedback
|
||||
```
|
||||
|
||||
浏览器流程:
|
||||
|
||||
```text
|
||||
1. 等待 app、INI、kinematics runtime、machine files ready。
|
||||
2. 选择 LinuxCNC vendored G-code:
|
||||
configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins_test_1.ngc
|
||||
3. 确认 taskHalSession.programPath 已 open 同一个 G-code。
|
||||
4. POWER -> MANUAL -> HOME -> AUTO。
|
||||
5. RUN。
|
||||
6. 采集 baseline 和 0.2s / 0.5s / 1.0s / 2.0s / 5.0s state。
|
||||
7. 截图并输出 JSON 证据。
|
||||
```
|
||||
|
||||
输出:
|
||||
|
||||
```text
|
||||
qa/web-rtcp-5axis-site-test/output/run-preconditions-feedback.json
|
||||
qa/web-rtcp-5axis-site-test/screenshots/run-preconditions-feedback/
|
||||
```
|
||||
|
||||
## 3. 断言结果
|
||||
|
||||
`run-preconditions-feedback.json` 当前状态:
|
||||
|
||||
```text
|
||||
status=PASS
|
||||
```
|
||||
|
||||
通过的关键断言:
|
||||
|
||||
```text
|
||||
1. INI ready。
|
||||
2. selected G-code 是 xyzac_switchkins_test_1.ngc。
|
||||
3. task/HAL session opened selected G-code。
|
||||
4. RUN 后 taskHalStatusLoop sequence 从 1 变为 2。
|
||||
5. 本次 RUN tickCount=4。
|
||||
6. 本次 RUN programRuntimeFeedbackHistory=5。
|
||||
7. feedback sourceMode 全部是 linuxcnc-task-motion-hal-wasm。
|
||||
8. 不含 fixture-line-playback feedback。
|
||||
9. semanticBoundary 全部是 linuxcnc_task_motion_hal_wasm_simulation_runtime。
|
||||
10. activeLine 等于 UI 高亮行。
|
||||
11. DRO 等于 runtime feedback axisPose。
|
||||
12. RTCP canvas 状态与 state.rtcpState 一致。
|
||||
13. taskCycle/servoCycle 可见。
|
||||
14. canvas 执行轨迹可见。
|
||||
```
|
||||
|
||||
样本摘要:
|
||||
|
||||
```text
|
||||
t=0.2s / 0.5s / 1.0s / 2.0s / 5.0s
|
||||
runState=complete
|
||||
taskHalStatusLoop.sequence=2
|
||||
taskHalStatusLoop.tickCount=4
|
||||
programRuntimeFeedbackHistory.length=5
|
||||
activeLine=29
|
||||
sourceMode=linuxcnc-task-motion-hal-wasm
|
||||
```
|
||||
|
||||
说明:
|
||||
|
||||
```text
|
||||
xyzac_switchkins_test_1.ngc 很短,浏览器首个 0.2s 样本时程序已 complete。
|
||||
因此证据不要求 5 秒内持续 active=true,而是验证本次 RUN 的新 loop sequence、tick/history、task/HAL feedback 和 UI snapshot 一致性。
|
||||
```
|
||||
|
||||
## 4. 已运行验证
|
||||
|
||||
执行:
|
||||
|
||||
```bash
|
||||
node qa/web-rtcp-5axis-site-test/capture-toolpath-preview-cases.mjs
|
||||
```
|
||||
|
||||
结果:
|
||||
|
||||
```text
|
||||
01-home-toolpath: PASS
|
||||
02-operator-demo-toolpath: PASS
|
||||
03-arc-demo-toolpath: PASS
|
||||
04-clear-preview-reference: PASS
|
||||
05-vendored-impeller-toolpath: PASS
|
||||
06-running-rtcp-toolpath: PASS
|
||||
07-run-preconditions-and-feedback: PASS
|
||||
```
|
||||
|
||||
## 5. 接续工作
|
||||
|
||||
下一步建议补控制类 node 测试:
|
||||
|
||||
```text
|
||||
1. ABORT 后 taskHalStatusLoop.active=false,runState/stopped status 正确。
|
||||
2. STEP 在 task/HAL loaded 时 sourceMode 仍是 linuxcnc-task-motion-hal-wasm。
|
||||
3. RUN gate 对 machine ON / AUTO / homed / opened-file 增加更细粒度失败断言。
|
||||
4. taskHalStatusLoop 的 taskPeriodNs/servoPeriodNs 从 INI CYCLE_TIME/SERVO_PERIOD 派生。
|
||||
5. xyzbc-trt 增加 RUN status loop 对称测试。
|
||||
```
|
||||
|
||||
## 6. 当前完成矩阵变化
|
||||
|
||||
`06` 中的阶段 13 状态从:
|
||||
|
||||
```text
|
||||
未完成:无新 JSON/截图
|
||||
```
|
||||
|
||||
更新为:
|
||||
|
||||
```text
|
||||
完成:run-preconditions-feedback.json + run-preconditions-feedback/*.png,07 case PASS
|
||||
```
|
||||
@@ -0,0 +1,131 @@
|
||||
# 08 LinuxCNC 源程序测试资产
|
||||
|
||||
生成时间:2026-06-22
|
||||
|
||||
## 1. 选择结果
|
||||
|
||||
本轮按用户要求,从 `/home/meswork/cnc_wams/linuxcnc` LinuxCNC 源程序中选定一组更适合项目测试的真实 RTCP/五轴资产:
|
||||
|
||||
```text
|
||||
INI:
|
||||
/home/meswork/cnc_wams/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini
|
||||
|
||||
G-code:
|
||||
/home/meswork/cnc_wams/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/impeller-7bl-xyzac.ngc
|
||||
```
|
||||
|
||||
已复制到 `working_run`:
|
||||
|
||||
```text
|
||||
web-rtcp-5axis-sim-plan/working_run/test_linuxcnc_source/xyzac-trt.ini
|
||||
web-rtcp-5axis-sim-plan/working_run/test_linuxcnc_source/impeller-7bl-xyzac.ngc
|
||||
```
|
||||
|
||||
已移除不合适的短程序副本:
|
||||
|
||||
```text
|
||||
web-rtcp-5axis-sim-plan/working_run/test_linuxcnc_source/xyzac_switchkins_test_1.ngc
|
||||
```
|
||||
|
||||
## 2. 选择原因
|
||||
|
||||
选择 `xyzac-trt.ini` + `impeller-7bl-xyzac.ngc`,原因:
|
||||
|
||||
```text
|
||||
1. INI 是 LinuxCNC 官方 5axis table-rotary-tilting 仿真配置。
|
||||
2. 坐标为 XYZAC,与当前项目默认 profile `xyzac-trt` 一致。
|
||||
3. KINEMATICS = xyzac-trt-kins sparm=identityfirst。
|
||||
4. 包含完整 M428/M429/M430 remap contract。
|
||||
5. 包含 HAL_PIN_VARS=1。
|
||||
6. 包含 motion.analog-out-03 => motion.switchkins-type HALCMD。
|
||||
7. G-code 以 M428 ;TCP:xyzac 进入 TCP/RTCP kinematics。
|
||||
8. G-code 使用 G93 inverse-time feed。
|
||||
9. G-code 包含大量 XYZAC 五轴联动段。
|
||||
10. G-code 共 4510 行,比短 switchkins test 程序更适合测试项目功能完整性。
|
||||
11. G-code 来自 /home/meswork/cnc_wams/linuxcnc 源程序,不是项目手写 fixture。
|
||||
```
|
||||
|
||||
## 3. 源文件哈希
|
||||
|
||||
当前副本与 `/home/meswork/cnc_wams/linuxcnc` 源文件逐字节一致:
|
||||
|
||||
```text
|
||||
xyzac-trt.ini
|
||||
sha256=4b7fa6cb8d3e7031e769b3e0c779b586b67cfd45d715985f40d4ec23c662dc97
|
||||
|
||||
impeller-7bl-xyzac.ngc
|
||||
sha256=e90f0b4b6c43809da94a8170ee1029b5afc3e1bbe9bf2ae66298a8baefad013c
|
||||
```
|
||||
|
||||
验证结果:
|
||||
|
||||
```text
|
||||
ini_cmp=0
|
||||
ngc_cmp=0
|
||||
```
|
||||
|
||||
## 4. 测试覆盖点
|
||||
|
||||
这组资产覆盖:
|
||||
|
||||
```text
|
||||
1. LinuxCNC INI definition contract。
|
||||
2. profile/INI 坐标一致性:XYZAC。
|
||||
3. kinematics module 一致性:xyzac-trt。
|
||||
4. RTCP/TCP kinematics:
|
||||
M428 -> xyzac TCP
|
||||
5. inverse-time feed:
|
||||
G93
|
||||
6. 长路径五轴联动:
|
||||
XYZAC motion lines with A/C rotary axes
|
||||
7. machine-file staging。
|
||||
8. taskHalRuntime.openProgram(programPath)。
|
||||
9. RUN command sequence。
|
||||
10. taskHalStatusLoop feedback。
|
||||
11. UI activeLine/DRO/RTCP/runtime feedback same-snapshot 证据。
|
||||
12. 长路径 preview、执行轨迹、rapid/feed 与五轴姿态变化。
|
||||
```
|
||||
|
||||
## 5. 已运行验证
|
||||
|
||||
执行:
|
||||
|
||||
```bash
|
||||
node web-rtcp-5axis-sim-plan/tests/node/verify_real_linuxcnc_5axis_program_cases.mjs
|
||||
```
|
||||
|
||||
结果:
|
||||
|
||||
```text
|
||||
linuxcnc_source_program_case_count=8
|
||||
all_cases_program_preview_points=ok
|
||||
all_cases_executed_path_points=ok_after_run_or_step
|
||||
all_cases_toolpath_preview_source=linuxcnc_interpreter_canonical_motion
|
||||
all_cases_tool_execution_trace_source=linuxcnc_tp_samples_or_task_motion_hal_feedback
|
||||
all_switchkins_cases_rtcp_state_changes_verified=1
|
||||
all_cases_source_guard=linuxcnc_vendored_5axis_gcode_source_file
|
||||
fixture_toolpath_fallback_not_promoted=1
|
||||
real_linuxcnc_5axis_program_cases_smoke=ok
|
||||
```
|
||||
|
||||
## 6. 后续使用方式
|
||||
|
||||
后续新增测试时优先引用这组资产:
|
||||
|
||||
```text
|
||||
working_run/test_linuxcnc_source/xyzac-trt.ini
|
||||
working_run/test_linuxcnc_source/impeller-7bl-xyzac.ngc
|
||||
```
|
||||
|
||||
如果要测试短 switchkins identity/TCP 循环,再补充:
|
||||
|
||||
```text
|
||||
/home/meswork/cnc_wams/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins_test_1.ngc
|
||||
```
|
||||
|
||||
如果要测试 xyzbc 对称链路,再补充:
|
||||
|
||||
```text
|
||||
/home/meswork/cnc_wams/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini
|
||||
/home/meswork/cnc_wams/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzbc.ngc
|
||||
```
|
||||
@@ -0,0 +1,58 @@
|
||||
# 09 单位换算与 Three.js 米单位场景完成记录
|
||||
|
||||
生成时间:2026-06-22
|
||||
|
||||
## 本轮目标
|
||||
|
||||
解决英寸、毫米、米之间的单位换算问题,重点覆盖:
|
||||
|
||||
- 实时轴值显示;
|
||||
- 刀具路径预览;
|
||||
- 刀具执行轨迹;
|
||||
- Three.js 绘图坐标统一使用米。
|
||||
|
||||
## 完成情况矩阵
|
||||
|
||||
| 项目 | 完成状态 | 代码落点 | 验证 |
|
||||
| --- | --- | --- | --- |
|
||||
| 公共线性单位换算 | 已完成 | `app/src/runtime/linear-units.js` | `verify_linear_unit_conversion.mjs` |
|
||||
| mm/inch/m 到米转换 | 已完成 | `linearValueToMeters()`、`axesToSceneMeters()` | `25.4mm == 1inch == 0.0254m` |
|
||||
| 执行计时距离归一到毫米 | 已完成 | `app/src/runtime/execution-timing.js` | inch 段长 `1 inch -> 25.4 mm` |
|
||||
| 执行计时进给归一到 mm/min | 已完成 | `app/src/runtime/execution-timing.js` | inch feed `1 inch/min -> 25.4 mm/min` |
|
||||
| G20/G21 程序单位解析 | 已完成 | `app/src/runtime/linuxcnc-interpreter-runtime.js` | G20 motion 标记 `inch`,G21 motion 标记 `mm` |
|
||||
| 刀具路径预览使用米 | 已完成 | `app/src/visualization/five-axis-scene.js` | motion axes 经 `axesToSceneMeters()` |
|
||||
| 刀具执行轨迹使用米 | 已完成 | `app/src/visualization/five-axis-scene.js` | timing samples 携带/继承 motion 单位 |
|
||||
| 当前刀位 marker 使用米 | 已完成 | `app/src/visualization/five-axis-scene.js` | runtime feedback linearUnits 参与转换 |
|
||||
| Three.js 机床参考模型使用米尺度 | 已完成 | `app/src/visualization/five-axis-scene.js` | 参考模型尺寸从任意倍率改为米尺度 |
|
||||
| 2D fallback 使用米尺度 | 已完成 | `app/src/visualization/five-axis-scene.js` | fallback scale 改为米坐标范围 |
|
||||
| 轴值实时显示 | 已确认边界 | `store.axisPose` / DRO | 保留机床/程序单位,不改成米 |
|
||||
|
||||
## 关键设计结论
|
||||
|
||||
实时轴值显示不应强制转换为米。DRO/axisPose 表示当前机床或程序坐标单位,应保留 LinuxCNC/INI/G-code 的语义;Three.js 预览层才统一转换为米。
|
||||
|
||||
Three.js 场景现在通过 dataset 暴露:
|
||||
|
||||
```text
|
||||
data-three-scene-units="m"
|
||||
data-three-linear-units="<mm|inch|m>"
|
||||
data-three-linear-unit-scale-to-meters="<factor>"
|
||||
```
|
||||
|
||||
## 已执行验证
|
||||
|
||||
```text
|
||||
node web-rtcp-5axis-sim-plan/tests/node/verify_linear_unit_conversion.mjs
|
||||
node web-rtcp-5axis-sim-plan/tests/node/verify_rtcp_store.mjs
|
||||
node web-rtcp-5axis-sim-plan/tests/node/verify_real_linuxcnc_5axis_program_cases.mjs
|
||||
node web-rtcp-5axis-sim-plan/tests/node/verify_linuxcnc_ini_runtime.mjs
|
||||
npm --prefix web-rtcp-5axis-sim-plan/app run build
|
||||
```
|
||||
|
||||
结果均通过。
|
||||
|
||||
## 后续工作
|
||||
|
||||
1. 增加浏览器截图证据,确认米尺度 Three.js 画面在 desktop/mobile 下不空白、不偏移。
|
||||
2. 如果后续接入真实 task/motion HAL feedback,需要确认 feedback 坐标是否已经按 INI 单位输出,并继续填充 `programRuntimeFeedback.linearUnits`。
|
||||
3. 可继续补 G-code 中途 G20/G21 切换的多段浏览器端预览用例。
|
||||
@@ -0,0 +1,210 @@
|
||||
# 10 RUN 控制类测试与 INI 周期派生详细步骤
|
||||
|
||||
生成时间:2026-06-22
|
||||
|
||||
## 1. 本轮目标
|
||||
|
||||
在 `05` 到 `09` 已完成 RUN 主链路、浏览器 RUN 证据和米单位场景的基础上,继续补齐 `07`、`09` 中列出的剩余可自动验证项。
|
||||
|
||||
本轮执行范围:
|
||||
|
||||
```text
|
||||
1. ABORT 后 taskHalStatusLoop.active=false,runState/status 正确。
|
||||
2. STEP 在 task/HAL runtime loaded 时仍消费 linuxcnc-task-motion-hal-wasm feedback。
|
||||
3. RUN gate 对 machine ON / AUTO / homed / opened-file 保持细粒度失败断言。
|
||||
4. taskHalStatusLoop 的 taskPeriodNs/servoPeriodNs 从 INI TASK.CYCLE_TIME / EMCMOT.SERVO_PERIOD 派生。
|
||||
5. xyzbc-trt 增加 RUN status loop 对称 node 测试。
|
||||
```
|
||||
|
||||
不在本轮执行:
|
||||
|
||||
```text
|
||||
1. 新增浏览器 desktop/mobile 米尺度截图证据。
|
||||
2. G20/G21 中途切换浏览器端预览用例。
|
||||
3. 新增真实 LinuxCNC native 对照资产。
|
||||
```
|
||||
|
||||
## 2. 执行顺序
|
||||
|
||||
### 步骤 1:建立当前基线
|
||||
|
||||
运行:
|
||||
|
||||
```bash
|
||||
node web-rtcp-5axis-sim-plan/tests/node/verify_run_feedback_loop.mjs
|
||||
node web-rtcp-5axis-sim-plan/tests/node/verify_run_preconditions.mjs
|
||||
node web-rtcp-5axis-sim-plan/tests/node/verify_linuxcnc_task_hal_runtime.mjs
|
||||
```
|
||||
|
||||
通过标准:
|
||||
|
||||
```text
|
||||
现有 xyzac RUN feedback loop、RUN preconditions、task/HAL runtime smoke 均可复现。
|
||||
```
|
||||
|
||||
### 步骤 2:实现 INI 周期派生
|
||||
|
||||
代码落点:
|
||||
|
||||
```text
|
||||
app/src/state/store.js
|
||||
```
|
||||
|
||||
实现要求:
|
||||
|
||||
```text
|
||||
1. 从 state.linuxCncIniConfig.task.cycleTimeSeconds 派生 taskPeriodNs。
|
||||
2. 从 state.linuxCncIniConfig.emcmot.servoPeriodNs 派生 servoPeriodNs。
|
||||
3. runTaskHalCommandSequence 默认使用派生周期。
|
||||
4. startTaskHalStatusLoop 默认使用派生周期。
|
||||
5. 如果 INI 字段缺失,才回退到原默认值 task=10000000ns / servo=1000000ns。
|
||||
```
|
||||
|
||||
验收断言:
|
||||
|
||||
```text
|
||||
xyzac-trt.ini: TASK.CYCLE_TIME=0.010 -> taskPeriodNs=10000000。
|
||||
xyzac-trt.ini: EMCMOT.SERVO_PERIOD=1000000 -> servoPeriodNs=1000000。
|
||||
```
|
||||
|
||||
### 步骤 3:补 ABORT/STEP node 测试
|
||||
|
||||
测试落点:
|
||||
|
||||
```text
|
||||
tests/node/verify_run_feedback_loop.mjs
|
||||
```
|
||||
|
||||
新增断言:
|
||||
|
||||
```text
|
||||
1. RUN 后 loop sequence/tick/history 由 task/HAL feedback 产生。
|
||||
2. ABORT 后 taskHalStatusLoop.active=false。
|
||||
3. ABORT 后 stopReason 为 aborted 或 runState 被 task/HAL status 收敛到 stopped/complete。
|
||||
4. STEP 后 programRuntimeFeedback.sourceMode 是 linuxcnc-task-motion-hal-wasm。
|
||||
5. STEP 后不出现 fixture-line-playback。
|
||||
```
|
||||
|
||||
### 步骤 4:补 RUN gate 细粒度断言
|
||||
|
||||
测试落点:
|
||||
|
||||
```text
|
||||
tests/node/verify_run_preconditions.mjs
|
||||
```
|
||||
|
||||
新增断言:
|
||||
|
||||
```text
|
||||
1. INI/profile/kinematics/machine-file ready 但 machine off 时,RUN gate 返回 machine must be on。
|
||||
2. machine on 但未 home 时,RUN gate 返回 home machine first。
|
||||
3. homed 但 manual mode 时,RUN gate 返回 switch to auto mode first。
|
||||
4. selected G-code/session 缺失时,validateRunPreconditions 返回 no machine-file G-code opened。
|
||||
```
|
||||
|
||||
### 步骤 5:补 xyzbc RUN status loop 对称测试
|
||||
|
||||
测试落点:
|
||||
|
||||
```text
|
||||
tests/node/verify_run_feedback_loop.mjs
|
||||
```
|
||||
|
||||
流程:
|
||||
|
||||
```text
|
||||
1. 加载 profile=xyzbc-trt。
|
||||
2. 解析 xyzbc-trt.ini。
|
||||
3. attach xyzbc-trt kinematics runtime。
|
||||
4. stage machine files。
|
||||
5. 选择 xyzbc_switchkins.ngc 或 boat-xyzbc.ngc。
|
||||
6. POWER -> HOME -> AUTO -> RUN。
|
||||
7. 断言 taskHalStatusLoop/profile/kinematics/sourceMode/history 与 xyzbc 一致。
|
||||
```
|
||||
|
||||
### 步骤 6:验证
|
||||
|
||||
运行:
|
||||
|
||||
```bash
|
||||
node web-rtcp-5axis-sim-plan/tests/node/verify_run_preconditions.mjs
|
||||
node web-rtcp-5axis-sim-plan/tests/node/verify_run_feedback_loop.mjs
|
||||
node web-rtcp-5axis-sim-plan/tests/node/verify_linuxcnc_task_hal_runtime.mjs
|
||||
npm --prefix web-rtcp-5axis-sim-plan/app run build
|
||||
npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node
|
||||
```
|
||||
|
||||
通过标准:
|
||||
|
||||
```text
|
||||
所有命令返回 0。
|
||||
新增断言覆盖 ABORT、STEP、RUN gate、INI cycle period、xyzbc RUN symmetry。
|
||||
```
|
||||
|
||||
## 3. 完成记录模板
|
||||
|
||||
执行完成后,追加记录:
|
||||
|
||||
```text
|
||||
1. 修改文件。
|
||||
2. 新增断言。
|
||||
3. 验证命令与结果。
|
||||
4. 未完成项和下一步。
|
||||
```
|
||||
|
||||
## 4. 本轮完成记录
|
||||
|
||||
完成时间:2026-06-22 17:45 EDT
|
||||
|
||||
修改文件:
|
||||
|
||||
```text
|
||||
app/src/state/store.js
|
||||
tests/node/verify_run_feedback_loop.mjs
|
||||
tests/node/verify_run_preconditions.mjs
|
||||
working_run/README.md
|
||||
working_run/10-run-control-tests-and-ini-cycle-steps.md
|
||||
```
|
||||
|
||||
完成内容:
|
||||
|
||||
```text
|
||||
1. runTaskHalCommandSequence 默认周期改为从 INI 派生:
|
||||
TASK.CYCLE_TIME -> taskPeriodNs。
|
||||
EMCMOT.SERVO_PERIOD -> servoPeriodNs。
|
||||
2. startTaskHalStatusLoop 默认周期改为从同一个 INI 派生。
|
||||
3. verify_run_feedback_loop.mjs 增加 STOP、ABORT、STEP、xyzbc-trt 对称 RUN 覆盖。
|
||||
4. verify_run_feedback_loop.mjs 断言 taskHalStatusLoop.taskPeriodNs=10000000、
|
||||
servoPeriodNs=1000000,且 feedback sourceMode 不回退 fixture-line-playback。
|
||||
5. verify_run_preconditions.mjs 增加 RUN gate 细粒度断言:
|
||||
machine off、not homed、manual mode、未打开 selected G-code。
|
||||
6. working_run/README.md 增加 10 文档索引,并把下一步改为米尺度浏览器截图证据。
|
||||
```
|
||||
|
||||
验证结果:
|
||||
|
||||
```bash
|
||||
node web-rtcp-5axis-sim-plan/tests/node/verify_run_preconditions.mjs
|
||||
node web-rtcp-5axis-sim-plan/tests/node/verify_run_feedback_loop.mjs
|
||||
node web-rtcp-5axis-sim-plan/tests/node/verify_linuxcnc_task_hal_runtime.mjs
|
||||
npm --prefix web-rtcp-5axis-sim-plan/app run build
|
||||
npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node
|
||||
```
|
||||
|
||||
结果:
|
||||
|
||||
```text
|
||||
全部通过。
|
||||
run_preconditions_ini_profile_smoke=ok
|
||||
run_feedback_status_loop_smoke=ok
|
||||
linuxcnc_task_hal_runtime_smoke=ok
|
||||
gmoccapy_static_build=ok
|
||||
smoke:node 全部通过。
|
||||
```
|
||||
|
||||
剩余项:
|
||||
|
||||
```text
|
||||
1. 增加浏览器 desktop/mobile 米尺度截图证据。
|
||||
2. 后续可补 G20/G21 中途切换浏览器端预览用例。
|
||||
```
|
||||
@@ -0,0 +1,105 @@
|
||||
# 11 浏览器米尺度场景与 G20/G21 混合单位证据完成记录
|
||||
|
||||
生成时间:2026-06-22 17:55 EDT
|
||||
|
||||
## 1. 本轮目标
|
||||
|
||||
按 `09-linear-units-meter-scene-complete-next-steps.md` 的剩余项继续执行,补齐:
|
||||
|
||||
```text
|
||||
1. 浏览器 desktop/mobile 米尺度 Three.js 截图证据。
|
||||
2. G20/G21 混合单位浏览器端预览用例。
|
||||
3. 对应 JSON 证据和截图归档。
|
||||
```
|
||||
|
||||
## 2. 修改文件
|
||||
|
||||
```text
|
||||
app/src/visualization/five-axis-scene.js
|
||||
qa/web-rtcp-5axis-site-test/capture-toolpath-preview-cases.mjs
|
||||
working_run/README.md
|
||||
working_run/11-browser-meter-scene-and-mixed-units-complete.md
|
||||
gptlog-process/gpdlog.md
|
||||
```
|
||||
|
||||
## 3. 完成内容
|
||||
|
||||
```text
|
||||
1. Three.js canvas dataset 新增 threePathBoundsMeters。
|
||||
2. browser 证据脚本新增 08-meter-scene-desktop-mobile。
|
||||
3. desktop/mobile 分别采集 canvas screenshot、pixelStats、dataset。
|
||||
4. 断言 sceneUnits=m、linearUnitScaleToMeters 有效、pathFitBounds=ok、bounds maxSpan 为米尺度且 canvas 非空。
|
||||
5. browser 证据脚本新增 09-g20-g21-mixed-units-preview。
|
||||
6. 加载本地 G-code:
|
||||
G90 G20
|
||||
G1 X1.0 Y0 Z0 F10
|
||||
G21
|
||||
G1 X25.4 Y25.4 Z0 F254
|
||||
M2
|
||||
7. 断言 canonical motion 同时保留 inch/mm,并且 1 inch 与 25.4 mm 都映射到 0.0254m 场景坐标。
|
||||
8. RUN case 前恢复 vendored impeller 程序,避免本地混合单位程序污染 RUN 证据上下文。
|
||||
```
|
||||
|
||||
## 4. 新增输出
|
||||
|
||||
```text
|
||||
qa/web-rtcp-5axis-site-test/output/meter-scene-evidence.json
|
||||
qa/web-rtcp-5axis-site-test/screenshots/meter-scene-evidence/08-meter-scene-desktop.png
|
||||
qa/web-rtcp-5axis-site-test/screenshots/meter-scene-evidence/08-meter-scene-mobile.png
|
||||
qa/web-rtcp-5axis-site-test/screenshots/toolpath-preview-cases/09-g20-g21-mixed-units-preview.png
|
||||
```
|
||||
|
||||
`toolpath-preview-cases.json` 当前新增 case:
|
||||
|
||||
```text
|
||||
08-meter-scene-desktop-mobile: PASS
|
||||
09-g20-g21-mixed-units-preview: PASS
|
||||
```
|
||||
|
||||
## 5. 验证结果
|
||||
|
||||
执行:
|
||||
|
||||
```bash
|
||||
node web-rtcp-5axis-sim-plan/tests/node/verify_linear_unit_conversion.mjs
|
||||
npm --prefix web-rtcp-5axis-sim-plan/app run build
|
||||
node qa/web-rtcp-5axis-site-test/capture-toolpath-preview-cases.mjs
|
||||
npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node
|
||||
```
|
||||
|
||||
结果:
|
||||
|
||||
```text
|
||||
linear_unit_conversion_smoke=ok
|
||||
gmoccapy_static_build=ok
|
||||
browser evidence: all recorded cases PASS
|
||||
smoke:node: all checks PASS
|
||||
```
|
||||
|
||||
浏览器 JSON 摘要:
|
||||
|
||||
```text
|
||||
meter-scene-evidence.json status=PASS
|
||||
run-preconditions-feedback.json status=PASS
|
||||
toolpath-preview-cases:
|
||||
01-home-toolpath PASS
|
||||
02-operator-demo-toolpath PASS
|
||||
03-arc-demo-toolpath PASS
|
||||
04-clear-preview-reference PASS
|
||||
05-vendored-impeller-toolpath PASS
|
||||
08-meter-scene-desktop-mobile PASS
|
||||
09-g20-g21-mixed-units-preview PASS
|
||||
06-running-rtcp-toolpath PASS
|
||||
07-run-preconditions-and-feedback PASS
|
||||
```
|
||||
|
||||
## 6. 当前结论
|
||||
|
||||
`working_run` 中列出的 RUN 主链路、控制类测试、INI 周期派生、xyzbc 对称测试、浏览器 RUN feedback 证据、Three.js 米尺度场景证据、G20/G21 混合单位预览证据均已完成并可复现。
|
||||
|
||||
后续可选增强:
|
||||
|
||||
```text
|
||||
1. 将浏览器证据脚本拆分为独立小脚本,降低单次运行时间。
|
||||
2. 补更多真实 LinuxCNC native 对照资产。
|
||||
```
|
||||
@@ -0,0 +1,111 @@
|
||||
# 12 working_run 剩余工作最终完成记录
|
||||
|
||||
生成时间:2026-06-22
|
||||
|
||||
## 1. 执行范围
|
||||
|
||||
按 `working_run` 当前执行情况复核 `01` 到 `11` 的接续项,并完成最终收尾确认。
|
||||
|
||||
本轮重点核对:
|
||||
|
||||
```text
|
||||
1. RUN 主链路是否仍可复现。
|
||||
2. RUN preconditions、status loop、ABORT/STEP、xyzbc 对称测试是否通过。
|
||||
3. INI CYCLE_TIME / SERVO_PERIOD 派生周期是否仍通过测试。
|
||||
4. Three.js 米单位场景、G20/G21 混合单位浏览器证据是否仍通过。
|
||||
5. browser evidence JSON 是否全部 PASS。
|
||||
```
|
||||
|
||||
## 2. 当前结论
|
||||
|
||||
`working_run` 中早期文档保留的“下一步/未完成”项已经由后续文档覆盖:
|
||||
|
||||
```text
|
||||
06 中的浏览器 RUN feedback 证据 -> 07 已完成。
|
||||
07 中的 ABORT/STEP/RUN gate/xyzbc 对称测试 -> 10 已完成。
|
||||
09/10 中的 desktop/mobile 米尺度截图与 G20/G21 混合单位浏览器用例 -> 11 已完成。
|
||||
```
|
||||
|
||||
因此,按 `working_run` 已列出的必做项,当前剩余工作已全部完成并复核通过。
|
||||
|
||||
只保留可选增强:
|
||||
|
||||
```text
|
||||
1. 将浏览器证据脚本拆成多个独立小脚本,降低单次运行时间。
|
||||
2. 后续补更多真实 LinuxCNC native 对照资产。
|
||||
3. 如果接入真实 task/motion HAL feedback,再重新确认 feedback 坐标单位语义。
|
||||
```
|
||||
|
||||
## 3. 本轮复核命令
|
||||
|
||||
已执行:
|
||||
|
||||
```bash
|
||||
node web-rtcp-5axis-sim-plan/tests/node/verify_run_preconditions.mjs
|
||||
node web-rtcp-5axis-sim-plan/tests/node/verify_run_feedback_loop.mjs
|
||||
node web-rtcp-5axis-sim-plan/tests/node/verify_linear_unit_conversion.mjs
|
||||
npm --prefix web-rtcp-5axis-sim-plan/app run build
|
||||
npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node
|
||||
node qa/web-rtcp-5axis-site-test/capture-toolpath-preview-cases.mjs
|
||||
```
|
||||
|
||||
结果:
|
||||
|
||||
```text
|
||||
run_preconditions_ini_profile_smoke=ok
|
||||
run_preconditions_kinematics_smoke=ok
|
||||
run_preconditions_machine_file_smoke=ok
|
||||
run_feedback_status_loop_smoke=ok
|
||||
linear_unit_conversion_smoke=ok
|
||||
gmoccapy_static_build=ok
|
||||
smoke:node 全部通过
|
||||
browser evidence 脚本返回 0
|
||||
```
|
||||
|
||||
## 4. 浏览器证据状态
|
||||
|
||||
`qa/web-rtcp-5axis-site-test/output/toolpath-preview-cases.json`:
|
||||
|
||||
```text
|
||||
01-home-toolpath: PASS
|
||||
02-operator-demo-toolpath: PASS
|
||||
03-arc-demo-toolpath: PASS
|
||||
04-clear-preview-reference: PASS
|
||||
05-vendored-impeller-toolpath: PASS
|
||||
08-meter-scene-desktop-mobile: PASS
|
||||
09-g20-g21-mixed-units-preview: PASS
|
||||
06-running-rtcp-toolpath: PASS
|
||||
07-run-preconditions-and-feedback: PASS
|
||||
```
|
||||
|
||||
其他证据:
|
||||
|
||||
```text
|
||||
qa/web-rtcp-5axis-site-test/output/run-preconditions-feedback.json: PASS
|
||||
qa/web-rtcp-5axis-site-test/output/meter-scene-evidence.json: PASS
|
||||
```
|
||||
|
||||
## 5. 最终状态
|
||||
|
||||
当前已完成:
|
||||
|
||||
```text
|
||||
INI definition contract validation
|
||||
profile/INI/kinematics 一致性验证
|
||||
machine-file staging
|
||||
task/HAL session openProgram
|
||||
RUN gate
|
||||
RUN command sequence
|
||||
连续 taskHalStatusLoop
|
||||
TASK_HAL_STATUS_APPLIED runtime feedback 消费
|
||||
STOP/ABORT/STEP 控制类测试
|
||||
INI 周期派生
|
||||
xyzac/xyzbc RUN status loop 对称覆盖
|
||||
LinuxCNC 源程序真实五轴资产覆盖
|
||||
mm/inch/m 到 Three.js 米单位场景转换
|
||||
desktop/mobile 米尺度浏览器截图证据
|
||||
G20/G21 混合单位浏览器预览证据
|
||||
完整 node smoke
|
||||
浏览器 evidence JSON/截图
|
||||
```
|
||||
|
||||
@@ -9,8 +9,17 @@
|
||||
| 文件 | 用途 |
|
||||
| --- | --- |
|
||||
| `01-run-gcode-execution-principle-and-test.md` | G-code 具体执行过程、`RUN` 执行原理、源码证据、测试观察和问题结论 |
|
||||
| `02-run-preconditions-test-and-implementation-steps.md` | `RUN` 前置条件、INI/机床/五轴运动学确认流程、详细测试用例和编写 `RUN` 程序步骤 |
|
||||
| `02-run-preconditions-test-and-implementation-steps.md` | `RUN` 前置条件、INI definition contract、LinuxCNC 源码对照、INI/机床/五轴运动学确认流程、详细测试用例和编写 `RUN` 程序步骤 |
|
||||
| `03-run-step1-preconditions-complete-next-steps.md` | 本轮已完成的 `RUN` 前置条件 gate、验证结果和下一步接续建议 |
|
||||
| `04-run-status-loop-complete-next-steps.md` | 本轮已完成的 `RUN` 连续 task/HAL status loop、验证结果和下一步接续建议 |
|
||||
| `05-run-program-implementation-detailed-steps.md` | 根据 01-04 文档整理的程序实现详细实施步骤、代码落点、测试与验收顺序 |
|
||||
| `06-run-implementation-traceability-matrix-and-next-steps.md` | 按 05 核对后的完成情况矩阵、本轮补强项、验证结果和后续接续工作 |
|
||||
| `07-browser-run-feedback-evidence-complete-next-steps.md` | 浏览器端 RUN feedback JSON/截图证据完成记录和后续控制类测试建议 |
|
||||
| `08-linuxcnc-source-test-assets.md` | 从 LinuxCNC 源程序选定并复制到 working_run 的真实 INI/G-code 测试资产说明 |
|
||||
| `09-linear-units-meter-scene-complete-next-steps.md` | 英寸/毫米/米单位换算、Three.js 米单位场景、执行轨迹单位语义完成记录和后续建议 |
|
||||
| `10-run-control-tests-and-ini-cycle-steps.md` | RUN 控制类测试、INI 周期派生、ABORT/STEP/RUN gate/xyzbc 对称测试实施步骤与完成记录 |
|
||||
| `11-browser-meter-scene-and-mixed-units-complete.md` | 浏览器 desktop/mobile 米尺度截图证据、G20/G21 混合单位预览用例与完成记录 |
|
||||
| `12-working-run-final-completion-record.md` | 按 `working_run` 接续项最终复核后的剩余工作完成记录 |
|
||||
|
||||
## 结论摘要
|
||||
|
||||
@@ -18,10 +27,13 @@
|
||||
|
||||
```text
|
||||
1. 先确定明确的 LinuxCNC INI 文件。
|
||||
2. 由 INI/profile 确定机床类型、坐标轴、joint 配置、HAL/remap/tool-table 资产。
|
||||
3. 由 INI 的 [KINS] KINEMATICS 确定五轴运动学算法和 switchkins 映射。
|
||||
4. 验证对应 LinuxCNC kinematics WASM 已加载,并能产生 source-derived frame。
|
||||
5. 之后才进入 RUN:打开同一 INI 上下文下的 G-code,发送 task command,持续消费 task/HAL/motion feedback。
|
||||
2. 验证 INI definition contract:[EMC]、[DISPLAY]、[RS274NGC]、[KINS]、[HAL]、[TRAJ]、[EMCMOT]、[TASK]、[EMCIO]、[AXIS_*]、[JOINT_*] 必须完整且互相一致。
|
||||
3. 由 INI/profile 确定机床类型、坐标轴、joint 配置、HAL/remap/tool-table 资产。
|
||||
4. 由 INI 的 [KINS] KINEMATICS 确定五轴运动学算法和 switchkins 映射。
|
||||
5. 验证对应 LinuxCNC kinematics WASM 已加载,并能产生 source-derived frame。
|
||||
6. 验证同一 INI 上下文下的 G-code 已通过 task plan open 打开。
|
||||
7. 确认 machine ON、AUTO mode、homed/no_force_homing 等 LinuxCNC task gate。
|
||||
8. 之后才进入 RUN:发送 task command,持续消费 task/HAL/motion feedback。
|
||||
```
|
||||
|
||||
当前项目明确支持的五轴机床上下文是:
|
||||
@@ -33,22 +45,28 @@
|
||||
|
||||
当前实现已经能显示 G-code 程序文本、当前行、高亮行、DRO、runtime feedback 和 task/HAL 状态。
|
||||
|
||||
但按 `textbak` 接续文件的边界要求,当前 `RUN` 还不是连续的 task/HAL feedback 推送执行模型:
|
||||
`04` 完成后,当前 `RUN` 已从单次 task/HAL status 读取推进为连续 status loop:
|
||||
|
||||
```text
|
||||
RUN 点击后:
|
||||
1. UI 发送 EMC_TASK_SET_STATE / EMC_TASK_SET_MODE / EMC_TASK_PLAN_RUN;
|
||||
2. store 调用 taskHalRuntime.runCycles({ taskCycles: 5 });
|
||||
3. 随后 readStatus() 一次;
|
||||
4. TASK_HAL_STATUS_APPLIED 将这一次 status 映射到 activeLine / axisPose / velocity / feedback;
|
||||
5. 没有看到 worker 主动持续 postMessage 推送 status;
|
||||
6. 如果没有再次调用 runCycles/readStatus,状态不会继续随真实时间推进。
|
||||
1. UI 确认 opened program、machine ON、AUTO、homed 后发送 EMC_TASK_SET_STATE / EMC_TASK_SET_MODE / EMC_TASK_PLAN_RUN;
|
||||
2. store 调用 taskHalRuntime.runCycles(...);
|
||||
3. store 调用 taskHalRuntime.readStatus();
|
||||
4. TASK_HAL_STATUS_APPLIED 将 task/HAL/motion status 映射到 activeLine / axisPose / velocity / feedback;
|
||||
5. taskHalStatusLoop 持续重复 runCycles/readStatus;
|
||||
6. programRuntimeFeedbackHistory 保留最近 100 条 task/HAL/motion feedback。
|
||||
```
|
||||
|
||||
因此,当前问题重点不是“前端是否需要定时器”,而是:
|
||||
该顺序与 LinuxCNC 源码中的 `halui.cc::sendProgramRun()`、`shcom.cc::sendProgramOpen/sendProgramRun()`、`emctaskmain.cc::EMC_TASK_PLAN_OPEN/RUN/PAUSE/RESUME` 对齐:RUN 不是前端播放,而是在已打开程序和可运行 task 状态下发送 `EMC_TASK_PLAN_RUN`,后续状态来自 task/motion/HAL feedback。
|
||||
|
||||
当前仍需保持的边界是:
|
||||
|
||||
```text
|
||||
task/HAL runtime 是否能在 G-code 执行期间持续产出状态;
|
||||
UI/store 是否持续消费这些 LinuxCNC-owned 状态;
|
||||
轴值、当前行、速度、DTG、程序时间是否都来自同一条 task/HAL/motion feedback 链。
|
||||
taskHalStatusLoop 只负责调度 runCycles/readStatus;
|
||||
status 内容必须来自 task/HAL/motion runtime;
|
||||
UI/store 不自增 activeLine;
|
||||
UI/store 不自造 axisPose;
|
||||
浏览器端米尺度 desktop/mobile 截图证据已补齐;
|
||||
G20/G21 混合单位浏览器预览证据已补齐。
|
||||
working_run 已列出的必做接续项已全部复核通过,仅保留可选增强。
|
||||
```
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,182 @@
|
||||
[APPLICATIONS]
|
||||
# uncomment to enable:
|
||||
#APP = halshow --fformat %.5f switchkins.halshow
|
||||
|
||||
[EMC]
|
||||
VERSION = 1.1
|
||||
MACHINE = sim-xyzac-trt-kins (switchkins)
|
||||
|
||||
[DISPLAY]
|
||||
GEOMETRY = XYZ-A
|
||||
OPEN_FILE = ./demos/xyzac_switchkins.ngc
|
||||
PYVCP = ./xyzac-trt.xml
|
||||
JOG_AXES = XYZC
|
||||
DISPLAY = axis
|
||||
MAX_ANGULAR_VELOCITY = 360
|
||||
MAX_LINEAR_VELOCITY = 1000
|
||||
POSITION_OFFSET = RELATIVE
|
||||
POSITION_FEEDBACK = ACTUAL
|
||||
MAX_FEED_OVERRIDE = 2
|
||||
PROGRAM_PREFIX = ../../nc_files
|
||||
INTRO_GRAPHIC = emc2.gif
|
||||
INTRO_TIME = 1
|
||||
#EDITOR = geany
|
||||
TOOL_EDITOR = tooledit z diam
|
||||
|
||||
TKPKG = Ngcgui 1.0
|
||||
NGCGUI_FONT = Helvetica -12 normal
|
||||
NGCGUI_SUBFILE = xyzac_switchkins_sub.ngc
|
||||
NGCGUI_SUBFILE = centering.ngc
|
||||
|
||||
[RS274NGC]
|
||||
SUBROUTINE_PATH = ./remap_subs
|
||||
HAL_PIN_VARS = 1
|
||||
REMAP = M428 modalgroup=10 ngc=428remap
|
||||
REMAP = M429 modalgroup=10 ngc=429remap
|
||||
REMAP = M430 modalgroup=10 ngc=430remap
|
||||
PARAMETER_FILE = xyzac.var
|
||||
|
||||
[KINS]
|
||||
#NOTE: for backwrds compatibility !!!!!!!!!!!!!!!!!!!
|
||||
# default switchkins-type == 0 is xyzac-trt-kins
|
||||
# here switchkins-type == 0 is identity kins
|
||||
KINEMATICS = xyzac-trt-kins sparm=identityfirst
|
||||
JOINTS = 5
|
||||
|
||||
[HAL]
|
||||
HALUI = halui
|
||||
HALFILE = LIB:basic_sim.tcl
|
||||
POSTGUI_HALFILE = switchkins_postgui.hal
|
||||
|
||||
# net for control of motion.switchkins-type
|
||||
HALCMD = net :kinstype-select <= motion.analog-out-03 => motion.switchkins-type
|
||||
|
||||
# vismach xyzac-trt-gui items
|
||||
HALCMD = loadusr -W xyzac-trt-gui
|
||||
HALCMD = net :table-x joint.0.pos-fb xyzac-trt-gui.table-x
|
||||
HALCMD = net :saddle-y joint.1.pos-fb xyzac-trt-gui.saddle-y
|
||||
HALCMD = net :spindle-z joint.2.pos-fb xyzac-trt-gui.spindle-z
|
||||
HALCMD = net :tilt-a joint.3.pos-fb xyzac-trt-gui.tilt-a
|
||||
HALCMD = net :rotate-c joint.4.pos-fb xyzac-trt-gui.rotate-c
|
||||
HALCMD = net :tool-offset motion.tooloffset.z
|
||||
HALCMD = net :tool-offset xyzac-trt-kins.tool-offset xyzac-trt-gui.tool-offset
|
||||
HALCMD = net :y-offset xyzac-trt-kins.y-offset xyzac-trt-gui.y-offset
|
||||
HALCMD = net :z-offset xyzac-trt-kins.z-offset xyzac-trt-gui.z-offset
|
||||
HALCMD = sets :y-offset 20
|
||||
HALCMD = sets :z-offset 10
|
||||
|
||||
# not currently supported by xyzac-trt-gui:
|
||||
HALCMD = setp xyzac-trt-kins.x-rot-point 0
|
||||
HALCMD = setp xyzac-trt-kins.y-rot-point 0
|
||||
HALCMD = setp xyzac-trt-kins.z-rot-point 0
|
||||
HALCMD = setp xyzac-trt-kins.conventional-directions 0
|
||||
|
||||
[HALUI]
|
||||
# NOTE: kinstype==0 is identity kins because sparm=identityfirst
|
||||
# M429:identity kins (motion.switchkins-type==0 startupDEFAULT)
|
||||
# M428:xyzac kins (motion.switchkins-type==1)
|
||||
# M430:userk kins (motion.switchkins-type==2)
|
||||
MDI_COMMAND = M429
|
||||
MDI_COMMAND = M428
|
||||
MDI_COMMAND = M430
|
||||
|
||||
[TRAJ]
|
||||
COORDINATES = XYZAC
|
||||
LINEAR_UNITS = mm
|
||||
ANGULAR_UNITS = deg
|
||||
DEFAULT_LINEAR_VELOCITY = 20
|
||||
MAX_LINEAR_VELOCITY = 35
|
||||
MAX_LINEAR_ACCELERATION = 400
|
||||
DEFAULT_LINEAR_ACCELERATION = 300
|
||||
|
||||
[EMCMOT]
|
||||
EMCMOT = motmod
|
||||
SERVO_PERIOD = 1000000
|
||||
COMM_TIMEOUT = 1
|
||||
|
||||
[TASK]
|
||||
TASK = milltask
|
||||
CYCLE_TIME = 0.010
|
||||
|
||||
[EMCIO]
|
||||
TOOL_TABLE = xyzac-trt.tbl
|
||||
|
||||
[AXIS_X]
|
||||
MIN_LIMIT = -200
|
||||
MAX_LIMIT = 200
|
||||
MAX_VELOCITY = 20
|
||||
MAX_ACCELERATION = 300
|
||||
|
||||
[AXIS_Y]
|
||||
MIN_LIMIT = -100
|
||||
MAX_LIMIT = 100
|
||||
MAX_VELOCITY = 20
|
||||
MAX_ACCELERATION = 300
|
||||
|
||||
[AXIS_Z]
|
||||
MIN_LIMIT = -120
|
||||
MAX_LIMIT = 120
|
||||
MAX_VELOCITY = 20
|
||||
MAX_ACCELERATION = 300
|
||||
|
||||
[AXIS_A]
|
||||
MIN_LIMIT = -100
|
||||
MAX_LIMIT = 50
|
||||
MAX_VELOCITY = 30
|
||||
MAX_ACCELERATION = 300
|
||||
|
||||
[AXIS_C]
|
||||
MIN_LIMIT = -36000
|
||||
MAX_LIMIT = 36000
|
||||
MAX_VELOCITY = 30
|
||||
MAX_ACCELERATION = 300
|
||||
|
||||
[JOINT_0]
|
||||
TYPE = LINEAR
|
||||
HOME = 0
|
||||
MAX_VELOCITY = 20
|
||||
MAX_ACCELERATION = 300
|
||||
MIN_LIMIT = -200
|
||||
MAX_LIMIT = 200
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
|
||||
[JOINT_1]
|
||||
TYPE = LINEAR
|
||||
HOME = 0
|
||||
MAX_VELOCITY = 20
|
||||
MAX_ACCELERATION = 300
|
||||
MIN_LIMIT = -100
|
||||
MAX_LIMIT = 100
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
|
||||
[JOINT_2]
|
||||
TYPE = LINEAR
|
||||
HOME = 0
|
||||
MAX_VELOCITY = 20
|
||||
MAX_ACCELERATION = 300
|
||||
MIN_LIMIT = -120
|
||||
MAX_LIMIT = 120
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
|
||||
[JOINT_3]
|
||||
TYPE = ANGULAR
|
||||
HOME = 0
|
||||
MAX_VELOCITY = 30
|
||||
MAX_ACCELERATION = 300
|
||||
MIN_LIMIT = -100
|
||||
MAX_LIMIT = 50
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
|
||||
[JOINT_4]
|
||||
TYPE = ANGULAR
|
||||
HOME = 0
|
||||
MAX_VELOCITY = 30
|
||||
MAX_ACCELERATION = 300
|
||||
MIN_LIMIT = -36000
|
||||
MAX_LIMIT = 36000
|
||||
HOME_SEARCH_VEL = 0
|
||||
HOME_SEQUENCE = 0
|
||||
Reference in New Issue
Block a user