/************************************************************************************ * * 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 9 #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 命令? 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_)