111 lines
2.9 KiB
C++
111 lines
2.9 KiB
C++
|
|
/*
|
|||
|
|
* NullEstimation.h
|
|||
|
|
*
|
|||
|
|
* Created on: 23 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 2016 <EFBFBD>.
|
|||
|
|
* 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 {
|
|||
|
|
|
|||
|
|
//!<21><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
class NullEstimation : public ITechFunction {
|
|||
|
|
public:
|
|||
|
|
struct Input {
|
|||
|
|
float amp_modulation; //!<<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>.<2E>.
|
|||
|
|
float speed; //!<<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD>/<2F>.
|
|||
|
|
float Nc; //!<<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
float rise_to_hold; //!<<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
float np; //!<<3C><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
struct Output {
|
|||
|
|
float angle; //!<<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
bool run( const char * value, std::size_t size );
|
|||
|
|
//!<21><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
void stop();
|
|||
|
|
//!<21><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
short getState() const;
|
|||
|
|
//!<21><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
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; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
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_ */
|