123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- #ifndef _IEC104_H
- #define _IEC104_H
- #include "iec10x.h"
- #include "iec10x_conf.h"
- #include "iec10x_type.h"
- #define IEC104_MAX_BUF_LEN 256
- #define IEC104_HEAD 0X68
- #define IEC104_PRIO_INITLINK 0
- #define IEC104_PRIO_CALLALL 1
- #define IEC104_PRIO_CALLGROUP 2
- #define IEC104_PRIO_CLOCK 3
- #define IEC104_PRIO_DELAY 3
- #define IEC104_PRIO_PULSE 0
- #define IEC104_PRIO_SPON 0
- #define IEC104_U_FUNC_STARTDT 0x07
- #define IEC104_U_FUNC_STOPDT 0x13
- #define IEC104_U_FUNC_TESTER 0x43
- #define IEC104_U_FUNC_STARTDT_ACK 0x0b
- #define IEC104_U_FUNC_STOPDT_ACK 0x23
- #define IEC104_U_FUNC_TESTER_ACK 0x83
- #define IEC104_ASDU_TYPE_M_DTU_INF_1 180
- #define IEC104_INFO_SIGNATURE 0XEB90EB90
- #define IEC104_DEV_TYPE_HXGF 0X03
- #define IEC104_DEV_TYPE_HXTM 0X01
- #define IEC104_INFOADDR_VALUE_HXGF 0X004001
- #define IEC104_INFOADDR_VALUE_HXTM 0X004201
- #define IEC104_INFOADDR_STATE_HXGF 0X000001
- #define IEC104_INFOADDR_STATE_HXTM 0X000301
- #define IEC104_INFOADDR_BASE_DEVINFO 0X102001
- #define ENDDEVICE_TYPE_HXTM 1
- #define ENDDEVICE_TYPE_HXGF 3
- #define AP_TYPE_BASE_INFO 4
- #define AP_COT_BASE_INFO 18
- #pragma pack(1)
- typedef struct
- {
- iec_32u Type : 1;
- iec_32u SendSn : 15;
- iec_32u Reserve : 1;
- iec_32u RecvSn : 15;
- } IEC104_CTRL_I_T, *PIEC104_CTRL_I_T;
- typedef struct
- {
- iec_32u Type1 : 1;
- iec_32u Type2 : 1;
- iec_32u Reserve : 15;
- iec_32u RecvSn : 15;
- } IEC104_CTRL_S_T, *PEC104_CTRL_S_TP;
- typedef struct
- {
- iec_32u Type1 : 1;
- iec_32u Type2 : 1;
- iec_32u Startdt : 1;
- iec_32u StartdtAck : 1;
- iec_32u Stopdt : 1;
- iec_32u StopdtAck : 1;
- iec_32u Tester : 1;
- iec_32u TesterAck : 1;
- iec_32u Reserve : 24;
- } IEC104_CTRL_U_T, *PIEC104_CTRL_U_T;
- typedef struct
- {
- iec_32u Type1 : 1;
- iec_32u Type2 : 1;
- iec_32u Reserve : 30;
- } IEC104_CTRLType_T, *PIEC104_CTRLType_T;
- typedef struct
- {
- iec_32u Func : 8;
- iec_32u Reserve : 24;
- } IEC104_CTRLFunc_T, *PIEC104_CTRLFunc_T;
- typedef union
- {
- IEC104_CTRL_I_T I;
- IEC104_CTRL_S_T S;
- IEC104_CTRL_U_T U;
- IEC104_CTRLType_T Type;
- IEC104_CTRLFunc_T Func;
- } IEC104_CTRL_T, *PIEC104_CTRL_T;
- typedef struct
- {
- iec_8u Head;
- iec_8u Len;
- IEC104_CTRL_T Ctrl;
- iec_8u Asdu[1];
- } IEC104_DATA_T, *PIEC104_DATA_T;
- typedef struct
- {
- float Current;
- float Temperature;
- } Iec10x_DevA_Info_T, *PIec10x_DevA_Info_T;
- #pragma pack()
- #define IEC104_HEAD_LEN (sizeof(IEC104_DATA_T) - 1)
- #define IEC104_ASDU_LEN (sizeof(IEC10X_ASDU_T) - 1)
- #define IEC104_INFO_LEN (sizeof(ASDU_INFO_T) - 1)
- #define IEC104_DATA_LEN (IEC104_HEAD_LEN + IEC104_ASDU_LEN + IEC104_INFO_LEN)
- enum
- {
- IEC104_FLAG_RECV_CLOSED,
- IEC104_FLAG_SEND_CLOSED,
- IEC104_FLAG_CLOSED,
- IEC104_FLAG_LINK_INIT,
- IEC104_FLAG_IDLE,
- IEC104_FLAG_UPLOAD_ADDR,
- IEC104_FLAG_START_LINK,
- IEC104_FLAG_REQ_LINK,
- IEC104_FLAG_RESET_REMOTE_LINK,
- IEC104_FLAG_INIT_FIN,
- IEC104_FLAG_CALL_ALLDATA,
- IEC101_FLAG_CALL_GROURPDATA,
- IEC104_FLAG_CALL_ACT_FIN,
- IEC104_FLAG_CALL_SIG_TOTAL,
- IEC104_FLAG_CALL_DET_TOTAL,
- IEC104_FLAG_CLOCK_SYS,
- IEC104_FLAG_TESTER,
- IEC104_FLAG_TESTER_STOP,
- IEC104_FLAG_CALL_GROUP,
- IEC104_FLAG_CONNECT_SUCESS,
- IEC104_FLAG_S_ACK,
- };
- extern iec_8u IEC104_STATE_FLAG_INIT;
- extern iec_8u IEC104_STATE_FLAG_CALLALL;
- extern iec_8u IEC104_STATE_FLAG_GROUP;
- extern iec_8u IEC104_STATE_FLAG_CLOCK;
- extern iec_8u IEC104_STATE_FLAG_PULSE;
- iec_8u Iec104_StateMachine(void);
- iec_8u IEC104_BuildSignal_Spon(iec_8u TimeFlag, iec_8u signalV, iec_16u addrV);
- iec_8u IEC104_BuildDetectF_Spont(iec_8u TimeFlag, float detectV, iec_16u addrV);
- void Iex104_Receive(iec_8u *buf, iec_16u len);
- iec_8u IEC104_BuildDetect_Spont(iec_8u TimeFlag, PIEC10X_DETECT_T detectV, iec_16u addrV);
- #endif
|