|
|
/************************************************************************************
|
|
|
*
|
|
|
* Copyright (C) 2004-2005 SCADA Control Technology Co., Ltd.
|
|
|
* All rights reserved.
|
|
|
*
|
|
|
* 文件名称:buban101.h
|
|
|
* 文件标识:部颁101规约
|
|
|
* 摘 要:101规约的处理的结构、宏还有函数定义
|
|
|
*
|
|
|
* 当前版本:1.0
|
|
|
* 作 者:aaawen
|
|
|
* 完成日期:2005/09/08
|
|
|
*
|
|
|
* 取代版本: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 --- 字符串
|
|
|
* 全部大写 --- 常量
|
|
|
* 首字节必须大写--- 类名称,结构,函数
|
|
|
**************************************************************************************/
|
|
|
// buban101.h: interface for the buban101 class.
|
|
|
//
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
#if !defined(_BUBAN101_H_200509081012__INCLUDED_)
|
|
|
#define _BUBAN101_H_200509081012__INCLUDED_
|
|
|
#ifdef OS_LINUX
|
|
|
#include "baohulib/common.h"
|
|
|
#else
|
|
|
#include "common.h"
|
|
|
#endif
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
// 宏定义 //
|
|
|
// WEN 2005.09.08 //
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
//信息体地址
|
|
|
#define INFO_DI_BASEADDR 0x001 // 单,双点遥信量
|
|
|
#define INFO_PROTECT_BASEADDR 0x401 // 保护单个事件信息
|
|
|
#define INFO_PROTECT_STARTBASEADDR 0x501 // 保护启动事件
|
|
|
#define INFO_PROTECT_GROUPBASEADDR 0x601 // 保护成组输出电路信息
|
|
|
#define INFO_AI_BASEADDR 0x701 // 遥测量
|
|
|
#define INFO_PARA_BASEADDR 0x901 // 参数地址,和遥测量一一对应
|
|
|
#define INFO_YKYT_BASEADDR 0xB01 // 遥控、遥调
|
|
|
#define INFO_SET_BASEADDR 0xB81 // 设定地址范围
|
|
|
#define INFO_PI_BASEADDR 0xC01 // 电度量
|
|
|
#define INFO_STEP_BASEADDR 0xC81 // 步长量(如:变压器分接头)
|
|
|
#define INFO_BIN_BASEADDR 0xCA1 // 二进制状态信息
|
|
|
#define INFO_BCD_BASEADDR 0xCC1 // BCD码(水位,频率)
|
|
|
#define INFO_STATUS_BASEADDR 0xCE9 // 子站远东终端状态
|
|
|
#define INFO_FILE_BASEADDR 0xCEA // 文件传输
|
|
|
|
|
|
//一组中的个类型数据最大个数
|
|
|
#define MAX_GROUP_AINUM 128
|
|
|
//#define MAX_GROUP_FLOATAINUM 128
|
|
|
#define MAX_GROUP_DINUM 128
|
|
|
#define MAX_GROUP_PINUM 32
|
|
|
|
|
|
//转发各种类型的数据的最大数量
|
|
|
#define MAX_AINUM 120
|
|
|
#define MAX_FLOATAINUM 48
|
|
|
#define MAX_DINUM 127
|
|
|
#define MAX_PINUM 35
|
|
|
|
|
|
#define MAX_POLL_CMD_BUF_NUM 32 // 最大命令缓冲区数目
|
|
|
|
|
|
// 命令类型定义
|
|
|
#define ASK_LINK 0 // 请求链路
|
|
|
#define RST_LINK 1 // 复位链路
|
|
|
#define RTU_TIME 2 // 对时时间
|
|
|
#define ASK_DI_DATA 3 // 召唤2 级数据YX
|
|
|
#define ASK_AI_DATA 4 // 召唤2 级数据YC
|
|
|
#define ASK_PI_DATA 5 // 召唤2 级数据YM
|
|
|
#define ASK_ALL_DATA 6 // 初始化总召唤
|
|
|
|
|
|
#define ASK_FIRST_DATA 7 // 召唤1 级数据
|
|
|
#define ASK_SECOND_DATA 8 // 召唤2 级数据
|
|
|
#define ACK 9 // 确认回答
|
|
|
#define ANS_LINK 10 // 链路回答
|
|
|
#define ASK_PI 11 // 召唤数据YM
|
|
|
|
|
|
#define ASK_DATA_NO 12 // 无所请求的数据
|
|
|
#define ASK_ALLDATA_END 13 // 召唤数据结束(用于总召唤和电度召唤)
|
|
|
//#define ASK_ALLDATA_ACK 14 // 召唤数据确认(用于总召唤和电度召唤)
|
|
|
|
|
|
// 定时召唤命令及命令名称
|
|
|
#define BUBAN101_TIMER_CMD_NUM 2 // 最大命令数目
|
|
|
#define MAX_POLLCMD_BUF_LEN 320 // 最大命令缓冲区数目
|
|
|
|
|
|
// 控制模式
|
|
|
#define CONTROL_DOUBLE 0 // 双点控制
|
|
|
#define CONTROL_SINGAL 1 // 单点控制
|
|
|
#define CONTROL_DIRECT 2 // 直接控制
|
|
|
|
|
|
// 规约版本号
|
|
|
#define VER_BUBAN_101 0 // 部颁101
|
|
|
#define VER_IEC870_5_101 1 // IEC101
|
|
|
/////////////////////////////结构定义/////////////////////////////////
|
|
|
typedef struct
|
|
|
{
|
|
|
long CmdTimerCnt;
|
|
|
long CmdTimerConst;
|
|
|
} BUBAN101CMDDEF;
|
|
|
|
|
|
typedef struct tagBUBAN101PORTPARAM
|
|
|
{
|
|
|
BOOL RstLinkOk; // 初始化时:FALSE
|
|
|
BOOL LinkOk; // 主站初始化标志 1:ok; 0:no 初始化时:FALSE
|
|
|
BOOL Initdata; // 初始化总召唤标志 TRUE:收到总召唤结束帧
|
|
|
// FALSE:未收到总召唤结束帧
|
|
|
// 召唤电度标志 TRUE:收到召唤结束帧
|
|
|
// FALSE:未收到召唤结束帧
|
|
|
BYTE LinkAddr; // 地址域
|
|
|
BYTE CtlByte; // 控制信息
|
|
|
|
|
|
long LinkOkCnt;
|
|
|
long lTimeOutConst; // 超时时间间隔
|
|
|
|
|
|
short RtuVersion; // 版本号
|
|
|
|
|
|
short BalanceOrNot; //是否平衡式 =1:ok; =0:no
|
|
|
|
|
|
short CurCmdIdx;
|
|
|
short YkMode; // 遥控方式(=0:双点遥控,=1:单点遥控,=2:直控方式)
|
|
|
|
|
|
// wen 2005.01.15 修改数据信息体起始地址
|
|
|
int iAiBaseAddr; //遥测起始地址
|
|
|
int iDiBaseAddr; //遥信起始地址
|
|
|
int iPiBaseAddr; //遥脉起始地址
|
|
|
int iYkBaseAddr; //遥控起始地址
|
|
|
|
|
|
BYTE m_au8RecvBuf[300];
|
|
|
int m_iRecvLen;
|
|
|
|
|
|
BUBAN101CMDDEF CmdTime[BUBAN101_TIMER_CMD_NUM];
|
|
|
|
|
|
SIO_PARAM_BAOHU_DEF *m_psBaoHu; // 该规约的端口数据指针
|
|
|
} BUBAN101PORTPARAM, *pBUBAN101PORTPARAM;
|
|
|
|
|
|
/////////////////////////以下为通用函数接口///////////////////////////
|
|
|
/*!
|
|
|
\brief 读取配置函数
|
|
|
\param commid -- 端口号
|
|
|
\note
|
|
|
取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n
|
|
|
*/
|
|
|
void Buban101ReadConfig(int commid); // 初始化处理
|
|
|
/*!
|
|
|
\brief 读取端口数据函数
|
|
|
\param commid -- 端口号
|
|
|
\note
|
|
|
取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n
|
|
|
\param buf -- 数据源缓冲区指针
|
|
|
\param len -- 数据源长度
|
|
|
*/
|
|
|
void Buban101RecvData(int commid, u_char *buf, int len);// 规约读数据处理
|
|
|
/*!
|
|
|
\brief 规约数据处理定时器函数
|
|
|
\param commid -- 端口号
|
|
|
\note
|
|
|
取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n
|
|
|
*/
|
|
|
void Buban101Timer(int commid); // 定时器处理
|
|
|
/*!
|
|
|
\brief 遥控遥调数据处理函数
|
|
|
\param commid -- 端口号
|
|
|
\note
|
|
|
取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n
|
|
|
\param buf -- 数据源缓冲区指针
|
|
|
\param len -- 数据源长度
|
|
|
*/
|
|
|
void Buban101YkYtProcess(int commid, u_char *buf, int len); // 遥控遥调处理
|
|
|
/*!
|
|
|
\brief 系统下发对时函数
|
|
|
\param commid -- 端口号
|
|
|
\note
|
|
|
取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n
|
|
|
*/
|
|
|
void Buban101SendSystemTime(int commid); // 系统对时
|
|
|
/*!
|
|
|
\brief 系统退出时规约处理函数
|
|
|
\param commid -- 端口号
|
|
|
\note
|
|
|
取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n
|
|
|
*/
|
|
|
void Buban101Exit(int commid); // 规约退出
|
|
|
/*!
|
|
|
\brief 保护命令处理函数
|
|
|
\param commid -- 端口号
|
|
|
\param rtumsg -- 下发的保护命令指针
|
|
|
\note
|
|
|
取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n
|
|
|
*/
|
|
|
void Buban101BaoHuCmdProcess(int commid, RTUMSG *rtumsg, BOOL bUpData);
|
|
|
/*!
|
|
|
\brief 取保护数据库指针函数
|
|
|
\param commid -- 端口号
|
|
|
\param iProvAddr -- 统一编排的保护转发地址
|
|
|
\param ppBaoHuDB -- 存放保护数据指针的指针
|
|
|
\retval -- 返回该装置保护数据组数
|
|
|
*/
|
|
|
int Buban101GetBaohuDataBase(int commid, int iProvAddr, GROUPDEF **ppBaoHuDB);
|
|
|
/////////////////////////通用函数接口结束///////////////////////////////
|
|
|
|
|
|
/////////////////////////buban101公共函数接口///////////////////////////
|
|
|
// 校验数据帧是否正确
|
|
|
BOOL Buban101Check(u_char* msg, int len);
|
|
|
//计算 Buban101 累加和检验码
|
|
|
u_char CalBuban101Lpc(u_char* msg, int len);
|
|
|
//指令缓冲区初始化
|
|
|
void InitBuban101CommandBuffer(int commid);
|
|
|
/////////////////////////buban101公共函数接口结束///////////////////////
|
|
|
|
|
|
/////////////////////////以下为通用函数支持接口/////////////////////////
|
|
|
void Buban101ProvMakeYkYtCommand(int commid, u_char *buf, int len);
|
|
|
/////////////////////////通用函数支持接口结束///////////////////////////
|
|
|
|
|
|
///////////////////////////以下为指令生成函数///////////////////////////
|
|
|
//生成 Buban101 命令<E591BD>
|
|
|
void MakeBuban101Command(u_32 commid, u_char cmdidx);
|
|
|
//生成遥控遥调指令
|
|
|
void MakeBuBan101YkYtCommand(u_32 commid, u_char *buf, int len);
|
|
|
///////////////////////////指令生成函数结束/////////////////////////////
|
|
|
|
|
|
/////////////////////以下为POLLING规约常规函数接口//////////////////////
|
|
|
void Buban101FindNextCmd(int commid);
|
|
|
BOOL Buban101FindNextCmdEx(int commid);
|
|
|
void Buban101SendCmdFormPollCmdBuf(int commid);
|
|
|
//////////////////////POLLING规约常规函数接口结束///////////////////////
|
|
|
|
|
|
///////////////////////以下为规约处理函数接口///////////////////////////
|
|
|
//======================以下为主站数据处理============================
|
|
|
void Buban101ProcessData(u_32 commid, BUBAN101PORTPARAM *psPortParam, BOOL bProcess);
|
|
|
void Buban101shortprocess(RTUMSG *rtumsg);
|
|
|
void Buban101longprocess(RTUMSG *rtumsg);
|
|
|
void Buban101NoChanged(RTUMSG * rtumsg);
|
|
|
|
|
|
//Buban101 初始化数据处理
|
|
|
void Buban101InitdataProecss(RTUMSG * rtumsg);
|
|
|
//电度结束帧
|
|
|
void Buban101PidataEnd(RTUMSG * rtumsg);
|
|
|
//设定确认
|
|
|
void Buban101SetAck(RTUMSG *rtumsg);
|
|
|
//Buban101 遥控遥调返校程序
|
|
|
void Buban101YkYtAck(RTUMSG * rtumsg);
|
|
|
//Buban101 对时程序
|
|
|
void Buban101SynTime(RTUMSG * rtumsg);
|
|
|
|
|
|
// 子站主动传送遥信变位帧
|
|
|
void Buban101AutoSendDiProcess(RTUMSG *rtumsg);
|
|
|
|
|
|
void Buban101AiWithPzDataProcess(RTUMSG *, int);
|
|
|
void Buban101AllAiDataProcess(RTUMSG *rtumsg);
|
|
|
void Buban101DiDataProcess(RTUMSG *rtumsg, int);
|
|
|
void Buban101SoeDataProcess(RTUMSG *rtumsg, int);
|
|
|
void Buban101PiDataProcess(RTUMSG * rtumsg);
|
|
|
void Buban101PiWithTimeDataProcess(RTUMSG *rtumsg);
|
|
|
|
|
|
//保护数据处理
|
|
|
void Buban101BaoHuDataProcess(RTUMSG *rtumsg);
|
|
|
void Buban101DefaultBaoHuDataProcess(RTUMSG *rtumsg);
|
|
|
|
|
|
// 新增函数,含有 7 BYTE 的时标
|
|
|
void Buban101SoeDataProcessWithCP56Time2a(RTUMSG *rtumsg, int flag);
|
|
|
void Buban101AiWithDataProcessWithM_ME_TD_1(RTUMSG * rtumsg);
|
|
|
void Buban101AiWithDataProcessWithM_ME_TE_1(RTUMSG * rtumsg);
|
|
|
void Buban101AiWithDataProcessWithM_ME_TF_1(RTUMSG * rtumsg);
|
|
|
void Buban101PiWithTimeDataProcessWithM_IT_TB_1(RTUMSG *rtumsg);
|
|
|
|
|
|
//======================以下为子站数据处理============================
|
|
|
void ProvBuban101dataProcess(int commid, RTUMSG *rtumsg);
|
|
|
void ProvBuban101shortprocess(int commid, RTUMSG * rtumsg);
|
|
|
void ProvBuban101longprocess(int commid, RTUMSG * rtumsg);
|
|
|
void ProvBuban101SendAllData(int commid, RTUMSG * rtumsg);
|
|
|
void ProvBuban101SendPIData(int commid, RTUMSG * rtumsg);
|
|
|
void ProvBuban101ProcessTime(int commid, RTUMSG *rtumsg);
|
|
|
//iGroupNo=0为响应总召唤
|
|
|
void ProvBuban101SendPI(int commid, RTUMSG *rtumsg, int iGroupNo);
|
|
|
void ProvBuban101SendAI(int commid, RTUMSG *rtumsg, int iGroupNo);
|
|
|
void ProvBuban101SendDI(int commid, RTUMSG *rtumsg, int iGroupNo);
|
|
|
|
|
|
void ProvBuban101YkYtData(int commid, RTUMSG *rtumsg);
|
|
|
void MakeProvBuban101YkYtAckMsg(int commid, int pnt, int op, int step);
|
|
|
|
|
|
void ProvBuban101SendClass1(int commid);
|
|
|
void ProvBuban101SendClass2(int commid);
|
|
|
void ProvMakeBuban101Command(int commid, u_char cmdidx);
|
|
|
/////////////////////////规约处理函数接口结束///////////////////////////
|
|
|
|
|
|
#endif // !defined(_BUBAN101_H_200509081012__INCLUDED_)
|