From 7ff7a3ae1273e57561fdc2b39d7a592f41b841b8 Mon Sep 17 00:00:00 2001 From: RobertJDavis Date: Thu, 30 Oct 2025 14:22:15 -0700 Subject: [PATCH] Added Speed Feedback (hard IO) --- src/BMS/VFD/PHX3_VFD_ABB_ACH580_RTU/State_Fail.cpp | 1 + src/BMS/VFD/PHX3_VFD_ABB_ACH580_RTU/State_Running.cpp | 6 ++++++ src/BMS/VFD/PHX3_VFD_ABB_ACH580_RTU/State_Standby.cpp | 1 + src/BMS/VFD/PHX3_VFD_ABB_ACH580_RTU/config.h | 1 + 4 files changed, 9 insertions(+) diff --git a/src/BMS/VFD/PHX3_VFD_ABB_ACH580_RTU/State_Fail.cpp b/src/BMS/VFD/PHX3_VFD_ABB_ACH580_RTU/State_Fail.cpp index db92c90..c83a880 100644 --- a/src/BMS/VFD/PHX3_VFD_ABB_ACH580_RTU/State_Fail.cpp +++ b/src/BMS/VFD/PHX3_VFD_ABB_ACH580_RTU/State_Fail.cpp @@ -37,6 +37,7 @@ FailState::FailState(const std::vector& activeAlarms) { addStrategy("Output Power", new SingleValueStrategy(0.1f, 0.1f, 1000 )); addStrategy("Motor Speed Used", new RampStrategy(0.0f, 200.0f, 1000 )); + addStrategy("Speed Feedback", new RampStrategy(0.0f, 200.0f, 1000 )); addStrategy("Motor Speed estimated", new RampStrategy(0.0f, 200.0f, 1000 )); addStrategy("Motor Current", new RampStrategy(0.0f, 20.0f, 1000 )); addStrategy("Motor Torque", new RampStrategy(0.0f, 20.0f, 1000 )); diff --git a/src/BMS/VFD/PHX3_VFD_ABB_ACH580_RTU/State_Running.cpp b/src/BMS/VFD/PHX3_VFD_ABB_ACH580_RTU/State_Running.cpp index 39fccf6..36d586d 100644 --- a/src/BMS/VFD/PHX3_VFD_ABB_ACH580_RTU/State_Running.cpp +++ b/src/BMS/VFD/PHX3_VFD_ABB_ACH580_RTU/State_Running.cpp @@ -42,6 +42,7 @@ template<> RunningState::RunningState() { addStrategy("Motor Speed Used", new RampStrategy(1800.0f, 100.0f, 1000)); + addStrategy("Speed Feedback", new RampStrategy(1800.0f, 100.0f, 1000)); addStrategy("Motor Speed estimated", new RampStrategy(1800.0f, 100.0f, 1000)); addStrategy("Motor Current", new RampStrategy(65.0f, 7.0f, 1000)); addStrategy("Motor Torque", new RampStrategy(90.0f, 10.0f, 1000)); @@ -100,6 +101,11 @@ State* RunningState::update(Equipment* equipmen static_cast(motorSpeedUsed)->setTarget(currentSP); } + Strategy_Behavior* speedFeedback = getStrategy("Speed Feedback"); + if (speedFeedback) { + static_cast(speedFeedback)->setTarget(currentSP); + } + // To have Motor Speed estimated slightly different - for purposes of differentiating in Ignition float rpm_est = currentSP * 0.98f; Strategy_Behavior* motorSpeedEst = getStrategy("Motor Speed estimated"); diff --git a/src/BMS/VFD/PHX3_VFD_ABB_ACH580_RTU/State_Standby.cpp b/src/BMS/VFD/PHX3_VFD_ABB_ACH580_RTU/State_Standby.cpp index 4da347f..66a244f 100644 --- a/src/BMS/VFD/PHX3_VFD_ABB_ACH580_RTU/State_Standby.cpp +++ b/src/BMS/VFD/PHX3_VFD_ABB_ACH580_RTU/State_Standby.cpp @@ -36,6 +36,7 @@ StandbyState::StandbyState() { addStrategy("Output Power", new SingleValueStrategy(0.1f, 0.1f, 1000 )); addStrategy("Motor Speed Used", new RampStrategy(0.0f, 200.0f, 1000 )); + addStrategy("Speed Feedback", new RampStrategy(0.0f, 200.0f, 1000 )); addStrategy("Motor Speed estimated", new RampStrategy(0.0f, 200.0f, 1000 )); addStrategy("Motor Current", new RampStrategy(0.0f, 20.0f, 1000 )); addStrategy("Motor Torque", new RampStrategy(0.0f, 20.0f, 1000 )); diff --git a/src/BMS/VFD/PHX3_VFD_ABB_ACH580_RTU/config.h b/src/BMS/VFD/PHX3_VFD_ABB_ACH580_RTU/config.h index 9795b23..fc17309 100644 --- a/src/BMS/VFD/PHX3_VFD_ABB_ACH580_RTU/config.h +++ b/src/BMS/VFD/PHX3_VFD_ABB_ACH580_RTU/config.h @@ -71,6 +71,7 @@ modbusMap mb_map[] = {HR, 152, 0, "HOA Command"}, // arbitrary register number - not used in program {HR, 154, 0, "Run Status"}, // arbitrary register number - 0:off, 1:on (simulated hardwire IO) sending feedback to PLC during simulation. {HR, 155, 1, "Fault Status"}, // arbitrary register number - 0:faulted, 1:not faulted (simulated hardwire IO). When = 0, will turn off VFD. + {HR, 156, 0, "Speed Feedback"}, // arbitrary register number - send signal to PLC (simulated hardwire IO). Will be equal to Motor Speed Used register {HR, 502, 0, "Hours Run"}, {HR, 510, 0, "Inverter Temperature"}, // RJD: Changed from HR_10x to HR, % of fault limit