You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
iec104/include/HTHP104Table.h

209 lines
9.5 KiB
C

/****************************************************************************
** File name : HTHP104Table.h
** Description : define data struct
** Create date : 2018.09.01
** Auther by : Liuyx
** Version info : V1.0.01
** Copyright (C) 2002-2018 xi'an huatek, Inc Co., Ltd
** Update record:
** DATE AUTHER DESC
** -------------------------------------------------------------------------
** 2018.09.01 Liuyx first build
****************************************************************************/
#ifndef __HP104_TABLE
#define __HP104_TABLE
#include <map>
static const char IEC_CONFIMG_FILE[] = "../etc/ht_iec104.conf";
#pragma pack (push ,1)
// 一个单元的信息体
typedef struct {
int count; // 索引,0开始
unsigned int objaddr; // 信息对象地址(3)
unsigned int objval; // 值域
}ST_OBJVAL;
typedef struct {
unsigned char stype; // 类型
time_t dtime;
unsigned int sadr; // 信息对象地址(3)
union { // 值域
unsigned int ival;
float fval;
};
}IEC_OBJVAL_NEW;
typedef struct tagIEC_DEVICE
{
unsigned int site_id; // 站点ID
unsigned int sensor_id; // 装置ID
unsigned char eqm_code[DEF_EQM_CODE_SIZE]; // eqm_code,主设备ID,对应busi_site_tree.id
unsigned char sys_code[DEF_EQM_CODE_SIZE]; // sys_code,主设备ID,对应iec_sites.system_code
unsigned char tableName[DEF_EQM_CODE_SIZE * 2]; // 阈值字段名称,transformer_runing_status_threshold表字段
unsigned char devidFieldName[DEF_EQM_CODE_SIZE * 2]; // 数据表sensor id字段名称
unsigned char dtimeFieldName[DEF_EQM_CODE_SIZE * 2]; // 数据表采集时间字段名称
unsigned char one_dtime;
}IEC_DEVICE;
typedef struct tagIEC_FIELD
{
std::string name;
float fval;
time_t ts;
} IEC_FIELD;
typedef struct tagCACHED_DEV_DATA
{
IEC_DEVICE* device;
time_t firstTs;
size_t assignedFields;
std::map<unsigned int, std::pair<IEC_FIELD, bool> > fields;
}CACHED_DEV_DATA;
typedef struct tagIEC_POINT
{
unsigned int sadr; // 信息体地址map.key
unsigned char stype; // 地址类型 1:遥信 2:遥测
unsigned int sensor_id; // 装置ID
unsigned char fieldName[DEF_EQM_CODE_SIZE * 2]; // 阈值字段名称,transformer_runing_status_threshold表字段
unsigned char isget; // 评测字段提取标志,YX:{1=总开关状态 2=发电状态 3=抽水状态 4=事故状态} YC:{1=提取 0:不提取}
unsigned short unit; // 104协议数据单位
unsigned short sysunit; // 系统固定的字段单位,参与评测数据
double devrate; // 偏差率,当值在±之间时,保存数据
unsigned char eqm_type; // 设备类型 1:主变 2:GIS 3:测温 4:避雷器
unsigned char warnFlag; // 告警判断, =1:>预警值时告警 =2:<预警值时告警(压力) 油位如何告警(最低/高)
time_t dtime; // 告警时间
unsigned char wstate; // 工作状态1-发电状态 2抽水状态 3空闲状态
unsigned char bfault; // 主变事故状态0-正常 1-事故状态
// unsigned char poidesc[DEF_BUFFER_256]; // 点表字段描述
}IEC_POINT;
// 变压器设备唯一编码
typedef struct _BYQ_EQM_CODE {
unsigned char szEqmCode[DEF_EQM_CODE_SIZE]; // 设备编码,16位
unsigned int uiHighVoltage; //发电状态: 主变高压侧电压点位
unsigned int uiHighCurrent; //发电状态: 主变高压侧电流点位
unsigned int uiLowVoltage; //抽水、空闲状态: 主变低压侧电压点位
unsigned int uiLowCurrent; //抽水、空闲状态: 主变低压侧电流点位
unsigned int uiCoolWaterPressEntry; //主变冷却水进口压力点位
unsigned int uiCoolWaterPressOuter; //主变冷却水出口压力点位
unsigned int uiCoolWaterTempEntry; //主变冷却水进口温度点位
unsigned int uiCoolWaterTempOuter; //主变冷却水出口温度点位
unsigned int uiOilPressEntry; //主变油进口压力点位
unsigned int uiOilPressOuter; //主变油出口压力点位
unsigned int uiOilTempEntry; //主变油进口温度点位
unsigned int uiOilTempOuter; //主变油出口温度点位
unsigned int uiOilTemperature; //主变本体油温点位
unsigned int uiOilPosition; //主变本体油位点位
unsigned int uiOilTopTemp; //主变顶层油温点位
unsigned int uiOilPillowLevel; //主变油枕油位点位
unsigned int uiWindingTemp; //主变绕组温度点位
time_t stime;
time_t etime;
}ST_BYQ_EQM_CODE;
// 设备工作时间及状态记录
typedef struct _DEVICE_TIME_STAT {
unsigned char sys_code[DEF_EQM_CODE_SIZE]; // sys_code,主设备ID,对应busi_site_tree.system_code
unsigned char desct[DEF_BUFFER_256]; // sys_code,主设备ID,对应busi_site_tree.system_code
time_t usTime; // 最近一次记录时间
unsigned char wstate; // 工作状态1-发电状态 2抽水状态 3空闲状态
}ST_DEVICE_TIME_STAT;
// 断路器设备唯一编码
typedef struct _BREAK_EQM_CODE {
unsigned char szEqmCodeA[DEF_EQM_CODE_SIZE]; // 设备编码,16位
unsigned char szEqmCodeB[DEF_EQM_CODE_SIZE]; // 设备编码,16位
unsigned char szEqmCodeC[DEF_EQM_CODE_SIZE]; // 设备编码,16位
unsigned int uiStateSadr; //断开状态点位地址 对应值含义=1合 0
unsigned int uiAbortVoltage; //断开电压点位
unsigned int uiAbortCurrent; //断开电流点位
}ST_BREAK_EQM_CODE;
// IEC104协议基础配置信息
typedef struct _IEC104_CONF
{
unsigned int save_internal; // 104时间保存间隔时间(s)
unsigned int orgin_data_save_internal; // 104原始数据保存时间(s)
unsigned int action_interval; // 总召间隔时间(s)
unsigned int iec_byq_count; // 变压器数量
unsigned int iec_break_count; // 断路器数量
unsigned char site_id[DEF_EQM_CODE_SIZE]; // 站点ID
unsigned short iec_global_addr; // 公共地址
unsigned int yx_start_addr; // YX 0x0001- 遥信起始地址, 十进制数
unsigned int yx_stop_addr; // YX 0x1000- 遥信结束地址, 十进制数
unsigned int jb_start_addr; // JB 0x1001- 继电保护起始地址, 十进制数
unsigned int jb_stop_addr; // JB 0x4000- 继电保护结束地址, 十进制数
unsigned int yc_start_addr; // YC 0x4001- 遥测起始地址, 十进制数
unsigned int yc_stop_addr; // YC 0x5000- 遥测起始地址, 十进制数
ST_BYQ_EQM_CODE *pstByqCode; // 变压器设备系统唯一编码
ST_BREAK_EQM_CODE *pstBrkCode; // 断路器设备系统唯一编码
}ST_IEC104_CONF;
// 点表地址匹配关系
typedef struct {
unsigned int group; // 组号
unsigned int btype; // 电流、电压......
unsigned int sadr; // 相关联的其他sadr列表
}ST_MATCH_LIST;
typedef struct{
//unsigned char eqm_code[DEF_EQM_CODE_SIZE]; // 设备编码
unsigned char eqm_type; // 1:主变 2:GIS 3:测温 4:避雷器
unsigned int count; // *psadr的数量
ST_MATCH_LIST *psadr; //ST_MATCH_LIST[]
}ST_SADR_MATCH;
// 解析104报文的值缓存区、点表配置信息,表iec_point_conf
typedef struct _IECPOINT_TABLE
{
unsigned char stype; // 地址类型 1:遥信 2:遥测
unsigned char cval; // 遥信值
unsigned int sno; // 起始地址偏移量
unsigned int sadr; // 信息体地址map.key
double fval; // 遥测值
unsigned char site_id[DEF_EQM_CODE_SIZE]; // 站点ID
unsigned char eqm_code[DEF_EQM_CODE_SIZE]; // eqm_code,主设备ID,对应busi_site_tree.id
unsigned char sys_code[DEF_EQM_CODE_SIZE]; // sys_code,主设备ID,对应busi_site_tree.system_code
unsigned char fieldname[DEF_EQM_CODE_SIZE * 2]; // 阈值字段名称,transformer_runing_status_threshold表字段
unsigned char isget; // 评测字段提取标志,YX:{1=总开关状态 2=发电状态 3=抽水状态 4=事故状态} YC:{1=提取 0:不提取}
unsigned short unit; // 104协议数据单位
unsigned short sysunit; // 系统固定的字段单位,参与评测数据
double devrate; // 偏差率,当值在±之间时,保存数据
unsigned char eqm_type; // 设备类型 1:主变 2:GIS 3:测温 4:避雷器
unsigned char warnFlag; // 告警判断, =1:>预警值时告警 =2:<预警值时告警(压力) 油位如何告警(最低/高)
time_t dtime; // 告警时间
unsigned char wstate; // 工作状态1-发电状态 2抽水状态 3空闲状态
unsigned char bfault; // 主变事故状态0-正常 1-事故状态
unsigned char poidesc[DEF_BUFFER_256]; // 点表字段描述
}ST_IECPOINT_TABLE;
/* isget:
1: 2: 3: 4:
5: 6: 7: 8:
9: 10: 11:/ 12:/
13: 14: 15:GIS 16:GIS 17:
18: 19: GIS
// unit:
1:kV() 2:V() 3:kA() 4:A() 5:mA() 6:() 7:Pa() 8:KPa() 9:MPa() 10:pF()
11:pC() 12:dB() 13:μL() 14:L() 15:m/s(/) 16:rpm&r/min(/)
*/
#pragma pack (pop)
#endif // end