unknown 2 years ago
parent 47c122d90a
commit ddc07e6f0b

File diff suppressed because it is too large Load Diff

@ -0,0 +1,311 @@
/************************************************************************************
*
* 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_)
Loading…
Cancel
Save