88 lines
1.8 KiB
C++
88 lines
1.8 KiB
C++
|
|
/*
|
|||
|
|
* ModbusAnalogWideInput.hh
|
|||
|
|
*
|
|||
|
|
* Created on: 1 <EFBFBD><EFBFBD><EFBFBD>. 2023 <EFBFBD>.
|
|||
|
|
* 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; //!<<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
|
|||
|
|
float coeff;
|
|||
|
|
float offset;
|
|||
|
|
|
|||
|
|
float up_limit;
|
|||
|
|
float down_limit;
|
|||
|
|
|
|||
|
|
uint32_t nan_out_of_range; //!<<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> NAN <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
|
|||
|
|
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:
|
|||
|
|
//!<21><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
enum WordSequence {
|
|||
|
|
HighFirstLowSecond, //!<<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
LowFirstHighSecond //!<<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
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 );
|
|||
|
|
|
|||
|
|
//!<21><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
IModBusDispatch & first();
|
|||
|
|
//!<21><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
IModBusDispatch & second();
|
|||
|
|
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
#endif /* UMLIBRARY_DRIVER_MODBUSANALOGWIDEINPUT_HH_ */
|