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.

517 lines
12 KiB
C

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/************************************************************************************
*
* Copyright (C) 2004-2005 SCADA Control Technology Co., Ltd.
* All rights reserved.
*
* 文件名称scadaprotect.h
* 文件标识SCADA内部保护通讯规约
* 摘 要:
*
* 当前版本1.0
* 作 者aaawen
* 完成日期2005/06/02
*
* 取代版本1.0
* 原作者 aaawen
* 完成日期:
*
* 说 明:数据定义规则
* u8 --- BYTE(usigned char)
* ch --- char
* w --- WORD(u_short, usigned short)
* sh --- short
* b --- BOOL(bool)
* i --- int
* l --- long
* u32 --- u_32
* ui --- unsigned int(u_int)
* ul --- unsigned long(u_long)
* f --- float
* db --- double
* c --- class
* s --- struct
* sta --- static
* g --- 全局变量
* Array --- 数组
* a --- 数组
* m_ --- 数据成员
* p --- 指针
* str --- 字符串
* 全部大写 --- 常量
* 首字节必须大写--- 类名称,结构,函数
**************************************************************************************/
// buban103.h: interface for the buban103 class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(_SCADABAOHU_H_200506020948__INCLUDED_)
#define _SCADABAOHU_H_200506020948__INCLUDED_
#ifdef OS_LINUX
#include "baohulib/common.h"
#else
#include "common.h"
#endif
//////////////////////////////////////////////////////////////////////////
// 宏定义 //
// WEN 2005.06.02 //
//////////////////////////////////////////////////////////////////////////
/*!
保护指令包(PROTECT->FEND)
*/
#define pPFV_PROTECT_BYPASS 1
/*!
保护数据包应答(FEND->PROTECT)
*/
#define fPFV_PROTECT_BYPASS_ACK 2
/*!
通道状态包(FEND->PROTECT)
*/
#define fPFV_STATUS 3
/*!
网络活动包(FEND<->PROTECT)
*/
#define fPFV_NETACTIVE 0xF0
//指令包操作码
/*!
读取定值
*/
#define hREADFIX 0x01
/*!
读取定值区号
*/
#define hREADFIXNO 0x07
/*!
读取保护模拟量
*/
#define hREADPAI 0x09
/*!
读取保护开关量
*/
#define hREADPDI 0x0b
/*!
读取保护波形数据
*/
#define hREADPWAVE 0x0d
/*!
读取指定故障报告
*/
#define hQUERYFAULT 0x11
/*!
读取指定的自检报告
*/
#define hQUERYSELFCHECK 0x12
/*!
修改保护定值
*/
#define hWRITEALLFIX 0x15
/*!
修改指定的保护定值
*/
#define hWRITESPECIALFIX 0x16
/*!
保护定值确认
*/
#define hWRITEFIXACK 0x17
/*!
保护定值不确认
*/
#define hWRITEFIXNAK 0x18
/*!
修改保护定值区
*/
#define hWRITEFIXNO 0x19
/*!
定值区修改确认
*/
#define hWRITEFIXNOACK 0x1a
/*!
定值区修改不确认
*/
#define hWRITEFIXNONAK 0x1b
/*!
保护信号复归
*/
#define hRESETPROTECT 0x1c
/*!
单个装置对时
*/
#define hCHECKTIME 0x1d
/*!
保护装置广播对时
*/
#define hBROADCASTCHECKTIME 0x1e
/*!
读取保护装置状态
*/
#define hSTATUS 0x1f
/*!
读取菜单单元值
*/
#define hCOMMAND 0x20
/*!
读取扰动参数的命令
*/
#define hDISTCOMMAND 0x21
/*!
保护操作取消
*/
#define hCANCEL 0xFF
//应答包操作码
/*!
数据申请中
*/
#define hREADINGDATA 0x02
/*!
定值数据
*/
#define hFIXDATA 0x03
/*!
数据申请结束
*/
#define hREADDATAEND 0x04
/*!
数据申请无响应
*/
#define hNORESPONSE 0x05
/*!
数据处理繁忙,稍后重试
*/
#define hSYSTEMBUSY 0x06
/*!
定值区号数据
*/
#define hFIXNODATA 0x08
/*!
保护模拟量数据
*/
#define hPAIDATA 0x0a
/*!
保护开关量数据
*/
#define hPDIDATA 0x0c
/*!
保护波行数据上送开始
*/
#define hPWAVEDATASTART 0x0e
/*!
保护波行数据
*/
#define hPWAVEDATA 0x0f
/*!
保护波行数据上送结束
*/
#define hPWAVEDATAEND 0x10
/*!
带索引号的事件报告数据
*/
#define hPEVENTDATAWITHID 0x13
/*!
字符串事件报告数据
*/
#define hPEVENTDATAWITHSTRING 0x14
/*!
保护定值确认
*/
#define hWRITEFIXACK 0x17
/*!
保护定值不确认
*/
#define hWRITEFIXNAK 0x18
/*!
定值区修改确认
*/
#define hWRITEFIXNOACK 0x1a
/*!
定值区修改不确认
*/
#define hWRITEFIXNONAK 0x1b
/*!
定值数据带序号
*/
#define hFIXDATAWITHNO 0x22
/*!
保护模拟量数据带序号
*/
#define hPAIDATAWITHNO 0x23
/*!
保护开关量数据带序号
*/
#define hPDIDATAWITHNO 0x24
// 数据项目属性
/*!
实际值
*/
#define ITEM_ATTR_REALVALUE 1
/*!
缺省值
*/
#define ITEM_ATTR_DEFAULTVALUE 2
/*!
量 程
*/
#define ITEM_ATTR_MINMAXSTEP 3
/*!
备 用
*/
#define ITEM_ATTR_STANDBY 4
/*!
精 度
*/
#define ITEM_ATTR_PRECISION 5
/*!
因 子
*/
#define ITEM_ATTR_FIGURE 6
/*!
参 比
*/
#define ITEM_ATTR_RATE 7
/*!
列 表
*/
#define ITEM_ATTR_LIST 8
/*!
量 纲
*/
#define ITEM_ATTR_UNIT 9
/*!
描 述
*/
#define ITEM_ATTR_DESCRIPTION 10
/*!
保护操作超时时间(秒)
*/
#define OPERPROTECTTIMEOUT 15
// 是pc机系统还是嵌入式系统
#ifdef PC_MACHINE
#ifdef OS_WINDOWS
#pragma pack (push,1)
#else// OS_UNIX
#pragma pack(1)
#endif //OS_UNIX
#endif
typedef struct tagPROTECTCONTENTHEAD
{
u_32 ummid __attribute__ ((packed));// 操作用户
u_32 uAddr __attribute__ ((packed));// 保护地址
char cFixNo __attribute__ ((packed));// 定值区号
char cCPUNo __attribute__ ((packed));// CPU号
u_32 uFuncCode __attribute__ ((packed));// 操作功能码
u_32 uReserved __attribute__ ((packed));// 保留
}PROTECTCONTENTHEAD, *pPROTECTCONTENTHEAD;
typedef struct
{
u_32 MsgType __attribute__ ((packed));// 信息类型
u_32 PortNumber __attribute__ ((packed));// 信息端口号
u_32 MsgLen __attribute__ ((packed));// 信息长度
//u_char MsgData[1]; // 信息数据
}PROTECTMSGHEAD;
typedef struct
{
u_32 MsgType __attribute__ ((packed));// 信息类型
u_32 PortNumber __attribute__ ((packed));// 信息端口号
u_32 MsgLen __attribute__ ((packed));// 信息长度
u_char MsgData[MAX_RTU_MSG_SIZE] __attribute__ ((packed));// 信息数据
}PROTECTMSG;
// 是pc机系统还是嵌入式系统
#ifdef PC_MACHINE
#ifdef OS_WINDOWS
#pragma pack (pop)
#else// OS_UNIX
#pragma pack (0)
#endif //OS_UNIX
#endif
typedef struct
{
BOOL bPortIdle; // 端口保护操作空闲标识
u_32 timeOut; // 保护操作超时时间
u_32 mmid; // 保护操作用户
} PORTSTATUS, *pPORTSTATUS;
typedef struct tagSCADAPROVDEVDEF
{
/*!
\brief 装置的实际端口号
*/
i_32 m_iRealCommid;
/*!
\brief 装置的转发地址(唯一确定一个装置)
*/
i_32 m_iProvAddr;
/*!
\brief 转发SOE数据参数
\note
用于历史记录的转发事件(应该是没有作用,已经遗弃)
*/
DEVPROVSOE m_sProvSoe;
i_32 m_iStatusStn;
i_32 m_iStatusPnt;
DBORIENTATION m_sYxInfo;
}SCADAPROVDEVDEF;
typedef struct tagSCADAPROTECTPORTPARAM
{
/*!
\var SCADAPROTECTPORTPARAM::m_achRecvBuf
\brief 接收数据缓冲区
\note
缓冲区最大不超过 MAX_RTU_MSG_SIZE+12(包头) bytes\n
*/
char m_achRecvBuf[MAX_RTU_MSG_SIZE+12];
/*!
\var SCADAPROTECTPORTPARAM::m_iRecvLen
\brief 接收数据长度
*/
int m_iRecvLen;
/*!
\var SCADAPROTECTPORTPARAM::m_iRecvLen
\brief 网络活动包的发送时间
*/
int m_iActiveTimeCnt;
int m_iActiveTimeConst;
/*!
\var SCADAPROTECTPORTPARAM::m_iRecvLen
\brief 通道状态包的发送时间
*/
int m_iStatusTimeCnt;
int m_iStatusTimeConst;
/*!
保护装置数量
*/
i_32 m_iDevNum;
SCADAPROVDEVDEF *m_psProvDev;
SINGLELIST m_sBaoHuData;
char m_chArrayTempletFileName[256];
PORTSTATUS *m_pPrtPortStatus;
/*!
\brief 该规约的端口数据指针
*/
SIO_PARAM_BAOHU_DEF *m_psBaoHu;
}SCADAPROTECTPORTPARAM, *pSCADAPROTECTPORTPARAM;
/////////////////////////以下为通用函数接口///////////////////////////
/*!
\brief 读取配置函数
\param commid -- 端口号
\note
取值范围0 -- MaxSerialPortNum + MaxNetPortNum -1\n
*/
void ScadaProtectReadConfig(int commid); // 初始化处理
/*!
\brief 读取端口数据函数
\param commid -- 端口号
\note
取值范围0 -- MaxSerialPortNum + MaxNetPortNum -1\n
\param buf -- 数据源缓冲区指针
\param len -- 数据源长度
*/
void ScadaProtectRecvData(int commid, u_char *buf, int len);// 规约读数据处理
/*!
\brief 规约数据处理定时器函数
\param commid -- 端口号
\note
取值范围0 -- MaxSerialPortNum + MaxNetPortNum -1\n
*/
void ScadaProtectTimer(int commid); // 定时器处理
/*!
\brief 遥控遥调数据处理函数
\param commid -- 端口号
\note
取值范围0 -- MaxSerialPortNum + MaxNetPortNum -1\n
\param buf -- 数据源缓冲区指针
\param len -- 数据源长度
*/
void ScadaProtectYkYtProcess(int commid, u_char *buf, int len); // 遥控遥调处理
/*!
\brief 系统下发对时函数
\param commid -- 端口号
\note
取值范围0 -- MaxSerialPortNum + MaxNetPortNum -1\n
*/
//void ScadaProtectSendSystemTime(int commid); // 系统对时
/*!
\brief 系统退出时规约处理函数
\param commid -- 端口号
\note
取值范围0 -- MaxSerialPortNum + MaxNetPortNum -1\n
*/
void ScadaProtectExit(int commid); // 规约退出
/*!
\brief 保护命令处理函数
\param commid -- 端口号
\param rtumsg -- 下发的保护命令指针
\note
取值范围0 -- MaxSerialPortNum + MaxNetPortNum -1\n
*/
void ScadaProtectBaoHuCmdProcess(int commid, RTUMSG *rtumsg, BOOL bUpData);
/*!
\brief 取保护数据库指针函数
\param commid -- 端口号
\param iProvAddr -- 统一编排的保护转发地址
\param ppBaoHuDB -- 存放保护数据指针的指针
\retval -- 返回该装置保护数据组数
*/
int ScadaProtectGetBaohuDataBase(int commid, int iProvAddr, GROUPDEF **ppBaoHuDB);
/////////////////////////通用函数接口结束///////////////////////////////
/////////////////////////以下为通用函数支持接口/////////////////////////
void ScadaProtectProvMakeYkYtCommand(int commid, u_char *buf, int len);
/////////////////////////通用函数支持接口结束///////////////////////////
///////////////////////////以下为配置函数接口///////////////////////////
BOOL InitScadaInfoFromTempletFile(int commid, SCADAPROTECTPORTPARAM *psPortParam,\
char *ptrTemplate, BOOL bMaster);
BOOL GetProvDevNumFromTemplateFileScada(int commid, HDSFILE hFile, SCADAPROTECTPORTPARAM *psPortParam);
BOOL GetProvDevParamFromTemplateFileScada(int commid, HDSFILE hFile, SCADAPROTECTPORTPARAM *psPortParam);
int FindProtectDevFromPntNoScada(SCADAPROTECTPORTPARAM *psPortParam, int iPntNo, int itype);
/////////////////////////////配置函数接口结束///////////////////////////
///////////////////////以下为规约处理函数接口///////////////////////////
void ReduceTimeOut(SCADAPROTECTPORTPARAM *psPortParam);
BOOL IsProtectPortIdle(int commid, SCADAPROTECTPORTPARAM *psPortParam);
BOOL GetProtectPortIdle(int commid, SCADAPROTECTPORTPARAM *psPortParam, PORTSTATUS *pStatus);
BOOL SetProtectPortIdle(int commid, SCADAPROTECTPORTPARAM *psPortParam, PORTSTATUS *pStatus);
BOOL SetProtectPortIdleEx(int commid, int iBaoHuCommid, PORTSTATUS *pStatus);
void SendResponsetoMMI(int commid, int mmid, u_32 ResponseType, PROTECTMSG *pmsg);
//将客户机报文所有的数据从网络字节循序转换成主机字节顺序函数
void AllNetToHostByteSequence(PROTECTMSG *userdata);
//将客户机报文所有的数据从主机字节顺序转换成网络字节顺序函数
void AllHostToNetByteSequence(PROTECTMSG *userdata);
BOOL ScadaProtectConvertToScadaFrameAndSend(int commid);
BOOL ScadaProtectConvertTo103AndSend(int commid, PROTECTMSG *pmsg);
//数据处理函数总入口
void ScadaProtectProcessData(int commid, SCADAPROTECTPORTPARAM *psPortParam, BOOL bProcess);
void ScadaProtectByPassData(int commid, SCADAPROTECTPORTPARAM *psPortParam, PROTECTMSG *pmsg);
BOOL FormatDataAndSend(int commid, PROTECTMSG *pmsg);
void MakeInteractionCmd(int commid, int sourcommid, u_32 ResponseFunc, PROTECTCONTENTHEAD *pSourHead, BOOL bBoardCast);
void MakeNetActivePacket(int commid);
void MakeStatusPacket(int commid);
BOOL MakeSoeDataPacket(int commid);
/////////////////////////规约处理函数接口结束///////////////////////////
/////////////////////////以下为调试函数接口/////////////////////////////
void DispPrtPortStatus(int commid, SCADAPROTECTPORTPARAM *psPortParam);
///////////////////////////调试函数接口结束/////////////////////////////
#endif // !defined(_SCADABAOHU_H_200506020948__INCLUDED_)