Two separate nodes (Control.Pi, Control.Slew) silently integrated with a baked Dt=0.0002 constant; both went wrong the moment the carrier became runtime-variable (integral gain 2.5x hot at 1 kHz carrier -> instability). Fixed ad hoc by calling platform_get_control_dt() in inline code, but nothing stops the next node from making the same mistake.
Needed: the domain's live step rate exposed as a built-in binding in generated code (e.g. rte::dt), so templates never hand-roll timing.
Two separate nodes (Control.Pi, Control.Slew) silently integrated with a baked Dt=0.0002 constant; both went wrong the moment the carrier became runtime-variable (integral gain 2.5x hot at 1 kHz carrier -> instability). Fixed ad hoc by calling platform_get_control_dt() in inline code, but nothing stops the next node from making the same mistake.
Needed: the domain's live step rate exposed as a built-in binding in generated code (e.g. rte::dt), so templates never hand-roll timing.