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.

2256 lines
63 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.
*
* 文件名称buban103.h
* 文件标识部颁103规约
* 摘 要103规约的处理的结构、宏还有函数定义
*
* 当前版本1.0
* 作 者aaawen
* 完成日期2005/04/22
*
* 取代版本1.0
* 原作者
* 完成日期:
*
* 说 明:数据定义规则
* 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(_BUBAN103_H_200504221547__INCLUDED_)
#define _BUBAN103_H_200504221547__INCLUDED_
#ifdef OS_LINUX
#include "baohulib/common.h"
#else
#include "common.h"
#endif
//////////////////////////////////////////////////////////////////////////
// 宏定义 //
// WEN 2001.03.09 //
//////////////////////////////////////////////////////////////////////////
/*!
\brief 保护信息转发返回码
*/
#define RII_PROV_ID 0xFF
/*!
\brief 遥测量起始点号
*/
#define INF_AI_START 92
/*!
\brief 遥测量数量
*/
#define INF_AI_NUM 57
/*!
\brief 遥信量起始点号
*/
#define INF_DI_START 149
/*!
\brief 遥信量数量
*/
#define INF_DI_NUM 89
/*!
\brief 电度量起始点号
*/
#define INF_PI_START 6
/*!
\brief 电度量数量
*/
#define INF_PI_NUM 26
/*!
\brief 遥控点起始点号
*/
#define INF_YK_START 48
/*!
\brief 遥控点数量
*/
#define INF_YK_NUM 28
/*!
\brief 遥调点起始点号
*/
#define INF_YT_START 48
/*!
\brief 遥调点数量
*/
#define INF_YT_NUM 28
/*!
\brief 每个装置配置的最大组号
*/
#define GROUPNUM 16
/*!
\brief 文件名称长度
*/
#define FILENAME_LEN 256
/*!
\brief 装置模拟量最大组数
*/
#define DEV_AI_MAXNUM 7
/*!
\brief 字符串最大长度
*/
#define MAXSTRINGLEN 64
/*!
\brief 定时召唤命令最大数目
*/
#define BUBAN103_TIMER_CMD_NUM 5
// 应用服务数据单元ASDU的常量定义
// 监视方向的类型标识
#define M_TM_TA_3 1 //带时标的报文
#define M_TMR_TA_3 2 //具有相对时间的带时标的报文
#define M_MEI_NA_3 3 //被测值I
#define M_TME_TA_3 4 //具有相对时间的带时标的被测值
#define M_IRC_NA_3 5 //标识
#define M_SYN_TA_3 6 //时间同步
#define M_TGI_NA_3 8 //总查询(总召唤)终止
#define M_MEII_NA_3 9 //被测值II
#define M_GD_NTA_3 10 //通用分类数据
#define M_GI_NTA_3 11 //通用分类标识
#define M_LRD_TA_3 23 //被记录的扰动表
#define M_RTD_TA_3 26 //扰动数据传输准备就绪
#define M_RTC_NA_3 27 //被记录的通道传输准备就绪
#define M_RTT_NA_3 28 //带标志的状态变位传输准备就绪
#define M_TOT_TA_3 29 //传送带标志的状态变位
#define M_TOV_NA_3 30 //传送扰动值
#define M_EOT_TA_3 31 //传送结束
#define M_MEIII_TA_3 32 //带时标的被测值Ⅲ
#define M_MEIV_TA_3 33 //带时标的被测值Ⅳ
#define M_MEV_TA_3 34 //带时标的被测值Ⅴ
#define M_MEVI_TA_3 35 //带时标的被测值Ⅵ
#define M_MEVII_NA_3 50 //被测值Ⅶ
#define M_IT_NA_3 36 //电能脉冲计数值
#define M_IT_TA_3 37 //带时标的电能脉冲计数值
#define M_ST_NA_3 38 //步位置信息
#define M_ST_TA_3 39 //带时标的步位置信息
#define M_SP_NA_3 40 //单点状态信息
#define M_SP_TA_3 41 //带时标的单点状态信息
#define M_DP_NA_3 42 //双点状态信息
#define M_DP_TA_3 43 //带时标的双点状态信息
#define M_SS_NA_3 44 //单点状态和状态变位检出
#define M_SS_TA_3 45 //带时标的单点状态和状态变位检出
#define M_DS_NA_3 46 //双点状态和状态变位检出
#define M_DS_TA_3 47 //带时标的双点状态和状态变位检出
#define M_WL_TA_3 48 //水位
#define M_DC_NA_3 64 //控制断路器命令
#define M_RC_NA_3 65 //升降命令
#define M_SE_NA_3 66 //设定命令
#define M_CC_NA_3 67 //控制命令
#define M_EX_PI_3 205 //电度命令(SIEMENS公司)
// 控制方向的类型标识
#define C_SYN_TA_3 6 //时间同步
#define C_TGI_NA_3 7 //总查询(总召唤)
#define C_GD_NA_3 10 //通用分类数据
#define C_GRC_NA_3 20 //一般命令
#define C_GC_NA_3 21 //通用分类命令
#define C_ODT_NA_3 24 //扰动数据传输的命令
#define C_ADT_NA_3 25 //扰动数据传输的认可
#define C_DC_NA_3 64 //控制断路器命令
#define C_RC_NA_3 65 //升降命令
#define C_SE_NA_3 66 //设定命令
#define C_CC_NA_3 67 //控制命令
#define C_CI_NA_3 88 //电能脉冲计数召唤命令
// 链路规约数据单元LDPU的常量定义
// 监视方向的控制域功能码
#define M_CON_NA_3 0 //确认帧
#define M_BY_NA_3 1 //忙帧(确认帧)
#define M_DATA_NA_3 8 //以数据响应请求帧
#define M_NV_NA_3 9 //无所要求的数据帧回答
#define M_LKR_NA_3_1 11 //链路状态响应帧--链路工作正常
#define M_LKR_NA_3_2 14 //链路状态响应帧--链路服务未工作
#define M_LKR_NA_3_3 15 //链路状态响应帧--链路服务未实现
// 控制方向的控制功能码
#define C_RFB_NA_3 7 //复位帧计数
#define C_RCU_NA_3 0 //复位通讯单元
#define C_PL1_NA_3 10 //召唤一级用户数据
#define C_PL2_NA_3 11 //召唤二级用户数据
#define C_RLK_NA_3 9 //请求链路状态
#define C_SD1_NA_3 3 //传送数据(发送/确认帧)
#define C_SD2_NA_3 4 //传送数据(发送/无回答帧)
// 功能类型
#define FUNC_DISTANCEPROTECT 128 // 距离保护
#define FUNC_OVERCURRENTPROTECT 160 // 过流保护
#define FUNC_TRANSFORMERPROTECT 176 // 变压器差动保护
#define FUNC_LINEPROTECT 192 // 线路差动保护
#define FUNC_GENERALSORT 254 // 通用分类功能
#define FUNC_GLOBAL 255 // 全局功能类型
// 命令类型
#define ORDER_FAULTSELECT 1 // 故障的选择
#define ORDER_REQUESTDATA 2 // 请求扰动数据
#define ORDER_STOPDATA 3 // 终止扰动数据
#define ORDER_REQUESTSTATUSWITHFLAG 16 // 请求带标志的状态变位
#define ORDER_STOPSTATUSWITHFLAG 17 // 终止带标志的状态变位
#define ORDER_REQUESTRECORDTABLE 24 // 请求被记录的扰动表
// 在监视方向的通用分类功能的信息序号
#define M_INF_READGROUPTITLE 240 // 读组标题
#define M_INF_READGROUPALLITEMS 241 // 读一个组的全部条目的值或属性
#define M_INF_READDIROFSINGLEITEM 243 // 读单个条目的目录
#define M_INF_READATTROFISNGLEITEM 244 // 读单个条目的值或属性
#define M_INF_STOPQUERYGENERAL 245 // 对通用分类数据总查询中止
#define M_INF_WRITEITEMWITHACK 249 // 带确认的写条目
#define M_INF_WRITEITEMWITHEXEC 250 // 带执行的写条目
#define M_INF_WRITEITEMWITHSTOP 251 // 带终止的写条目
// 在控制方向的通用分类功能的信息序号
#define C_INF_READGROUPTITLE 240 // 读组标题
#define C_INF_READGROUPALLITEMS 241 // 读一个组的全部条目的值或属性
#define C_INF_READDIROFSINGLEITEM 243 // 读单个条目的目录
#define C_INF_READATTROFISNGLEITEM 244 // 读单个条目的值或属性
#define C_INF_QUERYGENERAL 245 // 对通用分类数据总查询
#define C_INF_WRITEITEM 248 // 写条目
#define C_INF_WRITEITEMWITHACK 249 // 带确认的写条目
#define C_INF_WRITEITEMWITHEXEC 250 // 带执行的写条目
#define C_INF_STOPWRITEITEM 251 // 写条目终止
// 信息组号
#define GROUP_SYSTEM0 0x00 // 系统类(所有保护及自动装置的系统参数及功能、定值区切换)
#define GROUP_SYSTEM1 0x01 // 系统类
#define GROUP_FIXVALUE0 0x02 // 定值类
#define GROUP_FIXVALUE1 0x03 // 定值类
#define GROUP_EVENT0 0x04 // 事件类(动作及状态事件)
#define GROUP_EVENT1 0x05 // 事件类(如告警事件)
#define GROUP_AIVALUE0 0x06 // 遥测类(保护测量值)
#define GROUP_AIVALUE1 0x07 // 遥测类(如电流、电压、功率、频率、水位、温度等)
#define GROUP_DISOE 0x08 // 遥信类(如刀闸、开关、信号、状态等) 遥信SOE
#define GROUP_DIVALUE0 0x09 // 遥信类
#define GROUP_PIVALUE 0x0a // 电量类
#define GROUP_YKSWITCH 0x0b // 遥控开关类(跳/合)
#define GROUP_YKDANGWEI 0x0c // 遥控分头类(升/降)
#define GROUP_YTDAOUT 0x0d // 遥调类(DA输出)
#define GROUP_YKYABAN 0x0e // 遥控压板类(保护功能投/退)
#define GROUP_DEBUGANDOPERATE 0x0f // 调试及操作信息类(用于装置的调试及操作记录)
#define GROUP_DIVALUE1 0x18 // 遥信类(如刀闸、开关、信号、状态等) 遥信状态
// 传送原因
// 监视方向
#define M_CAUSE_AUTOSEND 1 // 自发(突发)
#define M_CAUSE_CYCLE 2 // 循环
#define M_CAUSE_RESET_FCB 3 // 复位帧计数位(FCB)
#define M_CAUSE_RESET_CU 4 // 复位通信单元(CU)
#define M_CAUSE_START 5 // 启动/重新启动
#define M_CAUSE_POWERON 6 // 电源合上
#define M_CAUSE_TEST 7 // 测试模式
#define M_CAUSE_CHECKTIME 8 // 时间同步
#define M_CAUSE_QUERY 9 // 总查询
#define M_CAUSE_STOPQUERY 10 // 总查询停止
#define M_CAUSE_LOCAL 11 // 当地操作
#define M_CAUSE_REMOTE 12 // 远方操作
#define M_CAUSE_ACK 20 // 命令的肯定认可
#define M_CAUSE_NAK 21 // 命令的否定认可
#define M_CAUSE_DSITURBANCEDATA 31 // 扰动数据的传送
#define M_CAUSE_WRITEACK 40 // 通用分类写命令的肯定认可
#define M_CAUSE_WRITENAK 41 // 通用分类写命令的否定认可
#define M_CAUSE_READWITHVALIDDATA 42 // 对通用分类读命令有效数据响应
#define M_CAUSE_READWITHINVALIDDATA 43 // 对通用分类读命令无效数据响应
#define M_CAUSE_WRITECONFIRM 44 // 通用分类写确认
// 控制方向
#define C_CAUSE_CYCLE 2 // 循环
#define C_CAUSE_CHECKTIME 8 // 时间同步
#define C_CAUSE_QUERY 9 // 总查询
#define C_CAUSE_COMMAND 20 // 一般命令
#define C_CAUSE_DSITURBANCEDATA 31 // 扰动数据的传送
#define C_CAUSE_WRITEWITHVALIDDATA 40 // 通用分类写命令
#define C_CAUSE_READWITHVALIDDATA 42 // 通用分类读命令
// 数据ID
#define DATAID_NO 0 // 无数据
#define DATAID_OS8ASCII 1 // 8位ASCII
#define DATAID_BSTRING 2 // 字符串
#define DATAID_UI 3 // 无符号整数
#define DATAID_INT 4 // 整数
#define DATAID_UFLOAT 5 // 无符号浮点数
#define DATAID_FLOAT 6 // 浮点数
#define DATAID_754SHORT 7 // R32.23 IEEE 标准754短实数
#define DATAID_754REAL 8 // R64.53 IEEE 标准754实数
#define DATAID_DOUBLE 9 // 双点信息
#define DATAID_SINGLE 10 // 单点信息
#define DATAID_13BITS 12 // 带品质描述的被测值(13BITS)
#define DATAID_SORTIDNO 15 // 通用分类标识序号
#define DATAID_WITHTIME 18 // 带时标的报文
#define DATAID_WITHTIMESPACE 19 // 带相对时标的报文
#define DATAID_STRUCT 23 // 数据结构
#define DATAID_EXDATA_0X24 0x24 // 北京四方扩展数据类型
// 描述类别
#define KOD_NOSPECIFIED 0 // 无所指定的描述类别
#define KOD_ACTUALVALUE 1 // 实际值
#define KOD_DEFAULTVALUE 2 // 缺省值
#define KOD_RANGE 3 // 量程(最大值、最小值、步长)
#define KOD_BACKUP1 4 // 备用
#define KOD_PRECISION 5 // 精度(n,m)
#define KOD_FACTOR 6 // 因子
#define KOD_REFERENCE 7 // 参比
#define KOD_ENUMERATION 8 // 列表
#define KOD_DIMENSION 9 // 量纲
#define KOD_DESCRIPTION 10 // 描述
#define KOD_BACKUP2 11 // 备用
#define KOD_PASSWORD 12 // 口令条目
#define KOD_READONLY 13 // 只读
#define KOD_WRITEONLY 14 // 只写
#define KOD_BACKUP3 15 // 备用
#define KOD_BACKUP4 16 // 备用
#define KOD_BACKUP5 17 // 备用
#define KOD_BACKUP6 18 // 备用
#define KOD_CORFUNCANDINF 19 // 相应的功能类型和信息序号
#define KOD_COREVENT 20 // 相应的事件
#define KOD_ENUMTEXTARRAY 21 // 列表的文本阵列
#define KOD_ENUMVALUEARRAY 22 // 列表的值阵列
#define KOD_RELATEDENTRIES 23 // 相关联的条目
/////////////////////////////结构定义/////////////////////////////////
/*!
\struct PROV_ALLITEMOFGROUPPARAM
\brief 转发条目参数定义
\par 快速参考
buban103.h
*/
typedef struct{
/*!
\var PROV_ALLITEMOFGROUPPARAM::m_u8RII
\brief 主站信息返回值
\note
取值范围:[0---255]\n
*/
unsigned char m_u8RII;
/*!
\var PROV_ALLITEMOFGROUPPARAM::m_u8Group
\brief 信息组号
\note
取值范围:[0---255]\n
*/
unsigned char m_u8Group;
/*!
\var PROV_ALLITEMOFGROUPPARAM::m_u8ItemNo
\brief 信息条目号
\note
取值范围:[0---255]\n
*/
unsigned char m_u8ItemNo;
/*!
\var PROV_ALLITEMOFGROUPPARAM::m_u8ItemAttr
\brief 条目属性
\note
(实际值、缺省值、量程... ...)
\note
取值范围:[1、3、9、10]\n
*/
unsigned char m_u8ItemAttr;
/*!
\var PROV_ALLITEMOFGROUPPARAM::m_bFinished
\brief 数据读取完成标识
\note
取值范围:[TRUE/FALSE]\n
*/
BOOL m_bFinished;
}PROV_ALLITEMOFGROUPPARAM;
/*!
\struct DEVPARAMDEF
\brief 设备结构
\par 快速参考
buban103.h
*/
typedef struct{
/*!
\var DEVPARAMDEF::m_szDevName
\brief 装置名称
\note
取值范围:[有效的ASCII码字符串最大长度为64]\n
*/
char m_szDevName[66];
/*!
\var DEVPARAMDEF::m_u8DevAddr
\brief 保护装置地址
\note
取值范围:[1-254255为广播地址]\n
*/
u_char m_u8DevAddr;
/*!
\var DEVPARAMDEF::m_iCfgGroupNum
\brief 保护装置组配置数量
\note
取值范围: [0--GROUPNUM]\n
*/
i_32 m_iCfgGroupNum;
/*!
\var DEVPARAMDEF::m_saGroupDef[]
\brief 保护装置类型
\par 快速参考
GROUPDEF结构
\note
取值范围: 无\n
*/
GROUPDEF m_saGroupDef[GROUPNUM];
/*!
\var DEVPARAMDEF::m_szType[]
\brief 间隔(保护装置)类型
\note
取值范围:[有效的ASCII码字符串最大长度为64]\n
"LFP984B", "RCS921A", "RCS931A", "LFP965B"等\n
*/
char m_szType[64];
/*!
\var DEVPARAMDEF::m_szDatFileName[]
\brief 间隔(保护装置)数据信息配置文件名称
\note
取值范围:[有效的ASCII码字符串最大长度为256]\n
*/
//char m_szDatFileName[FILENAME_LEN];
/*!
\var DEVPARAMDEF::m_sAiDBOrientation
\brief 基本模拟测量量在数据库中定位
\note
数据包括七组测量值
*/
DBORIENTATION m_sAiDBOrientation[DEV_AI_MAXNUM];
/*!
\var DEVPARAMDEF::m_sDiDBOrientation
\brief 基本模拟测量量在数据库中定位
\note
数据包括单点和双点遥信量
*/
DBORIENTATION m_sDiDBOrientation;
/*!
\var DEVPARAMDEF::m_sPiDBOrientation
\brief 基本模拟测量量在数据库中定位
*/
DBORIENTATION m_sPiDBOrientation;
/*!
\var DEVPARAMDEF::m_sStepDBOrientation
\brief 步位置信息测量量在数据库中定位
\note
数据写入模拟量数据库
*/
DBORIENTATION m_sStepDBOrientation;
/*!
\var DEVPARAMDEF::m_sYkDBOrientation
\brief 遥控信息量在数据库中定位
\note
数据不写入数据库
*/
DBORIENTATION m_sYkDBOrientation;
/*!
\var DEVPARAMDEF::m_sSyncTimeInfo
\brief 时间同步信息
*/
DBINFO m_sSyncTimeInfo;
/*!
\var DEVPARAMDEF::m_iProvAddr
\brief 转发保护地址
\note
用于端口与单个装置的通讯
\note
取值范围:[-1, 非负整数]\n
*/
i_32 m_iProvAddr;
/*!
\var DEVPARAMDEF::m_u32FuncCode
\brief 保护命令功能码生成记忆
\note
用于数据返回时,生成交互指令
\note
取值范围hREADFIX : 读取定值\n
hREADFIXNO : 读取定值区号\n
hREADPAI : 读取保护模拟量\n
hREADPDI : 读取保护开关量\n
hREADPWAVE : 读取保护波形数据\n
hQUERYFAULT : 读取指定故障报告\n
hQUERYSELFCHECK : 读取指定的自检报告\n
hWRITEALLFIX : 修改保护定值\n
hWRITESPECIALFIX : 修改指定的保护定值\n
hWRITEFIXNO : 修改保护定值区\n
hRESETPROTECT : 保护信号复归\n
hCHECKTIME : 单个装置对时\n
hBROADCASTCHECKTIME : 保护装置广播对时\n
hCANCEL : 保护操作取消\n
*/
u_32 m_u32FuncCode;
/*!
\var DEVPARAMDEF::m_iYkStartPnt
\brief 遥控起始点号
\note
用于端口与单个装置的通讯
\note
取值范围:[-1, 非负整数]\n
*/
i_32 m_iYkStartPnt;
/*!
\var DEVPARAMDEF::m_iYtStartPnt
\brief 遥调起始点号
\note
用于端口与单个装置的通讯
\note
取值范围:[-1, 非负整数]\n
*/
i_32 m_iYtStartPnt;
BYTE m_u8SCN;
/*!
\var DEVPARAMDEF::m_u8CPUNo
\brief 当前CPU号
\note
用于端口与单个装置的通讯
\note
取值范围:[1, ... ,255]\n
\note
其中255为当前CPU号,对于多组定值来说,cpu号和组号一一对应\n
*/
BYTE m_u8CPUNo;
/*!
\var DEVPARAMDEF::m_u8FixNo
\brief 定值区号
\note
用于端口与单个装置的通讯
\note
取值范围:[1, ... ,255]\n
\note
其中255为当前定值区号
*/
BYTE m_u8FixNo;
/*!
\var DEVPARAMDEF::m_iFaultNo
\brief 故障序号
\note
仅用于扰动数据上送时
*/
i_32 m_iFaultNo;
}DEVPARAMDEF;
/*!
\struct PROVDEVPARAMDEF
\brief 设备结构
\par 快速参考
buban103.h
*/
typedef struct
{
/*!
\var DEVPARAMDEF::m_sProvGroupParam
\brief 转发组数据参数
\note
仅用于转发组所有数据时,一帧无法完成的情况
*/
PROV_ALLITEMOFGROUPPARAM m_sProvGroupParam;
/*!
\var PROVDEVPARAMDEF::m_sProvSoe
\brief 转发SOE数据参数
\note
用于历史记录的转发事件
*/
DEVPROVSOE m_sProvSoe;
}PROVDEVPARAMDEF;
typedef struct
{
i_32 m_iCmdTimerCnt; //命令时间计数
i_32 m_iCmdTimerConst; //命令时间常量
} BUBAN103CMDDEF;
// wen 2003.10.27 保存扰动数据故障序号等参数
typedef struct
{
BYTE m_u8FUN; //功能类型(FUN)
BYTE m_u8Res1; //未用
BYTE m_u8Res2; //未用
BYTE m_u8TOV; //扰动值类型(TOV)
WORD m_wFAN; //故障序号(FAN)
WORD m_wNOF; //电网故障序号(NOF)
BYTE m_u8NOC; //通道数目
WORD m_wNOE; //一个通道信息元素的数目
WORD m_wINT; //信息元素间的间隔
WORD m_wHour; //时
WORD m_wMinute; //分
WORD m_wSecond; //秒
WORD m_wMilliseconds; //毫秒
WORD m_wYear; //年
WORD m_wMonth; //月
WORD m_wDay; //日
BOOL m_bRecvRight; //接收是否正确
BYTE m_u8ACC; //通道号
int m_iNum; //缓冲区psValue 数量
int m_iDataNum; //缓冲区psValue 扰动值的数量
short *m_pshValue; //扰动值
} BUBAN103DISTURBANCEDEF;
typedef struct tagDISTURBANCEDIDATA
{
int m_iNo; // 序号
int m_iNum; // 数量
int m_iTap; // 偏移
BYTE m_u8Fun; // 功能类型
BYTE m_u8Inf; // 信息序号
short m_shValue; // 数值
struct tagDISTURBANCEDIDATA *m_psCurUse; // 正在使用的指针
struct tagDISTURBANCEDIDATA *m_psRight; // 右指针
struct tagDISTURBANCEDIDATA *m_psBottom; // 下指针
}DISTURBANCEDIDATA, *pDISTURBANCEDIDATA;
typedef struct tagDISTURBANCEAIDATA
{
int m_iACCNo; // 通道号
int m_iTOV; // 扰动值类型
double m_dbRPV; // 额定一次值
double m_dbRSV; // 额定二次值
double m_dbfRFA; // 参比因子
int m_iNOE; // 采样值数量
int m_iNOC; // 模拟量数量
short *m_pshValue; // 模拟量值
}DISTURBANCEAIDATA, *pDISTURBANCEAIDATA;
/*应用服务数据单元的报文结构定义*/
typedef struct
{
//WORD m_wGIN; //通用分类标识序号
BYTE m_u8Grp; //组号
BYTE m_u8Itm; //条目号
BYTE m_u8KOD; //类型描述
}GEN_DATAGROUP; //通用分类数据组
//监视方向的应用服务数据单元结构
typedef struct
{
unsigned char nTYP; //类型标识
unsigned char nVSQ; //可变结构限定词
unsigned char nCOT; //传送原因
unsigned char nADDR; //应用服务数据单元公共地址
unsigned char nFUN; //功能类型
unsigned char nINF; //信息序号
unsigned char nDPI; //双点信息
unsigned char nTIME[4]; //四个八位位组二进制时间
unsigned char nSIN; //附加信息
}MASDU1;//带时标的报文nTYP=M_TM_TA_3
typedef struct
{
unsigned char nTYP; //类型标识
unsigned char nVSQ; //可变结构限定词
unsigned char nCOT; //传送原因
unsigned char nADDR; //应用服务数据单元公共地址
unsigned char nFUN; //功能类型
unsigned char nINF; //信息序号
unsigned char nDPI; //双点信息
unsigned short nRET; //相对时间
unsigned short nFAN; //故障序号
unsigned char nTIME[4]; //四个八位位组二进制时间
unsigned char nSIN; //附加信息
}MASDU2;//带相对时间的时标报文nTYP=M_TMR_TA_3
typedef struct
{
unsigned char nTYP; //类型标识
unsigned char nVSQ; //可变结构限定词
unsigned char nCOT; //传送原因
unsigned char nADDR; //应用服务数据单元公共地址
unsigned char nFUN; //功能类型
unsigned char nINF; //信息序号
unsigned short nMEA1; //B相电流
unsigned short nMEA2; //AB相电压
unsigned short nMEA3; //有功功率
unsigned short nMEA4; //无功功率
}MASDU3;//被测值I报文nTYP=M_MEI_NA_3
typedef struct
{
unsigned char nTYP; //类型标识
unsigned char nVSQ; //可变结构限定词
unsigned char nCOT; //传送原因
unsigned char nADDR; //应用服务数据单元公共地址
unsigned char nFUN; //功能类型
unsigned char nINF; //信息序号
u_32 nSCL; //短路位置
unsigned short nRET; //相对时间
unsigned short nFAN; //故障序号
unsigned char nTIME[4]; //四个八位位组二进制时间
}MASDU4;//带相对时间的有时标被测值报文nTYP=M_TME_TA_3
typedef struct
{
unsigned char nTYP; //类型标识
unsigned char nVSQ; //可变结构限定词
unsigned char nCOT; //传送原因
unsigned char nADDR; //应用服务数据单元公共地址
unsigned char nFUN; //功能类型
unsigned char nINF; //信息序号
unsigned char nCOL; //兼容级别
unsigned char nASC[8]; //ASCII字符
unsigned char nREV; //制造厂内部软件标识符,自由赋值
}MASDU5;//标识报文nTYP=M_IRC_NA_3
typedef struct
{
unsigned char nTYP; //类型标识
unsigned char nVSQ; //可变结构限定词
unsigned char nCOT; //传送原因
unsigned char nADDR; //应用服务数据单元公共地址
unsigned char nFUN; //功能类型
unsigned char nINF; //信息序号
unsigned short nFAN; //故障序号
unsigned char nTIME[7]; //七个八位位组二进制时间
}MASDU6;//时间同步报文nTYP=M_SYN_TA_3
typedef struct
{
unsigned char nTYP; //类型标识
unsigned char nVSQ; //可变结构限定词
unsigned char nCOT; //传送原因
unsigned char nADDR; //应用服务数据单元公共地址
unsigned char nFUN; //功能类型
unsigned char nINF; //信息序号
unsigned char nSCN; //扫描序号
}MASDU8;//总查询总召唤终止报文nTYP=M_TGI_NA_3
typedef struct
{
unsigned char nTYP; //类型标识
unsigned char nVSQ; //可变结构限定词
unsigned char nCOT; //传送原因
unsigned char nADDR; //应用服务数据单元公共地址
unsigned char nFUN; //功能类型
unsigned char nINF; //信息序号
unsigned short nMEA1; //A相电流Il1
unsigned short nMEA2; //B相电流Il2
unsigned short nMEA3; //C相电流Il3
unsigned short nMEA4; //A相电压Ul1e
unsigned short nMEA5; //B相电压Ul2e
unsigned short nMEA6; //C相电压Ul3e
unsigned short nMEA7; //有功功率P
unsigned short nMEA8; //无功功率Q
unsigned short nMEA9; //频率f
}MASDU9;//被测值II报文nTYP=M_MEII_NA_3
typedef struct
{
unsigned char nTYP; //类型标识
unsigned char nVSQ; //可变结构限定词
unsigned char nCOT; //传送原因
unsigned char nADDR; //应用服务数据单元公共地址
unsigned char nFUN; //功能类型
unsigned char nINF; //信息序号
unsigned char nRII; //返回标识符
unsigned char nNGD; //通用分类数据集数目
unsigned char* nDATASET;//数据集
//GEN_DATASET nDATASET[]; 数据集
}MASDU10;//通用分类数据报文nTYP=M_GD_N(T)A_3
typedef struct
{
unsigned char nTYP; //类型标识
unsigned char nVSQ; //可变结构限定词
unsigned char nCOT; //传送原因
unsigned char nADDR; //应用服务数据单元公共地址
unsigned char nFUN; //功能类型
unsigned char nINF; //信息序号
unsigned char nRII; //返回标识符
unsigned char nGIN; //通用分类标识序号
unsigned short nNDE; //描述元素的数目
unsigned char* nDEL; //描述元素
//GEN_DEL nDEL; //描述元素
}MASDU11;//通用分类标识报文nTYP=M_GI_N(T)A_3
typedef struct
{
unsigned char nTYP; //类型标识
unsigned char nVSQ; //可变结构限定词
unsigned char nCOT; //传送原因
unsigned char nADDR; //应用服务数据单元公共地址
unsigned char nFUN; //功能类型
unsigned char nINF; //信息序号未用其值应为0
unsigned char* nDATASET;//数据集
//DIS_DATASET nDATASET[]; //数据集
}MASDU23;//被记录扰动表报文nTYP=M_LRD_TA_3
typedef struct
{
unsigned char nTYP; //类型标识
unsigned char nVSQ; //可变结构限定词
unsigned char nCOT; //传送原因
unsigned char nADDR; //应用服务数据单元公共地址
unsigned char nFUN; //功能类型
unsigned char nINF; //信息序号,未用
unsigned char nRES; //保留值,未用
unsigned char nTOV; //扰动值的类型
unsigned short nFAN; //故障序号
unsigned short nNOF; //电网故障序号
unsigned char nNOC; //通道数目
unsigned short nNOE; //一个通道信息元素的数目
unsigned short nINT; //信息元素间的间隔
unsigned char nTIME[4]; //四个八位位组二进制时间
}MASDU26;//扰动数据传输准备就绪报文nTYP=M_RTD_TA_3
typedef struct
{
unsigned char nTYP; //类型标识
unsigned char nVSQ; //可变结构限定词
unsigned char nCOT; //传送原因
unsigned char nADDR; //应用服务数据单元公共地址
unsigned char nFUN; //功能类型
unsigned char nINF; //信息序号,未用
unsigned char nRES; //保留值,未用
unsigned char nTOV; //扰动值类型
unsigned short nFAN; //故障序号
unsigned char nACC; //实际通道号
u_32 nRPV; //一次额定值
u_32 nRSV; //二次额定值
u_32 nRFA; //参比因子
}MASDU27;//被记录的通道传输就序报文nTYP=M_RTC_NA_3
typedef struct
{
unsigned char nTYP; //类型标识
unsigned char nVSQ; //可变结构限定词
unsigned char nCOT; //传送原因
unsigned char nADDR; //应用服务数据单元公共地址
unsigned char nFUN; //功能类型
unsigned char nINF; //信息序号,未用
unsigned char nRES1; //保留值1未用
unsigned char nRES2; //保留值2未用
unsigned char nRES3; //保留值3未用
unsigned short nFAN; //故障序号
}MASDU28;//带标志的状态变位的传输准备就绪报文nTYP=M_RTT_NA_3
typedef struct
{
unsigned char nTYP; //类型标识
unsigned char nVSQ; //可变结构限定词
unsigned char nCOT; //传送原因
unsigned char nADDR; //应用服务数据单元公共地址
unsigned char nFUN; //功能类型
unsigned char nINF; //信息序号,未用
unsigned short nFAN; //故障序号
unsigned char nNOT; //带标志的状态位的数目
unsigned short nTAP; //标志的位置
struct{
unsigned char nFUN; //功能类型
unsigned char nINF; //信息序号
unsigned char nDPI; //双点信息
} nSTATUS; //状态变位
}MASDU29;//带标志的状态变位传输报文nTYP=M_TOT_TA_3
typedef struct
{
unsigned char nTYP; //类型标识
unsigned char nVSQ; //可变结构限定词
unsigned char nCOT; //传送原因
unsigned char nADDR; //应用服务数据单元公共地址
unsigned char nFUN; //功能类型
unsigned char nINF; //信息序号,未用
unsigned char nRES; //保留值,未用
unsigned char nTOV; //扰动值类型
unsigned short nFAN; //故障序号
unsigned char nACC; //实际通道序号
unsigned short nNDV; //每个应用服务数据单元有关扰动值的数目
unsigned short nNFE; //每个应用服务数据单元的第一个信息元素的序号
unsigned short* nSDV; //单个扰动值
}MASDU30;//传输扰动值报文nTYP=M_TOV_NA_3
typedef struct
{
unsigned char nTYP; //类型标识
unsigned char nVSQ; //可变结构限定词
unsigned char nCOT; //传送原因
unsigned char nADDR; //应用服务数据单元公共地址
unsigned char nFUN; //功能类型
unsigned char nINF; //信息序号,未用
unsigned char nTOO; //命令类型
unsigned char nTOV; //扰动值类型
unsigned short nFAN; //故障序号
unsigned char nACC; //实际通道
}MASDU31;//传输结束报文nTYP=M_EOT_TA_3
//控制方向上的应用服务数据单元结构
typedef struct
{
unsigned char nTYP; //类型标识
unsigned char nVSQ; //可变结构限定词
unsigned char nCOT; //传送原因
unsigned char nADDR; //应用服务数据单元公共地址
unsigned char nFUN; //功能类型
unsigned char nINF; //信息序号
unsigned char nTIME[7]; //七个八位位组二进制时间
}CASDU6;//时间同步报文nTYP=C_SYN_TA_3
typedef struct
{
unsigned char nTYP; //类型标识
unsigned char nVSQ; //可变结构限定词
unsigned char nCOT; //传送原因
unsigned char nADDR; //应用服务数据单元公共地址
unsigned char nFUN; //功能类型
unsigned char nINF; //信息序号
unsigned char nSCN; //扫描序号
}CASDU7;//总查询总召唤启动报文nTYP=C_IGI_NA_3
typedef struct
{
unsigned char nTYP; //类型标识
unsigned char nVSQ; //可变结构限定词
unsigned char nCOT; //传送原因
unsigned char nADDR; //应用服务数据单元公共地址
unsigned char nFUN; //功能类型
unsigned char nINF; //信息序号
unsigned char nRII; //返回信息标识符
unsigned char nNGD; //通用分类数据数目
unsigned char* nDATASET; //通用分类数据集
//GEN_DATASET nDATASET[]; //通用分类数据集
}CASDU10;//通用分类数据报文nTYP=C_GD_NA_3
typedef struct
{
unsigned char nTYP; //类型标识
unsigned char nVSQ; //可变结构限定词
unsigned char nCOT; //传送原因
unsigned char nADDR; //应用服务数据单元公共地址
unsigned char nFUN; //功能类型
unsigned char nINF; //信息序号
unsigned char nDCO; //双命令
unsigned char nRII; //返回信息标识符
}CASDU20;//一般命令报文nTYP=C_GRC_NA_3
typedef struct
{
unsigned char nTYP; //类型标识
unsigned char nVSQ; //可变结构限定词
unsigned char nCOT; //传送原因
unsigned char nADDR; //应用服务数据单元公共地址
unsigned char nFUN; //功能类型
unsigned char nINF; //信息序号
unsigned char nRII; //返回信息标识符
unsigned char nNOG; //通用分类标识数目
GEN_DATAGROUP* nDATAGROUP; //数据集
}CASDU21;//通用分类命令报文nTYP=C_GC_NA_3
typedef struct
{
unsigned char nTYP; //类型标识
unsigned char nVSQ; //可变结构限定词
unsigned char nCOT; //传送原因
unsigned char nADDR; //应用服务数据单元公共地址
unsigned char nFUN; //功能类型
unsigned char nINF; //信息序号,未用
unsigned char nTOO; //命令类型
unsigned char nTOV; //扰动值的类型
unsigned short nFAN; //故障序号
unsigned char nACC; //实际通道序号
}CASDU24;//扰动数据传输的命令报文nTYP=C_SYN_TA_3
typedef struct
{
unsigned char nTYP; //类型标识
unsigned char nVSQ; //可变结构限定词
unsigned char nCOT; //传送原因
unsigned char nADDR; //应用服务数据单元公共地址
unsigned char nFUN; //功能类型
unsigned char nINF; //信息序号,未用
unsigned char nTOO; //命令类型
unsigned char nTOV; //扰动值的类型
unsigned short nFAN; //故障序号
unsigned char nACC; //实际通道号
}CASDU25;//扰动数据传输的认可报文nTYP=C_ADT_NA_3
typedef struct
{
unsigned char nTYP; //类型标识
unsigned char nVSQ; //可变结构限定词
unsigned char nCOT; //传送原因
unsigned char nADDR; //应用服务数据单元公共地址
unsigned char nFUN; //功能类型
unsigned char nINF; //信息序号
unsigned char nQCC; //电能脉冲计数量召唤命令的限定词
unsigned char nRII; //返回信息标识符
}CASDU88;//电能脉冲计数量的召唤命令nTYP=C_CI_NA_3
typedef struct
{
unsigned char nTYP; //类型标识
unsigned char nVSQ; //可变结构限定词
unsigned char nCOT; //传送原因
unsigned char nADDR; //应用服务数据单元公共地址
unsigned char nFUN; //功能类型
unsigned char nINF; //信息序号
unsigned char nDCC; //控制断路器
unsigned char nRII; //返回信息标识符
}CASDU64;//控制断路器命令nTYP=C_DC_NA_3 / C_EXDC_NA_3
typedef struct
{
unsigned char nTYP; //类型标识
unsigned char nVSQ; //可变结构限定词
unsigned char nCOT; //传送原因
unsigned char nADDR; //应用服务数据单元公共地址
unsigned char nFUN; //功能类型
unsigned char nINF; //信息序号
unsigned char nRCC; //升降命令
unsigned char nRII; //返回信息标识符
}CASDU65;//控制断路器命令nTYP=C_RC_NA_3 / C_EXRC_NA_3
typedef struct
{
unsigned char nTYP; //类型标识
unsigned char nVSQ; //可变结构限定词
unsigned char nCOT; //传送原因
unsigned char nADDR; //应用服务数据单元公共地址
unsigned char nFUN; //功能类型
unsigned char nINF; //信息序号
unsigned char nCCC; //控制命令
unsigned char nRII; //返回信息标识符
}CASDU67;//控制断路器命令nTYP=C_DC_NA_3 / C_EXDC_NA_3
/*链路层传输帧格式结构*/
//控制方向
typedef struct
{
unsigned char nSTART1;//启动字符=68H
unsigned char nLEN1;//帧长=控制域+地址域+用户数据区
unsigned char nLEN2;//帧长=控制域+地址域+用户数据区
unsigned char nSTART2;//启动字符=68H
unsigned char nCONTROL;//控制域
unsigned char nADDR;//地址域
}CLPDU_VARR;//控制方向上的链路规约数据单元结构,可变帧长
typedef struct{
unsigned char nSTART;//启动字符=10H
unsigned char nCONTROL;//控制域
unsigned char nADDR;//地址域
unsigned char nCS;//帧效验和
unsigned char nEnd;//结束字符=16H
}CLPDU_FIX;//控制方向上的链路规约数据单元结构,固定帧长
typedef struct
{
/*!
\brief 初始化标志
\note
=TRUE 收到结束帧
=FALSE 未收到结束帧
第一次总查询结束后置位,以后保持不变
*/
BOOL m_bInitdata;
/*!
\brief 总召唤数据标识
\note
=TRUE 总召唤数据结束,收到总召唤结束帧或者超时
=FALSE 总召唤数据未结束
*/
BOOL m_bAllQueryOk;
/*!
\brief 召唤计数,用于控制召唤不到期望的值时跳出死循环
*/
u_32 m_u32CallCnt;
/*!
\brief 返回码
*/
u_char m_u8RII;
/*!
\brief 保存扰动数据故障序号等参数
*/
BUBAN103DISTURBANCEDEF m_sDisturbanceParam;
/*!
\brief 中间信息存储的临时文件名称
*/
char m_chArrayTmpFileName[FILENAME_LEN];
/*!
\brief 设备定义,包括名称和地址
*/
DEVPARAMDEF m_sDevParam;
}DEVDEF;
typedef struct tagPROVDEVDEF
{
/*!
\brief 设备定义,包括名称和地址
*/
//PROVDEVPARAMDEF m_sDevParam;
/*!
\brief 总查询进行中(=TRUE)
*/
BOOL m_bProvQuery;
i_32 m_iQueryPntNo;
/*!
\brief 总查询进行步骤中
*/
i_32 m_iProvQueryStepWithASDU;
/*!
\brief 产生Asdu5的原因
*/
i_32 m_iProvAsdu5Cause;
/*!
\brief 装置的实际端口号
*/
i_32 m_iRealCommid;
/*!
\brief 装置的转发地址(唯一确定一个装置)
*/
i_32 m_iProvAddr;
/*!
\brief 转发SOE数据参数
\note
用于历史记录的转发事件(应该是没有作用,已经遗弃)
*/
DEVPROVSOE m_sProvSoe;
/*!
\var PROVDEVDEF::m_sProvGroupParam
\brief 转发组数据参数
\note
仅用于转发组所有数据时,一帧无法完成的情况
*/
PROV_ALLITEMOFGROUPPARAM m_sProvGroupParam;
i_32 m_iStatusStn;
i_32 m_iStatusPnt;
DBORIENTATION m_sYxInfo;
DBORIENTATION m_sYcInfo;
DBORIENTATION m_sYmInfo;
i_32 m_iAsdu10Num;
SINGLELIST m_sBaoHuData;
}PROVDEVDEF;
#define MAX_PROV_DEVICE_NUM 64 // 转发保护装置最大数量
// wen 2005.10.08 修改控制字结构
typedef struct tagBUBAN103LINKCTRL
{
/*!
\brief 从站初始化标志
\note
=1 ok
=0 no
*/
BOOL m_bLinkOk;
/*!
\brief 链接正常计数
*/
u_32 m_u32LinkOkCnt;
/*!
\brief 控制信息
*/
u_char m_u8CtlByte;
}BUBAN103LINKCTRL, *pBUBAN103LINKCTRL;
// wen 2003.10.27 增加全局参数定义
typedef struct tagBUBAN103LINKDEF
{
/*!
\var BUBAN103LINKDEF::m_szLinkName
\brief 链路名称
\note
取值范围:[有效的ASCII码字符串最大长度为64]\n
*/
char m_szLinkName[66];
/*!
\brief 主站发送总召唤、通用分类总召唤标志
\note
初始化时=FALSE已发送命令后OK
*/
BOOL m_bRstLinkOk;
/*!
\brief 是否转换到下一个装置
\note
在装置总召唤完成后,是否指向下一个装置
*/
BOOL m_bGotoNext;
/*!
\brief 从站初始化标志
\note
=1 ok
=0 no
*/
BOOL *m_pbLinkOk;
/*!
\brief 链接正常计数
*/
u_32 *m_pu32LinkOkCnt;
/*!
\brief 控制信息
*/
u_char *m_pu8CtlByte;
// wen 2005.10.08 将以上3个动态分配成员指针修改为结构统一分配
//BUBAN103LINKCTRL *m_pLinkCtrl;
/*!
\brief 超时时间间隔
*/
u_32 m_u32TimeOutConst;
/*!
\brief 当前指令索引
*/
short m_shCurCmdIdx;
/*!
\brief 轮询指令生成时间
*/
BUBAN103CMDDEF m_sArrayCmdTime[BUBAN103_TIMER_CMD_NUM];
/*!
链路间隔装置数量
*/
i_32 m_iDevNum;
/*!
设备地址索引
*/
i_32 m_iDevIdx;
/*!
一类数据的问询次数计算
*/
i_32 m_iQueryNum_CLASS1_Const;
i_32 m_iQueryNum_CLASS1_Count;
/*!
一类数据已经查询地址,分时给别的装置查询数据
*/
i_32 m_iQueryedAddr_CLASS1;
/*!
\var BUBAN103LINKDEF::m_iProvAddrOffset
\brief 转发保护地址
\note
用于端口与多个装置的通讯,总线方式
\note
取值范围:[非负整数]\n
*/
i_32 m_iProvAddrOffset;
/*!
\var BUBAN103LINKDEF::m_iInputPort
\brief 输入厂站端口号
\note
用于确定该厂站的通讯厂站端口
\note
取值范围:[非负整数]\n
\note
0为本厂站端口其它数值为通讯厂站端口
*/
i_32 m_iInputPort;
/*!
\var BUBAN103LINKDEF::m_chArrayTempletFileName[]
\brief 模板文件名称
\note
取值范围:[有效的ASCII码字符串最大长度为256]\n
*/
char m_chArrayTempletFileName[FILENAME_LEN];
// wen 2004.01.15 增加链路地址以适用于ASDU与链路地址不同的情况
/*!
\var BUBAN103LINKDEF::m_uchLinkAddr
\brief 链路地址
\note
用于银山科技103子站
\note
取值范围:[非负整数]\n
*/
BYTE m_uchLinkAddr;
/*!
\var BUBAN103LINKDEF::m_iMaskNoMatchString
\brief 屏蔽未配置事件点信息
\note
取值范围:[0---255]\n
*/
i_32 m_iMaskNoMatchString;
// wen 2004.07.26 增加保护装置的状态处理
/*!
\var BUBAN103LINKDEF::m_iInputStationOfDevStatus
\brief 保护装置状态输入厂站端口号
\note
取值范围:[ >= 0 ]\n
*/
i_32 m_iInputStationOfDevStatus;
/*!
\var BUBAN103LINKDEF::m_iInputStartPntOfDevStatus
\brief 保护装置状态输入厂站起始点号
\note
取值范围:[ >= 0 ]\n
*/
i_32 m_iInputStartPntOfDevStatus;
/*!
\var BUBAN103LINKDEF::m_iJudgeAsduNo
\brief 是否判断asdu号
\note
取值范围:[0---255]\n
*/
i_32 m_iJudgeAsduNo;
/*!
\var BUBAN103LINKDEF::m_iDisTransDataProcess
\brief 是否处理扰动数据
\note
取值范围:[0---255]\n
*/
i_32 m_iDisTransDataProcess;
/*!
\var BUBAN103LINKDEF::m_psDev
\brief 该链路支持的装置指针
\note 该成员动态分配,数量=m_iDevNum
*/
DEVDEF *m_psDev;
// 以下为转发时用参数
/*!
\var BUBAN103LINKDEF::m_psProvDev
\brief 该链路支持的转发装置指针
\note 该成员动态分配,数量=m_iDevNum
*/
PROVDEVDEF *m_psProvDev;
/*!
\var BUBAN103LINKDEF::m_sBaoHuCmdParam
\brief 调度命令参数
\note 用作数据的回馈时的处理
*/
BAOHUPROVPARAM m_sBaoHuCmdParam;
} BUBAN103LINKDEF, *pBUBAN103LINKDEF;
typedef struct tagBUBAN103PORTPARAM
{
/*!
\var BUBAN103PORTDEF::m_iLinkNum
\brief 链路数量
*/
i_32 m_iLinkNum;
/*!
\var BUBAN103PORTDEF::m_achRecvBuf
\brief 接收数据缓冲区
\note
缓冲区最大不超过 300 bytes\n
*/
char m_achRecvBuf[300];
/*!
\var BUBAN103PORTDEF::m_iRecvLen
\brief 接收数据长度
*/
int m_iRecvLen;
/*!
\var BUBAN103PORTDEF::m_iLinkIdx
\brief 链路索引
*/
int m_iLinkIdx;
/*!
\var BUBAN103PORTDEF::m_iPortOk
\brief 端口ok
*/
int m_iPortOk;
/*!
\var BUBAN103PORTDEF::m_bSendChangeDi
\brief 是否上送变化遥信
*/
BOOL m_bSendChangeDi;
/*!
\var BUBAN103PORTDEF::m_psLink
\brief 端口支持的链路指针
\note 该成员动态分配,数量=m_iLinkNum
*/
BUBAN103LINKDEF *m_psLink;
/*!
\brief 该规约的端口数据指针
*/
SIO_PARAM_BAOHU_DEF *m_psBaoHu;
}BUBAN103PORTPARAM, *pBUBAN103PORTPARAM;
typedef struct tagVALUEDEF
{
union VALUE
{
/*!
\var VALUE::m_uValue
\brief 无符号长整型
*/
u_32 m_uValue;
/*!
\var VALUE::m_iValue
\brief 整型
*/
i_32 m_iValue;
/*!
\var VALUE::m_fValue
\brief 浮点数
*/
double m_fValue;
/*!
\var VALUE::m_dwValue
\brief 双字
*/
DWORD m_dwValue;
}m_unValue;
/*!
\var VALUEDEF::m_szValue
\brief 字符串
*/
char m_szValue[MAXSTRINGLEN];
/*!
\var VALUEDEF::m_iDataType
\brief 数据类型
\note 取值范围如下\
=0, 全无效\
=1, 无符号整型\
=2, 整型数\
=3, 浮点数\
=4, 字符串\
=5, 数字量\
=6, 控制字
*/
i_32 m_iDataType;
/*!
\var VALUEDEF::m_iDataNum
\brief 数字量占用位数
\note 仅对数字量和控制字和字符串有效
*/
i_32 m_iDataNum;
}VALUEDEF, *pVALUEDEF;
/////////////////////////以下为通用函数接口///////////////////////////
/*!
\brief 读取配置函数
\param commid -- 端口号
\note
取值范围0 -- MaxSerialPortNum + MaxNetPortNum -1\n
*/
void Buban103ReadConfig(int commid); // 初始化处理
/*!
\brief 读取端口数据函数
\param commid -- 端口号
\note
取值范围0 -- MaxSerialPortNum + MaxNetPortNum -1\n
\param buf -- 数据源缓冲区指针
\param len -- 数据源长度
*/
void Buban103RecvData(int commid, u_char *buf, int len);// 规约读数据处理
/*!
\brief 规约数据处理定时器函数
\param commid -- 端口号
\note
取值范围0 -- MaxSerialPortNum + MaxNetPortNum -1\n
*/
void Buban103Timer(int commid); // 定时器处理
/*!
\brief 遥控遥调数据处理函数
\param commid -- 端口号
\note
取值范围0 -- MaxSerialPortNum + MaxNetPortNum -1\n
\param buf -- 数据源缓冲区指针
\param len -- 数据源长度
*/
void Buban103YkYtProcess(int commid, u_char *buf, int len); // 遥控遥调处理
/*!
\brief 系统下发对时函数
\param commid -- 端口号
\note
取值范围0 -- MaxSerialPortNum + MaxNetPortNum -1\n
*/
void Buban103SendSystemTime(int commid); // 系统对时
/*!
\brief 系统退出时规约处理函数
\param commid -- 端口号
\note
取值范围0 -- MaxSerialPortNum + MaxNetPortNum -1\n
*/
void Buban103Exit(int commid); // 规约退出
/*!
\brief 保护命令处理函数
\param commid -- 端口号
\param rtumsg -- 下发的保护命令指针
\note
取值范围0 -- MaxSerialPortNum + MaxNetPortNum -1\n
*/
void Buban103BaoHuCmdProcess(int commid, RTUMSG *rtumsg, BOOL bUpData);
/*!
\brief 取保护数据库指针函数
\param commid -- 端口号
\param iProvAddr -- 统一编排的保护转发地址
\param ppBaoHuDB -- 存放保护数据指针的指针
\retval -- 返回该装置保护数据组数
*/
int Buban103GetBaohuDataBase(int commid, int iProvAddr, GROUPDEF **ppBaoHuDB);
/////////////////////////通用函数接口结束///////////////////////////////
/////////////////////////以下为通用函数支持接口/////////////////////////
void Buban103ProvMakeYkYtCommand(int commid, u_char *buf, int len);
/////////////////////////通用函数支持接口结束///////////////////////////
///////////////////////////以下为配置函数接口///////////////////////////
BOOL InitBuban103InfoFromTempletFile(int commid,\
char *ptrTemplate,\
BUBAN103LINKDEF *psLink);
BOOL InitBuban103InfoFromTempletFileEx(int commid,\
char *ptrTemplate,\
BUBAN103LINKDEF *psLink,\
BOOL bMaster);
BOOL GetParamItem(char *pSour, char **ppDest);
BOOL GetParamItemEx(char *pSour, char **ppDest, const char *pSplit);
BOOL GetLinkParamFromTemplateFile(int commid, HDSFILE hFile,\
BUBAN103LINKDEF *psLink);
BOOL GetDevParamFromTemplateFile(int commid, HDSFILE hFile,\
BUBAN103LINKDEF *psLink);
BOOL GetProvDevParamFromTemplateFile(int commid, HDSFILE hFile,\
BUBAN103LINKDEF *psLink);
BOOL GetInfoData(char *pInfo, int iPntNo, DBORIENTATION *psDB);
BOOL GetSyncTimeInfoData(char *pInfo, DBINFO *psSyncInfo);
BOOL GetGroupInfoData(char *pInfo, int iPntNo, DEVPARAMDEF *psDevParam);
void SetProtectDevStatus(BUBAN103LINKDEF *psLinkParam, int iDevNo, BOOL bStatus);
void InitDevParam(DEVPARAMDEF *psDevParam);
BOOL InitBuban103InfoFromDat(int commid, BUBAN103LINKDEF *psLink);
void InitGroupParam(GROUPDEF *psGroupParam, char *szDatFileName);
void InitBuban103CmdBuf(int commid, BUBAN103PORTPARAM *psPortParam);
void InitBuban103LinkCmdBuf(BUBAN103LINKDEF *psLinkParam);
void InitBuban103DevCmdBuf(BUBAN103LINKDEF *psLinkParam, int iDevNo);
void ReCalcDevPntStart(int commid, BUBAN103PORTPARAM *psPortParam);
/////////////////////////////配置函数接口结束///////////////////////////
/////////////////////以下为POLLING规约常规函数接口//////////////////////
void Buban103FindNextCmd(int commid);
BOOL Buban103FindNextCmdEx(int commid);
void Buban103CalcNextDev(int commid, BOOL bFlag);
void Buban103SendCmdFormPollCmdBuf(int commid);
//////////////////////POLLING规约常规函数接口结束///////////////////////
/////////////////////////buban103公共函数接口///////////////////////////
BOOL IsDevLinkOk(BUBAN103LINKDEF *psLinkParam, int iDevNo);
void ClearLinkCnt(BUBAN103LINKDEF *psLinkParam, int iDevNo);
void SetDevLinkOk(BUBAN103LINKDEF *psLinkParam, int iDevNo, BOOL bFlagOk);
BYTE GetLinkAddr(BUBAN103LINKDEF *psLinkParam, int iDevNo);
BYTE *GetLinkCtrl(BUBAN103LINKDEF *psLinkParam, int iDevNo);
BOOL IsLinkTimeOut(BUBAN103LINKDEF *psLinkParam, int iDevNo);
BYTE CalBuban103Lpc(BYTE *msg, u_32 len);
BOOL Buban103Check(char *pData, int iDataLen);
BOOL FindProtectDev(BUBAN103PORTPARAM *psPortParam, DEVADDRPARAM *psAddrParam, BOOL bJudgeLinkOnly);
BOOL FindProtectDevFromProvAddr(BUBAN103PORTPARAM *psPortParam, DEVADDRPARAM *psAddrParam, int iProvAddr);
BOOL FindProtectDevFromPntNo(BUBAN103PORTPARAM *psPortParam, DEVADDRPARAM *psAddrParam, DBINFO *psDBInfo, int iPntNo, int itype);
BOOL FindProtectDevFromYkYtPnt(BUBAN103PORTPARAM *psPortParam, DEVADDRPARAM *psAddrParam, int iYkYtPnt);
int FindYkPointFromDev(DBORIENTATION *psYkYtDBUnit, BYTE u8Fun, BYTE u8Inf);
BOOL GetSpecialPtr(int commid, DEVADDRPARAM *psDevAddrParam,\
BUBAN103PORTPARAM **ppsPortParam,\
BUBAN103LINKDEF **ppsLinkParam, DEVDEF **ppsDevParam);
BOOL GetSpecialProvPtr(int commid, DEVADDRPARAM *psDevAddrParam,\
BUBAN103PORTPARAM **ppsPortParam,\
BUBAN103LINKDEF **ppsLinkParam, PROVDEVDEF **ppsProvDevParam);
BOOL GetPortParamPtr(int commid, BUBAN103PORTPARAM **ppsPortParam);
BOOL GetOneValueOfASDU10(BYTE *pu8SourData, VALUEDEF *psValue, BYTE u8DataType, BYTE u8DataLen);
int FindAiGroupIdx(DBORIENTATION *pAiDB, int iMaxNum, BYTE u8Asdu, BYTE u8Fun, BYTE u8Inf);
/////////////////////////buban103公共函数接口结束///////////////////////
//===========================以下为指令生成函数=======================
//生成 Buban103 命令?
void MakeBuban103LinkCommand(u_32 commid, BYTE bLinkAddr, u_char link_cmd_idx, u_char* msg, u_32 len, u_32 cmdtype);
//生成时间同步命令
void MakeTimeSyn_CAsdu6(u_32 commid, CMDPARAM *psCmdParam);
//生成总查询启动命令
void MakeAllQuery_CAsdu7(u_32 commid, CMDPARAM *psCmdParam);
//生成通用分类数据命令
void MakeGenIdentData_CAsdu10(u_32 commid, CMDPARAM *psCmdParam, u_char *dataset, u_char ngd);
void MakeGenIdentData_CAsdu10Ex(u_32 commid, CMDPARAM *psCmdParam, u_char *dataset, u_char ngd, u_32 cmdtype);
//生成一般命令
void MakeGenCommand_CAsdu20(u_32 commid, CMDPARAM *psCmdParam, bool cmd);
//生成通用分类命令
void MakeGenIdentCommand_CAsdu21(u_32 commid, CMDPARAM *psCmdParam, GEN_DATAGROUP* datagroup, u_char nog);
//生成扰动数据传输命令
void MakeDisTrans_CAsdu24(u_32 commid, CMDPARAM *psCmdParam, u_char too, u_char tov, u_short fan, u_char acc);
//生成扰动数据传输的认可命令
void MakeDisTrans_CAsdu25(u_32 commid, CMDPARAM *psCmdParam, u_char too, u_char tov, u_short fan, u_char acc);
//生成脉冲电度的查询命令
void MakeQCC_CAsdu88(u_32 commid, CMDPARAM *psCmdParam);
//Buban103 生成一类数据问询指令
void MakeBuban103_PL1_NA_3_Cmd(int commid, DEVADDRPARAM *psAddrParam);
/*!
\brief 生成标准的103定时轮询指令
\param commid -- 厂站端口号
\param iBuIdx -- 保护装置(间隔)索引
\param CmdIdx -- 指令索引号
\sa
\ref 0 时间同步过程
\ref 1 模拟量查询
\ref 2 状态量查询
\retval 指令生成成功标识
\note
无\n
*/
void MakeBuban103PollingCmd(int commid, BUBAN103LINKDEF *psLinkParam, i_32 CmdIdx);
//===========================指令生成函数结束=========================
///////////////////////以下为规约处理函数接口///////////////////////////
void Buban103ProcessData(int commid, BUBAN103PORTPARAM *psPortParam, BOOL bProcess);
void Buban103shortprocess(RTUMSG *rtumsg);
void Buban103longprocess(RTUMSG *rtumsg);
// wen 2003.10.27 增加函数
// 其他报文数据处理开始
// 带时标的报文
void Buban103TMprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
// 带时标的报文
void Buban103TMprocessOfSoe(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
// 带时标的报文
//void Buban103TMprocessOfPEvent(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
// 带相对时间的时标报文
void Buban103TMRprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
// 带相对时间的时标报文
void Buban103TMRprocessOfSoe(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
// 带相对时间的时标报文
//void Buban103TMRprocessOfPEvent(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
// 被测值I报文
void Buban103MEIprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
// 带相对时间的有时标的被测值报文
void Buban103TMEprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
// 标识报文
void Buban103IRCprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
// 被测值II报文
void Buban103MEIINAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
// 被测值III报文
void Buban103MEIIITAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
// 被测值IV报文
void Buban103MEIVTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
// 被测值V报文
void Buban103MEVTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
// 被测值VI报文
void Buban103MEVITAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
// 被测值VII报文
void Buban103MEVIINAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
// 步位置信息报文
void Buban103STNAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
// 单点信息状态帧
void Buban103SPNAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
// 带时标单点信息状态帧
void Buban103SPTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
// 带时标单点信息状态帧
void Buban103SPTAprocessOfSoe(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
// 带时标单点信息状态帧
//void Buban103SPTAprocessOfPEvent(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
// 双点信息状态帧
void Buban103DPNAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
// 带时标双点信息状态帧
void Buban103DPTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
// 带时标双点信息状态帧
void Buban103DPTAprocessOfSoe(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
// 带时标双点信息状态帧
//void Buban103DPTAprocessOfPEvent(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
// 单点状态和状态变化信息状态帧
void Buban103SSNAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
// 带时标单点状态和状态变化信息状态帧
void Buban103SSTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
// 双点状态和状态变化信息状态帧
void Buban103DSNAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
// 带时标双点状态和状态变化信息状态帧
void Buban103DSTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
// 水位
void Buban103WLTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
// 电能脉冲计数值
void Buban103ITNAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
// 通用分类数据报文
void Buban103GDprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
// 遥控命令应答
void Buban103YkAck(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
// 遥调命令应答
void Buban103YtAck(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
/*!
\brief 通用分类数据报文模拟量处理
\param rtumsg -- 数据源缓冲区
\param psDevAddrParam -- 保护装置地址参数指针
\note
取值范围0 -- MAX_POLL_ADDRESS_NUM-1\n
\param iGroupIdx -- 通用分类数据组索引
\note
取值范围0 -- GROUPNUM-1\n
*/
void Buban103GDprocessWithAI(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 iGroupIdx);
/*!
\brief 通用分类数据报文开关量处理
\param rtumsg -- 数据源缓冲区
\param iBuIdx -- 保护装置(间隔)索引
\note
取值范围0 -- MAX_POLL_ADDRESS_NUM-1\n
\param iGroupIdx -- 通用分类数据组索引
\note
取值范围0 -- GROUPNUM-1\n
*/
void Buban103GDprocessWithDI(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 iGroupIdx);
/*!
\brief 通用分类数据报文电度量处理
\param rtumsg -- 数据源缓冲区
\param iBuIdx -- 保护装置(间隔)索引
\note
取值范围0 -- MAX_POLL_ADDRESS_NUM-1\n
\param iGroupIdx -- 通用分类数据组索引
\note
取值范围0 -- GROUPNUM-1\n
*/
void Buban103GDprocessWithPI(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 iGroupIdx);
/*!
\brief 通用分类数据报文保护模拟量处理
\param rtumsg -- 数据源缓冲区
\param iBuIdx -- 保护装置(间隔)索引
\note
取值范围0 -- MAX_POLL_ADDRESS_NUM-1\n
\param iGroupIdx -- 通用分类数据组索引
\note
取值范围0 -- GROUPNUM-1\n
*/
void Buban103GDprocessWithPAI(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 iGroupIdx);
/*!
\brief 通用分类数据报文保护开关量处理
\param rtumsg -- 数据源缓冲区
\param iBuIdx -- 保护装置(间隔)索引
\note
取值范围0 -- MAX_POLL_ADDRESS_NUM-1\n
\param iGroupIdx -- 通用分类数据组索引
\note
取值范围0 -- GROUPNUM-1\n
*/
void Buban103GDprocessWithPDI(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 iGroupIdx);
/*!
\brief 通用分类数据报文保护定值处理
\param rtumsg -- 数据源缓冲区
\param iBuIdx -- 保护装置(间隔)索引
\note
取值范围0 -- MAX_POLL_ADDRESS_NUM-1\n
\param iGroupIdx -- 通用分类数据组索引
\note
取值范围0 -- GROUPNUM-1\n
*/
void Buban103GDprocessWithPFIX(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 iGroupIdx);
//void Buban103GDprocessWithPFIXNew(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 iGroupIdx);
//void Buban103GDprocessWithPFIXNewEx(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 iGroupIdx);
/*!
\brief 通用分类数据报文保护事件处理
\param rtumsg -- 数据源缓冲区
\param iBuIdx -- 保护装置(间隔)索引
\note
取值范围0 -- MAX_POLL_ADDRESS_NUM-1\n
\param iGroupIdx -- 通用分类数据组索引
\note
取值范围0 -- GROUPNUM-1\n
*/
void Buban103GDprocessWithPEVENT(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 iGroupIdx);
// 通用分类标识报文
void Buban103GIprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
// 对时程序
void Buban103SynTime(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
// 电度数据处理(SIEMENS 公司保护专用)
void Buban103EXPIprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
// 其他报文数据处理结束
// 扰动数据处理开始
// 扰动数据表处理
void Buban103LRDprocess(RTUMSG *rtumsg);
// 扰动数据传输准备就绪
void Buban103RTDprocess(RTUMSG *rtumsg);
// 带标志的状态变位传输准备就绪
void Buban103RTTprocess(RTUMSG *rtumsg);
// 带标志的状态变位传输
void Buban103TOTprocess(RTUMSG *rtumsg);
// 被记录的通道传输准备就绪
void Buban103RTCprocess(RTUMSG *rtumsg);
// 传送扰动值
void Buban103TOVprocess(RTUMSG *rtumsg);
// 带标志的状态变位、通道、扰动数据传输结束
void Buban103EOTprocess(RTUMSG *rtumsg);
// 扰动数据处理结束
// 写通道扰动数据到文件中
BOOL Buban103WriteACCDatatoFile(RTUMSG *rtumsg);
// 读录波数据文件头
void Buban103GetFileHead(char *ptrDataHead, size_t *piNOF, size_t *piNOC, size_t *piNOE, size_t *piINT);
// 读录波数据记录时间
//void Buban103GetTime(char *ptrDataHead, SYSTEMTIME *ptrtm);
// 读录波数据模拟量头
void Buban103ProcessAiHead(char *ptrDataHead, DISTURBANCEAIDATA *pAiData);
// 转换临时文件为可用文件
void Buban103tmpFileChangetodatFile(char *sztmpFileName);
// 生成CFG文件
//void Buban103MakeCFGFile(int iStationNo, pDISTURBANCEDIDATA ptrDi, pDISTURBANCEAIDATA ptrAi, FILE *fp, char *szInfFile, SYSTEMTIME *tm);
// 生成DAT文件
void Buban103MakeDATFile(pDISTURBANCEDIDATA ptrDi, pDISTURBANCEAIDATA ptrAi, FILE *fp);
// 转发函数处理
/*!
\brief 插入SOE数据
\param commid -- 厂站端口号
\param selidx -- 端口索引号
\param iBuIdx -- 保护装置(间隔)索引
\param pSoeMsg -- SOE数据指针
\retval 插入SOE数据时是否覆盖(缓冲区是否已满)
\note
无\n
*/
BOOL ProvInsertSoe(u_32 commid, DEVADDRPARAM *psDevAddrParam, SOE_DEF *pSoeMsg);
/*!
\brief 从缓冲区取并且删除SOE数据
\param commid -- 厂站端口号
\param selidx -- 端口索引号
\param iBuIdx -- 保护装置(间隔)索引
\param pSoeMsg -- SOE数据指针
\retval 获取SOE数据是否成功
\note
无\n
*/
BOOL ProvGetAndDelSoe(u_32 commid, DEVADDRPARAM *psDevAddrParam, SOE_DEF *pSoeMsg);
/*!
\brief 从缓冲区取第X项SOE数据
\param commid -- 厂站端口号
\param psDevAddrParam -- 端口索引号
\param iNo -- 第i个soe记录
\note
iNo=0为最新的事件记录1为次之以此类推
\param pSoeMsg -- SOE数据指针
\retval 获取SOE数据是否成功
\note
无\n
*/
BOOL ProvGetNoXSoe(u_32 commid, DEVADDRPARAM *psDevAddrParam, int iNo, SOE_DEF *pSoeMsg);
/*!
\brief 是否有一类数据存在
\param commid -- 厂站端口号
\param iBuIdx -- 保护装置(间隔)索引
\param bCheckDiChange -- 检测遥信变位标识
\retval 一类数据存在标识
\note
无\n
*/
BOOL ProvHaveClassOne(u_32 commid, DEVADDRPARAM *psDevAddrParam, BOOL bCheckDiChange);
/*!
\brief 转发初始化
\param commid -- 厂站端口号
\retval 无
\note
无\n
*/
void ProvInit(u_32 commid);
/*!
\brief 转发链路指令的生成
\param commid -- 厂站端口号
\param addr -- 间隔设备地址
\param cmdidx -- 指令索引号
\param bACD -- 一类数据存在标识
\retval 无
\note
无\n
*/
void ProvMakeLinkCommand(u_32 commid, u_char addr, u_char cmdidx, BOOL bACD);
/*!
\brief 转发链路指令的生成
\param commid -- 厂站端口号
\param addr -- 间隔设备地址
\param cmdidx -- 指令索引号
\param bACD -- 一类数据存在标识
\param bClearRecvBuf -- 是否清除接收缓冲区
\param cmdtype-- 指令缓冲区类型
\retval 无
\note
无\n
*/
void ProvMakeLinkCommandEx(u_32 commid, u_char addr, u_char cmdidx, BOOL bACD, BOOL bClearRecvBuf, u_32 cmdtype);
/*!
\brief 转发数据指令的生成
\param commid -- 厂站端口号
\param addr -- 间隔设备地址
\param cmdidx -- 指令索引号
\param bACD -- 一类数据存在标识
\param bCause -- 传送原因
\param cmdtype-- 指令缓冲区类型
\retval 无
\note
无\n
*/
void ProvMakeVarCommand(u_32 commid, u_char linkaddr, u_char addr, u_char cmdidx, BOOL bACD, BYTE bCause, u_32 cmdtype);
/*!
\brief 转发命令处理
\param portidx -- 厂站端口号
\param rtumsg -- 接收到的数据信息
\retval 无
\note
无\n
*/
void ProvRtuProtocolDataProcess(int commid, RTUMSG *rtumsg);
/*!
\brief 保护命令数据处理函数
\param commid -- 厂站端口号
\param rtumsg -- 接收到的数据信息
\param iBuIdx -- 保护装置(间隔)索引
\retval 无
\note
无\n
*/
void ProvSendCmdToPort(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
/*!
\brief 短帧数据转发处理
\param commid -- 厂站端口号
\param rtumsg -- 接收到的数据信息
\retval 无
\note
无\n
*/
void Provshortprocess(u_32 commid, RTUMSG *rtumsg);
/*!
\brief 转发一类数据处理
\param commid -- 厂站端口号
\param addr -- 间隔设备地址
\param iBuIdx -- 保护装置(间隔)索引
\retval 无
\note
无\n
*/
void ProvPL1process(u_32 commid, DEVADDRPARAM *psDevAddrParam);
/*!
\brief 转发二类数据处理
\param commid -- 厂站端口号
\param addr -- 间隔设备地址
\param iBuIdx -- 保护装置(间隔)索引
\retval 无
\note
无\n
*/
void ProvPL2process(u_32 commid, DEVADDRPARAM *psDevAddrParam);
/*!
\brief 长帧数据转发处理
\param commid -- 厂站端口号
\param rtumsg -- 接收到的数据信息
\retval 无
\note
无\n
*/
void Provlongprocess(u_32 commid, RTUMSG *rtumsg);
/*!
\brief 转发时间同步处理
\param commid -- 厂站端口号
\param rtumsg -- 接收到的数据信息
\retval 无
\note
无\n
*/
void ProvSYNprocess(u_32 commid, RTUMSG *rtumsg);
/*!
\brief 转发总查询(总召唤)处理
\param commid -- 厂站端口号
\param rtumsg -- 接收到的数据信息
\param iBuIdx -- 保护装置(间隔)索引
\retval 无
\note
无\n
*/
void ProvTGIprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
/*!
\brief 转发通用分类数据处理
\param commid -- 厂站端口号
\param rtumsg -- 接收到的数据信息
\param iBuIdx -- 保护装置(间隔)索引
\retval 无
\note
无\n
*/
void ProvGDprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
/*!
\brief 转发一般命令处理
\param commid -- 厂站端口号
\param rtumsg -- 接收到的数据信息
\param iBuIdx -- 保护装置(间隔)索引
\retval 无
\note
无\n
*/
void ProvGRCprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
/*!
\brief 转发通用分类命令处理
\param commid -- 厂站端口号
\param rtumsg -- 接收到的数据信息
\param iBuIdx -- 保护装置(间隔)索引
\retval 无
\note
无\n
*/
void ProvGCprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
/*!
\brief 转发扰动数据传输的命令处理
\param commid -- 厂站端口号
\param rtumsg -- 接收到的数据信息
\param iBuIdx -- 保护装置(间隔)索引
\retval 无
\note
无\n
*/
void ProvODTprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
/*!
\brief 转发扰动数据传输的认可处理
\param commid -- 厂站端口号
\param rtumsg -- 接收到的数据信息
\param iBuIdx -- 保护装置(间隔)索引
\retval 无
\note
无\n
*/
void ProvADTprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
/*!
\brief 转发控制断路器命令处理
\param commid -- 厂站端口号
\param rtumsg -- 接收到的数据信息
\param iBuIdx -- 保护装置(间隔)索引
\retval 无
\note
无\n
*/
void ProvDCprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
/*!
\brief 转发升降命令处理
\param commid -- 厂站端口号
\param rtumsg -- 接收到的数据信息
\param iBuIdx -- 保护装置(间隔)索引
\retval 无
\note
无\n
*/
void ProvRCprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
/*!
\brief 转发设定命令处理
\param commid -- 厂站端口号
\param rtumsg -- 接收到的数据信息
\param iBuIdx -- 保护装置(间隔)索引
\retval 无
\note
无\n
*/
void ProvSEprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
/*!
\brief 转发控制命令处理
\param commid -- 厂站端口号
\param rtumsg -- 接收到的数据信息
\param iBuIdx -- 保护装置(间隔)索引
\retval 无
\note
无\n
*/
void ProvCCprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
/*!
\brief 转发电能脉冲计数召唤命令处理
\param commid -- 厂站端口号
\param rtumsg -- 接收到的数据信息
\param iBuIdx -- 保护装置(间隔)索引
\retval 无
\note
无\n
*/
void ProvCIprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam);
/*!
\brief 转发全部组标题
\param commid -- 厂站端口号
\param rtumsg -- 接收到的数据信息
\param iBuIdx -- 保护装置(间隔)索引
\retval 无
\note
无\n
*/
BOOL ProvMakeTitleOfGroups(u_32 commid, RTUMSG *rtumsg, PROVDEVDEF *pProvDevParam, GROUPDEF *pBaoHuDB, int iNum);
/*!
\brief 转发一个组的全部条目的值或属性
\param commid -- 厂站端口号
\param rtumsg -- 接收到的数据信息
\param iBuIdx -- 保护装置(间隔)索引
\param bContinue- 未传送的保护数据继续
\retval 无
\note
无\n
*/
BOOL ProvMakeAttrOfAllItemInGroup(u_32 commid, RTUMSG *rtumsg,\
PROVDEVDEF *pProvDevParam,\
GROUPDEF *pBaoHuDB, int iNum);
/*!
\brief 转发一个条目的目录
\param commid -- 厂站端口号
\param rtumsg -- 接收到的数据信息
\param iBuIdx -- 保护装置(间隔)索引
\retval 无
\note
无\n
*/
BOOL ProvMakeDirOfItem(u_32 commid, RTUMSG *rtumsg, PROVDEVDEF *pProvDevParam, GROUPDEF *pBaoHuDB, int iNum);
/*!
\brief 转发一个条目的值或属性
\param commid -- 厂站端口号
\param rtumsg -- 接收到的数据信息
\param iBuIdx -- 保护装置(间隔)索引
\retval 无
\note
无\n
*/
BOOL ProvMakeAttrOfItem(u_32 commid, RTUMSG *rtumsg, PROVDEVDEF *pProvDevParam, GROUPDEF *pBaoHuDB, int iNum);
/*!
\brief 转发遥信变位
\param commid -- 厂站端口号
\param rtumsg -- 接收到的数据信息
\param iBuIdx -- 保护装置(间隔)索引
\retval 无
\note
无\n
*/
BOOL ProvSendChangedDi(u_32 commid, DEVADDRPARAM *psDevAddrParam);
/*!
\brief 单个定值的打包
\param pbDestBuf -- 目的缓冲区指针
\param uMaxBufLen -- 目的缓冲区最大长度
\param bDataFormat -- 数据格式
\param uDataType -- 数据类型
\param uDataLen -- 源数据长度
\param pbSourData -- 源数据缓冲区指针
\retval 无
\note
无\n
*/
i_32 PackOneValueIntoPackage(BYTE *pbDestBuf, u_32 uMaxBufLen, BYTE bDataFormat,
u_32 uDataType, u_32 uDataLen, BYTE *pbSourData);
// 部颁103和斯凯达内部规约间的格式转换
void Buban103ScadaCmdchange(int commid, RTUMSG *rtumsg);
void Buban103ScadaDatachange(int commid, RTUMSG *rtumsg);
void Buban103ScadaProtocolExchange(int commid, RTUMSG *rtumsg);
void Buban103GDprocessWithPAIToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 iGroupIdx);
void Buban103GDprocessWithPDIToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 iGroupIdx);
void Buban103GDprocessWithPFIXToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 iGroupIdx);
// 调试信息显示
void Buban103DispConfig(int commid, BUBAN103PORTPARAM *psPortParam);
void Buban103DispMalloc(int commid, int iSize);
/////////////////////////规约处理函数接口结束///////////////////////////
#endif // !defined(_BUBAN103_H_200504221547__INCLUDED_)