142 lines
4.0 KiB
C
142 lines
4.0 KiB
C
![]() |
|
|||
|
|
|||
|
|
|||
|
#ifndef IEC104_LINK_SRV_123_INCLUDED
|
|||
|
#define IEC104_LINK_SRV_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><EFBFBD><EFBFBD><EEA3A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><C4B7>أ<EFBFBD><D8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
|
|||
|
#define IEC104_SEND_CMD_BUFFER_MAX_COUNT 224
|
|||
|
|
|||
|
//cbt modified 2021.7.2 Ϊ<>˷<EFBFBD>ֹ<EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD>ɴ<EFBFBD><C9B4><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>汨<EFBFBD>ģ<EFBFBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¹<EFBFBD><C2B9>ϱ<EFBFBD><CFB1>汨<EFBFBD>IJ<EFBFBD><C4B2>ܷ<EFBFBD><DCB7>뻺<EFBFBD><EBBBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
|||
|
//<2F><>Ҫ<EFBFBD><D2AA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>(15<31><35>װ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF>4<EFBFBD><34>)
|
|||
|
#define IEC104_SEND_URGENT_BUFFER_MAX_COUNT 192//96
|
|||
|
|
|||
|
//<2F><>Ҫ<EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
#define IEC104_SEND_GENERAL_BUFFER_MAX_COUNT 64
|
|||
|
|
|||
|
|
|||
|
typedef enum
|
|||
|
{
|
|||
|
IEC104_I_ASDU_TYPE_CMD=0,
|
|||
|
IEC104_I_ASDU_TYPE_URGENT,
|
|||
|
IEC104_I_ASDU_TYPE_GENERAL
|
|||
|
} IEC104_I_ASDU_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_SRV_IDLE=0, //<2F><><EFBFBD>У<EFBFBD><D0A3><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>ӻ<EFBFBD>û<EFBFBD>н<EFBFBD><D0BD><EFBFBD>
|
|||
|
IEC104_LINK_STATUS_SRV_OK, //<2F><><EFBFBD>Է<EFBFBD><D4B7>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD>I֡
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>
|
|||
|
IEC104_LINK_STATUS_SRV_START_RECV
|
|||
|
} IEC104_LINK_STATUS_SRV;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/********<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>ⲿ<EFBFBD><E2B2BF>//δ<><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣʱ<D6B9><CAB1>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>Iʱ<49><CAB1>1<EFBFBD><31>
|
|||
|
|
|||
|
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_cmd_readIP;
|
|||
|
ST_INT send_cmd_writeIP;
|
|||
|
ST_UCHAR send_cmd_Buffer[IEC104_SEND_CMD_BUFFER_MAX_COUNT][IEC104_APDU_MAX_LEN];
|
|||
|
|
|||
|
ST_INT send_urgent_readIP;
|
|||
|
ST_INT send_urgent_writeIP;
|
|||
|
ST_UCHAR send_urgent_Buffer[IEC104_SEND_URGENT_BUFFER_MAX_COUNT][IEC104_APDU_MAX_LEN];
|
|||
|
|
|||
|
ST_INT send_general_readIP;
|
|||
|
ST_INT send_general_writeIP;
|
|||
|
ST_UCHAR send_general_Buffer[IEC104_SEND_GENERAL_BUFFER_MAX_COUNT][IEC104_APDU_MAX_LEN];
|
|||
|
} link_send_buffer;
|
|||
|
|
|||
|
|
|||
|
struct
|
|||
|
{
|
|||
|
IEC104_LINK_STATUS_SRV linkStatus;
|
|||
|
|
|||
|
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>I֡<49><D6A1><EFBFBD><EFBFBD> 12*2
|
|||
|
ST_UINT16 IcountmaxToConfirm; //<2F>յ<EFBFBD>I֡<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>Iȷ<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
|
|||
|
} 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_srv; //<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; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>
|
|||
|
} link_attrib;
|
|||
|
|
|||
|
} IEC104_LINK_SRV;
|
|||
|
|
|||
|
|
|||
|
/***<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_srv_save_asdu( IEC104_LINK_SRV *iec104_link_srv, ST_UCHAR *asdu, ST_INT asduLen, IEC104_I_ASDU_TYPE type );
|
|||
|
|
|||
|
/***<2A><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ***/
|
|||
|
ST_RET iec104_link_srv_property_init( IEC104_LINK_SRV * iec104_link );
|
|||
|
|
|||
|
ST_RET iec104_link_srv_property_set( IEC104_LINK_SRV * iec104_link, IEC104_LINK_TYPE link_type,
|
|||
|
ST_VOID *link_attrib, ST_VOID *iec104_service_srv, ST_INT monitorChl );
|
|||
|
|
|||
|
/*** <20>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD> ***/
|
|||
|
ST_RET iec104_link_srv_property_release( IEC104_LINK_SRV * iec104_link );
|
|||
|
|
|||
|
|
|||
|
/***ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD>㺯<EFBFBD><E3BAAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD>е<EFBFBD>I<EFBFBD><49>**/
|
|||
|
ST_INT iec104_link_srv_check_status( IEC104_LINK_SRV *iec104_link );
|
|||
|
|
|||
|
/************************************************************************/
|
|||
|
#ifdef __cplusplus
|
|||
|
}
|
|||
|
#endif
|
|||
|
|
|||
|
|
|||
|
#endif
|
|||
|
|