接入test_mql端止动机械力

This commit is contained in:
huojiarong committed 2026-07-20 09:07:00 +00:00
1 parent 716a1c572a
commit 0035243361
2 files changed
+61 -2

No files matched your search

+37 -2
View File
@@ -3866,6 +3866,17 @@ _PISTON_FORCE_BINDINGS = (
("mass_friction_endstops_17", "pn_brp2_15", "p4_port3_far_primary_chamber"),
)
_ELASTIC_ENDSTOP_FORCE_BINDINGS = (
("mass_friction_endstops_10", "mass_friction_endstops_18", "elasticendstop_8"),
("mass_friction_endstops_11", "mass_friction_endstops_18", "elasticendstop_9"),
("mass_friction_endstops_12", "mass_friction_endstops_18", "elasticendstop_10"),
("mass_friction_endstops_13", "mass_friction_endstops_18", "elasticendstop_11"),
("mass_friction_endstops_14", "mass_friction_endstops_18", "elasticendstop_12"),
("mass_friction_endstops_15", "mass_friction_endstops_18", "elasticendstop_13"),
("mass_friction_endstops_16", "mass_friction_endstops_18", "elasticendstop_14"),
("mass_friction_endstops_17", "mass_friction_endstops_18", "elasticendstop_15"),
)
class TestMqlFullStateClosure:
def __init__(self, *, pneumatic_closure: object, mechanical_closure: object) -> None:
@@ -3903,15 +3914,23 @@ class TestMqlFullStateClosure:
def rhs(self, 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)
return [
*self.pneumatic_closure.rhs(pneumatic_state),
*self.mechanical_closure.rhs(
mechanical_state,
force_by_mass_alias=self._piston_force_by_mass_alias(pneumatic_snapshot),
force_by_mass_alias=self._force_by_mass_alias(
pneumatic_snapshot,
mechanical_snapshot,
),
),
]
def _piston_force_by_mass_alias(self, pneumatic_snapshot: object) -> dict[str, float]:
def _force_by_mass_alias(
self,
pneumatic_snapshot: object,
mechanical_snapshot: object,
) -> dict[str, float]:
from PythonModels.systems.test_mql_pneumatic import pressure_to_amesim_gauge_pa
force_by_mass_alias: dict[str, float] = {}
@@ -3921,6 +3940,22 @@ class TestMqlFullStateClosure:
force_by_mass_alias[mass_alias] = (
pressure_to_amesim_gauge_pa(chamber.p) * piston.annulus_area_m2
)
state_by_alias = {state.alias: state for state in mechanical_snapshot.states}
for mass_alias, support_mass_alias, endstop_alias in _ELASTIC_ENDSTOP_FORCE_BINDINGS:
mass_state = state_by_alias[mass_alias]
support_state = state_by_alias[support_mass_alias]
endstop = self.mechanical_closure.assembly.elastic_endstops[
endstop_alias
].endstop()
gap_mm = (support_state.displacement_m - mass_state.displacement_m) * 1.0e3
penetration_velocity_m_s = (
mass_state.velocity_m_s - support_state.velocity_m_s
)
force_by_mass_alias[mass_alias] = (
force_by_mass_alias.get(mass_alias, 0.0)
- endstop.contact_force(gap_mm, penetration_velocity_m_s)
)
return force_by_mass_alias