MotorControlModuleSDFM_TMS3.../Projects/EFC_Communication/UMLibrary/technological/function/SearchCondition.hh
2024-06-07 11:12:56 +03:00

112 lines
4.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.

/*
* SearchCondition.hh
*
* Created on: 5 июл. 2020 г.
* Author: LeonidTitov
*/
#ifndef UMLIBRARY_TECHNOLOGICAL_FUNCTION_SEARCHCONDITION_HH_
#define UMLIBRARY_TECHNOLOGICAL_FUNCTION_SEARCHCONDITION_HH_
#include "../ITechFunction.hh"
#include "../../processing/acs/VectorAsyncInterface.hh"
#include "../adapter/ControlSystemWrapper.hpp"
#include "../../systemic/IStatus.hh"
#include "../../systemic/ISignal.hh"
#include "../../systemic/IProcess.hh"
namespace technological { namespace function {
class SearchCondition : public ITechFunction, public systemic::IProcess {
public:
struct Input {
float delta_stp; //!<Заданное относительное перемещение, рад.
float torque_lim; //!<Ограничение момента, Н*м.
float speed_lim; //!<Ограничение скорости, рад/с.
float acc_lim; //!<Ограничение ускорения, рад/с^2.
};
struct Output {
float value; //!<Найденное значение.
float position; //!<Позиция, в которой было найдено значение, рад.
};
bool run( const char * value, std::size_t size );
void stop();
bool getResult( char * value, std::size_t size ) const;
short getState() const;
void process();
SearchCondition( ResourceKeeper< technological::adapter::TieInterface<vector::ITechValue> > & control_system_wrapper,
ResourceKeeper<vector::ITechValue> & speed_limit,
ResourceKeeper<vector::ITechValue> & torque_limit,
ResourceKeeper<vector::ITechValue> & acc_limit,
systemic::IStatus & condition,
systemic::ISignal & value
);
struct Setting {
float retention_accuracy; //!<Точность достижения позиции.
Setting();
bool isValid();
};
void configure( Setting & config );
//Статусы ошибок причины незапуска:
bool isSizeError() const; //!<Ошибка размера входных данных.
bool isInvalidInput() const; //!<Некорретность параметров запуска.
bool isControlSystemBusy() const; //!<Ошибка формирования системы управления.
private:
enum RunErrors {
Empty,
SizeError,
InvalidInput,
ControlSystemBusy,
} run_result;
Locable< technological::adapter::TieInterface<vector::ITechValue> > wrapper;
vector::ITechValue * control_system;
Locable<vector::ITechValue> speed_limit;
Locable<vector::ITechValue> torque_limit;
Locable<vector::ITechValue> acc_limit;
systemic::IStatus & condition;
systemic::ISignal & value;
struct {
float speed_limit = 0.0f;
float torque_limit = 0.0f;
float acceleration_limit = 0.0f;
} stored;
float setpoint;
float retention_accuracy; //!<Точность достижения позиции.
static bool validate( Input & );
void apply( const Input & input );
bool hadnle( const Input & input );
bool searching;
Output result;
};
//Для внедрения таймаута следует сделать класс наследующий SearchCondition и добавляющий логику расчета и контроля таймаута выполнения операции.
//Для внедрения внешних условий как ошибки техфункции необходимо написать обертку над техфункцией, контролирующую внешний статус.
//Для внедрения блокируемых технологических функций необходимо написать обертку контролирующую статус перед и во время выполнения.
//Для внедрения "действий" в момент запуска и момент остановки необходимо написать обретку над техфункцией, осуществляющую эти действия.
}}
#endif /* UMLIBRARY_TECHNOLOGICAL_FUNCTION_SEARCHCONDITION_HH_ */