完善虚拟HAL仿真替代能力
This commit is contained in:
@@ -4,7 +4,9 @@ import { dirname, resolve } from "node:path";
|
||||
import assert from "node:assert/strict";
|
||||
|
||||
import {
|
||||
applyVirtualHalAction,
|
||||
createLinuxCncInterpSdk,
|
||||
createVirtualHalState,
|
||||
planIniFileContextStaging,
|
||||
} from "../../../runtime/sdk/src/index.js";
|
||||
import {
|
||||
@@ -726,6 +728,46 @@ verifyExpectedOutput(
|
||||
].join("\n"),
|
||||
);
|
||||
|
||||
if (
|
||||
interp.hasWasmFunction("lcinterp_hal_reset") &&
|
||||
interp.hasWasmFunction("lcinterp_hal_set_value") &&
|
||||
interp.hasWasmFunction("lcinterp_probe_hal_named")
|
||||
) {
|
||||
let virtualHal = createVirtualHalState();
|
||||
virtualHal = applyVirtualHalAction(virtualHal, "estop");
|
||||
virtualHal = applyVirtualHalAction(virtualHal, "power");
|
||||
virtualHal = applyVirtualHalAction(virtualHal, "jog", { axis: "x", increment: "0.01 in", direction: 1 });
|
||||
virtualHal = applyVirtualHalAction(virtualHal, "spindle", { command: "cw", speed: 1200 });
|
||||
virtualHal = applyVirtualHalAction(virtualHal, "coolant", { name: "flood", enabled: true });
|
||||
const applyResult = interp.applyVirtualHalState(virtualHal);
|
||||
assert.equal(applyResult.apiName, "linuxcnc-wasm-hal-apply-result");
|
||||
assert.equal(applyResult.source, "browser-virtual-hal");
|
||||
assert.ok(applyResult.applied > 0, "virtual HAL bridge should apply values");
|
||||
verifyExpectedOutput(
|
||||
"probe_virtual_hal_bridge",
|
||||
[
|
||||
interp.probeHalNamed("_hal[jog.x]"),
|
||||
interp.probeHalNamed("_hal[jog.increment]"),
|
||||
interp.probeHalNamed("_hal[axisui.jog.x]"),
|
||||
interp.probeHalNamed("_hal[axisui.jog.increment]"),
|
||||
interp.probeHalNamed("_hal[axis.x.pos-cmd]"),
|
||||
interp.probeHalNamed("_hal[halui.machine.is-on]"),
|
||||
interp.probeHalNamed("_hal[spindle.0.speed-out]"),
|
||||
interp.probeHalNamed("_hal[iocontrol.0.coolant-flood]"),
|
||||
].join(""),
|
||||
[
|
||||
"_hal[jog.x]: rc=0 found=1 value=1",
|
||||
"_hal[jog.increment]: rc=0 found=1 value=0.01",
|
||||
"_hal[axisui.jog.x]: rc=0 found=1 value=1",
|
||||
"_hal[axisui.jog.increment]: rc=0 found=1 value=0.01",
|
||||
"_hal[axis.x.pos-cmd]: rc=0 found=1 value=0.01",
|
||||
"_hal[halui.machine.is-on]: rc=0 found=1 value=1",
|
||||
"_hal[spindle.0.speed-out]: rc=0 found=1 value=1200",
|
||||
"_hal[iocontrol.0.coolant-flood]: rc=0 found=1 value=1",
|
||||
].join("\n"),
|
||||
);
|
||||
}
|
||||
|
||||
for (const fixtureName of INTERP_MDI_FIXTURES) {
|
||||
const programText = readFileSync(
|
||||
resolve(rootDir, `tests/fixtures/gcode/${fixtureName}.ngc`),
|
||||
|
||||
Reference in New Issue
Block a user