#ifndef IEC104TYPES_H #define IEC104TYPES_H #ifdef __cplusplus extern "C" { #endif #pragma pack(push, 1) enum class FixAreaCommandType{ FixAreaCommandType_Preset = 0, FixAreaCommandType_Execut = 1, FixAreaCommandType_Revoke = 2 }; typedef struct { unsigned char start; unsigned char len; unsigned char field1; unsigned char field2; unsigned char field3; unsigned char field4; } APCI; typedef struct { unsigned char type; unsigned char qual; unsigned char tx_cause_1; unsigned char tx_cause_2; unsigned char commom_asdu_1; unsigned char commom_asdu_2; } ASDU_header; typedef struct { ASDU_header header; unsigned char data[243]; } ASDU; typedef struct { APCI apci; ASDU asdu; } APDU; typedef struct { unsigned char spi : 1; unsigned char rs1 : 1; unsigned char rs2 : 1; unsigned char rs3 : 1; unsigned char bl : 1; unsigned char sb : 1; unsigned char nt : 1; unsigned char iv : 1; } SIQ104; typedef struct { unsigned char ov : 1; unsigned char rs1 : 1; unsigned char rs2 : 1; unsigned char rs3 : 1; unsigned char bl : 1; unsigned char sb : 1; unsigned char nt : 1; unsigned char iv : 1; } QDS104; typedef struct { unsigned char addr0; unsigned char addr1; unsigned char addr2; SIQ104 siq; } SP104; typedef struct { unsigned char addr0; unsigned char addr1; unsigned char addr2; SIQ104 siq; unsigned char time[7]; } SP104_T; typedef struct { unsigned char addr0; unsigned char addr1; unsigned char addr2; unsigned char val[4]; QDS104 qds; } SFP104; typedef struct { unsigned char addr0; unsigned char addr1; unsigned char addr2; unsigned char val[4]; QDS104 qds; unsigned char time[7]; } SFP104_T; typedef struct { ASDU_header addr0; unsigned char addr1; } ER104; typedef struct { ASDU_header head; unsigned char msgadder1; //信息对象地址 unsigned char msgadder2; unsigned char msgadder3; unsigned char eqpmtadder1; // 装置地址 unsigned char eqpmtadder2; unsigned char addr1; //信息序号 unsigned char addr2; unsigned char dpvalue; // 双点信息 unsigned char dsTime1; // 相对时间 unsigned char dsTime2; unsigned char erid1; //故障序号 unsigned char erid2; unsigned char time[7]; unsigned char num; } ER140_Head; typedef struct { unsigned char Num1; unsigned char Num2; unsigned char ERType; //unsigned char value[]; } ER140_Data; typedef struct { ASDU_header head; unsigned char msgadder1; unsigned char msgadder2; unsigned char msgadder3; unsigned char eqpmtadder1; unsigned char eqpmtadder2; unsigned char addr1; unsigned char addr2; unsigned char evetnum; unsigned char time[7]; unsigned char ernum; } ER142_Head; typedef struct { unsigned char Num1; unsigned char Num2; unsigned char ERType; //unsigned char value[]; } ER142_Data; typedef struct { ASDU_header head; unsigned char msgadder1; //信息对象地址 unsigned char msgadder2; unsigned char msgadder3; unsigned char eqpmtadder1; //装置地址 unsigned char eqpmtadder2; unsigned char addr1; //故障序号 unsigned char addr2; unsigned char ngd;//大数量 } ER143_Head; typedef struct { unsigned char nTime[2]; unsigned char nNumber; //unsigned char value[]; } ER143_SData; typedef struct { unsigned char nTime[4]; unsigned char nNumber; //unsigned char value[]; } ER143_LData; typedef struct { unsigned char Num1; unsigned char Num2; unsigned char ERType; //unsigned char value[]; } ER143_Data; enum FixValueType { GetFixAll=241, //召唤定值/返回 SetFixValue=249, //修改定制预制/返回 RunFixValue=250, //修改定值执行 CancelFixValue=251, //撤销修改 }; //定值基础包 typedef struct { unsigned char msgadder1; //信息对象地址 unsigned char msgadder2; unsigned char msgadder3; unsigned char eqpmtadder1; //装置地址 unsigned char eqpmtadder2; unsigned char msgID; //信息序号 unsigned char rii; //返回标示 unsigned char NGD; //通用分类数据集数目 //unsigned char value[]; } P_EP_145; //定值数据 typedef struct { unsigned char GIN; //信息对象地址 unsigned char GINnum; unsigned char KOD; //描述类别(KOD) = 0 unsigned char FixValueType; //定值类型 unsigned char FixValueSize; //定值大小 unsigned char FixValueNo; //定值序号 //unsigned char value[];值数据 } P_145_Area; // 文件传输类型标识 enum FileTransferType { F_FR_NA_1 = 120, // 文件准备就绪 F_SR_NA_1 = 121, // 节准备就绪 F_SC_NA_1 = 122, // 召唤目录,选择文件,召唤文件,召唤节 F_LS_NA_1 = 123, // 最后的节,最后的段 F_AF_NA_1 = 124, // 认可文件,认可段 F_SG_NA_1 = 125, // 段 F_DR_NA_1 = 126 // 目录 }; // 文件传输限定词 enum FileTransferQualifier { FTRQ_SelectFile = 1, // 选择文件 FTRQ_RequestFile = 2, // 请求文件 FTRQ_SelectSection = 3, // 选择节 FTRQ_RequestSection = 4, // 请求节 FTRQ_Directory = 5, // 目录 FTRQ_LastSection = 6, // 最后的节 FTRQ_AckFile = 7, // 认可文件 FTRQ_AckSection = 8 // 认可段 }; enum SCQFile{ SCQ_Null=0, //<0>:=缺省 SCQ_SelectFile=1, //<1>:=选择文件 SCQ_RequestFile=2, //<2>:=请求文件 SCQ_StopSelect=3, //<3>:=停止激活文件 SCQ_DeleteFile=4, //<4>:=删除文件 SCQ_SelectSection=5, //<5>:=选择节 SCQ_RequesSection=6, //<6>:=请求节 SCQ_StopSection=7, //<7>:=停止激活节 }; // 文件传输状态 enum FileTransferStatus { FTS_Success = 0, // 成功 FTS_InvalidName = 1, // 无效的文件名 FTS_NotReady = 2, // 文件未准备好 FTS_ChecksumError = 3, // 校验和错误 FTS_UnexpectedSection = 4, // 意外的节 FTS_NoSuchFile = 5, // 文件不存在 FTS_AccessDenied = 6 // 访问被拒绝 }; // 文件准备就绪 (F_FR_NA_1) typedef struct { unsigned char msgadder1; //信息对象地址 unsigned char msgadder2; unsigned char msgadder3; unsigned char name1; // 文件名(NOF)1 unsigned char name2; // 文件名(NOF)2 unsigned char length1; // 文件名长度(LOF) unsigned char length2; // 文件名长度(LOF) unsigned char length3; // 文件名长度(LOF) unsigned char ready_status; // 准备状态FRQ限定词 } FileReady; // 节准备就绪 (F_SR_NA_1) typedef struct { unsigned char msgadder1; //信息对象地址 unsigned char msgadder2; unsigned char msgadder3; unsigned char name1; // 文件名(NOF)1 unsigned char name2; // 文件名(NOF)2 unsigned char section_name; // 节名字(NOS) unsigned char length1; // 节长度(LOF) unsigned char length2; // 节长度(LOF) unsigned char length3; // 节长度(LOF) unsigned char ready_status; // 准备状态SRQ限定词 } SectionReady; // 文件召唤/选择 (F_SC_NA_1) typedef struct { unsigned char msgadder1; //信息对象地址 unsigned char msgadder2; unsigned char msgadder3; unsigned char name1; // 文件名(NOF)1 unsigned char name2; // 文件名(NOF)2 unsigned char section_name; // 节名NOS unsigned char qualifier; // 限定词 } FileCall; // 最后的节/段 (F_LS_NA_1) typedef struct { unsigned char msgadder1; //信息对象地址 unsigned char msgadder2; unsigned char msgadder3; unsigned char name1; // 文件名1 unsigned char name2; // 文件名2 unsigned char section_name; // 节名 unsigned char last_section; // 最后的节 //限定词 unsigned char checksum; // 校验和 } LastSection; // 认可文件/段 (F_AF_NA_1) typedef struct { unsigned char msgadder1; //信息对象地址 unsigned char msgadder2; unsigned char msgadder3; unsigned char name1; // 文件名1 unsigned char name2; // 文件名2 unsigned char section_name; // 节名 unsigned char ack_status; // 认可状态 } FileAck; // 段 (F_SG_NA_1) typedef struct { unsigned char msgadder1; //信息对象地址 unsigned char msgadder2; unsigned char msgadder3; unsigned char name1; // 文件名1 unsigned char name2; // 文件名2 unsigned char section_name; // 节名 unsigned char segment_len; // 段长度 unsigned char segment_data[240]; // 段数据 } FileSegment; // 目录 (F_DR_NA_1) typedef struct { unsigned char msgadder1; //信息对象地址 unsigned char msgadder2; unsigned char msgadder3; unsigned char name1; // 文件名1 unsigned char name2; // 文件名2 unsigned char file_size1; // 文件大小1 unsigned char file_size2; // 文件大小2 unsigned char file_size3; // 文件大小3 unsigned char file_Status; // 文件状态 } FileDirectory; // 双点信息品质描述词 typedef struct { unsigned char dpi : 2; // 双点信息值 (0,1,2,3) unsigned char res1 : 1; // 保留位 unsigned char bl : 1; // 封锁 unsigned char sb : 1; // 取代 unsigned char res2 : 1; // 保留位 unsigned char iv : 1; // 无效 } DIQ104; // 双点信息(不带时标) typedef struct { unsigned char addr0; // 地址低字节 unsigned char addr1; // 地址中字节 unsigned char addr2; // 地址高字节 DIQ104 diq; // 双点信息品质描述词 } DP104; // 带时标的标度化测量值 typedef struct { unsigned char addr0; // 地址低字节 unsigned char addr1; // 地址中字节 unsigned char addr2; // 地址高字节 unsigned char value_low; // 标度化值低字节 unsigned char value_high; // 标度化值高字节 QDS104 qds; // 品质描述词 unsigned char time[7]; // CP56Time2a时标 } ScaledValueWithTime; #pragma pack(pop) #ifdef __cplusplus } #endif #endif // IEC104TYPES_H