123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- #ifndef _IEC104_H
- #define _IEC104_H
- #include "iec10x.h"
- #include "project_var.h"
- #define IEC104_MAX_BUF_LEN 256
- #define IEC104_HEAD 0X68
- /*
- * PRIO
- * */
- #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
- /*
- * Ctrl U Function
- * */
- #define IEC104_U_FUNC_STARTDT 0x07 //0B00000111
- #define IEC104_U_FUNC_STOPDT 0x13 //0B00010011
- #define IEC104_U_FUNC_TESTER 0x43 //0B01000011
- #define IEC104_U_FUNC_STARTDT_ACK 0x0b //0B00001011
- #define IEC104_U_FUNC_STOPDT_ACK 0x23 //0B00100011
- #define IEC104_U_FUNC_TESTER_ACK 0x83 //0B10000011
- /*
- * ASDU Type Upload station address
- * */
- #define IEC104_ASDU_TYPE_M_DTU_INF_1 180
- #define IEC104_INFO_SIGNATURE 0XEB90EB90
- /*
- * Info Address
- * */
- #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
- /* base device information */
- #define IEC104_INFOADDR_BASE_DEVINFO 0X102001
- /*
- * device type
- */
- //#define ENDDEVICE_TYPE_ERR 0
- //#define ENDDEVICE_TYPE_HXPF 2
- #define ENDDEVICE_TYPE_HXTM 1
- #define ENDDEVICE_TYPE_HXGF 3
- #define AP_TYPE_BASE_INFO 4
- /* COT */
- #define AP_COT_BASE_INFO 18
- #pragma pack(1)
- /*
- * Iec104 package
- * */
- /* Control filed I type */
- typedef struct {
- uint32_t Type:1;
- uint32_t SendSn:15;
- uint32_t Reserve:1;
- uint32_t RecvSn:15;
- }IEC104_CTRL_I_T, *PIEC104_CTRL_I_T;
- /* Control filed S type */
- typedef struct {
- uint32_t Type1:1;
- uint32_t Type2:1;
- uint32_t Reserve:15;
- uint32_t RecvSn:15;
- }IEC104_CTRL_S_T, *PEC104_CTRL_S_TP;
- /* Control filed U type */
- typedef struct {
- uint32_t Type1:1;
- uint32_t Type2:1;
- uint32_t Startdt:1;
- uint32_t StartdtAck:1;
- uint32_t Stopdt:1;
- uint32_t StopdtAck:1;
- uint32_t Tester:1;
- uint32_t TesterAck:1;
- uint32_t Reserve:24;
- }IEC104_CTRL_U_T, *PIEC104_CTRL_U_T;
- /* Control filed type */
- typedef struct {
- uint32_t Type1:1;
- uint32_t Type2:1;
- uint32_t Reserve:30;
- }IEC104_CTRLType_T, *PIEC104_CTRLType_T;
- /* Control filed type */
- typedef struct {
- uint32_t Func:8;
- uint32_t 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{
- uint8_t Head;
- uint8_t Len;
- IEC104_CTRL_T Ctrl;
- uint8_t Asdu[1];
- }IEC104_DATA_T,*PIEC104_DATA_T;
- typedef struct {
- float Current;
- float Temperature;
- }Iec10x_DevA_Info_T, *PIec10x_DevA_Info_T;
- #pragma pack()
- /*
- * length
- * */
- #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, /*0*/
- IEC104_FLAG_SEND_CLOSED, /*1*/
- IEC104_FLAG_CLOSED, /*2*/
- IEC104_FLAG_LINK_INIT, /*3*/
- IEC104_FLAG_IDLE, /*4*/
- IEC104_FLAG_UPLOAD_ADDR, /*5*/
- IEC104_FLAG_START_LINK, /*6*/
- IEC104_FLAG_REQ_LINK, /*7*/
- IEC104_FLAG_RESET_REMOTE_LINK, /*8*/
- IEC104_FLAG_INIT_FIN, /*9*/
- IEC104_FLAG_CALL_ALLDATA, /*10*/
- IEC101_FLAG_CALL_GROURPDATA, /*11*/
- IEC104_FLAG_CALL_ACT_FIN, /*12*/
- IEC104_FLAG_CALL_SIG_TOTAL, /*13*/
- IEC104_FLAG_CALL_DET_TOTAL, /*14*/
- IEC104_FLAG_CLOCK_SYS, /*15*/
- IEC104_FLAG_TESTER, /*16*/
- IEC104_FLAG_TESTER_STOP, /*17*/
- IEC104_FLAG_CALL_GROUP, /*18*/
- IEC104_FLAG_CONNECT_SUCESS, /*19*/
- IEC104_FLAG_S_ACK, /*20*/
- };
- /*
- *********************************************************************************************************
- * EXTERN VARIABLE
- *********************************************************************************************************
- */
- extern uint8_t IEC104_STATE_FLAG_INIT;
- extern uint8_t IEC104_STATE_FLAG_CALLALL;
- extern uint8_t IEC104_STATE_FLAG_GROUP;
- extern uint8_t IEC104_STATE_FLAG_CLOCK;
- extern uint8_t IEC104_STATE_FLAG_PULSE;
- /*
- *********************************************************************************************************
- * FUNCTION
- *********************************************************************************************************
- */
- uint8_t Iec104_StateMachine(void);
- uint8_t IEC104_BuildSignal_Spon(uint8_t TimeFlag, uint8_t signalV, uint16_t addrV);
- uint8_t IEC104_BuildDetectF_Spont(uint8_t TimeFlag, float detectV, uint16_t addrV);
- void Iex104_Receive(uint8_t *buf, uint16_t len);
- uint8_t IEC104_BuildDetect_Spont(uint8_t TimeFlag, PIEC10X_DETECT_T detectV, uint16_t addrV);
- #endif
|