MotorControlModuleSDFM_TMS3.../Projects/EFC_Application/UMLibrary/driver/ModbusAnalogOutput.cpp

74 lines
1.4 KiB
C++
Raw Normal View History

/*
* ModbusAnalogOutput.cpp
*
* Created on: 19 <EFBFBD><EFBFBD><EFBFBD>. 2021 <EFBFBD>.
* Author: titov
*/
#include "ModbusAnalogOutput.hh"
#include <cstring>
driver::modbus::ModbusAnalogOutput::ModbusAnalogOutput( float coeff, float offset, float invalid, bool sign,
float initial, float up_limit, float down_limit ) :
coeff(coeff), offset(offset), invalid(invalid), sign(sign),
up_limit(up_limit), down_limit(down_limit), value(initial) {}
const float & driver::modbus::ModbusAnalogOutput::signal() const {
return value;
}
driver::modbus::ModbusAnalogOutput::Status driver::modbus::ModbusAnalogOutput::read( uint16_t & output ) {
output = reg;
return Done;
}
driver::modbus::ModbusAnalogOutput::Status driver::modbus::ModbusAnalogOutput::write( uint16_t input ) {
if( sign ) {
int16_t signed_input;
std::memcpy( &signed_input, &input, sizeof(input) );
if( signed_input >= down_limit and signed_input <= up_limit ) {
reg = input;
value = signed_input * coeff + offset;
return Done;
} else {
value = invalid;
return Failure;
}
} else {
if( input >= down_limit and input <= up_limit ) {
reg = input;
value = input * coeff + offset;
return Done;
} else {
value = invalid;
return Failure;
}
}
}