91 lines
2.4 KiB
C
Raw Permalink Normal View History

2025-04-30 16:24:29 +08:00
#ifndef IEC103_APDU_123_INCLUDED
#define IEC103_APDU_123_INCLUDED
#ifdef __cplusplus
extern "C" {
#endif
/************************************************************************/
#include <stdio.h>
#include "glbtypes.h"
#include "iec60870_define.h"
//ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󳤶ȣ<F3B3A4B6>Ĭ<EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD>޸ģ<DEB8><C4A3><EFBFBD>8<EFBFBD><38><EFBFBD><EFBFBD>ֹ0XFF+6<><36><EFBFBD><EFBFBD>
#define IEC103_APDU_MAX_LEN 264
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><ECBBBA><EFBFBD><EFBFBD>(<28><>103һ<33><D2BB><EFBFBD><EFBFBD><E3B9BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ֡<D2BB><D6A1><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4>)
#define IEC103_RECV_ASDU_BUFFER_MAX_COUNT 4
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޷<EFBFBD><DEB7>ŵ<EFBFBD> <20><>asdu<64><75><EFBFBD><EFBFBD>apdu
#define GetIEC103APDULen(databuf) ( *(databuf+1) + 6)
//<2F><><EFBFBD>ñ<EFBFBD><C3B1>ij<EFBFBD><C4B3><EFBFBD>
#define SetIEC103APDULen(databuf,bufLen) ( databuf[1]=(ST_UCHAR)(bufLen-6), databuf[2]=databuf[1] )
typedef struct
{
ST_UCHAR ctrl_PRM; //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ST_UCHAR ctrl_FCB_ACD; //<2F>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǽ<EFBFBD><C7BD><EFBFBD>
ST_UCHAR ctrl_FCV_DFC; //<2F>ͻ<EFBFBD><CDBB>˳<EFBFBD>ʼ<EFBFBD><CABC>Ϊ1<CEAA><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ
ST_UCHAR ctrl_FUN; //
} IEC103_CTRL;
typedef enum {
IEC103_LINK_TYPE_SOCK=0,
IEC103_LINK_TYPE_SERIAL,
IEC103_LINK_TYPE_CAN
} IEC103_LINK_TYPE;
/****iec103<30><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ****/
typedef struct
{
ST_UCHAR linkAddr; //<2F><>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ַ
ST_UCHAR commAddr; //ASDU<44>еĵ<D0B5>ַ<EFBFBD><D6B7>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>ַ<EFBFBD><D6B7>ͬ
ST_INT lastFrameLen; //<2F><><EFBFBD>ճ<EFBFBD><D5B3><EFBFBD>
ST_DOUBLE lastFrameTime; //<2F>ϴ<EFBFBD><CFB4>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ݵ<EFBFBD>ʱ<EFBFBD><CAB1>,<2C><><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><E4B3A4><EFBFBD><EFBFBD>
ST_UCHAR lastFrame[IEC103_APDU_MAX_LEN]; //<2F><>һ<EFBFBD><D2BB>֡δ<D6A1><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ST_INT apdu_send_len;
ST_UCHAR apdu_send[IEC103_APDU_MAX_LEN];
//<2F><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD>ASDU<44><55><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3B4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EBA3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD><D4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>漰lastFrame<6D><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD> <20>ϴ<EFBFBD><CFB4>յ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD>β<EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ST_INT asdu_recv_num;
ST_UCHAR asdu_recv_Buffer[IEC103_RECV_ASDU_BUFFER_MAX_COUNT][IEC103_APDU_MAX_LEN];
} IEC103_LINK_PROPER;
ST_RET iec103_asdu_head_from( const IEC_ASDU_HEAD *asdu_head, ST_UCHAR *asdu );
ST_RET iec103_asdu_head_set( IEC_ASDU_HEAD *asdu_head, const ST_UCHAR *asdu );
ST_RET iec103_asdu_fixtime_send( ST_UCHAR commAddr, ST_UCHAR devAddr, ST_UCHAR *sendBuf );
ST_RET iec103_asdu_gi_send( ST_UCHAR commAddr, ST_UCHAR devAddr, ST_UCHAR *sendBuf );
ST_INT iec103_link_recv_process(IEC103_LINK_PROPER *link_proper,ST_UCHAR *recvBuf,ST_INT recvLen);
ST_RET iec103_link_ctrl_get( const ST_UCHAR ctrlByte, IEC103_CTRL *ctrl );
ST_UCHAR iec103_link_ctrl_set( const IEC103_CTRL ctrl );
/************************************************************************/
#ifdef __cplusplus
}
#endif
#endif