MotorControlModuleSDFM_TMS3.../Projects/EFC_Communication/UMLibrary/driver/ModbusAnalogOutput.cpp
2024-06-07 11:12:56 +03:00

74 lines
1.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.

/*
* ModbusAnalogOutput.cpp
*
* Created on: 19 мар. 2021 г.
* 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;
}
}
}