/* * 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 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(); } }