commCPU_SUPV/code/link60870/inc/iec104_link_cln.h

157 lines
4.1 KiB
C
Raw Normal View History

2025-04-30 16:24:29 +08:00
#ifndef IEC104_LINK_CLN_123_INCLUDED
#define IEC104_LINK_CLN_123_INCLUDED
#ifdef __cplusplus
extern "C" {
#endif
/************************************************************************/
#include "iec104_apdu.h"
#include "general_function.h"
#include "general_socket.h"
#include "general_serial.h"
#include "general_can.h"
//<2F><><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD>ң<EEA3AC>ص<EFBFBD>
#define IEC104_SEND_HIGHCMD_BUFFER_MAX_COUNT 32
//һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٻ<EFBFBD><D9BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define IEC104_SEND_LOWCMD_BUFFER_MAX_COUNT 128
/*************2011.10.26<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һЩ<EFBFBD><EFBFBD><EFBFBD>õĺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>****************************/
typedef enum
{
IEC104_I_CMD_TYPE_HIGH=0,
IEC104_I_CMD_TYPE_LOW
} IEC104_I_CMD_TYPE;
/*************2011.10.26<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һЩ<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD>Ķ<EFBFBD><EFBFBD><EFBFBD>****************************/
typedef enum{
IEC104_LINK_STATUS_CLN_IDLE=0, //<2F><><EFBFBD>У<EFBFBD><D0A3><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>ӻ<EFBFBD>û<EFBFBD>н<EFBFBD><D0BD><EFBFBD>
IEC104_LINK_STATUS_CLN_OK, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD>õ<EFBFBD>
IEC104_LINK_STATUS_CLN_START_SEND, //<2F><><EFBFBD><EFBFBD>O7<4F><37><EFBFBD><EFBFBD>֡
IEC104_LINK_STATUS_CLN_START_CONFIRM //<2F>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>
} IEC104_LINK_STATUS_CLN;
/********<2A>յ<EFBFBD><D5B5><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><E1B9B9>*******/
typedef struct
{
FLAG_LINK flagLink; //<2F><><EFBFBD><EFBFBD>֪ͨ<CDA8>ⲿ
IEC104_LINK_PROPER link_proper;
struct
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD><CDBF>ƣ<EFBFBD><C6A3><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>ּ<EFBFBD><D6BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEBBBA><EFBFBD><EFBFBD>)
ST_INT send_highcmd_readIP;
ST_INT send_highcmd_writeIP;
ST_UCHAR send_highcmd_Buffer[IEC104_SEND_HIGHCMD_BUFFER_MAX_COUNT][IEC104_APDU_MAX_LEN];
ST_INT send_lowcmd_readIP;
ST_INT send_lowcmd_writeIP;
ST_UCHAR send_lowcmd_Buffer[IEC104_SEND_LOWCMD_BUFFER_MAX_COUNT][IEC104_APDU_MAX_LEN];
} link_send_buffer;
struct
{
IEC104_LINK_STATUS_CLN linkStatus;
ST_UCHAR commAddr; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ,ֻ<>з<EFBFBD><D0B7><EFBFBD>GI<47><49>Уʱ<D0A3><CAB1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>
ST_UCHAR devAddr;
ST_UINT16 IcountRecv;
ST_UINT16 IcountSend;
ST_UINT16 IcountLocalUnConfirm; //<2F>յ<EFBFBD><D5B5><EFBFBD>δȷ<CEB4>ϵ<EFBFBD>I<EFBFBD><49><EFBFBD><EFBFBD>
ST_UINT16 IcountRemoteConfirm; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˷<EFBFBD><CBB7>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ST_UINT16 IcountmaxSend; //δȷ<CEB4>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD><C2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><49><D6A1><EFBFBD><EFBFBD> 12*2
ST_UINT16 IcountmaxToConfirm; //<2F>յ<EFBFBD><49><D6A1><EFBFBD><EFBFBD>ʱ<EFBFBD>򱾴<EFBFBD><F2B1BEB4><EFBFBD><EFBFBD>ѵ<EFBFBD><D1B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>֡ 8*2
ST_DOUBLE record_time_t0; //104<30>д<EFBFBD>վ<EFBFBD><D5BE><EFBFBD>ж<EFBFBD>T0(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD>ʱ)
ST_DOUBLE space_t0; //30
ST_DOUBLE record_time_t1_test; //<2F><><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD>, ֹͣ<CDA3><D6B9><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>
ST_DOUBLE record_time_t1_I; //<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>I<EFBFBD><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD>յ<EFBFBD><49><C8B7>
ST_DOUBLE space_t1; //15
ST_DOUBLE record_time_t2; //<2F><>¼:<3A>յ<EFBFBD>I<EFBFBD><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ:<3A><><EFBFBD><EFBFBD>I<EFBFBD><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>
ST_DOUBLE space_t2; //10
ST_DOUBLE record_time_t3; //<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3>յ<EFBFBD>֡, <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD>֡
ST_DOUBLE space_t3; //20
ST_DOUBLE record_time_gi; //<2F><><EFBFBD>ٻ<EFBFBD><D9BB><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
ST_DOUBLE space_time_gi; //120*1000,
ST_DOUBLE record_time_fixtime; //Уʱ
ST_DOUBLE space_time_fixtime; //130*1000,
} link_records;
struct
{
IEC104_LINK_TYPE link_type;
union
{
SOCKET_LINK_ATTRIB *sock_attrib; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBB6A8>Ϊָ<CEAA><EFBFBD><EBA3AC>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>λ<EFBFBD><CEBB>
SERIAL_ATTRIB *serial_attrib; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>
CAN_LINK_ATTRIB *can_link; //CAN<41><4E><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>
} u;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD><CDBF><EFBFBD><EFBFBD><EFBFBD>TCP <20><><EFBFBD><EFBFBD> <20><> CAN
ST_VOID *iec104_service_cln; //<2F><><EFBFBD>汾ָ<E6B1BE><D6B8>, <20>յ<EFBFBD>I<EFBFBD><49>ʱ<EFBFBD><CAB1>ȷ<EFBFBD>Ͻ<EFBFBD><CFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ST_INT monitorChannel; //ͨ<><CDA8><EFBFBD><EFBFBD>
} link_attrib;
} IEC104_LINK_CLN;
//<2F>յ<EFBFBD>ASDUʱ<55><CAB1><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/***<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ʱ<EFBFBD>򣬵<EFBFBD><F2A3ACB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷŵ<DDB7>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>***/
ST_RET iec104_link_cln_save_asdu( IEC104_LINK_CLN *iec104_link_cln, ST_UCHAR *asdu, ST_INT asduLen, IEC104_I_CMD_TYPE type );
/***<2A><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ***/
ST_RET iec104_link_cln_property_init( IEC104_LINK_CLN * iec104_link );
/*** <20><>Ҫ<EFBFBD><D2AA><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ***/
ST_RET iec104_link_cln_property_set( IEC104_LINK_CLN * iec104_link, IEC104_LINK_TYPE link_type,
ST_VOID *link_attrib, ST_UCHAR commAddr, ST_UCHAR devAddr,
ST_VOID *iec104_service_cln, ST_INT monitorChl );
/*** <20>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD> ***/
ST_RET iec104_link_cln_property_release( IEC104_LINK_CLN * iec104_link );
/** ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD>״̬, <20><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݡ<EFBFBD><DDA1><EFBFBD><EFBFBD>سɹ<D8B3><C9B9><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD> **/
ST_RET iec104_link_cln_check_status( IEC104_LINK_CLN *iec104_link );
/** <20><><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD> **/
ST_RET iec104_link_cln_closeLink( IEC104_LINK_CLN *iec104_link );
/************************************************************************/
#ifdef __cplusplus
}
#endif
#endif