commCPU_SUPV/code/link60870/inc/iec103_service_srv.h

205 lines
5.4 KiB
C
Raw Normal View History

2025-04-30 16:24:29 +08:00
/*****************************************************************
*(C) Copyright H.S.J.
*
* MODULE NAME : iec103_service_srv.h
* PRODUCT(S) : IEC60870
*
* MODULE DESCRIPTION :
* ʵ<EFBFBD><EFBFBD>IEC103<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ
*
* GLOBAL FUNCTIONS DEFINED IN THIS MODULE :
*
*
* MODIFICATION LOG :
* Date Who Rev Comments
* -------- --- ------ ----------------------------------
* 2011-12-25 hsj 1.0 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>_WIN32<EFBFBD><EFBFBD>linux<EFBFBD><EFBFBD>VXWORKS <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ)
*
*****************************************************************/
#ifndef IEC103_SERVICE_SRV_123_INCLUDED
#define IEC103_SERVICE_SRV_123_INCLUDED
#ifdef __cplusplus
extern "C" {
#endif
/************************************************************************/
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//#define IEC60870_RELEASE
#ifdef IEC60870_RELEASE
typedef enum
{
IEC103_I_ASDU_TYPE_CMD=0,
IEC103_I_ASDU_TYPE_URGENT,
IEC103_I_ASDU_TYPE_GENERAL
} IEC103_I_ASDU_TYPE;
#else
#include "glbtypes.h"
#include "iec103_link_srv.h"
#endif
//ע<><D7A2>: <20><>ͷ<EFBFBD>ļ<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBB7A2><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef int (*IEC103_SRV_RECV_ASDU)(unsigned char *recvAsdu, int linkIndex);
typedef int (*IEC103_SRV_RECV_CONN)(int linkIndex);
typedef int (*IEC103_SRV_RECV_DISCON)(int linkIndex);
//<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>103<30><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef struct
{
struct
{
IEC103_SRV_RECV_ASDU fun_recv_asdu; //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>,<2C>յ<EFBFBD><49><D6A1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD>
IEC103_SRV_RECV_CONN fun_recv_conn; //<2F>յ<EFBFBD><D5B5>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
IEC103_SRV_RECV_DISCON fun_recv_discon; //<2F><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӶϿ<D3B6>
char listen_ip[32];
int listen_port;
int max_recv_num; //ÿ<><C3BF>listen<65>˿ڣ<CBBF><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned char *linkAddr; //<2F><>·<EFBFBD><C2B7>ַ
int *monitorChl; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>
} link_tcp_para;
//<2F><><EFBFBD><EFBFBD><E6BCB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>Ҫ<EFBFBD><D2AA>ֵ<EFBFBD><D6B5><EFBFBD>߸<EFBFBD><DFB8><EFBFBD>. <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD>Գ<EFBFBD>ʼΪNULL
#ifdef IEC60870_RELEASE
struct
{
void *socket_listen;
void *socket_link;
void *link103_srv;
} srv_tcp_property;
#else
struct
{
SOCKET_LISN_ATTRIB *socket_listen;
SOCKET_LINK_ATTRIB *socket_link;
IEC103_LINK_SRV *link103_srv;
} srv_tcp_property;
#endif
} IEC103_SERVICE_SRV_TCP;
//<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>103<30><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef struct
{
struct
{
IEC103_SRV_RECV_ASDU fun_recv_asdu; //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>,<2C>յ<EFBFBD><49><D6A1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD>
IEC103_SRV_RECV_CONN fun_recv_conn; //<2F>յ<EFBFBD><D5B5>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
IEC103_SRV_RECV_DISCON fun_recv_discon; //<2F><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӶϿ<D3B6>
int com_index; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int com_baud; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int com_parity; //У<>ʽ N,O,E
unsigned char linkAddr; //<2F><>·<EFBFBD><C2B7>ַ
int monitorChl; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>
} link_serial_para;
//<2F><><EFBFBD><EFBFBD><E6BCB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>Ҫ<EFBFBD><D2AA>ֵ<EFBFBD><D6B5><EFBFBD>߸<EFBFBD><DFB8><EFBFBD>. <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD>Գ<EFBFBD>ʼΪNULL
#ifdef IEC60870_RELEASE
struct
{
void *serial_link;
void *link103_srv;
} srv_serial_property;
#else
struct
{
SERIAL_ATTRIB *serial_link;
IEC103_LINK_SRV *link103_srv;
} srv_serial_property;
#endif
} IEC103_SERVICE_SRV_SERIAL;
//<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>CAN 103<30><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef struct
{
struct
{
IEC103_SRV_RECV_ASDU fun_recv_asdu; //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>,<2C>յ<EFBFBD><49><D6A1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD>
IEC103_SRV_RECV_CONN fun_recv_conn; //<2F>յ<EFBFBD><D5B5>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
IEC103_SRV_RECV_DISCON fun_recv_discon; //<2F><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӶϿ<D3B6>
int can_index; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int can_baud; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> k
int localCanID; //CAN<41>ı<EFBFBD><C4B1><EFBFBD>ID
int max_recv_num; //һ<><D2BB>CAN<41><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>,<2C><><EFBFBD><EFBFBD>CANID<49><44><EFBFBD><EFBFBD>
unsigned char *linkAddr; //<2F><>·<EFBFBD><C2B7>ַ, <20><><EFBFBD><EFBFBD>. <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
int *canID; // CAN<41><4E>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>CANID, <20><><EFBFBD><EFBFBD>
int *monitorChl; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>
} link_can_para;
//<2F><><EFBFBD><EFBFBD><E6BCB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>Ҫ<EFBFBD><D2AA>ֵ<EFBFBD><D6B5><EFBFBD>߸<EFBFBD><DFB8><EFBFBD>. <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD>Գ<EFBFBD>ʼΪNULL
#ifdef IEC60870_RELEASE
struct
{
void *can_listen; //ֻ<><D6BB>һ<EFBFBD><D2BB>
void *can_link; //<2F><><EFBFBD><EFBFBD>
void *link103_srv; //<2F><><EFBFBD><EFBFBD>
} srv_can_property;
#else
struct
{
CAN_ATTRIB *can_listen; //ֻ<><D6BB>һ<EFBFBD><D2BB>
CAN_LINK_ATTRIB *can_link; //<2F><><EFBFBD><EFBFBD>
IEC103_LINK_SRV *link103_srv; //<2F><><EFBFBD><EFBFBD>
} srv_can_property;
#endif
} IEC103_SERVICE_SRV_CAN;
#ifndef IEC60870_RELEASE
int iec103_service_srv_recv_asdu( IEC103_LINK_SRV *iec103_link_srv, unsigned char *recvAsdu );
#endif
int iec103_service_srv_init_tcp( IEC103_SERVICE_SRV_TCP *iec103_srv_tcp );
int iec103_service_srv_release_tcp( IEC103_SERVICE_SRV_TCP *iec103_srv_tcp );
int iec103_service_srv_init_serial( IEC103_SERVICE_SRV_SERIAL *iec103_srv_serial );
int iec103_service_srv_release_serial( IEC103_SERVICE_SRV_SERIAL *iec103_srv_serial );
int iec103_service_srv_init_can( IEC103_SERVICE_SRV_CAN *iec103_srv_can );
int iec103_service_srv_release_can( IEC103_SERVICE_SRV_CAN *iec103_srv_can );
int iec103_service_srv_check_status_tcp( IEC103_SERVICE_SRV_TCP *iec103_srv_tcp );
int iec103_service_srv_check_status_serial( IEC103_SERVICE_SRV_SERIAL *iec103_srv_serial );
int iec103_service_srv_check_status_can( IEC103_SERVICE_SRV_CAN *iec103_srv_can );
/*** <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><49><D6A1><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>Ϣ(ti<74><69>ǰ)<29><>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EBA1A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ***/
/*** <20><><EFBFBD><EFBFBD>linkIndex=-1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD> ***/
/*** asduLen<65>ǰ<EFBFBD><C7B0><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵı<DAB5><C4B1><EFBFBD><EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD> ***/
int iec103_service_srv_asdu_send_tcp(IEC103_SERVICE_SRV_TCP *iec103_srv_tcp, int linkIndex,
unsigned char *asdu, int asduLen, IEC103_I_ASDU_TYPE type );
int iec103_service_srv_asdu_send_serial(IEC103_SERVICE_SRV_SERIAL *iec103_srv_serial, int linkIndex,
unsigned char *asdu, int asduLen, IEC103_I_ASDU_TYPE type );
int iec103_service_srv_asdu_send_can(IEC103_SERVICE_SRV_CAN *iec103_srv_can, int linkIndex,
unsigned char *asdu, int asduLen, IEC103_I_ASDU_TYPE type );
/************************************************************************/
#ifdef __cplusplus
}
#endif
#endif