虚拟HAL完全满足Web数控仿真
结论:real simulation page 已将保存的 virtual HAL session snapshot 联动到 release diagnostics artifact,保存或恢复后的 Web CNC 仿真会话可直接输出 release-ready virtual HAL source、sim-config、halcmd fixture 与 motion matrix evidence;该能力仍限于 Web 仿真替代层,不声明 Linux kernel hard-realtime ABI、外部硬件驱动 ABI 或 native HAL module ABI。
This commit is contained in:
@@ -1800,6 +1800,7 @@ M2
|
||||
import {
|
||||
createLinuxCncIniSdk,
|
||||
createLinuxCncInterpSdk,
|
||||
createProjectReleaseBrowserDiagnosticsArtifactValidation,
|
||||
} from "../../sdk/src/index.js";
|
||||
import {
|
||||
DEFAULT_SIMULATION_PROGRAM_ID,
|
||||
@@ -1921,6 +1922,7 @@ M2
|
||||
status: "Virtual HAL session not saved",
|
||||
revision: 0,
|
||||
restored: false,
|
||||
releaseDiagnosticsReady: false,
|
||||
};
|
||||
let machineReadinessState = {
|
||||
machineId: "axis-browser-sim",
|
||||
@@ -2613,6 +2615,7 @@ M2
|
||||
virtualHalSimConfigSourceCoverage: createVirtualHalSimConfigSourceCoverageReport(),
|
||||
virtualHalCommandScriptFixtures: createVirtualHalCommandScriptFixtureReport(),
|
||||
virtualHalMotionControllerMatrix: createVirtualHalMotionControllerMatrixReport(),
|
||||
virtualHalSessionDiagnostics: createVirtualHalSessionDiagnosticsArtifact(),
|
||||
statusHistory: getStatusHistory(),
|
||||
mdiHistory: getMdiHistory(),
|
||||
recentPrograms: getRecentPrograms(),
|
||||
@@ -2627,6 +2630,44 @@ M2
|
||||
};
|
||||
}
|
||||
|
||||
function createVirtualHalSessionDiagnosticsArtifact(snapshot = virtualHalSessionState.snapshot ?? null) {
|
||||
if (!snapshot?.payload?.virtualHal) {
|
||||
return {
|
||||
apiName: "real-browser-simulation-virtual-hal-session-diagnostics",
|
||||
artifactVersion: 1,
|
||||
ready: false,
|
||||
phase: "not-saved",
|
||||
missing: ["virtualHalSessionSnapshot"],
|
||||
};
|
||||
}
|
||||
const virtualHal = snapshot.payload.virtualHal;
|
||||
const diagnosticsArtifact = {
|
||||
apiName: "real-browser-simulation-diagnostics-artifact",
|
||||
artifactVersion: 1,
|
||||
virtualHal: virtualHal.state,
|
||||
virtualHalSimulationReplacement: virtualHal.diagnostics,
|
||||
virtualHalSourceCompliance: virtualHal.sourceCompliance,
|
||||
virtualHalSimConfigSourceCoverage: virtualHal.simConfigSourceCoverage,
|
||||
virtualHalCommandScriptFixtures: virtualHal.commandScriptFixtures,
|
||||
virtualHalMotionControllerMatrix: virtualHal.motionControllerMatrix,
|
||||
};
|
||||
const validation = createProjectReleaseBrowserDiagnosticsArtifactValidation(diagnosticsArtifact);
|
||||
return {
|
||||
apiName: "real-browser-simulation-virtual-hal-session-diagnostics",
|
||||
artifactVersion: 1,
|
||||
ready: validation.ready === true,
|
||||
phase: validation.ready === true ? "release-ready" : "blocked",
|
||||
sessionId: snapshot.sessionId,
|
||||
machineId: snapshot.payload.machineId,
|
||||
createdAt: snapshot.createdAt,
|
||||
metadata: { ...(snapshot.metadata ?? {}) },
|
||||
files: { ...(snapshot.payload.files ?? {}) },
|
||||
virtualHalRevision: virtualHal.state.revision,
|
||||
validation,
|
||||
diagnosticsArtifact,
|
||||
};
|
||||
}
|
||||
|
||||
function recordError(error, context = "runtime") {
|
||||
const message = `${context}: ${error?.message ?? error}`;
|
||||
renderDiagnostics({ lastError: message });
|
||||
@@ -3549,6 +3590,7 @@ M2
|
||||
virtualHalRevision: virtualHal.state.revision,
|
||||
},
|
||||
});
|
||||
const sessionDiagnostics = createVirtualHalSessionDiagnosticsArtifact(snapshot);
|
||||
pushStatusHistory("hal-session", `saved ${session.sessionId}/${session.filename}`);
|
||||
return setVirtualHalSessionState({
|
||||
ready: true,
|
||||
@@ -3559,6 +3601,8 @@ M2
|
||||
status: `Saved HAL session: linuxcnc/sessions/${session.sessionId}/${session.filename}`,
|
||||
revision: virtualHal.state.revision,
|
||||
restored: false,
|
||||
releaseDiagnosticsReady: sessionDiagnostics.ready === true,
|
||||
sessionDiagnostics,
|
||||
snapshot,
|
||||
});
|
||||
}
|
||||
@@ -3571,6 +3615,7 @@ M2
|
||||
virtualHalState = restoreVirtualHalStateFromSessionSnapshot(snapshot);
|
||||
renderVirtualHalState();
|
||||
renderAxisStatusbar();
|
||||
const sessionDiagnostics = createVirtualHalSessionDiagnosticsArtifact(snapshot);
|
||||
pushStatusHistory("hal-session", `restored ${session.sessionId}/${session.filename}`);
|
||||
return setVirtualHalSessionState({
|
||||
ready: true,
|
||||
@@ -3581,6 +3626,8 @@ M2
|
||||
status: `Restored HAL session: linuxcnc/sessions/${session.sessionId}/${session.filename}`,
|
||||
revision: virtualHalState.revision,
|
||||
restored: true,
|
||||
releaseDiagnosticsReady: sessionDiagnostics.ready === true,
|
||||
sessionDiagnostics,
|
||||
snapshot,
|
||||
});
|
||||
}
|
||||
@@ -3975,6 +4022,7 @@ M2
|
||||
getVirtualHalSessionState: () => ({ ...virtualHalSessionState }),
|
||||
saveVirtualHalSessionSnapshot,
|
||||
restoreVirtualHalSessionSnapshot,
|
||||
exportVirtualHalSessionDiagnosticsArtifact: () => createVirtualHalSessionDiagnosticsArtifact(),
|
||||
getRunMode: () => syncRunMode(),
|
||||
getRunControlState: () => renderRunControlState(),
|
||||
getAxisStatusbarState: () => renderAxisStatusbar(),
|
||||
|
||||
Reference in New Issue
Block a user