接入虚拟HAL会话保存恢复

结论:real simulation page 已提供显式 Save/Restore HAL Session 按钮与 browser API,使用 OPFS session snapshot 保存和恢复 virtual HAL runtime state,并随 payload 校验 source compliance、sim-config coverage、halcmd fixtures 与 motion controller matrix,证明虚拟HAL可恢复地满足Web方式数控系统仿真范围。
This commit is contained in:
2026-06-17 22:32:23 +08:00
parent 402fd41d4d
commit 0a33f0f7c1
7 changed files with 263 additions and 1 deletions

View File

@@ -10,6 +10,7 @@ import {
import {
cloneVirtualHalState,
createVirtualHalCommandScriptFixtureReport,
createVirtualHalMotionControllerMatrixReport,
createVirtualHalSimConfigSourceCoverageReport,
createVirtualHalSimulationReplacementReport,
createVirtualHalSourceComplianceReport,
@@ -66,6 +67,7 @@ function validateVirtualHalSessionPayload(virtualHal) {
assertPlainObject(virtualHal.sourceCompliance, "virtual HAL session source compliance");
assertPlainObject(virtualHal.simConfigSourceCoverage, "virtual HAL session sim-config source coverage");
assertPlainObject(virtualHal.commandScriptFixtures, "virtual HAL session command script fixtures");
assertPlainObject(virtualHal.motionControllerMatrix, "virtual HAL session motion controller matrix");
if (virtualHal.state.source !== "browser-virtual-hal") {
throw new Error(`Unsupported virtual HAL state source: ${virtualHal.state.source}`);
}
@@ -78,6 +80,9 @@ function validateVirtualHalSessionPayload(virtualHal) {
if (virtualHal.commandScriptFixtures.complete !== true) {
throw new Error("virtual HAL command script fixtures are incomplete.");
}
if (virtualHal.motionControllerMatrix.complete !== true) {
throw new Error("virtual HAL motion controller matrix is incomplete.");
}
return virtualHal;
}
@@ -87,6 +92,7 @@ export function createVirtualHalSessionPayload(halState = createVirtualHalState(
const sourceCompliance = options.sourceCompliance ?? createVirtualHalSourceComplianceReport({ halState: state });
const simConfigSourceCoverage = options.simConfigSourceCoverage ?? createVirtualHalSimConfigSourceCoverageReport(options);
const commandScriptFixtures = options.commandScriptFixtures ?? createVirtualHalCommandScriptFixtureReport({ ...options, halState: state });
const motionControllerMatrix = options.motionControllerMatrix ?? createVirtualHalMotionControllerMatrixReport(options);
return validateVirtualHalSessionPayload({
apiName: "linuxcnc-wasm-virtual-hal-session-payload",
payloadVersion: 1,
@@ -96,6 +102,7 @@ export function createVirtualHalSessionPayload(halState = createVirtualHalState(
sourceCompliance,
simConfigSourceCoverage,
commandScriptFixtures,
motionControllerMatrix,
});
}