MotorControlModuleSDFM_TMS3.../Projects/EFC_Application/UMLibrary/application/procedures/SearchConditionInitializer.cpp

55 lines
2.4 KiB
C++

/*
* SearchCondition.cpp
*
* Created on: 5 èþë. 2020 ã.
* Author: LeonidTitov
*/
#include "SearchCondition.hh"
#include "../../systemic/ValueLazyFast.hpp"
bool application::procedures::SearchCondition::input( Environment & env ) {
typedef technological::adapter::TieInterface<vector::ITechValue> ValueControl;
return ( control_system = env.rholder.getShared< ValueControl >( links.positioning_control ) )
and ( torque_limit = env.rholder.getShared<vector::ITechValue>( links.torque_limit ) )
and ( acc_limit = env.rholder.getShared<vector::ITechValue>( links.acceleration_limit ) )
and ( speed_limit = env.rholder.getShared<vector::ITechValue>( links.speed_limit ) )
and ( condition = env.statuses.get( links.condition ) )
and ( value = env.signals.get( links.value ) )
and ( parameter = systemic::getSetting<technological::function::SearchCondition>( env.cparams, provider, links.accuracy ) );
}
void application::procedures::SearchCondition::build( Environment & env ) {
typedef technological::function::SearchCondition SC;
systemic::LocalSetting<SC> ls( parameter );
SC * procedure = memories::instance_object<SC>( env.static_object_ma,
*control_system, *speed_limit, *torque_limit, *acc_limit, *condition, *value );
procedure->configure( ls.setting );
systemic::ProcScheduler::ProcessParameter proc = {
.priority = params.priority,
.period = params.period, .phase = params.phase,
.controlled = true
};
env.scheduler.registerProcess( params.processor_id, *procedure,
proc );
env.rholder.share<technological::ITechFunction>( *procedure, links.procedure );
typedef systemic::detail::ValueLazyFast<bool, SC, &SC::isSizeError> SizeError;
env.statuses.add( links.size_error, memories::instance_object<SizeError>( env.static_setup_ma, *procedure ) );
typedef systemic::detail::ValueLazyFast<bool, SC, &SC::isInvalidInput> InvalidInput;
env.statuses.add( links.invalid_input, memories::instance_object<InvalidInput>( env.static_setup_ma, *procedure ) );
typedef systemic::detail::ValueLazyFast<bool, SC, &SC::isControlSystemBusy> ControlSystemBusy;
env.statuses.add( links.control_system_busy, memories::instance_object<ControlSystemBusy>( env.static_setup_ma, *procedure ) );
}