完善虚拟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

@@ -34,6 +34,7 @@ import {
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel,
VIRTUAL_HAL_COMMAND_SCRIPT_FIXTURES,
VIRTUAL_HAL_COVERAGE_STATES,
VIRTUAL_HAL_MOTION_CONTROLLER_MATRIX_FIXTURES,
VIRTUAL_HAL_PROJECT_PIN_GROUPS,
VIRTUAL_HAL_SIM_CONFIG_SOURCE_TARGETS,
VIRTUAL_HAL_SOURCE_DERIVED_CAPABILITIES,
@@ -50,6 +51,7 @@ import {
createLinuxCncInterpSdk,
createLinuxCncVirtualHalRuntime,
createVirtualHalIntegrityReport,
createVirtualHalMotionControllerMatrixReport,
createMachineSessionSnapshotPayload,
createVirtualHalSessionPayload,
createMachineSessionPersistenceDisplayViewModel,
@@ -233,6 +235,7 @@ const requiredExports = [
["createVirtualHalBridgeReadiness", createVirtualHalBridgeReadiness],
["createVirtualHalCommandScriptFixtureReport", createVirtualHalCommandScriptFixtureReport],
["createVirtualHalIntegrityReport", createVirtualHalIntegrityReport],
["createVirtualHalMotionControllerMatrixReport", createVirtualHalMotionControllerMatrixReport],
["createVirtualHalPinInventory", createVirtualHalPinInventory],
["createVirtualHalPinRegistry", createVirtualHalPinRegistry],
["createVirtualHalProjectReport", createVirtualHalProjectReport],
@@ -501,6 +504,8 @@ assert.match(sdkIndexText, /\bVIRTUAL_HAL_WASM_BRIDGE_FUNCTIONS\b/);
assert.match(sdkReadmeText, /\bVIRTUAL_HAL_WASM_BRIDGE_FUNCTIONS\b/);
assert.match(sdkIndexText, /\bVIRTUAL_HAL_COMMAND_SCRIPT_FIXTURES\b/);
assert.match(sdkReadmeText, /\bVIRTUAL_HAL_COMMAND_SCRIPT_FIXTURES\b/);
assert.match(sdkIndexText, /\bVIRTUAL_HAL_MOTION_CONTROLLER_MATRIX_FIXTURES\b/);
assert.match(sdkReadmeText, /\bVIRTUAL_HAL_MOTION_CONTROLLER_MATRIX_FIXTURES\b/);
assert.match(sdkIndexText, /\bVIRTUAL_HAL_PROJECT_PIN_GROUPS\b/);
assert.match(sdkReadmeText, /\bVIRTUAL_HAL_PROJECT_PIN_GROUPS\b/);
assert.match(sdkIndexText, /\bVIRTUAL_HAL_SIM_CONFIG_SOURCE_TARGETS\b/);
@@ -519,6 +524,8 @@ assert.match(sdkIndexText, /\bexecuteVirtualHalcmd\b/);
assert.match(sdkReadmeText, /\bexecuteVirtualHalcmd\b/);
assert.match(sdkIndexText, /\bcreateVirtualHalCommandScriptFixtureReport\b/);
assert.match(sdkReadmeText, /\bcreateVirtualHalCommandScriptFixtureReport\b/);
assert.match(sdkIndexText, /\bcreateVirtualHalMotionControllerMatrixReport\b/);
assert.match(sdkReadmeText, /\bcreateVirtualHalMotionControllerMatrixReport\b/);
assert.match(sdkIndexText, /\bstepVirtualHalMotion\b/);
assert.match(sdkReadmeText, /\bstepVirtualHalMotion\b/);
assert.match(sdkIndexText, /\bstepVirtualHalMotionController\b/);
@@ -644,6 +651,19 @@ for (const action of ["setp", "sets", "net", "show", "getp", "gets", "loadrt", "
assert.equal(commandScriptFixtureReport.coveredActions.includes(action), true);
}
assert.equal(virtualHalRuntime.getCommandScriptFixtureReport().complete, true);
assert.equal(VIRTUAL_HAL_MOTION_CONTROLLER_MATRIX_FIXTURES.length >= 3, true);
const motionControllerMatrixReport = createVirtualHalMotionControllerMatrixReport();
assert.equal(motionControllerMatrixReport.apiName, "linuxcnc-wasm-virtual-hal-motion-controller-matrix-report");
assert.equal(motionControllerMatrixReport.complete, true);
assert.equal(motionControllerMatrixReport.webSimulationSatisfied, true);
assert.equal(motionControllerMatrixReport.missingFixtures.length, 0);
assert.equal(motionControllerMatrixReport.sourceFiles.includes("linuxcnc/src/emc/motion/motion.c"), true);
assert.equal(motionControllerMatrixReport.sourceFiles.includes("linuxcnc/src/emc/motion/axis.c"), true);
assert.equal(motionControllerMatrixReport.requiredPins.includes("motion.distance-to-go"), true);
assert.equal(motionControllerMatrixReport.requiredPins.includes("motion.in-position"), true);
assert.equal(motionControllerMatrixReport.rows.some(({ id, inPosition }) => id === "xyz-multi-axis-in-position" && inPosition === true), true);
assert.equal(motionControllerMatrixReport.rows.every(({ axisFeedbackRows }) => axisFeedbackRows.every(({ matched }) => matched)), true);
assert.equal(virtualHalRuntime.getMotionControllerMatrixReport().complete, true);
const steppedVirtualHal = stepVirtualHalMotion(virtualHalRuntime.getState(), {
target: { x: 3 },
maxVelocity: 10,
@@ -688,6 +708,7 @@ assert.equal(replacementReport.sourceCompliance.complete, true);
assert.equal(replacementReport.sourceCompliance.webSimulationSatisfied, true);
assert.equal(replacementReport.simConfigSourceCoverage.complete, true);
assert.equal(replacementReport.commandScriptFixtures.complete, true);
assert.equal(replacementReport.motionControllerMatrix.complete, true);
assert.equal(virtualHalRuntime.getSimulationReplacementReport().ready, true);
const simConfigSourceCoverageReport = createVirtualHalSimConfigSourceCoverageReport({ manifestText: sourceManifestText });
assert.equal(simConfigSourceCoverageReport.apiName, "linuxcnc-wasm-virtual-hal-sim-config-source-coverage-report");
@@ -715,6 +736,7 @@ assert.equal(sourceComplianceReport.sourceFiles.includes("linuxcnc/src/emc/motio
assert.equal(sourceComplianceReport.sourceFiles.includes("linuxcnc/configs/sim/axis/foam/axis_foam.ini"), true);
assert.equal(sourceComplianceReport.simConfigSourceCoverage.complete, true);
assert.equal(sourceComplianceReport.commandScriptFixtures.complete, true);
assert.equal(sourceComplianceReport.motionControllerMatrix.complete, true);
assert.equal(virtualHalRuntime.getSourceComplianceReport().complete, true);
const virtualHalSessionPayload = createVirtualHalSessionPayload(virtualHalRuntime.getState(), {
simConfigSourceCoverage: simConfigSourceCoverageReport,
@@ -744,13 +766,16 @@ const browserDiagnosticsArtifactValidation = createProjectReleaseBrowserDiagnost
virtualHalSourceCompliance: sourceComplianceReport,
virtualHalSimConfigSourceCoverage: simConfigSourceCoverageReport,
virtualHalCommandScriptFixtures: commandScriptFixtureReport,
virtualHalMotionControllerMatrix: motionControllerMatrixReport,
});
assert.equal(browserDiagnosticsArtifactValidation.apiName, "project-release-browser-diagnostics-artifact-validation");
assert.equal(browserDiagnosticsArtifactValidation.ready, true);
assert.equal(browserDiagnosticsArtifactValidation.sourceComplianceReady, true);
assert.equal(browserDiagnosticsArtifactValidation.simConfigSourceCoverageReady, true);
assert.equal(browserDiagnosticsArtifactValidation.commandScriptFixturesReady, true);
assert.equal(browserDiagnosticsArtifactValidation.motionControllerMatrixReady, true);
assert.equal(browserDiagnosticsArtifactValidation.sourceFiles.includes("linuxcnc/src/hal/utils/halcmd_commands.cc"), true);
assert.equal(browserDiagnosticsArtifactValidation.sourceFiles.includes("linuxcnc/src/emc/motion/axis.c"), true);
const runtimeProjectReport = virtualHalRuntime.getProjectReport({ availableFunctions: VIRTUAL_HAL_WASM_BRIDGE_FUNCTIONS });
assert.equal(runtimeProjectReport.simulationRuntime.replacesHostRuntimeForSimulation, true);
assert.equal(runtimeProjectReport.systemCoverage.unclassifiedSnapshotPins.length, 0);