Index: PIControllers.c =================================================================== diff -u -rca1d590217b1bfd14f0e0682f88e04de076ff199 -r8d437a49a2eb86dfb38674f18a1e514998b3931f --- PIControllers.c (.../PIControllers.c) (revision ca1d590217b1bfd14f0e0682f88e04de076ff199) +++ PIControllers.c (.../PIControllers.c) (revision 8d437a49a2eb86dfb38674f18a1e514998b3931f) @@ -7,8 +7,8 @@ * * @file PIControllers.c * -* @author (last) “rkallala” -* @date (last) 09-Dec-2025 +* @author (last) Vinayakam Mani +* @date (last) 14-Apr-2026 * * @author (original) Vinayakam Mani * @date (original) 07-Oct-2024 @@ -71,11 +71,14 @@ { 0.0, 0.0, 2650, 350, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4.0, CONTROLLER_BIDIRECTIONAL, FALSE, 0.0 }, // PI_CONTROLLER_ID_D12_PUMP { 0.0, 0.0, 2650, 350, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4.0, CONTROLLER_BIDIRECTIONAL, FALSE, 0.0 }, // PI_CONTROLLER_ID_D48_PUMP { 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 15.0, CONTROLLER_BIDIRECTIONAL, TRUE, 0.0 }, // PI_CONTROLLER_ID_D5_HEAT + { 0.0, 0.0, 55.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 100.0, CONTROLLER_BIDIRECTIONAL, FALSE, 0.0 }, // PI_CONTROLLER_ID_D5_HEAT_OUTER_LOOP { 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 5.0, CONTROLLER_BIDIRECTIONAL, FALSE, 0.0 }, // PI_CONTROLLER_ID_D45_HEAT { 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 25.0, CONTROLLER_UNIDIRECTIONAL, FALSE, 0.0 }, // PI_CONTROLLER_ID_RO_PUMP { 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, CONTROLLER_UNIDIRECTIONAL, FALSE, 0.0 }, // PI_CONTROLLER_ID_RO_PUMP_MAX_PRES { 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.5, CONTROLLER_UNIDIRECTIONAL, FALSE, 0.0 }, // PI_CONTROLLER_ID_BOOST_PUMP_FLOW { 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, CONTROLLER_UNIDIRECTIONAL, FALSE, 0.0 }, // PI_CONTROLLER_ID_BOOST_PUMP_PRES + { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 75.0, CONTROLLER_UNIDIRECTIONAL, FALSE, 0.0 }, // PI_CONTROLLER_ID_BICARB_VOL + { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1000.0, CONTROLLER_UNIDIRECTIONAL, FALSE, 0.0 }, // PI_CONTROLLER_ID_ACID_VOL #endif }; @@ -340,38 +343,83 @@ return output; } + /*********************************************************************//** * @brief * The getPIControllerSignals function returns the latest requested signal sample. * @details \b Inputs: none - * @details \b Outputs: maxErrorSumStep of controller ID + * @details \b Outputs: none * @details \b Alarms: ALARM_ID_XX_SOFTWARE_FAULT when invalid PI controller * Id is passed. * @details \b Alarms: ALARM_ID_XX_SOFTWARE_FAULT when invalid PI controller - * stemp limit is passed. + * signal is passed. * @param controllerID ID filter number - * @param stepLimit maximum step limit + * @param signalID signal sample ID request * @return latest sample requested *************************************************************************/ -void setPIControllerStepLimit( PI_CONTROLLER_ID_T controllerID, F32 stepLimit ) +PI_CONTROLLER_SIGNALS_DATA getDebugPIControllerSignals( PI_CONTROLLER_ID_T controllerID ) { PI_CONTROLLER_T *controller; + PI_CONTROLLER_SIGNALS_DATA signals; if ( controllerID < NUM_OF_PI_CONTROLLERS_IDS ) { SET_CONTROLLER( controller, controllerID ); - if ( ( stepLimit > NEARLY_ZERO ) && ( stepLimit < MAX_ILIMIT ) ) + signals.controlSignalReference = controller->referenceSignal; + signals.controlSignalMeasured = controller->measuredSignal; + signals.controlSignalError = controller->errorSignal; + signals.controlSignalErrorSum = controller->errorSumBeforeWindUp; + signals.controlSignalErrorSumAfterWindup = controller->errorSum; + signals.controlSignalProportionalOutput = controller->Kp * controller->errorSignal; + signals.controlSignalIntegralOutput = controller->Ki * controller->errorSum; + signals.controlSignalFeedDorwardOutput = controller->feedForward; + signals.controlSingalControl = controller->controlSignal; + } + else + { // Invalid controller given +#ifdef _DD_ + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_PI_CTRL_INVALID_CONTROLLER, (U32)controllerID ) +#elif _TD_ + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, SW_FAULT_ID_PI_CTRL_INVALID_CONTROLLER, (U32)controllerID ) +#else + #error "Unsupported platform" +#endif + } + + return signals; +} + +/*********************************************************************//** + * @brief + * The setPIControllerFeedForward function sets the latest feed forward value + * to the corresponding PI controller. + * @details \b Inputs: none + * @details \b Outputs: feedforward of controller ID + * @details \b Alarms: ALARM_ID_XX_SOFTWARE_FAULT when invalid PI controller + * Id is passed. + * @param controllerID ID filter number + * @param feedforward calculated feed forward control value + * @return none + *************************************************************************/ +void setPIControllerFeedForward( PI_CONTROLLER_ID_T controllerID, F32 feedforward ) +{ + PI_CONTROLLER_T *controller; + + if ( controllerID < NUM_OF_PI_CONTROLLERS_IDS ) + { + SET_CONTROLLER( controller, controllerID ); + + if ( ( feedforward > controller->uMin ) && ( feedforward < controller->uMax ) ) { - controller->maxErrorSumStep = stepLimit; + controller->feedForward = feedforward; } else { #ifdef _DD_ - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_PI_CTRL_INVALID_STEP_LIMIT, (U32)stepLimit ) + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_PI_CTRL_INVALID_FEED_FORWARD_LIMIT, (U32)feedforward ) #endif } - } else {