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/HTDataStruct.h

386 lines
14 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 : HTDataStruct.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 __HT_DATA_STRUCT_H
#define __HT_DATA_STRUCT_H
#pragma pack (push ,1)
#define DEF_EQM_CODE_SIZE (32+1) // 设备编码eqm_code最大长度
//#define _SITE_ID_TYPE_INT // 站点ID数据类型定义
#ifdef _SITE_ID_TYPE_INT
typedef unsigned int htype;
#else
typedef unsigned char* htype;
#endif
typedef struct {
unsigned char status; // 链接状态 0:非正常 1:正常
int udp_fd; // 与MEC的上行通道套接字fd
tint64 online_time; // 登陆时间
tint64 last_time; // 离线/退出时间
struct sockaddr_in staddr; // 对方地址
}ST_UDP_CONN;
// 链路管理数据结构
typedef struct {
bool isConnect; // true: connected false: not connected
int listenid; // listen handle
int sockid; // socket connect handle
#ifndef _WIN32
int pipeFds[2]; // When new connection arrived, wake socket up with the pipe
#endif
time_t last_time; // last send/recv time
bool is_yk_ack ; // 是否收到遥控信号
bool b_Signal; // 遥信量变化 false: 无变化 true:有变化,则需记录一条记录
time_t stime; // 遥信信号变化时间否则为0
time_t etime; // 结束时间
time_t lastTime; // 最近一次入库时间
time_t last_yx_time;
time_t last_yc_time;
time_t last_origin_time;
unsigned long m_gis_fault_count; // gis故障次数
//unsigned long m_gis_count; // gis开合次数
bool m_gis_change; // 断路器断开时,记录入库
char m_iec_warn_time[24]; // IEC子站异常时间
unsigned short usSendNo; // 发送序号
unsigned short usRecvNo; // 接收序号
int TxCounter;
int RxCounter;
int LastAckTx;
int LastAckRx;
int t0; // time-out of connection establishment (reconnection) TCP连接建立的超时时间
int t1; // time-out of send or test APDUs (wait ack). RTU服务器端启动U格式测试过程后等待U格式测试应答的超时时间
int t2; // time-out for ack in case of no data messages (T2 < T1). S格式的超时时间
int t3; // time-out for sending TESFR in case of long idle state. 没有实际的数据交换时任何一端启动U格式测试过程的最大间隔时间
int k; // maximum difference N(R) and N(S)
int w; // lastest ack after receiving W I-Format message.
unsigned short usISUType; // 0,2=I ; 1=S ; 3=U
//int timer_Connect;
int timer_t0; // T0 param
int timer_Confirm; // associated of T1 param
int timer_t1; // T1 param
int timer_S_Ack; // associated of T2 param
time_t timer_t2; // T2 param
bool timer_S_Ackflag;
time_t timer_t3; // T3 param
bool timer_U_Testflag;
time_t time_action; // 总召间隔请求时间
}ST_IEC104_CTRL;
typedef struct {
unsigned char start; // 起始字节
unsigned char len; // 帧长度
unsigned char cntl1; // 控制域1-4
unsigned char cntl2;
unsigned char cntl3;
unsigned char cntl4;
}ST_APCI;
typedef struct { // 数据单元标识
unsigned char type; // 类型标识
unsigned char qual; // 可变结构限定词
unsigned char tx_cause1; // 传送原因2字节根据主站配置
unsigned char tx_cause2;
unsigned char commom_asdu1; // 公共地址(2字节)根据主站配置
unsigned char commom_asdu2;
}ST_ASDU_HEADER;
typedef struct {
ST_ASDU_HEADER header; // 数据单元标识
unsigned char data[243]; // 信息体
}ST_ASDU;
typedef struct {
ST_APCI apci;
ST_ASDU asdu;
}ST_IEC_APDU;
typedef struct
{
int iLength ; // 接收长度
unsigned short usISUType; // 0,2=I ; 1=S ; 3=U
unsigned short usSendNo; // 发送序号
unsigned short usRecvNo; // 接收序号
unsigned char *pszBuff; // 接收数据
}ST_RECVPKG ;
/*
typedef struct {
unsigned short usISUType ; // 0,2=I ; 1=S ; 3=U
unsigned short usLen ; // data length
unsigned short usSendNo; // 发送序号
unsigned short usRecvNo; // 接收序号
unsigned int LastAckSendNo; // last send number
unsigned int LastAckRecvNo; // last recv number
ST_ASDU_HEADER stAsduHead; // ASDU Header
unsigned int uiInfoAddr; // info body addr,3(byte)
unsigned int uiLastAckTx; // last respone send number
}ST_IEC104_INFO;
*/
// single point information w/quality
struct SIQ104{
unsigned char spi : 1, // off=0 / on=1
rs1 : 1, // reserve
rs2 : 1, // reserve
rs3 : 1, // reserve
bl : 1, // not blocked=0 / blocked=1
sb : 1, // not substituted=0 / substituted=1
nt : 1, // topical=0 / not topical=1
iv : 1; // valid=0 / not valid=1
};
// quality descriptor
struct QDS104{
unsigned char ov : 1, // no overflow=0 / overflow=1
rs1 : 1, // reserve
rs2 : 1, // reserve
rs3 : 1, // reserve
bl : 1, // not blocked=0 / blocked=1
sb : 1, // not substituted=0 / substituted=1
nt : 1, // topical=0 / not topical=1
iv : 1; // valid=0 / not valid=1
};
// single point value
struct SP104{
unsigned char addr0;
unsigned char addr1;
unsigned char addr2;
struct SIQ104 siq;
};
// single point value w/time tag CP56Time2a
struct SP104_T{
unsigned char addr0;
unsigned char addr1;
unsigned char addr2;
struct SIQ104 siq;
unsigned char time[7];
};
// short floating point value
struct SFP104{
unsigned char addr0;
unsigned char addr1;
unsigned char addr2;
//float value;
unsigned char val[4];
struct QDS104 qds;
};
// short floating point value
struct SFP104V{
unsigned char val[4];
struct QDS104 qds;
};
// short point value
struct SH104{
unsigned char addr0;
unsigned char addr1;
unsigned char addr2;
unsigned char val[2];
struct QDS104 qds;
};
// short point value
struct SHP104{
unsigned char val[2];
struct QDS104 qds;
};
// short floating point value w/time tag CP56Time2a
struct SFP104_T{
unsigned char addr0;
unsigned char addr1;
unsigned char addr2;
unsigned char val[4];
struct QDS104 qds;
unsigned char time[7];
};
// GIS负荷计算表结构定义iec_break_param
typedef struct {
unsigned char site_id[DEF_EQM_CODE_SIZE]; // 站点ID
unsigned char eqm_code[DEF_EQM_CODE_SIZE]; // 设备编码
unsigned char system_code[DEF_EQM_CODE_SIZE]; // 设备编码
unsigned char wstate; // 工作状态 1:发电 2:抽水 3:空闲
unsigned char is_close; // 断开状态 0:分 1:合
unsigned char is_fault; // 是否故障 1:故障 0:正常
float faild_rate; // 发生故障率%
time_t d_time; // 发生时间
double abort_current; // 断开电流(A)
double abort_voltage; // 断开电压V
}ST_IEC_GISBREAK_TABLE;
// 变压器负荷计算表结构定义iec_bydwork_param
typedef struct {
unsigned char site_id[DEF_EQM_CODE_SIZE]; // 站点ID
unsigned char eqm_code[DEF_EQM_CODE_SIZE]; // 设备编码
unsigned char system_code[DEF_EQM_CODE_SIZE]; // 设备编码
unsigned char state; // 状态类型: 1-发电状态 2抽水状态 3空闲状态
unsigned char is_fault; // 主变是否故障 1:故障 0:正常
time_t start_time; // 发电/抽水开始时间
time_t stop_time; // 发电/抽水结束时间
time_t real_time; // 发生时间
double voltage; // 高/低压出口电压(kV)
double current; // 高/低压出口电流(A)
}ST_IEC_BYQWORK_TABLE;
// 变压器运行工况表结构定义transformer_read_table
typedef struct {
unsigned char site_id[DEF_EQM_CODE_SIZE]; // 站点ID
unsigned char eqm_code[DEF_EQM_CODE_SIZE]; // 设备编码
unsigned char system_code[DEF_EQM_CODE_SIZE]; // 设备编码
unsigned char wstate; // 工作状态1-发电状态 2抽水状态 3空闲状态
time_t chkTime; // 监测时间
#if 0
double dcurJkyl; // 冷却水进口压力值
double dcurCkyl; // 冷却水出口压力值
double dCoolWaterTempEntry; // 冷却水进口温度
double dCoolWaterTempOuter; // 冷却水出口温度
//2020-05-23 add
double dOilPressEntry; // 变压器油进口油压力(MPa)
double dOilPressOuter; // 变压器油出口油压力(MPa)
double dOilTempEntry; // 变压器油进口温度
double dOilTempOuter; // 变压器油出口温度
double dOilTemperature; //主变本体油温点位
double dOilPosition; //主变本体油位点位
double dOilTopTemp; //主变顶层油温点位
double dOilPillowLevel; //主变油枕油位点位
double dWindingTemp; //主变绕组温度点位
#else
char dcurJkyl[16]; // 冷却水进口压力值
char dcurCkyl[16]; // 冷却水出口压力值
char dCoolWaterTempEntry[16]; // 冷却水进口温度
char dCoolWaterTempOuter[16]; // 冷却水出口温度
char dOilPressEntry[16]; // 变压器油进口油压力(MPa)
char dOilPressOuter[16]; // 变压器油出口油压力(MPa)
char dOilTempEntry[16]; // 变压器油进口温度
char dOilTempOuter[16]; // 变压器油出口温度
char dOilTemperature[16]; //主变本体油温点位
char dOilPosition[16]; //主变本体油位点位
char dOilTopTemp[16]; //主变顶层油温点位
char dOilPillowLevel[16]; //主变油枕油位点位
char dWindingTemp[16]; //主变绕组温度点位
#endif
}ST_IEC_BYQREAD_TABLE;
// 入库队列
typedef struct
{
unsigned char ctype; // 类型:1-运行工况 2:断路器数据 3:变压器数据
unsigned int iLength; // 数据长度
unsigned char *pData; // 数据ST_MASRTE_PARAM |ST_BREAKER_PARAM|ST_WORK_PARAM
}ST_DB_DATA;
// 变压器工作数据,通过104获取。
typedef struct {
unsigned char stype; // 状态类型: 1-发电状态 2抽水状态 3空闲状态
time_t start_time; // 发电/抽水开始时间
time_t stop_time; // 发电/抽水结束时间
double voltage; // 高/低压出口电压(v)
double current; // 高/低压出口电流(A)
double dcurYWei; // 最近油位值
double dcurYWen; // 最近油温值
double dcurJkyl; // 最近冷却水进口压力值
double dcurCkyl; // 最近冷却水出口压力值
}ST_IEC104_BYQ_DATA;
// 变压器设备对应关系、阈值缓存记录
//typedef struct {
//#ifdef _SITE_ID_TYPE_INT
// unsigned int SiteID; // 站点ID
//#else
// unsigned char SiteID[DEF_EQM_CODE_SIZE]; // 站点ID
//#endif
// unsigned char szSiteCode[DEF_EQM_CODE_SIZE]; // 物理站点唯一编码
// unsigned char szEqmCode[DEF_EQM_CODE_SIZE]; // 系统设备唯一编码
// unsigned char szSersorID[20]; // sersorid唯一编码
// double dYWei; // 油位阈值
// double dYWen; // 油温阈值
// double dJkyl; // 冷却水进口压力阈值
// double dCkyl; // 冷却水出口压力阈值
// ST_IEC104_BYQ_DATA stLastData; // 变压器最近一次104上传的数据
//}ST_BYQ_CACHE;
// 断路器104数据结构
//typedef struct {
// unsigned char is_fault; // 是否故障 1否 2
// time_t record_date; // 发生时间
// double voltage; // 断开电压(V)
// double current; // 断开电流(A)
// double failed_rate; // %电流故障百分比%
//}ST_IEC104_GIS_DATA;
// GIS设备对应关系、阈值缓存记录
//typedef struct {
//#ifdef _SITE_ID_TYPE_INT
// unsigned int SiteID; // 站点ID
//#else
// unsigned char SiteID[DEF_EQM_CODE_SIZE]; // 站点ID
//#endif
// unsigned char szEqmCode[DEF_EQM_CODE_SIZE]; // 设备唯一编码
// ST_IEC104_GIS_DATA stLastData; // 断路器最近一次104上传的数据
//}ST_GIS_IEC104_DATA;
// GIS设备外挂对应关系、阈值缓存记录
//typedef struct {
//#ifdef _SITE_ID_TYPE_INT
// unsigned int SiteID; // 站点ID
//#else
// unsigned char SiteID[DEF_EQM_CODE_SIZE]; // 站点ID
//#endif
// unsigned char szSersorID[20]; // sersorid唯一编码
// unsigned char szEqmCodeID[18]; // 设备唯一编码
// unsigned char name_des[128]; // 设备名称,描述
// double dNum ; // GIS放电电流(mA)
//}ST_GIS_CACHE;
// BLQ设备对应关系、阈值缓存记录
//typedef struct {
//#ifdef _SITE_ID_TYPE_INT
// unsigned int SiteID; // 站点ID
//#else
// unsigned char SiteID[DEF_EQM_CODE_SIZE]; // 站点ID
//#endif
// unsigned char szSersorID[20]; // sersorid唯一编码
// unsigned char szEqmCodeID[18]; // 设备唯一编码
// unsigned char name_des[128]; // 设备名称,描述
// double dMaxDL; // 避雷器放电电流图片识别阈值
//}ST_BLQ_CACHE;
#pragma pack (pop)
#endif // end