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

207 lines
9.4 KiB
C++

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.

/****************************************************************************
** 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 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