MotorControlModuleSDFM_TMS3.../Projects/EFC_Communication/UMLibrary/processing/acs/SpeedControlProcess.cpp
2024-06-07 11:12:56 +03:00

105 lines
2.4 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.

/*
* SpeedControlProcess.cpp
*
* Created on: 18 сент. 2019 г.
* Author: titov
*/
#include "SpeedControlProcess.hh"
void processing::acs::SpeedControlProcess::set(
control::PhaseSpacePoint<float> setpoint ) {
speed_stp = setpoint;
if( isConnected() ) proc_enable = true;
}
control::PhaseSpaceValue processing::acs::SpeedControlProcess::get() const {
// return read_from_fast( &torque_stp );
return control::PhaseSpaceValue( speed_fdb, 0.0f ); //todo: Ускорение сетишь? ГЕТЬ!
}
void processing::acs::SpeedControlProcess::set_output(
SetInterface * output_interface ) {
if( not output_interface ) proc_enable = false;
output = output_interface;
}
void processing::acs::SpeedControlProcess::setSampleTime( float ts_in_second ) {
speed_control.setTime(ts_in_second);
}
void processing::acs::SpeedControlProcess::process() {
if( not proc_enable )
return;
speed_stp.update();
feedforward.stp.update();
torque_stp = speed_control.update( speed_stp, speed_fdb, feedforward.stp );
output->set( torque_stp );
}
void processing::acs::SpeedControlProcess::reset() {
proc_enable = false;
speed_stp = control::PhaseSpaceValue(0, 0);
torque_stp = control::PhaseSpaceValue(0, 0);
speed_control.reset();
}
processing::acs::SpeedControlProcess::SpeedControlProcess(
control::regulator::SpeedController & speed_reg, systemic::ISignal & speed_fdb ) :
speed_control(speed_reg), speed_fdb(speed_fdb), output(nullptr),
speed_stp(control::PhaseSpaceValue(0, 0)), torque_stp(control::PhaseSpaceValue(0, 0)),
proc_enable(false), torque_up_limit(speed_reg), torque_down_limit(speed_reg), inertia_value(speed_reg) {}
vector::ITechValue & processing::acs::SpeedControlProcess::getTorqueUpLimit() {
return torque_up_limit;
}
vector::ITechValue & processing::acs::SpeedControlProcess::getTorqueDownLimit() {
return torque_down_limit;
}
vector::ITechValue & processing::acs::SpeedControlProcess::getInertiaValue() {
return inertia_value;
}
bool processing::acs::SpeedControlProcess::isConnected() const {
return output;
}
vector::IPhaseSpaceValue & processing::acs::SpeedControlProcess::getFeedforwardTract() {
return feedforward;
}
const float & processing::acs::SpeedControlProcess::demand() const {
return speed_stp.value;
}