按规划继续工作
结论:接入 LinuxCNC iniFindBool 到 INI WASM/SDK,并让 machine-session bridge 通过 vendored INI 解析 [EMCIO]RANDOM_TOOLCHANGER 后透传给 tooldata;native、WASM、OPFS 和浏览器 smoke 验证已通过。
This commit is contained in:
@@ -7,7 +7,10 @@
|
||||
<body>
|
||||
<pre id="status">running</pre>
|
||||
<script type="module">
|
||||
import { createLinuxCncInterpSdk } from "../../runtime/sdk/src/index.js";
|
||||
import {
|
||||
createLinuxCncIniSdk,
|
||||
createLinuxCncInterpSdk,
|
||||
} from "../../runtime/sdk/src/index.js";
|
||||
import {
|
||||
saveMachineParametersToOpfs,
|
||||
} from "../../runtime/opfs/linuxcnc-parameter-bridge.js";
|
||||
@@ -68,6 +71,18 @@
|
||||
console.error(message);
|
||||
},
|
||||
});
|
||||
const ini = await createLinuxCncIniSdk({
|
||||
locateFile(path) {
|
||||
if (path === "linuxcnc_ini.wasm") {
|
||||
return "../../runtime/ui/ini-panel/linuxcnc_ini.wasm";
|
||||
}
|
||||
return path;
|
||||
},
|
||||
print() {},
|
||||
printErr(message) {
|
||||
console.error(message);
|
||||
},
|
||||
});
|
||||
|
||||
for (const fixtureName of INTERP_BROWSER_MDI_FIXTURES) {
|
||||
const programText = await fetchText(`../fixtures/gcode/${fixtureName}.ngc`);
|
||||
@@ -236,7 +251,14 @@
|
||||
);
|
||||
|
||||
await saveMachineTextFiles("browser-random-toolchanger", {
|
||||
ini: "[EMC]\nMACHINE = browser-random-toolchanger\n",
|
||||
ini: [
|
||||
"[EMC]",
|
||||
"MACHINE = browser-random-toolchanger",
|
||||
"",
|
||||
"[EMCIO]",
|
||||
"RANDOM_TOOLCHANGER = yes",
|
||||
"",
|
||||
].join("\n"),
|
||||
toolTable: [
|
||||
"T2 P7 Z3.125 D1.5 I12 J34 Q4 ;browser random finish tool",
|
||||
"T5 P9 X1 Y2 Z3 ;browser random rough tool",
|
||||
@@ -255,10 +277,10 @@
|
||||
interp,
|
||||
"browser-random-toolchanger",
|
||||
{
|
||||
iniSdk: ini,
|
||||
iniWasmPath: "/work/browser-random-machine.ini",
|
||||
parameterWasmPath: "/work/browser-random-linuxcnc.var",
|
||||
toolTableWasmPath: "/work/browser-random-tool.tbl",
|
||||
randomToolChanger: true,
|
||||
},
|
||||
);
|
||||
verifyExpectedOutput(
|
||||
|
||||
@@ -12,6 +12,9 @@ fi
|
||||
if [[ "${SKIP_INTERP_BUILD:-0}" != "1" ]]; then
|
||||
"$ROOT_DIR/tools/build_wasm_core.sh"
|
||||
fi
|
||||
if [[ "${SKIP_INI_BUILD:-0}" != "1" ]]; then
|
||||
"$ROOT_DIR/tools/build_ini_panel.sh"
|
||||
fi
|
||||
|
||||
TMP_DIR="$(mktemp -d)"
|
||||
PORT_FILE="$TMP_DIR/port"
|
||||
|
||||
@@ -9,6 +9,6 @@ SKIP_INI_BUILD=1 "$ROOT_DIR/tests/wasm/node/verify_ini_wasm.sh"
|
||||
SKIP_INTERP_BUILD=1 "$ROOT_DIR/tests/wasm/node/verify_interp_wasm.sh"
|
||||
"$ROOT_DIR/tests/opfs/node/verify_file_service.sh"
|
||||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 "$ROOT_DIR/tests/browser/verify_ini_panel_browser.sh"
|
||||
SKIP_INTERP_BUILD=1 "$ROOT_DIR/tests/browser/verify_interp_browser.sh"
|
||||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 "$ROOT_DIR/tests/browser/verify_interp_browser.sh"
|
||||
|
||||
echo "host_wasm_opfs_browser_smokes=ok"
|
||||
|
||||
@@ -197,6 +197,22 @@ const bridgeInterp = {
|
||||
},
|
||||
};
|
||||
|
||||
const bridgeIniSdk = {
|
||||
writeTextFile(path, text) {
|
||||
bridgeFiles.set(`ini:${path}`, text);
|
||||
},
|
||||
getBool(path, section, tag) {
|
||||
if (
|
||||
path === "/work/ini-derived-session.ini" &&
|
||||
section === "EMCIO" &&
|
||||
tag === "RANDOM_TOOLCHANGER"
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
return null;
|
||||
},
|
||||
};
|
||||
|
||||
const restoredParameters = await restoreMachineParametersFromOpfs(
|
||||
bridgeInterp,
|
||||
"xyzab-tdr",
|
||||
@@ -314,6 +330,26 @@ assert.equal(
|
||||
"tooldata_load=0\nload_tool_path=/work/random-session-tool.tbl\nrandom_toolchanger=1\n",
|
||||
);
|
||||
|
||||
const loadedIniDerivedRandomSession = await loadMachineSessionFromOpfs(
|
||||
bridgeInterp,
|
||||
"xyzab-tdr",
|
||||
{
|
||||
storage,
|
||||
iniSdk: bridgeIniSdk,
|
||||
iniWasmPath: "/work/ini-derived-session.ini",
|
||||
parameterWasmPath: "/work/ini-derived-session.var",
|
||||
toolTableWasmPath: "/work/ini-derived-session-tool.tbl",
|
||||
},
|
||||
);
|
||||
assert.equal(
|
||||
bridgeFiles.get("ini:/work/ini-derived-session.ini"),
|
||||
"[EMC]\nMACHINE = xyzab-tdr\n",
|
||||
);
|
||||
assert.equal(
|
||||
loadedIniDerivedRandomSession.toolTable.result,
|
||||
"tooldata_load=0\nload_tool_path=/work/ini-derived-session-tool.tbl\nrandom_toolchanger=1\n",
|
||||
);
|
||||
|
||||
await assert.rejects(
|
||||
() => loadTextFile("linuxcnc/machines/missing.ini", storage),
|
||||
/missing file/,
|
||||
|
||||
@@ -30,6 +30,10 @@ COORDINATES = X Y Z A B
|
||||
[KINS]
|
||||
KINEMATICS = xyzbc-trt-kins
|
||||
JOINTS = 5
|
||||
|
||||
[EMCIO]
|
||||
RANDOM_TOOLCHANGER = ON
|
||||
NON_RANDOM_TOOLCHANGER = no
|
||||
`,
|
||||
);
|
||||
|
||||
@@ -43,6 +47,9 @@ assert.equal(
|
||||
"xyzbc-trt-kins",
|
||||
);
|
||||
assert.equal(ini.getString("/work/node-smoke.ini", "TRAJ", "MISSING"), null);
|
||||
assert.equal(ini.getBool("/work/node-smoke.ini", "EMCIO", "RANDOM_TOOLCHANGER"), true);
|
||||
assert.equal(ini.getBool("/work/node-smoke.ini", "EMCIO", "NON_RANDOM_TOOLCHANGER"), false);
|
||||
assert.equal(ini.getBool("/work/node-smoke.ini", "EMCIO", "MISSING"), null);
|
||||
|
||||
assert.deepEqual(ini.getFields("/work/node-smoke.ini", {
|
||||
machine: { section: "EMC", tag: "MACHINE" },
|
||||
|
||||
Reference in New Issue
Block a user