You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1256 lines
31 KiB
C

2 years ago
/****************************************************************************
* 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
2 years ago
#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"
2 years ago
#include <stdio.h>
#include <string.h>
#include <time.h>
//#include "menu.h"
// 基本函数库
2 years ago
#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 定义输出信息格式
/* !输出信息级别为提示信息
2 years ago
*/
#define MSG_CLASS_TIP 1
/* !输出信息级别为警告信息
2 years ago
*/
#define MSG_CLASS_WARN 2
/* !输出信息级别为错误信息
2 years ago
*/
#define MSG_CLASS_ERROR 3
/*!
*
2 years ago
*/
#define FLAG_READ 0x0001
/*!
*
2 years ago
*/
#define FLAG_WRITE 0x0002
/*!
*
2 years ago
*/
#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已经存在无需重新创建
2 years ago
#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))
2 years ago
#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
2 years ago
#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 )
//基本宏定义
2 years ago
#define DEFAULT_UDP_COMM_PORT 0xff00
//定义用于读写EEPROM的PB6、PB7地址
2 years ago
#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、设备配置初始化类
2 years ago
#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 // 根据协议号读协议配置信息
2 years ago
// 与接收数据有关项目
#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 // 读端口电度
2 years ago
#define SDS_SIO_GET_CONFIG_FILE 0x221 // 读portconfig.ini 文件
#define SDS_SIO_SET_CONFIG_FILE 0x222 // 写portconfig.ini 文件
2 years ago
#define SDS_SIO_SET_SYSTEM_TIME 0x231 // 系统对时
2 years ago
#define SDS_SIO_RESET 0x255 // 读端口电度
2 years ago
#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确定位值
// 数据位数
2 years ago
#define BITMASK 0x03
#define BIT5 0x00
#define BIT6 0x01
#define BIT7 0x02
#define BIT8 0x03
// 停止位
2 years ago
#define STOPMASK 0x0c
#define STOP1 0x04
#define STOP2 0x08
#define STOP15 0x0c
// 校验位
2 years ago
#define PARITYMASK 0xf0
#define PARITYNONE 0x00
#define PARITYODD 0x10
#define PARITYEVE 0x20
#define PARITYMRK 0x30
#define PARITYSPC 0x40
// 流控制
2 years ago
#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时间
2 years ago
#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
2 years ago
*/
#define PROTECT_AI_PNT_TYPE 128
/*!
\brief
2 years ago
*/
#define PROTECT_DI_PNT_TYPE 129
/*!
\brief
2 years ago
*/
#define PROTECT_FIX_PNT_TYPE 130
/*!
\brief
2 years ago
*/
#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
2 years ago
#define CREATE_CNT 100 // 100 ms
#define LED_CNT 250 // 250 ms
#define BLK_SIZE 256
#define SYSTEM_TIME 300 // RTU 对时, 300秒一次
2 years ago
#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 // 遥调急停
// 数据类型
2 years ago
/*!
2 years ago
*/
#define DT_NO 0
/*!
2 years ago
*/
#define DT_UINT 1
/*!
2 years ago
*/
#define DT_INT 2
/*!
2 years ago
*/
#define DT_FLOAT 3
/*!
2 years ago
*/
#define DT_STRING 4
/*!
2 years ago
*/
#define DT_BINARY 5
/*!
2 years ago
*/
#define DT_CONTROL 6
// 信息扩展数据至少扩展2个字节其中第一字节指示数据类型,
// 第二字节根据不同数据类型有所不同。
#define CHECK_NO 1 // 无校验第二扩展字节无效置0
#define CHECK_WHOLE 2 // 总校验,第二扩展字节为校验错误数
#define CHECK_GROUP 3 // 分组校验,第二扩展校验错误总数
2 years ago
#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 // 缓冲区单元最大数量
2 years ago
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// 增加fend功能的宏定义
2 years ago
#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 // 计算机名最大长度
2 years ago
#define MAX_RTU_MSG_SIZE 8192 // RTU 信息包最大长度
2 years ago
#ifdef OS_LINUX
// 在linux下定义属性单字节对齐
2 years ago
typedef int SOCKET;
#define INVALID_SOCKET (SOCKET)(~0)
#endif
#define __attribute__(x)
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#define MAX_POLL_CMD_BUF_LEN 256 // 轮询指令缓冲区最大长度
2 years ago
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 包类型头
2 years ago
typedef struct
{
BYTE PortIdx; // 信息类型
WORD MsgType; // 信息类型
WORD MsgLen; // 信息长度
2 years ago
} RTUMSGHEAD;
//SDS包类型结构
2 years ago
typedef struct
{
BYTE PortIdx; // 信息类型
WORD MsgType; // 信息类型
WORD MsgLen; // 信息长度
2 years ago
u_char MsgData[MAX_MSG_BUF_SIZE];
} RTUMSG;
//网络发包临时数据绶冲结构
2 years ago
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; // 转发点类型
2 years ago
} PROV_AI_PNT;
typedef struct
{
WORD PortNo;
WORD PntNo;
u_char Enable;
u_char ChangeFlag;
u_char CtrlEnable;
short ControlNo;
// 模拟盘专用参数
WORD wType; // 转发点类型
2 years ago
} 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; // 遥测状态
2 years ago
//WORD RawValue; // 遥测原值
DWORD RawValue; // 遥测原值
BYTE Polar; // 处理极性
PROV_PNT Prov[MAX_PROV_PORT_NUM]; // 转发标志
2 years ago
} AI_DEF;
typedef struct
{
BYTE Enable;
BYTE State; // 遥信状态
2 years ago
BYTE Status; // 遥信状态
2 years ago
u_char CtrlEnable;
WORD ControlNo;
DAY_TIME SoeTime;
PROV_PNT Prov[MAX_PROV_PORT_NUM]; // 转发标志
2 years ago
} DI_DEF;
typedef struct
{
BYTE Enable;
BYTE State; // 电度状态
2 years ago
u_long RawValue; // 电度原值
2 years ago
PROV_PNT Prov[MAX_PROV_PORT_NUM]; // 转发标志
2 years ago
} PI_DEF;
typedef struct
{
int iPntNo; // SOE点号
BYTE bStatus; // 状态值
2 years ago
// wen 2005.05.18 增加扩展字节处理(针对于103有效)
BYTE u8Type; // 103中表现为asdu号
BYTE u8ProvFun; // 103转发中的FUN
BYTE u8ProvInf; // 103转发中的INF
WORD wRelativeTime; // 相对时间
WORD wFaultNo; // 故障序号
2 years ago
DAY_TIME SoeTime; // SOE时间
2 years ago
// wen 2005.10.25 增加扩充字符串,用来解析保护事件中的故障参数
char szMsgEx[64]; // 扩充字节数不得大于64字节
2 years ago
} SOE_DEF;
typedef struct
{
int iSoeNum; // soe数量
int iFront; // 队列首指针
int iRear; // 队列尾指针
SOE_DEF *ptrProvSoe; // 端口soe数据缓冲区(最大MAX_PROV_SOE)队列
2 years ago
} 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 增加遥控遥调转发处理
2 years ago
typedef struct
{
int m_iProvPortIdx; // 转发厂站端口号
int m_iProvPntIdx; // 转发厂站遥信点号
int m_iProvYkYtPointIdx;// 转发厂站遥控遥调点号
int m_iYkYtPointIdx; // 实际厂站遥控遥调点号
2 years ago
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 来源转发端口)
2 years ago
} 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)
2 years ago
} YKYT_PARAM;
typedef struct
{
//******************** 串行端口信息 ************************
DWORD Baud; // 波特率(cdt计算时间间隔)
2 years ago
//**************** 数据收发缓冲区接收状态*******************
int m_iRevStatus; // 接收数据缓冲区状态
int m_iNeedRevLength; // 还需要接收的数据长度
2 years ago
//******************** Poll Cmd ****************************
u_long Retry; // 重试命令次数
u_long RetryCnt; // 重试命令计数
u_long RetryTime; // 重试命令时间
u_long RetryTimeCnt; // 重试命令时间计数
u_long WaitTime; // 命令间隔时间
u_long WaitTimeCnt; // 命令间隔时间计数
2 years ago
u_char ForceWaitFlag; // 强制等待标志
u_short ForceWaitCnt; // 强制等待计数
2 years ago
u_char ReSendCmdFlag; // 重发命令标志
u_char SendCmdFlag; // 命令发送标志
u_char RevCmdFlag; // 命令正常接收标志
2 years ago
u_char LastGetCmdBuf; // 当前使用缓冲区
2 years ago
DATA_BUF PollCmd[POLL_CMD_TYPE_NUM];
//******************* 端口数据库 ***************************
2 years ago
u_char PortType; // MAIN_PORT or SLAVE_PORT
u_char CheckTime; // 时间校正(=0, 不对时; =1, 上对时(接收); =2, 下对时(发送))
2 years ago
WORD AiNum; // 端口遥测数量
WORD DiNum; // 端口遥信数量
WORD PiNum; // 端口电度数量
2 years ago
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; // 转发遥控信息缓冲区
2 years ago
} 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
2 years ago
//**********************************************************
} SIO_PARAM_SERIAL_DEF;
//串口相关所有参数集中定义
2 years ago
typedef struct
{
//******************** 端口基本信息 ************************
u_char ProtocolIdx; // 规约索引,大于 0
u_char ByPassFlag; // 旁路标志
u_char OpenFlag; // 打开标志(该标识弃用,改在共享内存中)
u_char Status; // 端口状态,用来判断端口是否通讯正常
// 在端口正常的1分钟后发送全数据, 避免数据未全部刷新导致的乱报警
int iDelaySendAllData;// 全数据延迟传送
int iForceSendFlag; // 强制下发标志
2 years ago
//******************** 网络端口信息 ************************
u_char NetType; // UDP_COMM、TCP_S_COMM、TCO_C_COMM
DWORD NetPort; // 网络通讯端口
u_long NetCommIpAddr; // 网络通讯地址
int LiSock; // 侦听socket
int CommSock; // 通讯socket
2 years ago
//**********************************************************
//******************** 数据收发缓冲区***********************
DATA_BUF RecvBuf; // 接收数据缓冲区
struct WR_DATA *WriteData; // 下行数据缓冲区
2 years ago
int iWriteDataNo; // 下行数据缓冲区序号
//******************** 统计信息 ****************************
u_long MsgNum; // 端口信息计数
u_long LostSyncCnt; // 端口失步次数
u_long ErrMsgNum; // 端口错误信息计数
u_long RecvCharNum; // 端口在线时间统计
u_long SendCharNum; // 端口离线时间统计
u_long LineCommCnt; // 端口是否在线计数
2 years ago
//****************** 串行端口信息 **************************
2 years ago
SIO_PARAM_SERIAL_DEF *m_psSerial;
//**********************************************************
//******************* 保护信息 *****************************
2 years ago
SIO_PARAM_BAOHU_DEF *m_psBaoHu;
//**********************************************************
//******************** 用户扩展结构 ************************
2 years ago
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 保护数据(保护模拟量、保护开关量、保护定值的存储结构)
2 years ago
/*!
\struct GROUPDATADEF
\brief
2 years ago
\par
2 years ago
common.h
*/
typedef struct
{
/*!
\var GROUPDATADEF::m_szName
\brief
2 years ago
\note
[ASCII64]\n
2 years ago
*/
char m_szName[66];
/*!
\var GROUPDATADEF::m_u32DataID
\brief
2 years ago
\note
[DATAID_NO(0)---DATAID_SINGLE(10)]\n
DATAID_NO
2 years ago
*/
u_32 m_u32DataID;
/*!
\var GROUPDATADEF::m_fValue
\brief
2 years ago
\note
\n
2 years ago
*/
float m_fValue;
/*!
\var GROUPDATADEF::m_fMaxValue
\brief
2 years ago
\note
\n
2 years ago
*/
float m_fMaxValue;
/*!
\var GROUPDATADEF::m_fMinValue
\brief
2 years ago
\note
\n
2 years ago
*/
float m_fMinValue;
/*!
\var GROUPDATADEF::m_fStepValue
\brief
2 years ago
\note
\n
2 years ago
*/
float m_fStepValue;
/*!
\var GROUPDATADEF::m_szUnit
\brief
2 years ago
\note
[ASCII16]\n
2 years ago
*/
char m_szUnit[18];
/*!
\var GROUPDATADEF::iFixDataType
\brief protect
2 years ago
\note
[0-255]((AI=1, DI=2))\n
2 years ago
*/
u_char iFixDataType;
}GROUPDATADEF;
/*!
\struct GROUPEVENTDEF
\brief
2 years ago
\par
2 years ago
common.h
*/
typedef struct{
/*!
\var GROUPEVENTDEF::m_iNewEventNo
\brief
2 years ago
\note
[0--(BUF_EVENT_NUM-1)=15]\n
2 years ago
*/
i_32 m_iNewEventNo;
/*!
\var GROUPEVENTDEF::m_iNewEvents
\brief
2 years ago
\note
[0--16]\n
2 years ago
*/
i_32 m_iNewEvents;
/*!
\var GROUPEVENTDEF::m_iAllEvents
\brief
2 years ago
\note
[0--16]\n
2 years ago
*/
i_32 m_iAllEvents;
/*!
\var GROUPEVENTDEF::m_sTm[]
\brief
2 years ago
*/
//SYSTEMTIME m_sTm[BUF_EVENT_NUM];
/*!
\var GROUPEVENTDEF::m_u8INF[]
\brief
2 years ago
*/
// BYTE m_u8INF[BUF_EVENT_NUM];
}GROUPEVENTDEF;
/*!
\struct GROUPDEF
\brief
2 years ago
\note
2 years ago
\par
2 years ago
common.h
*/
typedef struct{
/*!
\var GROUPDEF::m_iGroupNo
\brief
2 years ago
\note
[0--255]\n
2 years ago
*/
i_32 m_iGroupNo;
/*!
\var GROUPDEF::m_iStartItemNo
\brief
2 years ago
\note
[0--255]\n
2 years ago
*/
i_32 m_iStartItemNo;
/*!
\var GROUPDEF::m_iDataType
\brief
2 years ago
\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
2 years ago
*/
i_32 m_iDataType;
/*!
\var GROUPDEF::m_iStationNo
\brief
2 years ago
\note
[0--MAX_PORT_NUM0()]\n
2 years ago
*/
i_32 m_iStationNo;
/*!
\var GROUPDEF::m_iStartPntNo
\brief
2 years ago
\note
[0--(-1)]\n
2 years ago
*/
i_32 m_iStartPntNo;
/*!
\var GROUPDEF::m_u8NGD
\brief NGD
2 years ago
\note
[0--(-1)]\n
2 years ago
*/
BYTE m_u8NGD;
/*!
\var GROUPDEF::m_pu8DataType
\brief
2 years ago
\note
\n
2 years ago
*/
BYTE *m_pu8DataType;
/*!
\var GROUPDEF::m_pu8DataLen
\brief
2 years ago
\note
\n
2 years ago
*/
BYTE *m_pu8DataLen;
/*!
\var GROUPDEF::m_pu8GIN
\brief
2 years ago
\note
\n
2 years ago
*/
BYTE *m_pu8GIN;
/*!
\var GROUPDEF::m_u32CurPntNo
\brief
2 years ago
\note
[1--255]\n
2 years ago
\note
2 years ago
*/
u_32 m_u32CurPntNo;
/*!
\var GROUPDEF::m_iPntNum
\brief
2 years ago
\note
\n
2 years ago
\note
2 years ago
*/
i_32 m_iPntNum;
/*!
\var GROUPDEF::m_bInit
\brief
2 years ago
\note
\n
2 years ago
*/
BOOL m_bInit;
/*!
\var GROUPDEF::m_psDataInfo
\brief
2 years ago
\note
\n
2 years ago
*/
GROUPDATADEF *m_psDataInfo;
/*!
\var GROUPDEF::m_psEventInfo
\brief
2 years ago
\note
NULL\n
2 years ago
*/
GROUPEVENTDEF *m_psEventInfo;
}GROUPDEF;
/*!
\struct DBINFO
\brief
2 years ago
\par
2 years ago
common.h
*/
typedef struct{
/*!
\var DBINFO::m_u8Asdu
\brief
2 years ago
\note
[0--255)]\n
2 years ago
*/
u_char m_u8Asdu; // 数据类型
2 years ago
// wen 2006.05.20 修改为16位
2 years ago
/*!
\var DBINFO::m_u8Fun
\brief
2 years ago
\note
[0--255)]\n
2 years ago
*/
WORD m_u8Fun; // 功能类型
2 years ago
/*!
\var DBINFO::m_u8Inf
\brief
2 years ago
\note
[0--255]\n
2 years ago
*/
WORD m_u8Inf; // 信息序号
2 years ago
// 以下参数用作转发
2 years ago
/*!
\var DBINFO::m_u8ProvFun
\brief
2 years ago
\note
[0--255)]\n
2 years ago
*/
BYTE m_u8ProvFun;
/*!
\var DBINFO::m_u8ProvInf
\brief
2 years ago
\note
[0--255]\n
2 years ago
*/
BYTE m_u8ProvInf;
/*!
\var DBINFO::m_u8LoopData
\brief
2 years ago
\note
[0--1]\n
2 years ago
*/
BYTE m_u8LoopData;
}DBINFO, *pDBINFO;
/*!
\struct DBORIENTATION
\brief
2 years ago
\par
2 years ago
common.h
*/
typedef struct
{
/*!
\var DBORIENTATION::m_iStnNo
\brief
2 years ago
\note
[1--)]\n
2 years ago
*/
i_32 m_iStnNo; // 写入数据库站号
2 years ago
/*!
\var DBORIENTATION::m_iStartPntNo
\brief
2 years ago
\note
2 years ago
\note
[0--(-1)]\n
2 years ago
*/
i_32 m_iStartPntNo; // 写入数据库起始点号
2 years ago
/*!
\var DBORIENTATION::m_iPntNum
\brief
2 years ago
\note
[0--255]\n
2 years ago
*/
i_32 m_iPntNum; // 数量
2 years ago
/*!
\var DBORIENTATION::m_psDataInfo
\brief
2 years ago
*/
pDBINFO m_psDataInfo;
}DBORIENTATION;
typedef struct tagDEVADDRPARAM
{
/*!
\var DEVADDRPARAM::m_uchLinkAddr
\brief
2 years ago
*/
BYTE m_uchLinkAddr;
/*!
\var DEVADDRPARAM::m_uchCommAddr
\brief
2 years ago
*/
BYTE m_uchCommAddr;
/*!
\var DEVADDRPARAM::m_iLinkIdx
\brief
2 years ago
*/
int m_iLinkIdx;
/*!
\var DEVADDRPARAM::m_iDevIdx
\brief
2 years ago
*/
int m_iDevIdx;
}DEVADDRPARAM, *pDEVADDRPARAM;
typedef struct tagCMDPARAM
{
/*!
\var CMDPARAM::m_uchFun
\brief
2 years ago
*/
BYTE m_uchFun;
/*!
\var CMDPARAM::m_uchInf
\brief
2 years ago
*/
BYTE m_uchInf;
/*!
\var CMDPARAM::m_uchRII
\brief
2 years ago
*/
BYTE m_uchRII;
/*!
\var CMDPARAM::m_sDevAddr
\brief
2 years ago
*/
DEVADDRPARAM m_sDevAddr;
}CMDPARAM, *pCMDPARAM;
typedef struct tagBAOHUPROVPARAM
{
/*!
\var BAOHUPROVPARAM::m_sProvStartTime
\brief
2 years ago
*/
DAY_TIME m_sBaoHuCmdStartTime;
/*!
\var BAOHUPROVPARAM::m_iBaoHuCommid
\brief
\note <0,
2 years ago
*/
int m_iBaoHuCommid;
/*!
\var BAOHUPROVPARAM::m_iBaoHuMsgType
\brief
\note <0,
2 years ago
*/
int m_iBaoHuMsgType;
/*!
\var BAOHUPROVPARAM::m_sProvRealAddrParam
\brief
2 years ago
*/
DEVADDRPARAM m_sRealAddrParam;
}BAOHUPROVPARAM, *pBAOHUPROVPARAM;
#define PROV_SOE_MAX 10
/*!
\struct DEVPROVSOE
\brief SOE
2 years ago
\par
2 years ago
common.h
*/
typedef struct
{
/*!
\var DEVPROVSOE::m_sSoeData
\brief SOE
2 years ago
\note
2 years ago
*/
SOE_DEF m_sSoeData[PROV_SOE_MAX];
/*!
\var DEVPROVSOE::m_shSoeNum
\brief SOE
2 years ago
\note
2 years ago
*/
short m_shSoeNum;
/*!
\var DEVPROVSOE::m_shFront
\brief SOE
2 years ago
\note
2 years ago
*/
short m_shFront;
/*!
\var DEVPROVSOE::m_shRear
\brief SOE
2 years ago
\note
2 years ago
*/
short m_shRear;
}DEVPROVSOE;
// 所有规约的通用函数接口指针
typedef const struct tagFUNCTION_CALL
2 years ago
{
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 **); // 获取保护数据库
2 years ago
}FUNCTION_CALL;
#ifdef OS_WINDOWS
#pragma pack (pop)
#else// OS_UNIX
#pragma pack (0)
#endif //OS_UNIX
#endif