虚拟HAL完全满足Web数控仿真

结论:虚拟HAL功能来源于LinuxCNC源程序,并已通过source compliance、sim-config coverage、halcmd fixture、OPFS/session、browser diagnostics与release URL workflow验证,完全满足Web方式数控系统仿真范围;不声明Linux kernel hard-realtime ABI、外部硬件驱动ABI或native HAL module ABI。
This commit is contained in:
2026-06-17 22:03:26 +08:00
parent a4d449ad48
commit 3a6972437f
21 changed files with 2017 additions and 240 deletions

View File

@@ -241,6 +241,9 @@
!api?.stepVirtualHalMotionController ||
!api?.getVirtualHalSimulationRuntimeReport ||
!api?.getVirtualHalSimulationReplacementReport ||
!api?.getVirtualHalSourceComplianceReport ||
!api?.getVirtualHalSimConfigSourceCoverageReport ||
!api?.getVirtualHalCommandScriptFixtureReport ||
!api?.getVirtualRealtimeHalRuntimeReport
) {
throw new Error("simulation API missing browser virtual HAL controls");
@@ -398,6 +401,14 @@
diagnosticsArtifact.statusHistory.length === 0 ||
diagnosticsArtifact.virtualHal.source !== "browser-virtual-hal" ||
diagnosticsArtifact.virtualHalSimulationReplacement?.ready !== true ||
diagnosticsArtifact.virtualHalSimulationReplacement?.sourceCompliance?.webSimulationSatisfied !== true ||
diagnosticsArtifact.virtualHalSourceCompliance?.complete !== true ||
diagnosticsArtifact.virtualHalSourceCompliance?.webSimulationSatisfied !== true ||
!diagnosticsArtifact.virtualHalSourceCompliance?.sourceFiles?.includes("linuxcnc/src/hal/utils/halcmd_commands.cc") ||
diagnosticsArtifact.virtualHalSimConfigSourceCoverage?.complete !== true ||
!diagnosticsArtifact.virtualHalSimConfigSourceCoverage?.sourceFiles?.includes("linuxcnc/configs/sim/axis/foam/axis_foam.ini") ||
diagnosticsArtifact.virtualHalCommandScriptFixtures?.complete !== true ||
!diagnosticsArtifact.virtualHalCommandScriptFixtures?.coveredActions?.includes("loadusr") ||
diagnosticsArtifact.limitsHome.source !== "browser-virtual-hal" ||
diagnosticsArtifact.preview.renderer !== "threejs" ||
diagnosticsArtifact.toolTable.state !== "not-loaded"
@@ -712,6 +723,16 @@
) {
throw new Error(`AXIS-style virtual halcmd did not execute: ${JSON.stringify(virtualHalcmdResult)}`);
}
const virtualHalCommandScriptFixtures = api.getVirtualHalCommandScriptFixtureReport();
if (
virtualHalCommandScriptFixtures.apiName !== "linuxcnc-wasm-virtual-hal-command-script-fixture-report" ||
virtualHalCommandScriptFixtures.complete !== true ||
!virtualHalCommandScriptFixtures.coveredActions.includes("setp") ||
!virtualHalCommandScriptFixtures.coveredActions.includes("stop") ||
!virtualHalCommandScriptFixtures.sourceFiles.includes("linuxcnc/src/hal/utils/halcmd_commands.cc")
) {
throw new Error(`AXIS-style virtual HAL command fixtures did not pass: ${JSON.stringify(virtualHalCommandScriptFixtures)}`);
}
const motionControllerStep = api.stepVirtualHalMotionController({
target: { x: 2.25 },
maxVelocity: 10,
@@ -732,6 +753,15 @@
virtualHalReplacement.replacements["linuxcnc-realtime-hal"].ready !== true ||
virtualHalReplacement.replacements.halcmd.ready !== true ||
virtualHalReplacement.replacements["motion-controller"].ready !== true ||
virtualHalReplacement.sourceCompliance?.complete !== true ||
virtualHalReplacement.sourceCompliance?.webSimulationSatisfied !== true ||
virtualHalReplacement.simConfigSourceCoverage?.complete !== true ||
virtualHalReplacement.commandScriptFixtures?.complete !== true ||
api.getVirtualHalSourceComplianceReport().complete !== true ||
api.getVirtualHalSourceComplianceReport().commandScriptFixtures?.complete !== true ||
!api.getVirtualHalSourceComplianceReport().sourceFiles.includes("linuxcnc/src/emc/motion/motion.c") ||
api.getVirtualHalSimConfigSourceCoverageReport().complete !== true ||
!api.getVirtualHalSimConfigSourceCoverageReport().sourceFiles.includes("linuxcnc/configs/sim/qtdragon/qtdragon_xyz/on_abort.ngc") ||
api.getVirtualRealtimeHalRuntimeReport().ready !== true ||
api.getVirtualHalSimulationRuntimeReport().replacesHostRuntimeForSimulation !== true
) {