113 lines
2.3 KiB
C++
113 lines
2.3 KiB
C++
/*
|
|
* 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();
|
|
|
|
}
|
|
|
|
}
|