虚拟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:
@@ -252,7 +252,7 @@
|
||||
if (!api?.getMachineSessionLoadState || !api?.loadReadyMachineSession) {
|
||||
throw new Error("simulation API missing AXIS machine/session load controls");
|
||||
}
|
||||
if (!api?.getVirtualHalSessionState || !api?.saveVirtualHalSessionSnapshot || !api?.restoreVirtualHalSessionSnapshot) {
|
||||
if (!api?.getVirtualHalSessionState || !api?.saveVirtualHalSessionSnapshot || !api?.restoreVirtualHalSessionSnapshot || !api?.exportVirtualHalSessionDiagnosticsArtifact) {
|
||||
throw new Error("simulation API missing virtual HAL session persistence controls");
|
||||
}
|
||||
if (!api?.getRunMode || !api?.getRunControlState || !api?.setUseLoadedSession || !api?.getRunSummary) {
|
||||
@@ -747,11 +747,29 @@
|
||||
savedVirtualHalSession.revision < virtualHalcmdResult.state.revision ||
|
||||
!savedVirtualHalSession.snapshot?.payload?.virtualHal?.sourceCompliance?.complete ||
|
||||
!savedVirtualHalSession.snapshot?.payload?.virtualHal?.motionControllerMatrix?.complete ||
|
||||
savedVirtualHalSession.releaseDiagnosticsReady !== true ||
|
||||
savedVirtualHalSession.sessionDiagnostics?.ready !== true ||
|
||||
savedVirtualHalSession.sessionDiagnostics?.validation?.ready !== true ||
|
||||
savedVirtualHalSession.sessionDiagnostics?.validation?.motionControllerMatrixReady !== true ||
|
||||
savedVirtualHalSession.sessionDiagnostics?.diagnosticsArtifact?.virtualHalMotionControllerMatrix?.complete !== true ||
|
||||
doc.body.dataset.virtualHalSessionPhase !== "saved" ||
|
||||
!doc.querySelector("[data-virtual-hal-session-status]")?.textContent.includes("Saved HAL session")
|
||||
) {
|
||||
throw new Error(`AXIS-style virtual HAL session save failed: ${JSON.stringify(savedVirtualHalSession)}`);
|
||||
}
|
||||
const savedSessionDiagnosticsArtifact = api.exportVirtualHalSessionDiagnosticsArtifact();
|
||||
const diagnosticsWithSavedSession = api.exportDiagnosticsArtifact();
|
||||
if (
|
||||
savedSessionDiagnosticsArtifact.ready !== true ||
|
||||
savedSessionDiagnosticsArtifact.phase !== "release-ready" ||
|
||||
savedSessionDiagnosticsArtifact.sessionId !== "axis-browser-virtual-hal-session" ||
|
||||
savedSessionDiagnosticsArtifact.validation?.ready !== true ||
|
||||
diagnosticsWithSavedSession.virtualHalSessionDiagnostics?.ready !== true ||
|
||||
diagnosticsWithSavedSession.virtualHalSessionDiagnostics?.validation?.ready !== true ||
|
||||
diagnosticsWithSavedSession.virtualHalSessionDiagnostics?.diagnosticsArtifact?.virtualHalSourceCompliance?.complete !== true
|
||||
) {
|
||||
throw new Error(`AXIS-style virtual HAL session diagnostics did not become release-ready: ${JSON.stringify(diagnosticsWithSavedSession.virtualHalSessionDiagnostics)}`);
|
||||
}
|
||||
api.executeVirtualHalcmd("setp axis.x.pos-cmd 9.5\nloadusr post-save-component");
|
||||
if (api.readVirtualHalPin("axis.x.pos-cmd")?.value !== 9.5) {
|
||||
throw new Error("AXIS-style virtual HAL pre-restore mutation did not apply");
|
||||
@@ -766,6 +784,9 @@
|
||||
api.readVirtualHalPin("axis.x.pos-cmd")?.value !== 1.75 ||
|
||||
api.getVirtualHalState().hal.loadedComponents.some(({ component }) => component === "post-save-component") ||
|
||||
!api.getVirtualHalState().hal.functions.some(({ name }) => name === "motion-controller") ||
|
||||
restoredVirtualHalSession.releaseDiagnosticsReady !== true ||
|
||||
restoredVirtualHalSession.sessionDiagnostics?.ready !== true ||
|
||||
restoredVirtualHalSession.sessionDiagnostics?.validation?.ready !== true ||
|
||||
doc.body.dataset.virtualHalSessionPhase !== "restored" ||
|
||||
!doc.querySelector("[data-virtual-hal-session-status]")?.textContent.includes("Restored HAL session")
|
||||
) {
|
||||
|
||||
Reference in New Issue
Block a user