接入test_mql PNVO阶跃控制与流量诊断
This commit is contained in:
1 parent
65f6d6dd87
commit
7c68caed27
7 files changed
+298
-24
No files matched your search
@@ -34,6 +34,7 @@ DEFAULT_FULL_STATE_COMPARISON_DATA_PATHS = (
|
||||
"x1@mass_friction_endstops_18",
|
||||
"v1@mass_friction_endstops_18",
|
||||
"acc1@mass_friction_endstops_18",
|
||||
"dm1@pneumatic_69",
|
||||
)
|
||||
|
||||
|
||||
@@ -50,6 +51,23 @@ class TestMqlFullStateSignalDiagnostic:
|
||||
final_abs_error: float
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class TestMqlFullStateFlowDiagnostic:
|
||||
data_path: str
|
||||
initial_time_s: float
|
||||
final_time_s: float
|
||||
initial_python_dm1_g_s: float
|
||||
initial_amesim_dm1_g_s: float
|
||||
initial_python_canonical_kg_s: float
|
||||
initial_amesim_canonical_kg_s: float
|
||||
initial_canonical_abs_error_kg_s: float
|
||||
final_python_dm1_g_s: float
|
||||
final_amesim_dm1_g_s: float
|
||||
final_python_canonical_kg_s: float
|
||||
final_amesim_canonical_kg_s: float
|
||||
final_canonical_abs_error_kg_s: float
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class TestMqlFullStateComparisonRun:
|
||||
system: TestMqlSystem
|
||||
@@ -112,6 +130,35 @@ class TestMqlFullStateComparisonRun:
|
||||
final_abs_error=abs(final_python - final_amesim),
|
||||
)
|
||||
|
||||
def pnl0001_mass_flow_diagnostic(
|
||||
self,
|
||||
data_path: str = "dm1@pneumatic_69",
|
||||
) -> TestMqlFullStateFlowDiagnostic:
|
||||
diagnostic = self.signal_diagnostic(data_path)
|
||||
initial_python_canonical = -diagnostic.initial_python_value * 1.0e-3
|
||||
initial_amesim_canonical = -diagnostic.initial_amesim_value * 1.0e-3
|
||||
final_python_canonical = -diagnostic.final_python_value * 1.0e-3
|
||||
final_amesim_canonical = -diagnostic.final_amesim_value * 1.0e-3
|
||||
return TestMqlFullStateFlowDiagnostic(
|
||||
data_path=data_path,
|
||||
initial_time_s=diagnostic.initial_time_s,
|
||||
final_time_s=diagnostic.final_time_s,
|
||||
initial_python_dm1_g_s=diagnostic.initial_python_value,
|
||||
initial_amesim_dm1_g_s=diagnostic.initial_amesim_value,
|
||||
initial_python_canonical_kg_s=initial_python_canonical,
|
||||
initial_amesim_canonical_kg_s=initial_amesim_canonical,
|
||||
initial_canonical_abs_error_kg_s=abs(
|
||||
initial_python_canonical - initial_amesim_canonical
|
||||
),
|
||||
final_python_dm1_g_s=diagnostic.final_python_value,
|
||||
final_amesim_dm1_g_s=diagnostic.final_amesim_value,
|
||||
final_python_canonical_kg_s=final_python_canonical,
|
||||
final_amesim_canonical_kg_s=final_amesim_canonical,
|
||||
final_canonical_abs_error_kg_s=abs(
|
||||
final_python_canonical - final_amesim_canonical
|
||||
),
|
||||
)
|
||||
|
||||
def diagnostics_by_final_abs_error(self):
|
||||
return tuple(
|
||||
sorted(
|
||||
@@ -134,6 +181,7 @@ class TestMqlFullStateComparisonRun:
|
||||
return self.closure.variable_chamber_rhs_diagnostic(
|
||||
chamber_alias=chamber_alias,
|
||||
state_vector=state_vector,
|
||||
time_s=float(self.result.t[sample_index]),
|
||||
)
|
||||
|
||||
|
||||
@@ -298,6 +346,28 @@ def format_test_mql_full_state_comparison_summary(
|
||||
f"final_amesim={diagnostic.final_amesim_value}, "
|
||||
f"final_abs_error={diagnostic.final_abs_error}"
|
||||
)
|
||||
flow_diagnostic = _pneumatic_69_flow_diagnostic(run)
|
||||
if flow_diagnostic is not None:
|
||||
lines.append(
|
||||
"PNL0001 canonical mass-flow diagnostic: "
|
||||
f"{flow_diagnostic.data_path}"
|
||||
)
|
||||
lines.extend(
|
||||
[
|
||||
" - convention=Python chamber-to-line flow "
|
||||
"equals -AMESim dm1 * 1e-3",
|
||||
f" - initial_python_kg_s="
|
||||
f"{flow_diagnostic.initial_python_canonical_kg_s}",
|
||||
f" - initial_amesim_kg_s="
|
||||
f"{flow_diagnostic.initial_amesim_canonical_kg_s}",
|
||||
f" - final_python_kg_s="
|
||||
f"{flow_diagnostic.final_python_canonical_kg_s}",
|
||||
f" - final_amesim_kg_s="
|
||||
f"{flow_diagnostic.final_amesim_canonical_kg_s}",
|
||||
f" - final_abs_error_kg_s="
|
||||
f"{flow_diagnostic.final_canonical_abs_error_kg_s}",
|
||||
]
|
||||
)
|
||||
chamber_diagnostic = _largest_chamber_rhs_diagnostic(run)
|
||||
if chamber_diagnostic is not None:
|
||||
lines.append(
|
||||
@@ -319,6 +389,13 @@ def format_test_mql_full_state_comparison_summary(
|
||||
return "\n".join(lines) + "\n"
|
||||
|
||||
|
||||
def _pneumatic_69_flow_diagnostic(run: TestMqlFullStateComparisonRun):
|
||||
try:
|
||||
return run.pnl0001_mass_flow_diagnostic()
|
||||
except KeyError:
|
||||
return None
|
||||
|
||||
|
||||
def _largest_chamber_rhs_diagnostic(run: TestMqlFullStateComparisonRun):
|
||||
diagnostic = run.largest_final_abs_error_diagnostic
|
||||
if diagnostic is None or "@" not in diagnostic.data_path:
|
||||
|
||||
Reference in new issue
Block a user