接入test_mql变容气室机械反馈

This commit is contained in:
huojiarong committed 2026-07-20 09:37:40 +00:00
1 parent d4edf1ccb3
commit 958d813300
4 files changed
+109 -10

No files matched your search

+20 -2
View File
@@ -3907,8 +3907,9 @@ class TestMqlFullStateClosure:
def snapshot(self, state_vector: list[float] | None = None) -> TestMqlFullStateSnapshot:
values = self.initial_state_vector() if state_vector is None else list(state_vector)
pneumatic_state, mechanical_state = self._split_state(values)
pneumatic_snapshot = self.pneumatic_closure.snapshot(pneumatic_state)
mechanical_snapshot = self.mechanical_closure.snapshot(mechanical_state)
self._sync_variable_chamber_kinematics(mechanical_snapshot)
pneumatic_snapshot = self.pneumatic_closure.snapshot(pneumatic_state)
return TestMqlFullStateSnapshot(
pneumatic=pneumatic_snapshot,
mechanical=mechanical_snapshot,
@@ -3925,8 +3926,9 @@ class TestMqlFullStateClosure:
def rhs_at(self, time_s: float, state_vector: list[float]) -> list[float]:
pneumatic_state, mechanical_state = self._split_state(list(state_vector))
pneumatic_snapshot = self.pneumatic_closure.snapshot(pneumatic_state)
mechanical_snapshot = self.mechanical_closure.snapshot(mechanical_state)
self._sync_variable_chamber_kinematics(mechanical_snapshot)
pneumatic_snapshot = self.pneumatic_closure.snapshot(pneumatic_state)
return [
*self.pneumatic_closure.rhs(pneumatic_state),
*self.mechanical_closure.rhs(
@@ -3943,6 +3945,22 @@ class TestMqlFullStateClosure:
),
]
def _sync_variable_chamber_kinematics(self, mechanical_snapshot: object) -> None:
for _mass_alias, piston_alias, chamber_field in _PISTON_FORCE_BINDINGS:
piston = self.mechanical_closure.assembly.pistons[piston_alias]
kinematics = mechanical_snapshot.piston_kinematics_by_alias[piston_alias]
chamber = getattr(self.pneumatic_closure.components, chamber_field)
chamber.set_external_volume_m3(
piston.geometry().chamber_volume_m3(
kinematics.port_3_displacement_m,
kinematics.port_2_displacement_m,
),
piston.geometry().chamber_volume_rate_m3_s(
kinematics.port_3_velocity_m_s,
kinematics.port_2_velocity_m_s,
),
)
def _force_by_mass_alias(
self,
time_s: float,