按规划持续工作

结论:已将 vendored LinuxCNC xyzab-tdr-demo.ngc 纳入五轴 table-dual-rotary remap/tool-table/file 执行 baseline,native、Node WASM 和 browser 均通过同源验证;TDR 按 LinuxCNC INI 的两个 REMAP 验证,未实现自有 M 码或运动学语义。
This commit is contained in:
2026-06-08 18:48:20 +08:00
parent 4cd01deafb
commit 1a584786fc
7 changed files with 199 additions and 23 deletions

View File

@@ -154,6 +154,30 @@
return wasmDir;
}
async function writeFiveAxisTdrMachineFiles(interp) {
const sourceDir =
"../../vendor/linuxcnc/configs/sim/axis/vismach/5axis/table-dual-rotary";
const wasmDir = "/work/browser-fiveaxis/table-dual-rotary";
const remapFiles = ["428remap.ngc", "429remap.ngc"];
await writeFetchedTextFile(interp, `${sourceDir}/xyzab-tdr.ini`, `${wasmDir}/xyzab-tdr.ini`);
await writeFetchedTextFile(interp, `${sourceDir}/xyzab-tdr.tbl`, `${wasmDir}/xyzab-tdr.tbl`);
for (const filename of remapFiles) {
await writeFetchedTextFile(
interp,
`${sourceDir}/remap_subs/${filename}`,
`${wasmDir}/remap_subs/${filename}`,
);
}
await writeFetchedTextFile(
interp,
`${sourceDir}/demos/xyzab-tdr-demo.ngc`,
`${wasmDir}/demos/xyzab-tdr-demo.ngc`,
);
return wasmDir;
}
async function verifyRejects(fixtureName, operation, expectedPattern) {
try {
await operation();
@@ -480,6 +504,30 @@
"fiveaxis_linuxcnc_remap_file_execute=1",
].join("\n"),
);
const fiveAxisTdrDir = await writeFiveAxisTdrMachineFiles(interp);
verifyExpectedOutput(
"browser_fiveaxis_xyzab_tdr_demo",
interp.runFiveAxisRemapFile(
`${fiveAxisTdrDir}/demos/xyzab-tdr-demo.ngc`,
`${fiveAxisTdrDir}/xyzab-tdr.ini`,
),
[
"fiveaxis_ini_open=1",
"fiveaxis_tool_table_load=0",
"fiveaxis_parse_remap_1=0",
"fiveaxis_parse_remap_2=0",
"fiveaxis_parsed_remap_count=2",
"fiveaxis_remaps_ready=1",
"fiveaxis_file_open=0",
"fiveaxis_file_read_count=97",
"fiveaxis_file_execute_count=97",
"fiveaxis_file_finish_count=3",
"fiveaxis_file_final_rc=1",
"fiveaxis_file_reached_exit=1",
"fiveaxis_hal_switchkins: rc=0 found=1 value=1",
"fiveaxis_linuxcnc_remap_file_execute=1",
].join("\n"),
);
verifyExpectedOutput(
"restore_parameters_missing_file",

View File

@@ -302,6 +302,14 @@ grep -Fq "xyzbc_trt_M428_execute_1=0" "$FIVEAXIS_REMAP_EXECUTE_STDOUT"
grep -Fq "xyzbc_trt_M430_execute_0=2" "$FIVEAXIS_REMAP_EXECUTE_STDOUT"
grep -Fq "xyzbc_trt_M430_execute_1=0" "$FIVEAXIS_REMAP_EXECUTE_STDOUT"
grep -Fq "xyzbc_trt_linuxcnc_remap_execute_path=1" "$FIVEAXIS_REMAP_EXECUTE_STDOUT"
grep -Fq "xyzab_tdr_ini_open=1" "$FIVEAXIS_REMAP_EXECUTE_STDOUT"
grep -Fq "xyzab_tdr_parsed_remap_count=2" "$FIVEAXIS_REMAP_EXECUTE_STDOUT"
grep -Fq "xyzab_tdr_remaps_ready=1" "$FIVEAXIS_REMAP_EXECUTE_STDOUT"
grep -Fq "xyzab_tdr_M429_execute_0=2" "$FIVEAXIS_REMAP_EXECUTE_STDOUT"
grep -Fq "xyzab_tdr_M429_execute_1=0" "$FIVEAXIS_REMAP_EXECUTE_STDOUT"
grep -Fq "xyzab_tdr_M428_execute_0=2" "$FIVEAXIS_REMAP_EXECUTE_STDOUT"
grep -Fq "xyzab_tdr_M428_execute_1=0" "$FIVEAXIS_REMAP_EXECUTE_STDOUT"
grep -Fq "xyzab_tdr_linuxcnc_remap_execute_path=1" "$FIVEAXIS_REMAP_EXECUTE_STDOUT"
grep -Fq "xyzac_trt_xyzac_switchkins_file_open=0" "$FIVEAXIS_REMAP_EXECUTE_STDOUT"
grep -Fq "xyzac_trt_xyzac_switchkins_file_read_count=620" "$FIVEAXIS_REMAP_EXECUTE_STDOUT"
grep -Fq "xyzac_trt_xyzac_switchkins_file_execute_count=620" "$FIVEAXIS_REMAP_EXECUTE_STDOUT"
@@ -358,6 +366,14 @@ grep -Fq "xyzac_trt_impeller_7bl_xyzac_file_final_rc=1" "$FIVEAXIS_REMAP_EXECUTE
grep -Fq "xyzac_trt_impeller_7bl_xyzac_file_reached_exit=1" "$FIVEAXIS_REMAP_EXECUTE_STDOUT"
grep -Fq "xyzac_trt_impeller_7bl_xyzac__hal[motion.switchkins-type]: rc=0 found=1 value=0" "$FIVEAXIS_REMAP_EXECUTE_STDOUT"
grep -Fq "xyzac_trt_impeller_7bl_xyzac_linuxcnc_demo_file_execute=1" "$FIVEAXIS_REMAP_EXECUTE_STDOUT"
grep -Fq "xyzab_tdr_xyzab_tdr_demo_file_open=0" "$FIVEAXIS_REMAP_EXECUTE_STDOUT"
grep -Fq "xyzab_tdr_xyzab_tdr_demo_file_read_count=97" "$FIVEAXIS_REMAP_EXECUTE_STDOUT"
grep -Fq "xyzab_tdr_xyzab_tdr_demo_file_execute_count=97" "$FIVEAXIS_REMAP_EXECUTE_STDOUT"
grep -Fq "xyzab_tdr_xyzab_tdr_demo_file_finish_count=3" "$FIVEAXIS_REMAP_EXECUTE_STDOUT"
grep -Fq "xyzab_tdr_xyzab_tdr_demo_file_final_rc=1" "$FIVEAXIS_REMAP_EXECUTE_STDOUT"
grep -Fq "xyzab_tdr_xyzab_tdr_demo_file_reached_exit=1" "$FIVEAXIS_REMAP_EXECUTE_STDOUT"
grep -Fq "xyzab_tdr_xyzab_tdr_demo__hal[motion.switchkins-type]: rc=0 found=1 value=1" "$FIVEAXIS_REMAP_EXECUTE_STDOUT"
grep -Fq "xyzab_tdr_xyzab_tdr_demo_linuxcnc_demo_file_execute=1" "$FIVEAXIS_REMAP_EXECUTE_STDOUT"
grep -Fq "fiveaxis_linuxcnc_remap_execute_path=1" "$FIVEAXIS_REMAP_EXECUTE_STDOUT"
NAMEDPARAM_STDOUT="$BUILD_DIR/linuxcnc_namedparam_harness.run.stdout.log"

View File

@@ -137,6 +137,31 @@ function writeFiveAxisTrtMachineFiles() {
return wasmDir;
}
function writeFiveAxisTdrMachineFiles() {
const sourceDir = resolve(
rootDir,
"vendor/linuxcnc/configs/sim/axis/vismach/5axis/table-dual-rotary",
);
const wasmDir = "/work/fiveaxis/table-dual-rotary";
writeVendorTextFile(resolve(sourceDir, "xyzab-tdr.ini"), `${wasmDir}/xyzab-tdr.ini`);
writeVendorTextFile(resolve(sourceDir, "xyzab-tdr.tbl"), `${wasmDir}/xyzab-tdr.tbl`);
for (const filename of readdirSync(resolve(sourceDir, "remap_subs"))) {
if (filename.endsWith(".ngc")) {
writeVendorTextFile(
resolve(sourceDir, "remap_subs", filename),
`${wasmDir}/remap_subs/${filename}`,
);
}
}
writeVendorTextFile(
resolve(sourceDir, "demos/xyzab-tdr-demo.ngc"),
`${wasmDir}/demos/xyzab-tdr-demo.ngc`,
);
return wasmDir;
}
const namedParamIniPath = "/work/namedparams.ini";
interp.writeTextFile(
namedParamIniPath,
@@ -469,6 +494,31 @@ verifyExpectedOutput(
].join("\n"),
);
const fiveAxisTdrDir = writeFiveAxisTdrMachineFiles();
verifyExpectedOutput(
"fiveaxis_xyzab_tdr_demo_wasm",
interp.runFiveAxisRemapFile(
`${fiveAxisTdrDir}/demos/xyzab-tdr-demo.ngc`,
`${fiveAxisTdrDir}/xyzab-tdr.ini`,
),
[
"fiveaxis_ini_open=1",
"fiveaxis_tool_table_load=0",
"fiveaxis_parse_remap_1=0",
"fiveaxis_parse_remap_2=0",
"fiveaxis_parsed_remap_count=2",
"fiveaxis_remaps_ready=1",
"fiveaxis_file_open=0",
"fiveaxis_file_read_count=97",
"fiveaxis_file_execute_count=97",
"fiveaxis_file_finish_count=3",
"fiveaxis_file_final_rc=1",
"fiveaxis_file_reached_exit=1",
"fiveaxis_hal_switchkins: rc=0 found=1 value=1",
"fiveaxis_linuxcnc_remap_file_execute=1",
].join("\n"),
);
const parameterFilePath = "/work/rs274ngc.var";
interp.writeTextFile(
parameterFilePath,