MotorControlModuleSDFM_TMS3.../Projects/EFC_Application/UMLibrary/driver/ModbusAnalogWideInput.hh

88 lines
1.8 KiB
C++

/*
* ModbusAnalogWideInput.hh
*
* Created on: 1 àïð. 2023 ã.
* Author: titov
*/
#ifndef UMLIBRARY_DRIVER_MODBUSANALOGWIDEINPUT_HH_
#define UMLIBRARY_DRIVER_MODBUSANALOGWIDEINPUT_HH_
#include <stdint.h>
#include "../systemic/ISignal.hh"
#include "IModBus.hh"
namespace driver {
namespace modbus {
//!
class ModbusAnalogWideInput {
typedef IModBusDispatch::Status Status;
systemic::ISignal & signal;
const bool format_signed; //!<Ôîðìàò âûâîäà.
float coeff;
float offset;
float up_limit;
float down_limit;
uint32_t nan_out_of_range; //!<Ñîïîñòàâëåíèå äëÿ çíà÷åíèÿ NAN ñèãíàëà.
bool extract();
uint16_t data[2];
struct Part : public IModBusDispatch {
const uint16_t * data;
Status read( uint16_t & reg );
Status write( uint16_t reg );
Part( const uint16_t * data ) : data(data) {}
};
struct PartShower : public Part {
ModbusAnalogWideInput & self;
Status read( uint16_t & reg );
PartShower( ModbusAnalogWideInput & self, const uint16_t * data ) : Part(data), self(self) {}
};
PartShower one;
Part two;
public:
//!Ïîñëåäîâàòåëüíîñòü ñëîâ â ðåãèñòðàõ
enum WordSequence {
HighFirstLowSecond, //!<Ïåðâûé ñòàðøèé, âòîðîé ìëàäøèé.
LowFirstHighSecond //!<Ïåðâûé ìëàäøèé, âòîðîé ñòàðøèé.
};
ModbusAnalogWideInput( systemic::ISignal & value, bool format_signed,
uint32_t nan_out_of_range,
float coeff, float offset,
float up_limit, float down_limit, WordSequence sequnece );
//!Ïåðâûé èç ïàðû ðåãèñòðîâ.
IModBusDispatch & first();
//!Âòîðîé èç ïàðû ðåãèñòðîâ.
IModBusDispatch & second();
};
}
}
#endif /* UMLIBRARY_DRIVER_MODBUSANALOGWIDEINPUT_HH_ */