补充test_mql质量端止动原语

This commit is contained in:
huojiarong committed 2026-07-15 10:19:24 +00:00
1 parent a63fda313b
commit f6dda509a2
5 files changed
+142

No files matched your search

+35
View File
@@ -61,7 +61,16 @@ class TestMqlMechanicalAssemblyTests(unittest.TestCase):
self.assertEqual(mass.max_damping_n_per_m_per_s, 1.0e4)
self.assertAlmostEqual(mass.min_penetration_m, 1.0e-4)
self.assertAlmostEqual(mass.max_penetration_m, 1.0e-4)
self.assertEqual(mass.stiction_force_n, 0.0)
self.assertEqual(mass.coulomb_friction_n, 0.0)
self.assertEqual(mass.viscous_friction_n_per_m_per_s, 0.0)
self.assertEqual(mass.windage_n_per_m2_per_s2, 0.0)
self.assertEqual(mass.stick_velocity_threshold_m_s, 1.0e-6)
self.assertEqual(mass.reset_velocity_threshold_m_s, 1.0e-6)
self.assertEqual(mass.rest_coeff, 0.65)
self.assertEqual(mass.stribeck_constant_m_s, 1.0e-3)
self.assertTrue(mass.use_friction)
self.assertEqual(mass.stop_type, 4)
self.assertIn("v1@mass_friction_endstops_10", mass.data_paths)
self.assertIn("x1@mass_friction_endstops_10", mass.data_paths)
@@ -131,6 +140,32 @@ class TestMqlMechanicalAssemblyTests(unittest.TestCase):
delta=1.0e-3,
)
def test_mass_endstop_second_port_observables_are_opposite_sign(self) -> None:
for alias in self.assembly.masses:
with self.subTest(alias=alias):
for signal in ("x1", "v1", "acc1"):
primary = self.amesim_results.series(f"{signal}@{alias}")
second_port = self.amesim_results.series(f"{signal}dup@{alias}")
for index in (0, len(primary) // 2, -1):
self.assertAlmostEqual(primary[index], -second_port[index])
def test_mass_endstop_force_observables_match_inactive_amesim_contacts(self) -> None:
for alias, mass_spec in self.assembly.masses.items():
endstop = mass_spec.endstop()
with self.subTest(alias=alias):
x1 = self.amesim_results.series(f"x1@{alias}")[-1]
v1 = self.amesim_results.series(f"v1@{alias}")[-1]
self.assertAlmostEqual(
endstop.viscous_friction_force(v1),
self.amesim_results.series(f"Fvisc@{alias}")[-1],
)
self.assertAlmostEqual(self.amesim_results.series(f"Ffric@{alias}")[-1], 0.0)
self.assertAlmostEqual(self.amesim_results.series(f"Fmin@{alias}")[-1], 0.0)
self.assertAlmostEqual(self.amesim_results.series(f"Fmax@{alias}")[-1], 0.0)
self.assertLessEqual(endstop.lower_penetration_m(x1), 1.0e-12)
self.assertLessEqual(endstop.upper_penetration_m(x1), 1.0e-12)
def test_unit_helpers(self) -> None:
self.assertAlmostEqual(mm_to_m(20.0), 0.02)
self.assertAlmostEqual(n_per_mm_to_n_per_m(1.0e6), 1.0e9)