56 lines
2.4 KiB
C++
56 lines
2.4 KiB
C++
/*
|
|
* MoveToPointWithTimeout.cpp
|
|
*
|
|
* Created on: 8 èþë. 2020 ã.
|
|
* Author: LeonidTitov
|
|
*/
|
|
|
|
#include "MoveToPointWithTimeout.hh"
|
|
|
|
#include "../../systemic/ValueLazyFast.hpp"
|
|
|
|
bool application::procedures::MoveToPointWithTimeout::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 ( parameter = systemic::getSetting<technological::function::MoveToPointWithTimeout>( env.cparams, provider, links.conditions ) );
|
|
|
|
}
|
|
|
|
void application::procedures::MoveToPointWithTimeout::build( Environment & env ) {
|
|
|
|
typedef technological::function::MoveToPointWithTimeout MTPWT;
|
|
typedef technological::function::MoveToPoint MTP;
|
|
|
|
systemic::LocalSetting<MTPWT> ls( parameter );
|
|
|
|
MTPWT * procedure = memories::instance_object<MTPWT>( env.static_object_ma,
|
|
*control_system, *speed_limit, *torque_limit, *acc_limit );
|
|
|
|
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 );
|
|
|
|
technological::function::MoveToPoint * base_procedure = procedure;
|
|
|
|
env.rholder.share<technological::ITechFunction>( *base_procedure, links.procedure );
|
|
|
|
typedef systemic::detail::ValueLazyFast<bool, MTP, &MTP::isSizeError> SizeError;
|
|
env.statuses.add( links.size_error, memories::instance_object<SizeError>( env.static_setup_ma, *procedure ) );
|
|
typedef systemic::detail::ValueLazyFast<bool, MTP, &MTP::isInvalidInput> InvalidInput;
|
|
env.statuses.add( links.invalid_input, memories::instance_object<InvalidInput>( env.static_setup_ma, *procedure ) );
|
|
typedef systemic::detail::ValueLazyFast<bool, MTP, &MTP::isControlSystemBusy> ControlSystemBusy;
|
|
env.statuses.add( links.control_system_busy, memories::instance_object<ControlSystemBusy>( env.static_setup_ma, *procedure ) );
|
|
|
|
}
|