85 lines
2.3 KiB
C
85 lines
2.3 KiB
C
![]() |
|
|||
|
|
|||
|
|
|||
|
#ifndef IEC104_APDU_123_INCLUDED
|
|||
|
#define IEC104_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>4<EFBFBD><34><EFBFBD><EFBFBD>ֹ0XFF+2<><32><EFBFBD><EFBFBD>
|
|||
|
#define IEC104_APDU_MAX_LEN 260
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>컺<EFBFBD><ECBBBA><EFBFBD><EFBFBD>(һ<><D2BB>select,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
|||
|
#define IEC104_RECV_ASDU_BUFFER_MAX_COUNT 16
|
|||
|
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB7>ŵ<EFBFBD>
|
|||
|
#define GetIEC104APDULen(databuf) (*(databuf+1) + 2)
|
|||
|
|
|||
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
#define GetIEC104SendCount(databuf) (databuf[2] + databuf[3]*0x100)
|
|||
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
#define GetIEC104RecvCount(databuf) (databuf[4] + databuf[5]*0x100)
|
|||
|
|
|||
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1>ij<EFBFBD><C4B3><EFBFBD>
|
|||
|
#define SetIEC104APDULen(databuf,bufLen) (databuf[1]=(ST_UCHAR)(bufLen-2) )
|
|||
|
|
|||
|
//<2F><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
#define SetIEC104SendCount(dataBuf,sCnt) (dataBuf[2]=(ST_UCHAR)(sCnt&0xFF),dataBuf[3]=(ST_UCHAR)(sCnt/0x100) )
|
|||
|
//<2F><><EFBFBD>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
#define SetIEC104RecvCount(dataBuf,sCnt) (dataBuf[4]=(ST_UCHAR)(sCnt&0xFF),dataBuf[5]=(ST_UCHAR)(sCnt/0x100) )
|
|||
|
|
|||
|
|
|||
|
|
|||
|
typedef enum {
|
|||
|
IEC104_LINK_TYPE_SOCK=0, //104ֻ<34><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪԤ<CEAA><D4A4>, <20>Ȳ<EFBFBD>ɾ<EFBFBD><C9BE>
|
|||
|
IEC104_LINK_TYPE_SERIAL,
|
|||
|
IEC104_LINK_TYPE_CAN
|
|||
|
} IEC104_LINK_TYPE;
|
|||
|
|
|||
|
|
|||
|
/****iec104<30><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ****/
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
ST_INT lastFrameLen; //<2F><><EFBFBD>ճ<EFBFBD><D5B3><EFBFBD>
|
|||
|
ST_INT lastFramExpectLen;
|
|||
|
ST_DOUBLE lastFrameTime; //<2F>ϴ<EFBFBD><CFB4>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ݵ<EFBFBD>ʱ<EFBFBD><CAB1>,<2C><><EFBFBD><EFBFBD>ʱ<EFBFBD>䳤<EFBFBD><E4B3A4><EFBFBD><EFBFBD>
|
|||
|
ST_UCHAR lastFrame[IEC104_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>
|
|||
|
|
|||
|
|
|||
|
//<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[IEC104_RECV_ASDU_BUFFER_MAX_COUNT][IEC104_APDU_MAX_LEN];
|
|||
|
|
|||
|
} IEC104_LINK_PROPER;
|
|||
|
|
|||
|
|
|||
|
ST_RET iec104_asdu_head_from( const IEC_ASDU_HEAD *asdu_head, ST_UCHAR *asdu );
|
|||
|
|
|||
|
ST_RET iec104_asdu_head_set( IEC_ASDU_HEAD *asdu_head, const ST_UCHAR *asdu );
|
|||
|
|
|||
|
ST_RET iec104_asdu_fixtime_send( ST_UCHAR commAddr, ST_UCHAR devAddr, ST_UCHAR *sendBuf );
|
|||
|
|
|||
|
ST_RET iec104_asdu_gi_send( ST_UCHAR commAddr, ST_UCHAR devAddr, ST_UCHAR *sendBuf );
|
|||
|
|
|||
|
ST_INT iec104_link_recv_process(IEC104_LINK_PROPER *link_proper,ST_UCHAR *recvBuf,ST_INT recvLen);
|
|||
|
|
|||
|
|
|||
|
/************************************************************************/
|
|||
|
#ifdef __cplusplus
|
|||
|
}
|
|||
|
#endif
|
|||
|
|
|||
|
|
|||
|
#endif
|
|||
|
|