emsApplication/applications/EmsShower/slave_define.h

165 lines
4.6 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#ifndef SLAVE_DEFINE_H
#define SLAVE_DEFINE_H
#include <vector>
#include <string>
#include <map>
typedef struct _tagSlave
{
int id;
int function_code;
int start_address;
int quantity;
int interval;
} SlaveItem;
typedef std::vector<SlaveItem*> SlaveData;
//存储解码后的数据
typedef struct __DisplayDataItem
{
int device_type;
int order;
std::string title;
int precision;
int value;
std::string unit;
int display_location; //1:board 2:table
} DisplayDataItem;
typedef std::vector<DisplayDataItem> DisplayDataItems;
class DeviceData
{
public:
DeviceData()
:m_device_type(-1),m_device_online_state(0)
{}
virtual ~DeviceData()
{}
public:
int m_device_type;
int m_device_online_state;
};
class GeneralDeviceData: public DeviceData
{
public:
GeneralDeviceData()
{
m_device_type = 8899;
m_device_online_state = 0;
}
virtual ~GeneralDeviceData() {}
public:
DisplayDataItems m_PanelDisplayDataItems;
};
class TemperatureData : public DeviceData
{
public:
TemperatureData()
{
m_device_type = 81;
bDecodeAlarm = false;
bDecodeTemp = false;
}
virtual ~TemperatureData() {}
public:
bool bDecodeAlarm;
bool bDecodeTemp;
float TempValue;
float HumidityValue;
float DewPointValue;
int DO;
int DI1;
int DI2;
int TempHighAlarm;
int HumidityHighAlarm;
int TempLowAlarm;
};
////////////////////////////////////////////////////////////////////
// //
// 以下数据结构是为了存取json配置文件设置 //
// 保存串口的从机号、寄存器开始地址、数量、寄存器数据描述等等信息 //
////////////////////////////////////////////////////////////////////
/****************************************************************
* 逻辑结构
*
SlaveItems 定义有多少个从机
slaveAddress 定义每一个从机有多少要读取的地址,每一个起始地址并不保证连续
registryData 定义每一个起始地址需要读取的数据
*
*
*****************************************************************/
//寄存器的数据,以及控制策略描述
typedef struct __registryData
{
__registryData():
comment(""), precision(1.0f), unit(""), title_chn("中文"), title_en("eng"), display(1), skip(0)
{}
std::string comment; // ":"在线状态", 注释字段,为了方便读,无实际意义
int order; // 定义解码的顺序从0开始数量 =slaveAddress.quantity
float precision; // " : 1, 精度,标注小数点用
std::string unit; // " : "", 单位
std::string title_chn; // " : 中文显示
std::string title_en; // " : 英文显示
int display; // " : 1, 是否显示0不显示1显示在board2显示在表格
int skip; //" : 0 //1跳过 0不跳过
} registryData;
//寄存器的数据数组
typedef std::map<int,registryData> RegisterDataItems;
typedef struct __slaveAddress
{
int start_addr; // ":40000, 寄存器地址
unsigned short quantity; // " : 9, 连续读取多少个寄存器
unsigned short bytes_per_register; // " : 2, 每个寄存器的字节数缺省是uint16,两个字节
std::string lang; // 使用语言,"chn": 中文 "en":English
std::string device_name_chn; // " : "温湿度", 该寄存器数组代表的设备名称
std::string device_name_eng; // " : "温湿度", 该寄存器数组代表的设备名称,英文
//标识本地址的数据是哪一个类型的设备
/*
PANEL_TEMPERATURE = 1,
PANEL_BATTERY = 2,
PANEL_POWER = 3,
PANEL_AC = 4,
PANEL_PV = 5,
PANEL_ALARM = 6,
PANEL_INVERTER = 7,
PANEL_OTHER = 88,
PANEL_HOME = 99,
* */
int device_type;
RegisterDataItems register_data_items; //寄存器数据,数组
} slaveAddress;
//需要读取的从机的地址信息
typedef std::vector<slaveAddress> SlaveAddressItems;
typedef struct __slaveItem
{
int slave_id; //从机ID
int function_code; //功能码缺省是3
SlaveAddressItems slave_address_items; //该从机ID需要读取的地址信息描述
} slaveItem;
//需要处理的从机列表
typedef std::vector<slaveItem> SlaveItems;
#endif // SLAVE_DEFINE_H