MotorControlModuleSDFM_TMS3.../Projects/EFC_Application/UMLibrary/technological/function/NullEstimation.hh

111 lines
2.9 KiB
C++

/*
* NullEstimation.h
*
* Created on: 23 íîÿá. 2016 ã.
* Author: titov
*/
#ifndef SOURCE_TECHNOLOGICAL_NULLESTIMATION_H_
#define SOURCE_TECHNOLOGICAL_NULLESTIMATION_H_
#include "../ITechFunction.hh"
#include "../commissioning/ThetaNullEstimate.hh"
#include "../../systemic/ResourceHolder.hpp"
#include "../../driver/IInverter.hh"
#include "../../driver/IBrake.hh"
#include "../../control/function/SpaceVectorPwm.hh"
#include "../../systemic/ISignal.hh"
#include "../../systemic/IProcess.hh"
namespace technological { namespace function {
//!Ôóíêöèÿ ïîèñêà óãëà êîììóòàöèè.
class NullEstimation : public ITechFunction {
public:
struct Input {
float amp_modulation; //!<Ãëóáèíà ìîäóëÿöèè, î.å.
float speed; //!<Ñêîðîñòü, ðàä/ñ.
float Nc; //!<Êîëè÷åñòâî ñåêòîðîâ.
float rise_to_hold; //!<Îòíîøåíèå âðåìåíè âðàùåíèÿ âåêòîðà ê âðåìåíè óäåðæàíèÿ.
float np; //!<×èñëî ïàð ïîëþñîâ.
};
struct Output {
float angle; //!<Ðàçíèöà ìåæäó ôîðìèðóåìûì ýëåêòðè÷åñêèì óãëîì è ïîçèöèåé ïî äàò÷èêó ïîëîæåíèÿ.
};
bool run( const char * value, std::size_t size );
//!Îñòàíîâêà êîêíðåòíîé ïðîöåäóðû íàñòðîéêè è äèàãíîñòèêè.
void stop();
//!Ïðîâåðêà ÷òî ïðîöåäóðà íà äàííûé ìîìåíò âûïîëíÿåòñÿ.
short getState() const;
//!Ïîëó÷åíèå çíà÷åíèé êîíêðåòíîé ïðîöåäóðû.
bool getResult( char * value, std::size_t size ) const;
NullEstimation(
ResourceKeeper<driver::IInverter> & rh_inverter, ResourceKeeper<driver::IBrake> & rh_brake,
systemic::ISignal & position,
ResourceKeeper<std::pmr::monotonic_buffer_resource> & rh_memory
);
void setProcessController_Observe( systemic::IProcessControl * proc_ctrl_observe );
void setProcessController_DataCollection( systemic::IProcessControl * proc_ctrl_collection );
protected:
commissioning::ThetaNullEstimate estimator;
commissioning::ThetaNullEstimate::TSetting setting; //íàñòðîéêè äëÿ åñòèìàòîðà
systemic::ISignal & position;
Locable<driver::IInverter> inverter;
Locable<driver::IBrake> brake;
Locable<std::pmr::monotonic_buffer_resource> buffer;
control::RotatingVector output;
bool is_run;
static bool validate( Input & );
systemic::IProcessControl * proc_ctrl_observe;
systemic::IProcessControl * proc_ctrl_collection;
public:
struct ObserveAndCalculationProcess {
ObserveAndCalculationProcess( NullEstimation & outer );
NullEstimation & outer;
void setSampleTime( float ts_in_second );
void process();
} observe_and_calculation;
struct DataCollectionProcess {
DataCollectionProcess( NullEstimation & outer );
NullEstimation & outer;
void setSampleTime( float ts_in_second );
void process();
} data_collection;
public:
};
} }
#endif /* SOURCE_TECHNOLOGICAL_NULLESTIMATION_H_ */