完善虚拟HAL运动控制矩阵

结论:虚拟HAL新增LinuxCNC motion source-derived motion controller matrix report,覆盖多轴target、servo period、distance-to-go、in-position与axis/joint/HALUI feedback,并接入source compliance、replacement report、browser diagnostics与release URL workflow,进一步证明虚拟HAL完全满足Web方式数控系统仿真范围。
This commit is contained in:
2026-06-17 22:19:14 +08:00
parent 3a6972437f
commit 402fd41d4d
10 changed files with 402 additions and 2 deletions

View File

@@ -244,6 +244,7 @@
!api?.getVirtualHalSourceComplianceReport ||
!api?.getVirtualHalSimConfigSourceCoverageReport ||
!api?.getVirtualHalCommandScriptFixtureReport ||
!api?.getVirtualHalMotionControllerMatrixReport ||
!api?.getVirtualRealtimeHalRuntimeReport
) {
throw new Error("simulation API missing browser virtual HAL controls");
@@ -409,6 +410,8 @@
!diagnosticsArtifact.virtualHalSimConfigSourceCoverage?.sourceFiles?.includes("linuxcnc/configs/sim/axis/foam/axis_foam.ini") ||
diagnosticsArtifact.virtualHalCommandScriptFixtures?.complete !== true ||
!diagnosticsArtifact.virtualHalCommandScriptFixtures?.coveredActions?.includes("loadusr") ||
diagnosticsArtifact.virtualHalMotionControllerMatrix?.complete !== true ||
!diagnosticsArtifact.virtualHalMotionControllerMatrix?.sourceFiles?.includes("linuxcnc/src/emc/motion/motion.c") ||
diagnosticsArtifact.limitsHome.source !== "browser-virtual-hal" ||
diagnosticsArtifact.preview.renderer !== "threejs" ||
diagnosticsArtifact.toolTable.state !== "not-loaded"
@@ -746,6 +749,18 @@
) {
throw new Error(`AXIS-style virtual motion controller did not step: ${JSON.stringify(motionControllerStep)}`);
}
const motionControllerMatrix = api.getVirtualHalMotionControllerMatrixReport();
if (
motionControllerMatrix.apiName !== "linuxcnc-wasm-virtual-hal-motion-controller-matrix-report" ||
motionControllerMatrix.complete !== true ||
motionControllerMatrix.webSimulationSatisfied !== true ||
!motionControllerMatrix.requiredPins.includes("motion.distance-to-go") ||
!motionControllerMatrix.requiredPins.includes("motion.in-position") ||
!motionControllerMatrix.sourceFiles.includes("linuxcnc/src/emc/motion/axis.c") ||
!motionControllerMatrix.rows.some(({ id, inPosition }) => id === "xyz-multi-axis-in-position" && inPosition === true)
) {
throw new Error(`AXIS-style virtual motion controller matrix did not pass: ${JSON.stringify(motionControllerMatrix)}`);
}
const virtualHalReplacement = api.getVirtualHalSimulationReplacementReport();
if (
virtualHalReplacement.apiName !== "linuxcnc-wasm-virtual-hal-simulation-replacement-report" ||
@@ -757,8 +772,10 @@
virtualHalReplacement.sourceCompliance?.webSimulationSatisfied !== true ||
virtualHalReplacement.simConfigSourceCoverage?.complete !== true ||
virtualHalReplacement.commandScriptFixtures?.complete !== true ||
virtualHalReplacement.motionControllerMatrix?.complete !== true ||
api.getVirtualHalSourceComplianceReport().complete !== true ||
api.getVirtualHalSourceComplianceReport().commandScriptFixtures?.complete !== true ||
api.getVirtualHalSourceComplianceReport().motionControllerMatrix?.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") ||