MotorControlModuleSDFM_TMS3.../Projects/EFC_Communication/UMLibrary/processing/acs/ManagedPiControlProcess.cpp
2024-06-07 11:12:56 +03:00

113 lines
2.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* ManagedPiControlProcess.cpp
*
* Created on: 14 янв. 2022 г.
* Author: titov
*/
#include "ManagedPiControlProcess.hh"
void processing::acs::ManagedPiControlProcess::set( TypeInput error ) {
value_error = error;
if( isConnected() and not(proc_enable) ) {
regulator.recalculate( error, reset_value );
proc_enable = true;
}
}
processing::acs::ManagedPiControlProcess::TypeOutput processing::acs::ManagedPiControlProcess::get() const {
return reset_value;
}
void processing::acs::ManagedPiControlProcess::set_output(
SetInterface * output_interface ) {
if( not output_interface ) proc_enable = false;
output = output_interface;
}
vector::ITechValue & processing::acs::ManagedPiControlProcess::getLimit() {
return limit;
}
void processing::acs::ManagedPiControlProcess::setSampleTime( float ts_in_second ) {
regulator.setTime(ts_in_second);
}
void processing::acs::ManagedPiControlProcess::do_reset() {
proc_enable = false;
value_error = 0.0f;
regulator.reset(reset_value);
}
void processing::acs::ManagedPiControlProcess::process() {
if( not proc_enable )
return;
if( not update_lock.test_and_set() ) {
systemic::FlagStiker flag(update_lock);
value_output = regulator( value_error, not( operate ) );
output->set(value_output);
if( need_reset ) {
do_reset();
need_reset = false;
}
}
}
void processing::acs::ManagedPiControlProcess::reset() {
need_reset = true;
}
processing::acs::ManagedPiControlProcess::ManagedPiControlProcess(
Regulator & regulator, systemic::ISignal & current_value, systemic::IStatus & operate,
systemic::Parameter<Regulator> params ) : regulator(regulator),
reset_value(current_value),
value_error(0.0f), limit(regulator), operate(operate),
proc_enable(false), output(nullptr), value_output(0.0f), apply_params(regulator, params),
need_reset(false) { update_lock.clear(); }
bool processing::acs::ManagedPiControlProcess::isConnected() const {
return output;
}
void processing::acs::ManagedPiControlProcess::apply() {
if( not update_lock.test_and_set() ) {
systemic::FlagStiker flag(update_lock);
apply_params();
}
}