按规划继续工作
结论:补齐 LinuxCNC tooldata_common.cc 随机换刀器 load/save 验证边界,WASM/SDK/OPFS 只透传 random-toolchanger 配置;native、WASM、OPFS 和浏览器 smoke 验证已通过。
This commit is contained in:
@@ -235,6 +235,72 @@
|
||||
].join("\n"),
|
||||
);
|
||||
|
||||
await saveMachineTextFiles("browser-random-toolchanger", {
|
||||
ini: "[EMC]\nMACHINE = browser-random-toolchanger\n",
|
||||
toolTable: [
|
||||
"T2 P7 Z3.125 D1.5 I12 J34 Q4 ;browser random finish tool",
|
||||
"T5 P9 X1 Y2 Z3 ;browser random rough tool",
|
||||
"",
|
||||
].join("\n"),
|
||||
parameters: [
|
||||
"5161 10.5",
|
||||
"5162 20.25",
|
||||
"5220 1",
|
||||
"5221 2.25",
|
||||
"5399 44",
|
||||
"",
|
||||
].join("\n"),
|
||||
});
|
||||
const loadedRandomSession = await loadMachineSessionFromOpfs(
|
||||
interp,
|
||||
"browser-random-toolchanger",
|
||||
{
|
||||
iniWasmPath: "/work/browser-random-machine.ini",
|
||||
parameterWasmPath: "/work/browser-random-linuxcnc.var",
|
||||
toolTableWasmPath: "/work/browser-random-tool.tbl",
|
||||
randomToolChanger: true,
|
||||
},
|
||||
);
|
||||
verifyExpectedOutput(
|
||||
"opfs_load_random_tool_table",
|
||||
loadedRandomSession.toolTable.result,
|
||||
[
|
||||
"tooldata_random_toolchanger=1",
|
||||
"tooldata_load=0",
|
||||
"tool_pocket_7.toolno=2",
|
||||
"tool_pocket_7.pocketno=7",
|
||||
"tool_pocket_7.z=3.125",
|
||||
"tool_pocket_7.diameter=1.5",
|
||||
"tool_pocket_7.frontangle=12",
|
||||
"tool_pocket_7.backangle=34",
|
||||
"tool_pocket_7.orientation=4",
|
||||
"tool_pocket_7.comment=browser random finish tool",
|
||||
"tool_pocket_9.toolno=5",
|
||||
"tool_pocket_9.pocketno=9",
|
||||
"tool_index_for_tool_2=7",
|
||||
].join("\n"),
|
||||
);
|
||||
await saveMachineToolTableToOpfs(
|
||||
interp,
|
||||
"browser-random-toolchanger",
|
||||
{ wasmPath: "/work/browser-random-tool.tbl" },
|
||||
);
|
||||
const savedRandomMachineFiles = await loadMachineTextFiles(
|
||||
"browser-random-toolchanger",
|
||||
);
|
||||
verifyExpectedOutput(
|
||||
"opfs_saved_random_tool_table_text",
|
||||
savedRandomMachineFiles.toolTable,
|
||||
[
|
||||
"T2",
|
||||
"P7",
|
||||
";browser random finish tool",
|
||||
"T5",
|
||||
"P9",
|
||||
";browser random rough tool",
|
||||
].join("\n"),
|
||||
);
|
||||
|
||||
status.textContent = "browser_interp_smoke=ok";
|
||||
} catch (error) {
|
||||
status.textContent = `browser_interp_smoke=fail ${error.stack || error.message}`;
|
||||
|
||||
@@ -183,8 +183,13 @@ const bridgeInterp = {
|
||||
bridgeFiles.set(`${path}.bak`, "5161 0.0\n5162 0.0\n");
|
||||
return `save_parameters=0\nsave_path=${path}\nvalues=${Object.keys(values).join(",")}\n`;
|
||||
},
|
||||
loadToolTable(path) {
|
||||
return `tooldata_load=0\nload_tool_path=${path}\n`;
|
||||
loadToolTable(path, options = {}) {
|
||||
return [
|
||||
"tooldata_load=0",
|
||||
`load_tool_path=${path}`,
|
||||
`random_toolchanger=${options.randomToolChanger === true ? 1 : 0}`,
|
||||
"",
|
||||
].join("\n");
|
||||
},
|
||||
saveToolTable(path) {
|
||||
bridgeFiles.set(path, "T2 P2 Z+1.250000 D+0.250000 ;loaded by LinuxCNC\n");
|
||||
@@ -230,10 +235,22 @@ const loadedToolTable = await loadMachineToolTableFromOpfs(
|
||||
assert.deepEqual(loadedToolTable, {
|
||||
opfsPath: "linuxcnc/machines/xyzab-tdr/tool.tbl",
|
||||
wasmPath: "/work/bridge-tool.tbl",
|
||||
result: "tooldata_load=0\nload_tool_path=/work/bridge-tool.tbl\n",
|
||||
result: "tooldata_load=0\nload_tool_path=/work/bridge-tool.tbl\nrandom_toolchanger=0\n",
|
||||
});
|
||||
assert.equal(bridgeFiles.get("/work/bridge-tool.tbl"), "T0 P0 ; no tool\nT2 P2 Z1.25 D0.25\n");
|
||||
|
||||
const loadedRandomToolTable = await loadMachineToolTableFromOpfs(
|
||||
bridgeInterp,
|
||||
"xyzab-tdr",
|
||||
{ storage, wasmPath: "/work/random-bridge-tool.tbl", randomToolChanger: true },
|
||||
);
|
||||
assert.deepEqual(loadedRandomToolTable, {
|
||||
opfsPath: "linuxcnc/machines/xyzab-tdr/tool.tbl",
|
||||
wasmPath: "/work/random-bridge-tool.tbl",
|
||||
result:
|
||||
"tooldata_load=0\nload_tool_path=/work/random-bridge-tool.tbl\nrandom_toolchanger=1\n",
|
||||
});
|
||||
|
||||
const savedToolTable = await saveMachineToolTableToOpfs(
|
||||
bridgeInterp,
|
||||
"xyzab-tdr",
|
||||
@@ -271,7 +288,7 @@ assert.deepEqual(loadedSession, {
|
||||
toolTable: {
|
||||
opfsPath: "linuxcnc/machines/xyzab-tdr/tool.tbl",
|
||||
wasmPath: "/work/session-tool.tbl",
|
||||
result: "tooldata_load=0\nload_tool_path=/work/session-tool.tbl\n",
|
||||
result: "tooldata_load=0\nload_tool_path=/work/session-tool.tbl\nrandom_toolchanger=0\n",
|
||||
},
|
||||
});
|
||||
assert.equal(bridgeFiles.get("/work/session.ini"), "[EMC]\nMACHINE = xyzab-tdr\n");
|
||||
@@ -281,6 +298,22 @@ assert.equal(
|
||||
"T2 P2 Z+1.250000 D+0.250000 ;loaded by LinuxCNC\n",
|
||||
);
|
||||
|
||||
const loadedRandomSession = await loadMachineSessionFromOpfs(
|
||||
bridgeInterp,
|
||||
"xyzab-tdr",
|
||||
{
|
||||
storage,
|
||||
iniWasmPath: "/work/random-session.ini",
|
||||
parameterWasmPath: "/work/random-session.var",
|
||||
toolTableWasmPath: "/work/random-session-tool.tbl",
|
||||
randomToolChanger: true,
|
||||
},
|
||||
);
|
||||
assert.equal(
|
||||
loadedRandomSession.toolTable.result,
|
||||
"tooldata_load=0\nload_tool_path=/work/random-session-tool.tbl\nrandom_toolchanger=1\n",
|
||||
);
|
||||
|
||||
await assert.rejects(
|
||||
() => loadTextFile("linuxcnc/machines/missing.ini", storage),
|
||||
/missing file/,
|
||||
|
||||
@@ -256,4 +256,54 @@ assert.equal(savedToolTable.includes(";finish tool"), true);
|
||||
assert.equal(savedToolTable.includes("T5"), true);
|
||||
assert.equal(savedToolTable.includes("P9"), true);
|
||||
assert.equal(savedToolTable.includes(";rough tool"), true);
|
||||
|
||||
const randomToolTablePath = "/work/random-tool.tbl";
|
||||
interp.writeTextFile(
|
||||
randomToolTablePath,
|
||||
[
|
||||
"T2 P7 Z3.125 D1.5 I12 J34 Q4 ;random finish tool",
|
||||
"T5 P9 X1 Y2 Z3 ;random rough tool",
|
||||
"",
|
||||
].join("\n"),
|
||||
);
|
||||
verifyExpectedOutput(
|
||||
"load_tool_table_random",
|
||||
interp.loadToolTable(randomToolTablePath, { randomToolChanger: true }),
|
||||
[
|
||||
"tooldata_random_toolchanger=1",
|
||||
"tooldata_load=0",
|
||||
"tooldata_last_index=9",
|
||||
"tool_1.toolno=-1",
|
||||
"tool_2.toolno=-1",
|
||||
"tool_pocket_7.toolno=2",
|
||||
"tool_pocket_7.pocketno=7",
|
||||
"tool_pocket_7.z=3.125",
|
||||
"tool_pocket_7.diameter=1.5",
|
||||
"tool_pocket_7.frontangle=12",
|
||||
"tool_pocket_7.backangle=34",
|
||||
"tool_pocket_7.orientation=4",
|
||||
"tool_pocket_7.comment=random finish tool",
|
||||
"tool_pocket_9.toolno=5",
|
||||
"tool_pocket_9.pocketno=9",
|
||||
"tool_pocket_9.z=3",
|
||||
"tool_pocket_9.comment=random rough tool",
|
||||
"tool_index_for_tool_2=7",
|
||||
].join("\n"),
|
||||
);
|
||||
verifyExpectedOutput(
|
||||
"save_tool_table_random",
|
||||
interp.saveToolTable(randomToolTablePath),
|
||||
[
|
||||
"tooldata_save=0",
|
||||
"tool_pocket_7.toolno=2",
|
||||
"tool_pocket_9.toolno=5",
|
||||
].join("\n"),
|
||||
);
|
||||
const savedRandomToolTable = interp.readTextFile(randomToolTablePath);
|
||||
assert.equal(savedRandomToolTable.includes("T2"), true);
|
||||
assert.equal(savedRandomToolTable.includes("P7"), true);
|
||||
assert.equal(savedRandomToolTable.includes(";random finish tool"), true);
|
||||
assert.equal(savedRandomToolTable.includes("T5"), true);
|
||||
assert.equal(savedRandomToolTable.includes("P9"), true);
|
||||
assert.equal(savedRandomToolTable.includes(";random rough tool"), true);
|
||||
console.log("interp_wasm_node_smoke=ok");
|
||||
|
||||
Reference in New Issue
Block a user