按规划持续工作

结论:WASM interpreter 已链接 vendored LinuxCNC interp_remap.cc,并通过 SDK C ABI 运行 vendored xyzac/xyzbc switchkins remap demo;Node/host/browser smoke 均通过,未新增 JavaScript M428/M429/M430 或运动学语义。
This commit is contained in:
2026-06-08 18:04:09 +08:00
parent 567f72d35f
commit 149095274c
7 changed files with 292 additions and 15 deletions

View File

@@ -1,4 +1,4 @@
import { readFileSync } from "node:fs";
import { readdirSync, readFileSync } from "node:fs";
import { fileURLToPath } from "node:url";
import { dirname, resolve } from "node:path";
import assert from "node:assert/strict";
@@ -88,6 +88,41 @@ const interp = await createLinuxCncInterpSdk({
},
});
function writeVendorTextFile(sourcePath, wasmPath) {
interp.writeTextFile(wasmPath, readFileSync(sourcePath, "utf8"));
}
function writeFiveAxisTrtMachineFiles() {
const sourceDir = resolve(
rootDir,
"vendor/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting",
);
const wasmDir = "/work/fiveaxis/table-rotary-tilting";
writeVendorTextFile(resolve(sourceDir, "xyzac-trt.ini"), `${wasmDir}/xyzac-trt.ini`);
writeVendorTextFile(resolve(sourceDir, "xyzbc-trt.ini"), `${wasmDir}/xyzbc-trt.ini`);
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/xyzac_switchkins.ngc"),
`${wasmDir}/demos/xyzac_switchkins.ngc`,
);
writeVendorTextFile(
resolve(sourceDir, "demos/xyzbc_switchkins.ngc"),
`${wasmDir}/demos/xyzbc_switchkins.ngc`,
);
return wasmDir;
}
const namedParamIniPath = "/work/namedparams.ini";
interp.writeTextFile(
namedParamIniPath,
@@ -303,6 +338,54 @@ verifyExpectedOutput(
).trimEnd(),
);
const fiveAxisTrtDir = writeFiveAxisTrtMachineFiles();
verifyExpectedOutput(
"fiveaxis_xyzac_switchkins_wasm",
interp.runFiveAxisRemapFile(
`${fiveAxisTrtDir}/demos/xyzac_switchkins.ngc`,
`${fiveAxisTrtDir}/xyzac-trt.ini`,
),
[
"fiveaxis_ini_open=1",
"fiveaxis_parse_remap_1=0",
"fiveaxis_parse_remap_2=0",
"fiveaxis_parse_remap_3=0",
"fiveaxis_parsed_remap_count=3",
"fiveaxis_remaps_ready=1",
"fiveaxis_file_open=0",
"fiveaxis_file_read_count=620",
"fiveaxis_file_execute_count=620",
"fiveaxis_file_finish_count=21",
"fiveaxis_file_final_rc=1",
"fiveaxis_file_reached_exit=1",
"fiveaxis_hal_switchkins: rc=0 found=1 value=0",
"fiveaxis_linuxcnc_remap_file_execute=1",
].join("\n"),
);
verifyExpectedOutput(
"fiveaxis_xyzbc_switchkins_wasm",
interp.runFiveAxisRemapFile(
`${fiveAxisTrtDir}/demos/xyzbc_switchkins.ngc`,
`${fiveAxisTrtDir}/xyzbc-trt.ini`,
),
[
"fiveaxis_ini_open=1",
"fiveaxis_parse_remap_1=0",
"fiveaxis_parse_remap_2=0",
"fiveaxis_parse_remap_3=0",
"fiveaxis_parsed_remap_count=3",
"fiveaxis_remaps_ready=1",
"fiveaxis_file_open=0",
"fiveaxis_file_read_count=620",
"fiveaxis_file_execute_count=620",
"fiveaxis_file_finish_count=21",
"fiveaxis_file_final_rc=1",
"fiveaxis_file_reached_exit=1",
"fiveaxis_hal_switchkins: rc=0 found=1 value=0",
"fiveaxis_linuxcnc_remap_file_execute=1",
].join("\n"),
);
const parameterFilePath = "/work/rs274ngc.var";
interp.writeTextFile(
parameterFilePath,