#ifndef IEC103_APDU_123_INCLUDED #define IEC103_APDU_123_INCLUDED #ifdef __cplusplus extern "C" { #endif /************************************************************************/ #include #include "glbtypes.h" #include "iec60870_define.h" //每个数据侦的最大长度(默认,不修改)加8,防止0XFF+6溢出 #define IEC103_APDU_MAX_LEN 264 //结束服务层数据侦缓冲区(对103一个足够,不可能一帧数据有多条命令的情况,4仅仅是预留) #define IEC103_RECV_ASDU_BUFFER_MAX_COUNT 4 //传入的指针必须是无符号的 是asdu而非apdu #define GetIEC103APDULen(databuf) ( *(databuf+1) + 6) //设置报文长度 #define SetIEC103APDULen(databuf,bufLen) ( databuf[1]=(ST_UCHAR)(bufLen-6), databuf[2]=databuf[1] ) typedef struct { ST_UCHAR ctrl_PRM; //初始化的时候设置 ST_UCHAR ctrl_FCB_ACD; //客户端是下发,服务器是接收 ST_UCHAR ctrl_FCV_DFC; //客户端初始化为1,服务器不要 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服务器端链路层控制信息****/ typedef struct { ST_UCHAR linkAddr; //链路层地址 ST_UCHAR commAddr; //ASDU中的地址,一般与链路地址相同 ST_INT lastFrameLen; //接收长度 ST_DOUBLE lastFrameTime; //上次收到数据的时刻,如果时间长清空 ST_UCHAR lastFrame[IEC103_APDU_MAX_LEN]; //上一次帧未接收完整,留待下次一起处理 ST_INT apdu_send_len; ST_UCHAR apdu_send[IEC103_APDU_MAX_LEN]; //保存收到的ASDU,等待服务层处理,这里仅仅保存指针?——不可以,由于涉及lastFrame的问题 //存在 上次收到一半数据,这次补全,但又发了一半数据 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