diff --git a/src/control/engine.rs b/src/control/engine.rs index 326b04f..6be50d2 100644 --- a/src/control/engine.rs +++ b/src/control/engine.rs @@ -291,10 +291,31 @@ async fn tick_state_machine( return; } - // Check AccTime — trigger distributor + // Check AccTime — stop feeder then trigger distributor if unit.acc_time_sec > 0 && runtime.accumulated_run_sec >= unit.acc_time_sec as i64 * 1000 { + let monitor = state + .connection_manager + .get_point_monitor_data_read_guard() + .await; + if let Some((pid, vt)) = + feeder_roles.and_then(|r| find_cmd(r, "stop_cmd", &monitor)) + { + drop(monitor); + if let Err(e) = + send_pulse_command(&state.connection_manager, pid, vt.as_ref(), 300).await + { + tracing::warn!("Engine: stop coal_feeder before distributor failed: {}", e); + return; + } + if state.config.simulate_plc { + if let Some(eq_id) = feeder_eq_id { + crate::control::command::simulate_run_feedback(state, eq_id, false) + .await; + } + } + } runtime.state = UnitRuntimeState::DistributorRunning; runtime.distributor_run_elapsed_sec = 0; }