|
|
/****************************************************************************
|
|
|
* FileName : Common.h *
|
|
|
* Programmer : Li Liangchu *
|
|
|
* Writen at : 2002.09.20 *
|
|
|
* Version : *
|
|
|
* Description: header of the nport.c *
|
|
|
* Last modify: 2002.11.6 *
|
|
|
****************************************************************************/
|
|
|
|
|
|
#ifndef __COMMON_H_ICL__
|
|
|
#define __COMMON_H_ICL__
|
|
|
|
|
|
#ifdef _WIN32
|
|
|
#else
|
|
|
#define OS_UNIX
|
|
|
#endif
|
|
|
|
|
|
#ifdef _WIN32
|
|
|
|
|
|
#ifdef _DEBUG
|
|
|
// #define _OS_WINDOWS_DEBUG_
|
|
|
#else // _DEBUG
|
|
|
#define _OS_WINDOWS_
|
|
|
#endif // _DEBUG
|
|
|
#include <windows.h>
|
|
|
#include <winsock.h>
|
|
|
#include <dos.h>
|
|
|
#include <direct.h>
|
|
|
#include <sys/timeb.h>
|
|
|
#include <process.h>
|
|
|
#else
|
|
|
#include <sys/time.h>
|
|
|
#include <netinet/in.h>
|
|
|
#endif
|
|
|
|
|
|
#include "platform_def.h"
|
|
|
#include <stdio.h>
|
|
|
#include <string.h>
|
|
|
#include <time.h>
|
|
|
|
|
|
//#include "menu.h"
|
|
|
|
|
|
// 基本函数库
|
|
|
#include "basefunc.h"
|
|
|
#include "DSFileSystem.h"
|
|
|
#include "chainlist.h"
|
|
|
#include "os_heap.h"
|
|
|
#include "basetype.h"
|
|
|
#include "confrw.h"
|
|
|
|
|
|
#define OPEN 0
|
|
|
#define CLOSE 1
|
|
|
|
|
|
// wen 2005.04.12 定义输出信息格式
|
|
|
/* !输出信息级别为提示信息
|
|
|
*/
|
|
|
#define MSG_CLASS_TIP 1
|
|
|
/* !输出信息级别为警告信息
|
|
|
*/
|
|
|
#define MSG_CLASS_WARN 2
|
|
|
/* !输出信息级别为错误信息
|
|
|
*/
|
|
|
#define MSG_CLASS_ERROR 3
|
|
|
|
|
|
/*!
|
|
|
* 端口读标识
|
|
|
*/
|
|
|
#define FLAG_READ 0x0001
|
|
|
|
|
|
/*!
|
|
|
* 端口写标识
|
|
|
*/
|
|
|
#define FLAG_WRITE 0x0002
|
|
|
|
|
|
/*!
|
|
|
* 端口读标识
|
|
|
*/
|
|
|
#define FLAG_OPEN (FLAG_READ | FLAG_WRITE)
|
|
|
#define OPEN_PORT 3 // 端口处于完全打开状态
|
|
|
#define CLOSE_PORT 0 // 端口处于关闭状态
|
|
|
// 网络端口创建标识FAIL_GREATE、SUCCEED_GREATE、SOCKET_BEING
|
|
|
#define FAIL_GREATE 0 // 创建socket失败
|
|
|
#define SUCCEED_GREATE 1 // 创建socket成功
|
|
|
#define SOCKET_BEING 2 // socket已经存在,无需重新创建
|
|
|
|
|
|
|
|
|
#define AI_DATA_DISP 4
|
|
|
#define DI_DATA_DISP 5
|
|
|
#define PI_DATA_DISP 6
|
|
|
|
|
|
#define WATCH_DATA_DISP 8
|
|
|
|
|
|
|
|
|
typedef u_char BYTE;
|
|
|
typedef u_short WORD;
|
|
|
typedef u_long DWORD;
|
|
|
|
|
|
#ifndef _WIN32
|
|
|
#define OS_UNIX
|
|
|
typedef unsigned long long ULONG_PTR, *PULONG_PTR;
|
|
|
typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR;
|
|
|
|
|
|
#define LOWORD(l) ((WORD)(((DWORD_PTR)(l)) & 0xffff))
|
|
|
#define HIWORD(l) ((WORD)((((DWORD_PTR)(l)) >> 16) & 0xffff))
|
|
|
#define LOBYTE(w) ((BYTE)(((DWORD_PTR)(w)) & 0xff))
|
|
|
#define HIBYTE(w) ((BYTE)((((DWORD_PTR)(w)) >> 8) & 0xff))
|
|
|
|
|
|
#define _getpid getpid
|
|
|
#define _stricmp strcasecmp
|
|
|
#define Sleep(x) usleep(1000*x)
|
|
|
// #define GetPrivateProfileString QGetPrivateProfileString
|
|
|
#define max(a,b) (((a) > (b)) ? (a) : (b))
|
|
|
#define min(a,b) (((a) < (b)) ? (a) : (b))
|
|
|
#endif
|
|
|
#define BYTE3(a) (((a)&0xff)<<24)
|
|
|
#define BYTE2(a) (((a)&0xff)<<16)
|
|
|
#define BYTE1(a) (((a)&0xff)<<8)
|
|
|
#define BYTE0(a) ((a)&0xff)
|
|
|
|
|
|
#define ExchWord(a) (HIBYTE(a) | (LOBYTE(a)<<8))
|
|
|
#define ExchDWord(a) (ExchWord(HIWORD(a)) | (ExchWord(LOWORD(a))<<16))
|
|
|
#define BcdByteToInt( c ) (((c&0xf0) >> 4)*10 + (c&0x0f))
|
|
|
#define IntToBcdByte( c ) ((c/10)*16 + (c%10))
|
|
|
#define HexDigitToChar( c ) (((c) >= 10) ? ((c)-10+'A') : ((c)+'0'))
|
|
|
#define HexCharToInt( c ) \
|
|
|
( ((c) >= '0') && ((c) <= '9') ? (c) - '0' : \
|
|
|
((c) >= 'a') && ((c) <= 'f') ? (c) - 'a' + 10 : \
|
|
|
((c) >= 'A') && ((c) <= 'F') ? (c) - 'A' + 10 : 0 )
|
|
|
|
|
|
#define INC_TOTAL_MSG( port ) (SioParam[port].MsgNum++)
|
|
|
#define INC_Lost_SYNC_CNT( port ) (SioParam[port].LostSyncCnt++)
|
|
|
#define INC_ERROR_MSG( port ) \
|
|
|
do { \
|
|
|
SioParam[port].ErrMsgNum++; \
|
|
|
SioParam[port].MsgNum++; \
|
|
|
} while ( 0 )
|
|
|
|
|
|
|
|
|
//基本宏定义
|
|
|
#define DEFAULT_UDP_COMM_PORT 0xff00
|
|
|
|
|
|
//定义用于读写EEPROM的PB6、PB7地址
|
|
|
#define SUCC 1
|
|
|
#define FAIL 0
|
|
|
|
|
|
#define MAX_NET_BUF_SIZE (80*1024)
|
|
|
#define MAX_MSG_BUF_SIZE 81920
|
|
|
|
|
|
#define NET_MAC_LEN 6
|
|
|
|
|
|
#define DEFAULT_MAX_SERIAL_PORT_NUM 16
|
|
|
#define DEFAULT_MAX_NET_PORT_NUM 8
|
|
|
#define DEFAULT_MAX_PORT_NUM (DEFAULT_MAX_SERIAL_PORT_NUM+DEFAULT_MAX_NET_PORT_NUM)
|
|
|
|
|
|
#define MAX_DEV_NUM 16
|
|
|
|
|
|
#define MAX_PROV_PORT_NUM 16
|
|
|
|
|
|
#define MAX_NET_NUM 3
|
|
|
|
|
|
#define DEFAULT_BAUD 9600
|
|
|
|
|
|
//1、设备配置初始化类
|
|
|
#define SDS_GET_IP_ADDR 0x101
|
|
|
#define SDS_N_GET_IP_ADDR 0x102
|
|
|
#define SDS_SET_IP_ADDR 0x103
|
|
|
|
|
|
#define SDS_GET_NET_MAC_CODE 0x109
|
|
|
#define SDS_SET_NET_MAC_CODE 0x110
|
|
|
|
|
|
#define SDS_SIO_RECV_DATA 0x141
|
|
|
#define SDS_SIO_SEND_DATA 0x142
|
|
|
|
|
|
#define SDS_SIO_SET_WATCH_PORT 0x161
|
|
|
#define SDS_SIO_CLR_WATCH_PORT 0x162
|
|
|
|
|
|
//7、保护机信息类
|
|
|
#define SDS_SIO_GET_PROTOCOL_NAME 0x201 // 读所有协议名称
|
|
|
#define SDS_SIO_GET_PORT_CONFIG_INFO 0x203 // 读端口公共配置信息
|
|
|
#define SDS_SIO_GET_PROTOCOL_CONFIG_INFO 0x204 // 根据协议号读协议配置信息
|
|
|
|
|
|
// 与接收数据有关项目
|
|
|
#define SDS_SIO_GET_STAT_INFO 0x211 // 读所有端口统计信息
|
|
|
#define SDS_SIO_CLR_STAT_INFO 0x212 // 端口统计信息清零
|
|
|
#define SDS_SIO_GET_AI_DATA_INFO 0x213 // 读端口遥测
|
|
|
#define SDS_SIO_GET_DI_DATA_INFO 0x214 // 读端口遥信
|
|
|
#define SDS_SIO_GET_PI_DATA_INFO 0x215 // 读端口电度
|
|
|
|
|
|
#define SDS_SIO_GET_CONFIG_FILE 0x221 // 读portconfig.ini 文件
|
|
|
#define SDS_SIO_SET_CONFIG_FILE 0x222 // 写portconfig.ini 文件
|
|
|
|
|
|
#define SDS_SIO_SET_SYSTEM_TIME 0x231 // 系统对时
|
|
|
|
|
|
#define SDS_SIO_RESET 0x255 // 读端口电度
|
|
|
|
|
|
#define MAX_MAP_REG_NUM 8
|
|
|
|
|
|
#define NO_HANDSHAKE_MODE 0x00
|
|
|
#define HARDWARE_MODE 0x01
|
|
|
#define SOFTWARE_MODE 0x02
|
|
|
|
|
|
#define RS232_COMM_MODE 0x00
|
|
|
#define RS422_COMM_MODE 0x01
|
|
|
#define RS485_COMM_MODE 0x02
|
|
|
|
|
|
#define RS485_INPUT 0
|
|
|
#define RS485_OUTPUT 1
|
|
|
|
|
|
#define NO_COMM 0
|
|
|
#define UDP_COMM 1
|
|
|
#define TCP_S_COMM 2
|
|
|
#define TCP_C_COMM 3
|
|
|
|
|
|
#define RECV_PROTOCOL 0
|
|
|
#define PROV_PROTOCOL 1
|
|
|
#define PROTOCOL_SLAVE PROV_PROTOCOL
|
|
|
#define PROTOCOL_MASTER RECV_PROTOCOL
|
|
|
|
|
|
#define POLL_CMD_TYPE_NUM 3
|
|
|
#define NORMAL_CMD_TYPE 0
|
|
|
#define INSERAT_CMD_TYPE 1
|
|
|
#define FAST_CMD_TYPE 2
|
|
|
|
|
|
//设定maskbit意义在于(&~maskbit)|bit确定位值
|
|
|
// 数据位数
|
|
|
#define BITMASK 0x03
|
|
|
#define BIT5 0x00
|
|
|
#define BIT6 0x01
|
|
|
#define BIT7 0x02
|
|
|
#define BIT8 0x03
|
|
|
|
|
|
// 停止位
|
|
|
#define STOPMASK 0x0c
|
|
|
#define STOP1 0x04
|
|
|
#define STOP2 0x08
|
|
|
#define STOP15 0x0c
|
|
|
|
|
|
// 校验位
|
|
|
#define PARITYMASK 0xf0
|
|
|
#define PARITYNONE 0x00
|
|
|
#define PARITYODD 0x10
|
|
|
#define PARITYEVE 0x20
|
|
|
#define PARITYMRK 0x30
|
|
|
#define PARITYSPC 0x40
|
|
|
|
|
|
// 流控制
|
|
|
#define RTSMASK 0x01
|
|
|
#define DTRMASK 0x02
|
|
|
#define CTSMASK 0x04
|
|
|
|
|
|
#define PNT_ENABLE 0 // 点使能
|
|
|
#define PNT_STATE 1 // 点状态
|
|
|
#define PNT_RAWVALUE 3 // 点原值(遥测,电度)
|
|
|
#define PNT_POLAR 5 // 遥测点极性
|
|
|
#define PNT_STATUS 6 // 遥信点状态
|
|
|
#define PNT_CTRL_NO 7 // 遥信控点号
|
|
|
#define PNT_PROV_MSG 10 // 转发信息
|
|
|
#define PNT_SOE_TIME 20 // 遥信 SOE 时间
|
|
|
#define PNT_ALL_MSG 21 // 读取点的所有信息
|
|
|
#define PNT_SOE_TIME_EX 22 // 含有扩展信息的遥信SOE时间
|
|
|
|
|
|
|
|
|
#define AI_PNT_TYPE 0
|
|
|
#define DI_PNT_TYPE 1
|
|
|
#define CN_PNT_TYPE 2
|
|
|
//#define PI_PNT_TYPE 2
|
|
|
#define PI_PNT_TYPE 3
|
|
|
#define OD_PNT_TYPE 4
|
|
|
|
|
|
#define AO_PNT_TYPE 20
|
|
|
#define DO_PNT_TYPE 21
|
|
|
|
|
|
/*!
|
|
|
\brief 保护模拟量类型
|
|
|
*/
|
|
|
#define PROTECT_AI_PNT_TYPE 128
|
|
|
|
|
|
/*!
|
|
|
\brief 保护开关量类型
|
|
|
*/
|
|
|
#define PROTECT_DI_PNT_TYPE 129
|
|
|
|
|
|
/*!
|
|
|
\brief 保护定值类型
|
|
|
*/
|
|
|
#define PROTECT_FIX_PNT_TYPE 130
|
|
|
|
|
|
/*!
|
|
|
\brief 保护事件类型
|
|
|
*/
|
|
|
#define PROTECT_EVENT_PNT_TYPE 131
|
|
|
|
|
|
|
|
|
#define POLL_CMD_TYPE_CMD 3
|
|
|
#define NORMAL_POLL_CMD 0 // 普通命令队列
|
|
|
#define INSERT_POLL_CMD 1 // 插入命令队列
|
|
|
#define FAST_POLL_CMD 2 // 快速命令队列
|
|
|
|
|
|
// TIMER_CNT, CREATE_CNT, LED_CNT必须能整除1000
|
|
|
//#define TIMER_CNT 20 // Poll命令定时器时间 20 ms
|
|
|
#define TIMER_CNT 200 // Poll命令定时器时间 200 ms
|
|
|
#define DATA_PRO_CNT 10 // 定时器基本时间 10 ms
|
|
|
#define CREATE_CNT 100 // 100 ms
|
|
|
#define LED_CNT 250 // 250 ms
|
|
|
|
|
|
#define BLK_SIZE 256
|
|
|
|
|
|
#define SYSTEM_TIME 300 // RTU 对时, 300秒一次
|
|
|
|
|
|
#define MAX_DISP_LINE 2048
|
|
|
|
|
|
#define MAX_PROV_SOE 128
|
|
|
|
|
|
#define STEP_YKYT_NOEXEC 0 // 无 操 作
|
|
|
#define STEP_YKYT_SELECT 1 // 遥控选择
|
|
|
#define STEP_YKYT_EXEC 2 // 遥控执行
|
|
|
#define STEP_YKYT_CANCEL 3 // 遥控撤销
|
|
|
#define STEP_YT_SELECT 4 // 遥调选择
|
|
|
#define STEP_YT_EXEC 5 // 遥调执行
|
|
|
#define STEP_YT_CANCEL 6 // 遥调撤销
|
|
|
#define STEP_YKYT_DIRECT 7 // 直 控
|
|
|
#define STEP_YKYT_STOP 8 // 遥调急停
|
|
|
|
|
|
// 数据类型
|
|
|
/*!
|
|
|
无效数据类型
|
|
|
*/
|
|
|
#define DT_NO 0
|
|
|
/*!
|
|
|
无符号整型数
|
|
|
*/
|
|
|
#define DT_UINT 1
|
|
|
/*!
|
|
|
整型数
|
|
|
*/
|
|
|
#define DT_INT 2
|
|
|
/*!
|
|
|
浮点数
|
|
|
*/
|
|
|
#define DT_FLOAT 3
|
|
|
/*!
|
|
|
字符串
|
|
|
*/
|
|
|
#define DT_STRING 4
|
|
|
/*!
|
|
|
二进制数据
|
|
|
*/
|
|
|
#define DT_BINARY 5
|
|
|
/*!
|
|
|
控制字
|
|
|
*/
|
|
|
#define DT_CONTROL 6
|
|
|
|
|
|
// 信息扩展数据至少扩展2个字节,其中第一字节指示数据类型,
|
|
|
// 第二字节根据不同数据类型有所不同。
|
|
|
#define CHECK_NO 1 // 无校验,第二扩展字节无效,置0
|
|
|
#define CHECK_WHOLE 2 // 总校验,第二扩展字节为校验错误数
|
|
|
#define CHECK_GROUP 3 // 分组校验,第二扩展校验错误总数
|
|
|
|
|
|
#define DATATYPE_NO -1
|
|
|
#define DATATYPE_AI 0
|
|
|
#define DATATYPE_DI 1
|
|
|
#define DATATYPE_OD 2
|
|
|
#define DATATYPE_STRING 3
|
|
|
#define DATATYPE_PI 4
|
|
|
|
|
|
// wen 2005.10.08 解决malloc分配内存不能释放的问题
|
|
|
#define MIN_MALLOC_SIZE 200 // malloc分配内存的最小尺寸
|
|
|
#define MAX_NO_WRITE_NUM 600000 // 网络最大不可写尺寸
|
|
|
#define MAX_BUFUNIT_NUM 1000 // 缓冲区单元最大数量
|
|
|
|
|
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
// 增加fend功能的宏定义
|
|
|
#define MAX_HOST 2
|
|
|
#define MAX_FEND 2
|
|
|
#define MAX_ADDR 2
|
|
|
#define MAX_NET_BUF 16384
|
|
|
|
|
|
#define MMI_TYPE 0
|
|
|
#define FEND_TYPE 1
|
|
|
#define HOST_TYPE 2
|
|
|
|
|
|
#define TCPIP_ADDR_LEN 32 // TCP/IP 通讯地址最大长度
|
|
|
#define MAX_MACHINE_NAME_LEN 48 // 计算机名最大长度
|
|
|
|
|
|
#define MAX_RTU_MSG_SIZE 8192 // RTU 信息包最大长度
|
|
|
|
|
|
#ifdef OS_LINUX
|
|
|
// 在linux下定义属性单字节对齐
|
|
|
typedef int SOCKET;
|
|
|
#define INVALID_SOCKET (SOCKET)(~0)
|
|
|
#endif
|
|
|
|
|
|
#define __attribute__(x)
|
|
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
|
|
|
#define MAX_POLL_CMD_BUF_LEN 256 // 轮询指令缓冲区最大长度
|
|
|
|
|
|
enum Param_Type
|
|
|
{
|
|
|
PARAM_NO=0,
|
|
|
PARAM_LINK,
|
|
|
PARAM_DEV,
|
|
|
PARAM_YC,
|
|
|
PARAM_YX,
|
|
|
PARAM_YM,
|
|
|
PARAM_YK,
|
|
|
PARAM_SYNCTIME,
|
|
|
PARAM_ASDU10
|
|
|
};
|
|
|
|
|
|
#ifdef OS_WINDOWS
|
|
|
#pragma pack (push,1)
|
|
|
#else// OS_UNIX
|
|
|
#pragma pack(1)
|
|
|
#endif //OS_UNIX
|
|
|
|
|
|
//SDS 包类型头
|
|
|
typedef struct
|
|
|
{
|
|
|
BYTE PortIdx; // 信息类型
|
|
|
WORD MsgType; // 信息类型
|
|
|
WORD MsgLen; // 信息长度
|
|
|
} RTUMSGHEAD;
|
|
|
|
|
|
//SDS包类型结构
|
|
|
typedef struct
|
|
|
{
|
|
|
BYTE PortIdx; // 信息类型
|
|
|
WORD MsgType; // 信息类型
|
|
|
WORD MsgLen; // 信息长度
|
|
|
u_char MsgData[MAX_MSG_BUF_SIZE];
|
|
|
} RTUMSG;
|
|
|
|
|
|
//网络发包临时数据绶冲结构
|
|
|
typedef struct
|
|
|
{
|
|
|
int BufSize;
|
|
|
int MsgCnt;
|
|
|
int Front;
|
|
|
int Rear;
|
|
|
u_char MsgData[MAX_MSG_BUF_SIZE];
|
|
|
} DATA_BUF;
|
|
|
|
|
|
struct WR_DATA
|
|
|
{
|
|
|
// u_short MsgType ;
|
|
|
u_short MsgLen;
|
|
|
u_char *MsgData;
|
|
|
int PLen;
|
|
|
struct WR_DATA *Next;
|
|
|
};
|
|
|
|
|
|
typedef struct
|
|
|
{
|
|
|
WORD PortNo;
|
|
|
WORD PntNo;
|
|
|
u_char Enable;
|
|
|
u_char ChangeFlag;
|
|
|
float fFactor;
|
|
|
|
|
|
// 模拟盘专用参数
|
|
|
WORD wType; // 转发点类型
|
|
|
} PROV_AI_PNT;
|
|
|
|
|
|
typedef struct
|
|
|
{
|
|
|
WORD PortNo;
|
|
|
WORD PntNo;
|
|
|
u_char Enable;
|
|
|
u_char ChangeFlag;
|
|
|
|
|
|
u_char CtrlEnable;
|
|
|
short ControlNo;
|
|
|
|
|
|
// 模拟盘专用参数
|
|
|
WORD wType; // 转发点类型
|
|
|
} PROV_DI_PNT;
|
|
|
|
|
|
typedef PROV_AI_PNT PROV_PI_PNT;
|
|
|
|
|
|
typedef struct
|
|
|
{
|
|
|
WORD PortNo;
|
|
|
WORD PntNo;
|
|
|
u_char Enable;
|
|
|
} PROV_PNT;
|
|
|
|
|
|
typedef struct
|
|
|
{
|
|
|
BYTE Enable;
|
|
|
BYTE State; // 遥测状态
|
|
|
|
|
|
//WORD RawValue; // 遥测原值
|
|
|
DWORD RawValue; // 遥测原值
|
|
|
BYTE Polar; // 处理极性
|
|
|
PROV_PNT Prov[MAX_PROV_PORT_NUM]; // 转发标志
|
|
|
} AI_DEF;
|
|
|
|
|
|
typedef struct
|
|
|
{
|
|
|
BYTE Enable;
|
|
|
BYTE State; // 遥信状态
|
|
|
|
|
|
BYTE Status; // 遥信状态
|
|
|
u_char CtrlEnable;
|
|
|
WORD ControlNo;
|
|
|
|
|
|
DAY_TIME SoeTime;
|
|
|
|
|
|
PROV_PNT Prov[MAX_PROV_PORT_NUM]; // 转发标志
|
|
|
} DI_DEF;
|
|
|
|
|
|
typedef struct
|
|
|
{
|
|
|
BYTE Enable;
|
|
|
BYTE State; // 电度状态
|
|
|
|
|
|
u_long RawValue; // 电度原值
|
|
|
|
|
|
PROV_PNT Prov[MAX_PROV_PORT_NUM]; // 转发标志
|
|
|
} PI_DEF;
|
|
|
|
|
|
typedef struct
|
|
|
{
|
|
|
int iPntNo; // SOE点号
|
|
|
BYTE bStatus; // 状态值
|
|
|
|
|
|
// wen 2005.05.18 增加扩展字节处理(针对于103有效)
|
|
|
BYTE u8Type; // 103中表现为asdu号
|
|
|
BYTE u8ProvFun; // 103转发中的FUN
|
|
|
BYTE u8ProvInf; // 103转发中的INF
|
|
|
WORD wRelativeTime; // 相对时间
|
|
|
WORD wFaultNo; // 故障序号
|
|
|
|
|
|
DAY_TIME SoeTime; // SOE时间
|
|
|
|
|
|
// wen 2005.10.25 增加扩充字符串,用来解析保护事件中的故障参数
|
|
|
char szMsgEx[64]; // 扩充字节数不得大于64字节
|
|
|
|
|
|
} SOE_DEF;
|
|
|
|
|
|
typedef struct
|
|
|
{
|
|
|
int iSoeNum; // soe数量
|
|
|
int iFront; // 队列首指针
|
|
|
int iRear; // 队列尾指针
|
|
|
SOE_DEF *ptrProvSoe; // 端口soe数据缓冲区(最大=MAX_PROV_SOE)队列
|
|
|
} PROV_SOE_DEF;
|
|
|
|
|
|
#define YKYT_CMD_FROM_NO 0 // 没有数据来源
|
|
|
#define YKYT_CMD_FROM_SCADA 1 // 来源于scada系统
|
|
|
#define YKYT_CMD_FROM_PROVPORT 2 // 来源于转发端口
|
|
|
// wen 2003.08.22 增加遥控遥调转发处理
|
|
|
typedef struct
|
|
|
{
|
|
|
int m_iProvPortIdx; // 转发厂站端口号
|
|
|
int m_iProvPntIdx; // 转发厂站遥信点号
|
|
|
int m_iProvYkYtPointIdx;// 转发厂站遥控遥调点号
|
|
|
int m_iYkYtPointIdx; // 实际厂站遥控遥调点号
|
|
|
|
|
|
int m_iYkYtStep; // 遥控遥调转发步骤(无操作(=0)/选择(=1)/执行(=2))
|
|
|
// 该结构成员是用来保存操作类型的(不仅仅针对转发遥控)
|
|
|
int m_iYkYtOperate; // 遥控遥调操作(控分、控合、失败)
|
|
|
int m_iYkYtMode; // 遥控遥调模式(仅对104有效)
|
|
|
|
|
|
DAY_TIME m_sDayTime; // 遥控命令下发的时间
|
|
|
int m_iTimeOut; // 转发遥控超时时间
|
|
|
int m_iCmdFrom; // 指令来源(=0 无来源; =1 来源scada; =2 来源转发端口)
|
|
|
} PROV_YKYT_DEF;
|
|
|
|
|
|
#define YKYT_SEND_UP 1 //
|
|
|
#define YKYT_SEND_DOWN 2 //
|
|
|
|
|
|
typedef struct
|
|
|
{
|
|
|
int m_iYkYtStep; // 遥控遥调执行步骤
|
|
|
int m_iYkYtPnt; // 遥控遥调点
|
|
|
int m_iYkYtOperate; // 遥控遥调操作状态(控分、控合、失败)
|
|
|
int m_iYkYtUpDown; // 上行命令还是下行命令(1=up, 0=down)
|
|
|
} YKYT_PARAM;
|
|
|
|
|
|
typedef struct
|
|
|
{
|
|
|
//******************** 串行端口信息 ************************
|
|
|
DWORD Baud; // 波特率(cdt计算时间间隔)
|
|
|
|
|
|
//**************** 数据收发缓冲区接收状态*******************
|
|
|
int m_iRevStatus; // 接收数据缓冲区状态
|
|
|
int m_iNeedRevLength; // 还需要接收的数据长度
|
|
|
|
|
|
//******************** Poll Cmd ****************************
|
|
|
u_long Retry; // 重试命令次数
|
|
|
u_long RetryCnt; // 重试命令计数
|
|
|
u_long RetryTime; // 重试命令时间
|
|
|
u_long RetryTimeCnt; // 重试命令时间计数
|
|
|
u_long WaitTime; // 命令间隔时间
|
|
|
u_long WaitTimeCnt; // 命令间隔时间计数
|
|
|
|
|
|
u_char ForceWaitFlag; // 强制等待标志
|
|
|
u_short ForceWaitCnt; // 强制等待计数
|
|
|
|
|
|
u_char ReSendCmdFlag; // 重发命令标志
|
|
|
u_char SendCmdFlag; // 命令发送标志
|
|
|
u_char RevCmdFlag; // 命令正常接收标志
|
|
|
|
|
|
u_char LastGetCmdBuf; // 当前使用缓冲区
|
|
|
DATA_BUF PollCmd[POLL_CMD_TYPE_NUM];
|
|
|
|
|
|
//******************* 端口数据库 ***************************
|
|
|
u_char PortType; // MAIN_PORT or SLAVE_PORT
|
|
|
u_char CheckTime; // 时间校正(=0, 不对时; =1, 上对时(接收); =2, 下对时(发送))
|
|
|
|
|
|
WORD AiNum; // 端口遥测数量
|
|
|
WORD DiNum; // 端口遥信数量
|
|
|
WORD PiNum; // 端口电度数量
|
|
|
|
|
|
void *AiPtr; // 遥测数据内存指针
|
|
|
void *DiPtr; // 遥信数据内存指针
|
|
|
void *PiPtr; // 电度数据内存指针
|
|
|
|
|
|
// wen 2004.11.16 数据转发时用
|
|
|
u_char DiChange; // 遥信数据是否变化
|
|
|
u_char AiChange; // 遥测数据是否变化
|
|
|
// wen 2004.11.16 增加soe数据的转发存储
|
|
|
PROV_SOE_DEF ProvSoeBuf; // 转发soe数据缓冲区
|
|
|
PROV_YKYT_DEF ProvYkYtMsg; // 转发遥控信息缓冲区
|
|
|
} SIO_PARAM_BAOHU_DEF;
|
|
|
|
|
|
typedef struct
|
|
|
{
|
|
|
//***************** 串行端口信息 ************************
|
|
|
DWORD Baud; // 波特率
|
|
|
u_char CommMode; // 数据位、校验和停止位
|
|
|
u_char WorkMode; // 方式,RS323、422、485
|
|
|
|
|
|
int Rs485WaitCnt; // 485 切换等待计数
|
|
|
|
|
|
u_char ChipCheckOk; // 芯片检验标志
|
|
|
u_char ChSelect; // 芯片型号
|
|
|
u_char FreqSelect; // 芯片工作频率
|
|
|
u_char WrRegMap[MAX_MAP_REG_NUM]; // 芯片寄存器映射
|
|
|
|
|
|
u_char HandshakeMode; // 通讯握手方式
|
|
|
u_char XonChar1; // 软件握手ON字符1
|
|
|
u_char XonChar2; // 软件握手ON字符2
|
|
|
u_char XoffChar1; // 软件握手OFF字符1
|
|
|
u_char XoffChar2; // 软件握手OFF字符2
|
|
|
//**********************************************************
|
|
|
} SIO_PARAM_SERIAL_DEF;
|
|
|
|
|
|
//串口相关所有参数集中定义
|
|
|
typedef struct
|
|
|
{
|
|
|
//******************** 端口基本信息 ************************
|
|
|
u_char ProtocolIdx; // 规约索引,大于 0
|
|
|
u_char ByPassFlag; // 旁路标志
|
|
|
u_char OpenFlag; // 打开标志(该标识弃用,改在共享内存中)
|
|
|
u_char Status; // 端口状态,用来判断端口是否通讯正常
|
|
|
// 在端口正常的1分钟后发送全数据, 避免数据未全部刷新导致的乱报警
|
|
|
int iDelaySendAllData;// 全数据延迟传送
|
|
|
int iForceSendFlag; // 强制下发标志
|
|
|
|
|
|
//******************** 网络端口信息 ************************
|
|
|
u_char NetType; // UDP_COMM、TCP_S_COMM、TCO_C_COMM
|
|
|
DWORD NetPort; // 网络通讯端口
|
|
|
u_long NetCommIpAddr; // 网络通讯地址
|
|
|
int LiSock; // 侦听socket
|
|
|
int CommSock; // 通讯socket
|
|
|
//**********************************************************
|
|
|
|
|
|
//******************** 数据收发缓冲区***********************
|
|
|
DATA_BUF RecvBuf; // 接收数据缓冲区
|
|
|
struct WR_DATA *WriteData; // 下行数据缓冲区
|
|
|
|
|
|
int iWriteDataNo; // 下行数据缓冲区序号
|
|
|
//******************** 统计信息 ****************************
|
|
|
u_long MsgNum; // 端口信息计数
|
|
|
u_long LostSyncCnt; // 端口失步次数
|
|
|
u_long ErrMsgNum; // 端口错误信息计数
|
|
|
u_long RecvCharNum; // 端口在线时间统计
|
|
|
u_long SendCharNum; // 端口离线时间统计
|
|
|
u_long LineCommCnt; // 端口是否在线计数
|
|
|
|
|
|
//****************** 串行端口信息 **************************
|
|
|
SIO_PARAM_SERIAL_DEF *m_psSerial;
|
|
|
//**********************************************************
|
|
|
|
|
|
//******************* 保护信息 *****************************
|
|
|
SIO_PARAM_BAOHU_DEF *m_psBaoHu;
|
|
|
//**********************************************************
|
|
|
|
|
|
//******************** 用户扩展结构 ************************
|
|
|
void *ExtInfo;
|
|
|
//**********************************************************
|
|
|
} SIO_PARAM_DEF;
|
|
|
|
|
|
typedef struct
|
|
|
{
|
|
|
u_long AllIpAddr[MAX_NET_NUM];
|
|
|
u_long NetMaskIpAddr[MAX_NET_NUM];
|
|
|
u_long BroadCastIpAddr[MAX_NET_NUM];
|
|
|
u_long MainIpAddr[MAX_NET_NUM];
|
|
|
} HOST_IP_ADDR;
|
|
|
|
|
|
typedef struct
|
|
|
{
|
|
|
WORD PortNumber;
|
|
|
SOCKET Socket;
|
|
|
|
|
|
struct sockaddr_in Addr;
|
|
|
|
|
|
u_char WaitFalg;
|
|
|
} UDP_SET_DEF;
|
|
|
|
|
|
typedef struct
|
|
|
{
|
|
|
int LineCnt;
|
|
|
int Front;
|
|
|
int Rear;
|
|
|
char Line[MAX_DISP_LINE][128];
|
|
|
} DISP_LINE_BUF;
|
|
|
|
|
|
typedef struct
|
|
|
{
|
|
|
u_long IpAddr[MAX_NET_NUM];
|
|
|
u_char NetNum;
|
|
|
u_long CurCommIp;
|
|
|
u_char IpAddrChangeFlag;
|
|
|
u_char NetCardMacCode[MAX_NET_NUM][NET_MAC_LEN];
|
|
|
u_char ReadMacCodeFlag;
|
|
|
|
|
|
u_char PortNum;
|
|
|
u_char SerialPortNum;
|
|
|
u_char NetPortNum;
|
|
|
|
|
|
DISP_LINE_BUF WatchDispLine;
|
|
|
} DEV_DEF;
|
|
|
|
|
|
// wen 2005.05.27 保护数据(保护模拟量、保护开关量、保护定值的存储结构)
|
|
|
/*!
|
|
|
\struct GROUPDATADEF
|
|
|
\brief 通用分类数据定义
|
|
|
|
|
|
\par 快速参考
|
|
|
common.h
|
|
|
*/
|
|
|
typedef struct
|
|
|
{
|
|
|
/*!
|
|
|
\var GROUPDATADEF::m_szName
|
|
|
\brief 信息点名称描述
|
|
|
|
|
|
\note
|
|
|
取值范围:[有效的ASCII码字符串,最大长度为64]\n
|
|
|
*/
|
|
|
char m_szName[66];
|
|
|
|
|
|
/*!
|
|
|
\var GROUPDATADEF::m_u32DataID
|
|
|
\brief 数据类型
|
|
|
|
|
|
\note
|
|
|
取值范围:[DATAID_NO(0)---DATAID_SINGLE(10)]\n
|
|
|
如果为DATAID_NO,则数据返回浮点数
|
|
|
*/
|
|
|
u_32 m_u32DataID;
|
|
|
|
|
|
/*!
|
|
|
\var GROUPDATADEF::m_fValue
|
|
|
\brief 信息点值
|
|
|
|
|
|
\note
|
|
|
取值范围:浮点数取值范围\n
|
|
|
*/
|
|
|
float m_fValue;
|
|
|
|
|
|
/*!
|
|
|
\var GROUPDATADEF::m_fMaxValue
|
|
|
\brief 信息点最大值
|
|
|
|
|
|
\note
|
|
|
取值范围:浮点数取值范围\n
|
|
|
*/
|
|
|
float m_fMaxValue;
|
|
|
|
|
|
/*!
|
|
|
\var GROUPDATADEF::m_fMinValue
|
|
|
\brief 信息点最小值
|
|
|
|
|
|
\note
|
|
|
取值范围:浮点数取值范围\n
|
|
|
*/
|
|
|
float m_fMinValue;
|
|
|
|
|
|
/*!
|
|
|
\var GROUPDATADEF::m_fStepValue
|
|
|
\brief 信息点步长值
|
|
|
|
|
|
\note
|
|
|
取值范围:浮点数取值范围\n
|
|
|
*/
|
|
|
float m_fStepValue;
|
|
|
|
|
|
/*!
|
|
|
\var GROUPDATADEF::m_szUnit
|
|
|
\brief 信息点量纲
|
|
|
|
|
|
\note
|
|
|
取值范围:[有效的ASCII码字符串,最大长度为16]\n
|
|
|
*/
|
|
|
char m_szUnit[18];
|
|
|
/*!
|
|
|
\var GROUPDATADEF::iFixDataType
|
|
|
\brief 信息点上送到protect的显示类型
|
|
|
|
|
|
\note
|
|
|
取值范围:[0-255](类型(AI=1, DI=2))\n
|
|
|
*/
|
|
|
u_char iFixDataType;
|
|
|
|
|
|
}GROUPDATADEF;
|
|
|
|
|
|
/*!
|
|
|
\struct GROUPEVENTDEF
|
|
|
\brief 保护事件定义
|
|
|
|
|
|
\par 快速参考
|
|
|
common.h
|
|
|
*/
|
|
|
typedef struct{
|
|
|
/*!
|
|
|
\var GROUPEVENTDEF::m_iNewEventNo
|
|
|
\brief 最新事件序号
|
|
|
|
|
|
\note
|
|
|
取值范围:[0--(BUF_EVENT_NUM-1)=15]\n
|
|
|
*/
|
|
|
i_32 m_iNewEventNo;
|
|
|
/*!
|
|
|
\var GROUPEVENTDEF::m_iNewEvents
|
|
|
\brief 最新事件数量
|
|
|
|
|
|
\note
|
|
|
取值范围:[0--16]\n
|
|
|
*/
|
|
|
i_32 m_iNewEvents;
|
|
|
/*!
|
|
|
\var GROUPEVENTDEF::m_iAllEvents
|
|
|
\brief 缓冲事件数量
|
|
|
|
|
|
\note
|
|
|
取值范围:[0--16]\n
|
|
|
*/
|
|
|
i_32 m_iAllEvents;
|
|
|
/*!
|
|
|
\var GROUPEVENTDEF::m_sTm[]
|
|
|
\brief 事件发生时间
|
|
|
*/
|
|
|
//SYSTEMTIME m_sTm[BUF_EVENT_NUM];
|
|
|
/*!
|
|
|
\var GROUPEVENTDEF::m_u8INF[]
|
|
|
\brief 事件信息序号
|
|
|
*/
|
|
|
// BYTE m_u8INF[BUF_EVENT_NUM];
|
|
|
}GROUPEVENTDEF;
|
|
|
|
|
|
/*!
|
|
|
\struct GROUPDEF
|
|
|
\brief 通用分类数据组定义
|
|
|
\note
|
|
|
保护模拟量、保护开关量、保护定值通用存储结构
|
|
|
|
|
|
\par 快速参考
|
|
|
common.h
|
|
|
*/
|
|
|
typedef struct{
|
|
|
/*!
|
|
|
\var GROUPDEF::m_iGroupNo
|
|
|
\brief 通用分类数据组号
|
|
|
|
|
|
\note
|
|
|
取值范围:[0--255]\n
|
|
|
*/
|
|
|
i_32 m_iGroupNo;
|
|
|
|
|
|
/*!
|
|
|
\var GROUPDEF::m_iStartItemNo
|
|
|
\brief 通用分类数据起始条目号
|
|
|
|
|
|
\note
|
|
|
取值范围:[0--255]\n
|
|
|
*/
|
|
|
i_32 m_iStartItemNo;
|
|
|
|
|
|
/*!
|
|
|
\var GROUPDEF::m_iDataType
|
|
|
\brief 该组号数据对应的数据类型
|
|
|
|
|
|
\note
|
|
|
取值范围:AI_PNT_TYPE(模拟量)\n
|
|
|
DI_PNT_TYPE(开关量)\n
|
|
|
PI_PNT_TYPE(电度量)\n
|
|
|
PROTECT_AI_PNT_TYPE(保护模拟量)\n
|
|
|
PROTECT_DI_PNT_TYPE(保护开关量)\n
|
|
|
PROTECT_FIX_PNT_TYPE(保护定 值)\n
|
|
|
PROTECT_EVENT_PNT_TYPE(保护事 件)\n
|
|
|
*/
|
|
|
i_32 m_iDataType;
|
|
|
|
|
|
/*!
|
|
|
\var GROUPDEF::m_iStationNo
|
|
|
\brief 写入数据库中的厂站号
|
|
|
|
|
|
\note
|
|
|
取值范围:[0--MAX_PORT_NUM,0为无效(缺省值)]\n
|
|
|
*/
|
|
|
i_32 m_iStationNo;
|
|
|
|
|
|
/*!
|
|
|
\var GROUPDEF::m_iStartPntNo
|
|
|
\brief 写入数据库中的起始点号
|
|
|
|
|
|
\note
|
|
|
取值范围:[0--(该类型点的最大点号-1)]\n
|
|
|
*/
|
|
|
i_32 m_iStartPntNo;
|
|
|
|
|
|
/*!
|
|
|
\var GROUPDEF::m_u8NGD
|
|
|
\brief 组数据的NGD
|
|
|
|
|
|
\note
|
|
|
取值范围:[0--(该类型点的最大点号-1)]\n
|
|
|
*/
|
|
|
BYTE m_u8NGD;
|
|
|
|
|
|
/*!
|
|
|
\var GROUPDEF::m_pu8DataType
|
|
|
\brief 保护定值数据类型指针
|
|
|
|
|
|
\note
|
|
|
取值范围:无\n
|
|
|
*/
|
|
|
BYTE *m_pu8DataType;
|
|
|
|
|
|
/*!
|
|
|
\var GROUPDEF::m_pu8DataLen
|
|
|
\brief 保护定值数据长度指针
|
|
|
|
|
|
\note
|
|
|
取值范围:无\n
|
|
|
*/
|
|
|
BYTE *m_pu8DataLen;
|
|
|
|
|
|
/*!
|
|
|
\var GROUPDEF::m_pu8GIN
|
|
|
\brief 保护定值数据条目号
|
|
|
|
|
|
\note
|
|
|
取值范围:无\n
|
|
|
*/
|
|
|
BYTE *m_pu8GIN;
|
|
|
|
|
|
/*!
|
|
|
\var GROUPDEF::m_u32CurPntNo
|
|
|
\brief 当前数据点号
|
|
|
|
|
|
\note
|
|
|
取值范围:[1--255]\n
|
|
|
\note
|
|
|
用于处理多帧通用分类数据时,确定该帧的数据起始点号
|
|
|
*/
|
|
|
u_32 m_u32CurPntNo;
|
|
|
|
|
|
/*!
|
|
|
\var GROUPDEF::m_iPntNum
|
|
|
\brief 数量
|
|
|
|
|
|
\note
|
|
|
取值范围:无\n
|
|
|
\note
|
|
|
用于遥控点和保护定值数据
|
|
|
*/
|
|
|
i_32 m_iPntNum;
|
|
|
|
|
|
/*!
|
|
|
\var GROUPDEF::m_bInit
|
|
|
\brief 保护定值数据长度
|
|
|
|
|
|
\note
|
|
|
取值范围:无\n
|
|
|
*/
|
|
|
BOOL m_bInit;
|
|
|
|
|
|
/*!
|
|
|
\var GROUPDEF::m_psDataInfo
|
|
|
\brief 组数据信息指针
|
|
|
|
|
|
\note
|
|
|
取值范围:无\n
|
|
|
*/
|
|
|
GROUPDATADEF *m_psDataInfo;
|
|
|
|
|
|
/*!
|
|
|
\var GROUPDEF::m_psEventInfo
|
|
|
\brief 组事件信息缓冲区指针
|
|
|
|
|
|
\note
|
|
|
取值范围:非事件记录组,该指针为NULL\n
|
|
|
*/
|
|
|
GROUPEVENTDEF *m_psEventInfo;
|
|
|
}GROUPDEF;
|
|
|
|
|
|
/*!
|
|
|
\struct DBINFO
|
|
|
\brief 测量值数据信息定义
|
|
|
|
|
|
\par 快速参考
|
|
|
common.h
|
|
|
*/
|
|
|
typedef struct{
|
|
|
/*!
|
|
|
\var DBINFO::m_u8Asdu
|
|
|
\brief 基本测量值的数据类型
|
|
|
\note
|
|
|
取值范围:[0--255)]\n
|
|
|
*/
|
|
|
u_char m_u8Asdu; // 数据类型
|
|
|
|
|
|
// wen 2006.05.20 修改为16位
|
|
|
/*!
|
|
|
\var DBINFO::m_u8Fun
|
|
|
\brief 基本测量值的功能类型
|
|
|
\note
|
|
|
取值范围:[0--255)]\n
|
|
|
*/
|
|
|
WORD m_u8Fun; // 功能类型
|
|
|
/*!
|
|
|
\var DBINFO::m_u8Inf
|
|
|
\brief 基本测量值的信息序号
|
|
|
\note
|
|
|
取值范围:[0--255]\n
|
|
|
*/
|
|
|
WORD m_u8Inf; // 信息序号
|
|
|
|
|
|
// 以下参数用作转发
|
|
|
/*!
|
|
|
\var DBINFO::m_u8ProvFun
|
|
|
\brief 基本测量值的功能类型
|
|
|
\note
|
|
|
取值范围:[0--255)]\n
|
|
|
*/
|
|
|
BYTE m_u8ProvFun;
|
|
|
/*!
|
|
|
\var DBINFO::m_u8ProvInf
|
|
|
\brief 基本测量值的信息序号
|
|
|
\note
|
|
|
取值范围:[0--255]\n
|
|
|
*/
|
|
|
BYTE m_u8ProvInf;
|
|
|
/*!
|
|
|
\var DBINFO::m_u8LoopData
|
|
|
\brief 是否总召唤数据
|
|
|
\note
|
|
|
取值范围:[0--1]\n
|
|
|
*/
|
|
|
BYTE m_u8LoopData;
|
|
|
}DBINFO, *pDBINFO;
|
|
|
|
|
|
/*!
|
|
|
\struct DBORIENTATION
|
|
|
\brief 测量值数据库定位结构
|
|
|
|
|
|
\par 快速参考
|
|
|
common.h
|
|
|
*/
|
|
|
typedef struct
|
|
|
{
|
|
|
/*!
|
|
|
\var DBORIENTATION::m_iStnNo
|
|
|
\brief 基本测量值在数据库中写入站号
|
|
|
\note
|
|
|
取值范围:[1--最大厂站号)]\n
|
|
|
*/
|
|
|
i_32 m_iStnNo; // 写入数据库站号
|
|
|
|
|
|
/*!
|
|
|
\var DBORIENTATION::m_iStartPntNo
|
|
|
\brief 基本测量值在数据库中起始点号
|
|
|
\note
|
|
|
数据类型为规约本身提供的测量值
|
|
|
\note
|
|
|
取值范围:[0--(最大遥测点号-1)]\n
|
|
|
*/
|
|
|
i_32 m_iStartPntNo; // 写入数据库起始点号
|
|
|
|
|
|
/*!
|
|
|
\var DBORIENTATION::m_iPntNum
|
|
|
\brief 基本测量值的数量
|
|
|
\note
|
|
|
取值范围:[0--255]\n
|
|
|
*/
|
|
|
i_32 m_iPntNum; // 数量
|
|
|
|
|
|
/*!
|
|
|
\var DBORIENTATION::m_psDataInfo
|
|
|
\brief 测量值数据信息指针
|
|
|
*/
|
|
|
pDBINFO m_psDataInfo;
|
|
|
}DBORIENTATION;
|
|
|
|
|
|
typedef struct tagDEVADDRPARAM
|
|
|
{
|
|
|
/*!
|
|
|
\var DEVADDRPARAM::m_uchLinkAddr
|
|
|
\brief 链路地址
|
|
|
*/
|
|
|
BYTE m_uchLinkAddr;
|
|
|
/*!
|
|
|
\var DEVADDRPARAM::m_uchCommAddr
|
|
|
\brief 公共地址
|
|
|
*/
|
|
|
BYTE m_uchCommAddr;
|
|
|
/*!
|
|
|
\var DEVADDRPARAM::m_iLinkIdx
|
|
|
\brief 链路索引号
|
|
|
*/
|
|
|
int m_iLinkIdx;
|
|
|
/*!
|
|
|
\var DEVADDRPARAM::m_iDevIdx
|
|
|
\brief 装置索引号
|
|
|
*/
|
|
|
int m_iDevIdx;
|
|
|
}DEVADDRPARAM, *pDEVADDRPARAM;
|
|
|
|
|
|
typedef struct tagCMDPARAM
|
|
|
{
|
|
|
/*!
|
|
|
\var CMDPARAM::m_uchFun
|
|
|
\brief 指令参数功能号
|
|
|
*/
|
|
|
BYTE m_uchFun;
|
|
|
/*!
|
|
|
\var CMDPARAM::m_uchInf
|
|
|
\brief 指令参数信息号
|
|
|
*/
|
|
|
BYTE m_uchInf;
|
|
|
/*!
|
|
|
\var CMDPARAM::m_uchRII
|
|
|
\brief 返回值
|
|
|
*/
|
|
|
BYTE m_uchRII;
|
|
|
/*!
|
|
|
\var CMDPARAM::m_sDevAddr
|
|
|
\brief 指令参数地址信息
|
|
|
*/
|
|
|
DEVADDRPARAM m_sDevAddr;
|
|
|
}CMDPARAM, *pCMDPARAM;
|
|
|
|
|
|
typedef struct tagBAOHUPROVPARAM
|
|
|
{
|
|
|
/*!
|
|
|
\var BAOHUPROVPARAM::m_sProvStartTime
|
|
|
\brief 调度转发指令下发时间
|
|
|
*/
|
|
|
DAY_TIME m_sBaoHuCmdStartTime;
|
|
|
/*!
|
|
|
\var BAOHUPROVPARAM::m_iBaoHuCommid
|
|
|
\brief 调度转发指令端口
|
|
|
\note <0, 没有调度转发命令
|
|
|
*/
|
|
|
int m_iBaoHuCommid;
|
|
|
/*!
|
|
|
\var BAOHUPROVPARAM::m_iBaoHuMsgType
|
|
|
\brief 调度指令类型
|
|
|
\note <0, 没有调度转发命令
|
|
|
*/
|
|
|
int m_iBaoHuMsgType;
|
|
|
/*!
|
|
|
\var BAOHUPROVPARAM::m_sProvRealAddrParam
|
|
|
\brief 调度转发指令时,实际装置的参数
|
|
|
*/
|
|
|
DEVADDRPARAM m_sRealAddrParam;
|
|
|
}BAOHUPROVPARAM, *pBAOHUPROVPARAM;
|
|
|
|
|
|
#define PROV_SOE_MAX 10
|
|
|
/*!
|
|
|
\struct DEVPROVSOE
|
|
|
\brief 转发SOE数据结构
|
|
|
|
|
|
\par 快速参考
|
|
|
common.h
|
|
|
*/
|
|
|
typedef struct
|
|
|
{
|
|
|
/*!
|
|
|
\var DEVPROVSOE::m_sSoeData
|
|
|
\brief 转发SOE数据参数
|
|
|
|
|
|
\note
|
|
|
用于转发事件
|
|
|
*/
|
|
|
SOE_DEF m_sSoeData[PROV_SOE_MAX];
|
|
|
|
|
|
/*!
|
|
|
\var DEVPROVSOE::m_shSoeNum
|
|
|
\brief 转发SOE数据数目
|
|
|
|
|
|
\note
|
|
|
用于转发事件
|
|
|
*/
|
|
|
short m_shSoeNum;
|
|
|
|
|
|
/*!
|
|
|
\var DEVPROVSOE::m_shFront
|
|
|
\brief 转发SOE数据头索引
|
|
|
|
|
|
\note
|
|
|
用于转发事件
|
|
|
*/
|
|
|
short m_shFront;
|
|
|
|
|
|
/*!
|
|
|
\var DEVPROVSOE::m_shRear
|
|
|
\brief 转发SOE数据尾索引
|
|
|
|
|
|
\note
|
|
|
用于转发事件
|
|
|
*/
|
|
|
short m_shRear;
|
|
|
}DEVPROVSOE;
|
|
|
|
|
|
// 所有规约的通用函数接口指针
|
|
|
typedef const struct tagFUNCTION_CALL
|
|
|
{
|
|
|
char *ProtocolName; // 规约名称
|
|
|
char *Account; // 规约说明
|
|
|
char **ProtocolInfo; // 规约信息指针
|
|
|
void (*ReadConfig)( int ); // 初始化处理
|
|
|
void (*RecvData)( int, u_char *, int ); // 规约读数据处理
|
|
|
void (*Timer)( int ); // 定时器处理
|
|
|
void (*YkYtProcess)( int, u_char *, int ); // 遥控遥调处理
|
|
|
void (*SendSystemTime)( int ); // 系统对时
|
|
|
void (*ProtocolExit)( int ); // 规约退出时处理
|
|
|
// 以下函数指针仅仅针对保护规约有效
|
|
|
void (*BaoHuCmdProcess)(int, RTUMSG *, BOOL); // 保护数据处理
|
|
|
int (*GetBaohuDataBase)(int, int, GROUPDEF **); // 获取保护数据库
|
|
|
}FUNCTION_CALL;
|
|
|
|
|
|
#ifdef OS_WINDOWS
|
|
|
#pragma pack (pop)
|
|
|
#else// OS_UNIX
|
|
|
#pragma pack (0)
|
|
|
#endif //OS_UNIX
|
|
|
#endif |