IEC104Types.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416
  1. #ifndef IEC104TYPES_H
  2. #define IEC104TYPES_H
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. #pragma pack(push, 1)
  7. enum class FixAreaCommandType{
  8. FixAreaCommandType_Preset = 0,
  9. FixAreaCommandType_Execut = 1,
  10. FixAreaCommandType_Revoke = 2
  11. };
  12. typedef struct {
  13. unsigned char start;
  14. unsigned char len;
  15. unsigned char field1;
  16. unsigned char field2;
  17. unsigned char field3;
  18. unsigned char field4;
  19. } APCI;
  20. typedef struct {
  21. unsigned char type;
  22. unsigned char qual;
  23. unsigned char tx_cause_1;
  24. unsigned char tx_cause_2;
  25. unsigned char commom_asdu_1;
  26. unsigned char commom_asdu_2;
  27. } ASDU_header;
  28. typedef struct {
  29. ASDU_header header;
  30. unsigned char data[243];
  31. } ASDU;
  32. typedef struct {
  33. APCI apci;
  34. ASDU asdu;
  35. } APDU;
  36. typedef struct {
  37. unsigned char spi : 1;
  38. unsigned char rs1 : 1;
  39. unsigned char rs2 : 1;
  40. unsigned char rs3 : 1;
  41. unsigned char bl : 1;
  42. unsigned char sb : 1;
  43. unsigned char nt : 1;
  44. unsigned char iv : 1;
  45. } SIQ104;
  46. typedef struct {
  47. unsigned char ov : 1;
  48. unsigned char rs1 : 1;
  49. unsigned char rs2 : 1;
  50. unsigned char rs3 : 1;
  51. unsigned char bl : 1;
  52. unsigned char sb : 1;
  53. unsigned char nt : 1;
  54. unsigned char iv : 1;
  55. } QDS104;
  56. typedef struct {
  57. unsigned char addr0;
  58. unsigned char addr1;
  59. unsigned char addr2;
  60. SIQ104 siq;
  61. } SP104;
  62. typedef struct {
  63. unsigned char addr0;
  64. unsigned char addr1;
  65. unsigned char addr2;
  66. SIQ104 siq;
  67. unsigned char time[7];
  68. } SP104_T;
  69. typedef struct {
  70. unsigned char addr0;
  71. unsigned char addr1;
  72. unsigned char addr2;
  73. unsigned char val[4];
  74. QDS104 qds;
  75. } SFP104;
  76. typedef struct {
  77. unsigned char addr0;
  78. unsigned char addr1;
  79. unsigned char addr2;
  80. unsigned char val[4];
  81. QDS104 qds;
  82. unsigned char time[7];
  83. } SFP104_T;
  84. typedef struct {
  85. ASDU_header addr0;
  86. unsigned char addr1;
  87. } ER104;
  88. typedef struct {
  89. ASDU_header head;
  90. unsigned char msgadder1; //信息对象地址
  91. unsigned char msgadder2;
  92. unsigned char msgadder3;
  93. unsigned char eqpmtadder1; // 装置地址
  94. unsigned char eqpmtadder2;
  95. unsigned char addr1; //信息序号
  96. unsigned char addr2;
  97. unsigned char dpvalue; // 双点信息
  98. unsigned char dsTime1; // 相对时间
  99. unsigned char dsTime2;
  100. unsigned char erid1; //故障序号
  101. unsigned char erid2;
  102. unsigned char time[7];
  103. unsigned char num;
  104. } ER140_Head;
  105. typedef struct {
  106. unsigned char Num1;
  107. unsigned char Num2;
  108. unsigned char ERType;
  109. //unsigned char value[];
  110. } ER140_Data;
  111. typedef struct {
  112. ASDU_header head;
  113. unsigned char msgadder1;
  114. unsigned char msgadder2;
  115. unsigned char msgadder3;
  116. unsigned char eqpmtadder1;
  117. unsigned char eqpmtadder2;
  118. unsigned char addr1;
  119. unsigned char addr2;
  120. unsigned char evetnum;
  121. unsigned char time[7];
  122. unsigned char ernum;
  123. } ER142_Head;
  124. typedef struct {
  125. unsigned char Num1;
  126. unsigned char Num2;
  127. unsigned char ERType;
  128. //unsigned char value[];
  129. } ER142_Data;
  130. typedef struct {
  131. ASDU_header head;
  132. unsigned char msgadder1; //信息对象地址
  133. unsigned char msgadder2;
  134. unsigned char msgadder3;
  135. unsigned char eqpmtadder1; //装置地址
  136. unsigned char eqpmtadder2;
  137. unsigned char addr1; //故障序号
  138. unsigned char addr2;
  139. unsigned char ngd;//大数量
  140. } ER143_Head;
  141. typedef struct {
  142. unsigned char nTime[2];
  143. unsigned char nNumber;
  144. //unsigned char value[];
  145. } ER143_SData;
  146. typedef struct {
  147. unsigned char nTime[4];
  148. unsigned char nNumber;
  149. //unsigned char value[];
  150. } ER143_LData;
  151. typedef struct {
  152. unsigned char Num1;
  153. unsigned char Num2;
  154. unsigned char ERType;
  155. //unsigned char value[];
  156. } ER143_Data;
  157. enum FixValueType
  158. {
  159. GetFixAll=241, //召唤定值/返回
  160. SetFixValue=249, //修改定制预制/返回
  161. RunFixValue=250, //修改定值执行
  162. CancelFixValue=251, //撤销修改
  163. };
  164. //定值基础包
  165. typedef struct {
  166. unsigned char msgadder1; //信息对象地址
  167. unsigned char msgadder2;
  168. unsigned char msgadder3;
  169. unsigned char eqpmtadder1; //装置地址
  170. unsigned char eqpmtadder2;
  171. unsigned char msgID; //信息序号
  172. unsigned char rii; //返回标示
  173. unsigned char NGD; //通用分类数据集数目
  174. //unsigned char value[];
  175. } P_EP_145;
  176. //定值数据
  177. typedef struct {
  178. unsigned char GIN; //信息对象地址
  179. unsigned char GINnum;
  180. unsigned char KOD; //描述类别(KOD) = 0
  181. unsigned char FixValueType; //定值类型
  182. unsigned char FixValueSize; //定值大小
  183. unsigned char FixValueNo; //定值序号
  184. //unsigned char value[];值数据
  185. } P_145_Area;
  186. // 文件传输类型标识
  187. enum FileTransferType {
  188. F_FR_NA_1 = 120, // 文件准备就绪
  189. F_SR_NA_1 = 121, // 节准备就绪
  190. F_SC_NA_1 = 122, // 召唤目录,选择文件,召唤文件,召唤节
  191. F_LS_NA_1 = 123, // 最后的节,最后的段
  192. F_AF_NA_1 = 124, // 认可文件,认可段
  193. F_SG_NA_1 = 125, // 段
  194. F_DR_NA_1 = 126 // 目录
  195. };
  196. // 文件传输限定词
  197. enum FileTransferQualifier {
  198. FTRQ_SelectFile = 1, // 选择文件
  199. FTRQ_RequestFile = 2, // 请求文件
  200. FTRQ_SelectSection = 3, // 选择节
  201. FTRQ_RequestSection = 4, // 请求节
  202. FTRQ_Directory = 5, // 目录
  203. FTRQ_LastSection = 6, // 最后的节
  204. FTRQ_AckFile = 7, // 认可文件
  205. FTRQ_AckSection = 8 // 认可段
  206. };
  207. enum SCQFile{
  208. SCQ_Null=0, //<0>:=缺省
  209. SCQ_SelectFile=1, //<1>:=选择文件
  210. SCQ_RequestFile=2, //<2>:=请求文件
  211. SCQ_StopSelect=3, //<3>:=停止激活文件
  212. SCQ_DeleteFile=4, //<4>:=删除文件
  213. SCQ_SelectSection=5, //<5>:=选择节
  214. SCQ_RequesSection=6, //<6>:=请求节
  215. SCQ_StopSection=7, //<7>:=停止激活节
  216. };
  217. // 文件传输状态
  218. enum FileTransferStatus {
  219. FTS_Success = 0, // 成功
  220. FTS_InvalidName = 1, // 无效的文件名
  221. FTS_NotReady = 2, // 文件未准备好
  222. FTS_ChecksumError = 3, // 校验和错误
  223. FTS_UnexpectedSection = 4, // 意外的节
  224. FTS_NoSuchFile = 5, // 文件不存在
  225. FTS_AccessDenied = 6 // 访问被拒绝
  226. };
  227. // 文件准备就绪 (F_FR_NA_1)
  228. typedef struct {
  229. unsigned char msgadder1; //信息对象地址
  230. unsigned char msgadder2;
  231. unsigned char msgadder3;
  232. unsigned char name1; // 文件名(NOF)1
  233. unsigned char name2; // 文件名(NOF)2
  234. unsigned char length1; // 文件名长度(LOF)
  235. unsigned char length2; // 文件名长度(LOF)
  236. unsigned char length3; // 文件名长度(LOF)
  237. unsigned char ready_status; // 准备状态FRQ限定词
  238. } FileReady;
  239. // 节准备就绪 (F_SR_NA_1)
  240. typedef struct {
  241. unsigned char msgadder1; //信息对象地址
  242. unsigned char msgadder2;
  243. unsigned char msgadder3;
  244. unsigned char name1; // 文件名(NOF)1
  245. unsigned char name2; // 文件名(NOF)2
  246. unsigned char section_name; // 节名字(NOS)
  247. unsigned char length1; // 节长度(LOF)
  248. unsigned char length2; // 节长度(LOF)
  249. unsigned char length3; // 节长度(LOF)
  250. unsigned char ready_status; // 准备状态SRQ限定词
  251. } SectionReady;
  252. // 文件召唤/选择 (F_SC_NA_1)
  253. typedef struct {
  254. unsigned char msgadder1; //信息对象地址
  255. unsigned char msgadder2;
  256. unsigned char msgadder3;
  257. unsigned char name1; // 文件名(NOF)1
  258. unsigned char name2; // 文件名(NOF)2
  259. unsigned char section_name; // 节名NOS
  260. unsigned char qualifier; // 限定词
  261. } FileCall;
  262. // 最后的节/段 (F_LS_NA_1)
  263. typedef struct {
  264. unsigned char msgadder1; //信息对象地址
  265. unsigned char msgadder2;
  266. unsigned char msgadder3;
  267. unsigned char name1; // 文件名1
  268. unsigned char name2; // 文件名2
  269. unsigned char section_name; // 节名
  270. unsigned char last_section; // 最后的节 //限定词
  271. unsigned char checksum; // 校验和
  272. } LastSection;
  273. // 认可文件/段 (F_AF_NA_1)
  274. typedef struct {
  275. unsigned char msgadder1; //信息对象地址
  276. unsigned char msgadder2;
  277. unsigned char msgadder3;
  278. unsigned char name1; // 文件名1
  279. unsigned char name2; // 文件名2
  280. unsigned char section_name; // 节名
  281. unsigned char ack_status; // 认可状态
  282. } FileAck;
  283. // 段 (F_SG_NA_1)
  284. typedef struct {
  285. unsigned char msgadder1; //信息对象地址
  286. unsigned char msgadder2;
  287. unsigned char msgadder3;
  288. unsigned char name1; // 文件名1
  289. unsigned char name2; // 文件名2
  290. unsigned char section_name; // 节名
  291. unsigned char segment_len; // 段长度
  292. unsigned char segment_data[240]; // 段数据
  293. } FileSegment;
  294. // 目录 (F_DR_NA_1)
  295. typedef struct {
  296. unsigned char msgadder1; //信息对象地址
  297. unsigned char msgadder2;
  298. unsigned char msgadder3;
  299. unsigned char name1; // 文件名1
  300. unsigned char name2; // 文件名2
  301. unsigned char file_size1; // 文件大小1
  302. unsigned char file_size2; // 文件大小2
  303. unsigned char file_size3; // 文件大小3
  304. unsigned char file_Status; // 文件状态
  305. } FileDirectory;
  306. // 双点信息品质描述词
  307. typedef struct {
  308. unsigned char dpi : 2; // 双点信息值 (0,1,2,3)
  309. unsigned char res1 : 1; // 保留位
  310. unsigned char bl : 1; // 封锁
  311. unsigned char sb : 1; // 取代
  312. unsigned char res2 : 1; // 保留位
  313. unsigned char iv : 1; // 无效
  314. } DIQ104;
  315. // 双点信息(不带时标)
  316. typedef struct {
  317. unsigned char addr0; // 地址低字节
  318. unsigned char addr1; // 地址中字节
  319. unsigned char addr2; // 地址高字节
  320. DIQ104 diq; // 双点信息品质描述词
  321. } DP104;
  322. // 带时标的标度化测量值
  323. typedef struct {
  324. unsigned char addr0; // 地址低字节
  325. unsigned char addr1; // 地址中字节
  326. unsigned char addr2; // 地址高字节
  327. unsigned char value_low; // 标度化值低字节
  328. unsigned char value_high; // 标度化值高字节
  329. QDS104 qds; // 品质描述词
  330. unsigned char time[7]; // CP56Time2a时标
  331. } ScaledValueWithTime;
  332. #pragma pack(pop)
  333. #ifdef __cplusplus
  334. }
  335. #endif
  336. #endif // IEC104TYPES_H