|
|
/************************************************************************************
|
|
|
*
|
|
|
* Copyright (C) 2004-2005 SCADA Control Technology Co., Ltd.
|
|
|
* All rights reserved.
|
|
|
*
|
|
|
* 文件名称:buban104.h
|
|
|
* 文件标识:部颁104规约
|
|
|
* 摘 要:104规约的处理的结构、宏还有函数定义
|
|
|
*
|
|
|
* 当前版本:1.0
|
|
|
* 作 者:aaawen
|
|
|
* 完成日期:2005/09/14
|
|
|
*
|
|
|
* 取代版本: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 --- 字符串
|
|
|
* 全部大写 --- 常量
|
|
|
* 首字节必须大写--- 类名称,结构,函数
|
|
|
**************************************************************************************/
|
|
|
// buban104.h: interface for the buban104 class.
|
|
|
//
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
#if !defined(_BUBAN104_H_200509141152__INCLUDED_)
|
|
|
#define _BUBAN104_H_200509141152__INCLUDED_
|
|
|
#ifdef OS_LINUX
|
|
|
#include "baohulib/common.h"
|
|
|
#else
|
|
|
#include "common.h"
|
|
|
#endif
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
// 宏定义 //
|
|
|
// WEN 2005.09.08 //
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
#define MAX_104_PINUM 30
|
|
|
|
|
|
#define FORMAT_I 14 // I-格式
|
|
|
#define FORMAT_S 15 // S-格式
|
|
|
#define FORMAT_U_START_ACT 16 // U-格式启动
|
|
|
#define FORMAT_U_START_CON 17 // U-格式启动应答
|
|
|
#define FORMAT_U_STOP_ACT 18 // U-格式停止
|
|
|
#define FORMAT_U_STOP_CON 19 // U-格式停止应答
|
|
|
#define FORMAT_U_TEST_ACT 20 // U-格式测试
|
|
|
#define FORMAT_U_TEST_CON 21 // U-格式测试应答
|
|
|
|
|
|
// 定时召唤命令及命令名称
|
|
|
#define BUBAN104_TIMER_CMD_NUM 3 // 最大命令数目
|
|
|
#define MAX_SEQUENCE 0x7fff // 最大帧计数
|
|
|
|
|
|
#define MAX_FRAMEMATCHING_SIZE 2 // 帧序匹配最大尺寸
|
|
|
|
|
|
// 规约版本号
|
|
|
#define VER_BUBAN_104 0 // 部颁104
|
|
|
#define VER_IEC870_5_104 1 // IEC104
|
|
|
/////////////////////////////结构定义/////////////////////////////////
|
|
|
typedef struct
|
|
|
{
|
|
|
long CmdTimerCnt;
|
|
|
long CmdTimerConst;
|
|
|
} BUBAN104CMDDEF;
|
|
|
|
|
|
typedef struct tagBUBAN104PORTPARAM
|
|
|
{
|
|
|
BOOL LinkOk; // 主站初始化标志 1:ok; 0:no 初始化时:FALSE
|
|
|
BOOL Initdata; // 初始化总召唤标志 TRUE:收到总召唤结束帧
|
|
|
// FALSE:未收到总召唤结束帧
|
|
|
// 召唤电度标志 TRUE:收到召唤结束帧
|
|
|
// FALSE:未收到召唤结束帧
|
|
|
WORD wLinkAddr; // 地址域
|
|
|
|
|
|
WORD wSendSequence; // 发送帧计数
|
|
|
WORD wRecvSequence; // 接收帧计数
|
|
|
WORD wAckSequence; // 应答帧计数
|
|
|
BOOL bAckRight; // 应答帧是否同步 (子站端有效)
|
|
|
BOOL bStopComm; // 通讯停止
|
|
|
|
|
|
BOOL bSendFormatI;
|
|
|
BYTE ProvAckOrNot; // 转发是否要求应答
|
|
|
|
|
|
long lTimeOutSendTest;// 超时发送测试帧
|
|
|
long lTimeOutConst; // 超时时间间隔
|
|
|
long lTimeOutCnt; // 超时时间计数
|
|
|
long lYkYtAckTimeConst;// 返校超时时间间隔
|
|
|
long lYkYtAckTime; // 返校超时时间计数
|
|
|
BOOL bCloseSocket; // 关闭socket端口
|
|
|
char YkCmdBuf[32]; // 遥控延迟发送返校缓冲区
|
|
|
long lYkCmdBuflen; // 遥控延迟发送返校缓冲区数据长
|
|
|
|
|
|
long m_lNoDataCnt; // 无数据时间,超过超时时间发送测试帧
|
|
|
|
|
|
short RtuVersion; // 版本号
|
|
|
int m_iPublishYear; // 发布时间(缺省为2000版)
|
|
|
|
|
|
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;
|
|
|
|
|
|
int m_iFrameSize; // 帧序应答尺寸
|
|
|
|
|
|
BYTE m_bProvAiType; // 转发遥测类型标识
|
|
|
|
|
|
BUBAN104CMDDEF CmdTime[BUBAN104_TIMER_CMD_NUM];
|
|
|
|
|
|
SIO_PARAM_BAOHU_DEF *m_psBaoHu; // 该规约的端口数据指针
|
|
|
} BUBAN104PORTPARAM, *pBUBAN104PORTPARAM;
|
|
|
|
|
|
/////////////////////////以下为通用函数接口///////////////////////////
|
|
|
/*!
|
|
|
\brief 读取配置函数
|
|
|
\param commid -- 端口号
|
|
|
\note
|
|
|
取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n
|
|
|
*/
|
|
|
void Buban104ReadConfig(int commid); // 初始化处理
|
|
|
/*!
|
|
|
\brief 读取端口数据函数
|
|
|
\param commid -- 端口号
|
|
|
\note
|
|
|
取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n
|
|
|
\param buf -- 数据源缓冲区指针
|
|
|
\param len -- 数据源长度
|
|
|
*/
|
|
|
void Buban104RecvData(int commid, u_char *buf, int len);// 规约读数据处理
|
|
|
/*!
|
|
|
\brief 规约数据处理定时器函数
|
|
|
\param commid -- 端口号
|
|
|
\note
|
|
|
取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n
|
|
|
*/
|
|
|
void Buban104Timer(int commid); // 定时器处理
|
|
|
/*!
|
|
|
\brief 遥控遥调数据处理函数
|
|
|
\param commid -- 端口号
|
|
|
\note
|
|
|
取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n
|
|
|
\param buf -- 数据源缓冲区指针
|
|
|
\param len -- 数据源长度
|
|
|
*/
|
|
|
void Buban104YkYtProcess(int commid, u_char *buf, int len); // 遥控遥调处理
|
|
|
/*!
|
|
|
\brief 系统下发对时函数
|
|
|
\param commid -- 端口号
|
|
|
\note
|
|
|
取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n
|
|
|
*/
|
|
|
void Buban104SendSystemTime(int commid); // 系统对时
|
|
|
/*!
|
|
|
\brief 系统退出时规约处理函数
|
|
|
\param commid -- 端口号
|
|
|
\note
|
|
|
取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n
|
|
|
*/
|
|
|
void Buban104Exit(int commid); // 规约退出
|
|
|
/*!
|
|
|
\brief 保护命令处理函数
|
|
|
\param commid -- 端口号
|
|
|
\param rtumsg -- 下发的保护命令指针
|
|
|
\note
|
|
|
取值范围:0 -- MaxSerialPortNum + MaxNetPortNum -1\n
|
|
|
*/
|
|
|
void Buban104BaoHuCmdProcess(int commid, RTUMSG *rtumsg, BOOL bUpData);
|
|
|
/*!
|
|
|
\brief 取保护数据库指针函数
|
|
|
\param commid -- 端口号
|
|
|
\param iProvAddr -- 统一编排的保护转发地址
|
|
|
\param ppBaoHuDB -- 存放保护数据指针的指针
|
|
|
\retval -- 返回该装置保护数据组数
|
|
|
*/
|
|
|
int Buban104GetBaohuDataBase(int commid, int iProvAddr, GROUPDEF **ppBaoHuDB);
|
|
|
/////////////////////////通用函数接口结束///////////////////////////////
|
|
|
|
|
|
/////////////////////////buban104公共函数接口///////////////////////////
|
|
|
//指令缓冲区初始化
|
|
|
void InitBuban104CommandBuffer(int commid);
|
|
|
//关闭socket通讯
|
|
|
void Buban104CloseSocket(u_32 commid);
|
|
|
/////////////////////////buban104公共函数接口结束///////////////////////
|
|
|
|
|
|
/////////////////////////以下为通用函数支持接口/////////////////////////
|
|
|
void Buban104ProvMakeYkYtCommand(int commid, u_char *buf, int len);
|
|
|
/////////////////////////通用函数支持接口结束///////////////////////////
|
|
|
|
|
|
///////////////////////////以下为指令生成函数///////////////////////////
|
|
|
//生成 Buban104 命令?
|
|
|
void MakeBuban104Command(u_32 commid, u_char cmdidx);
|
|
|
//生成遥控遥调指令
|
|
|
void MakeBuBan104YkYtCommand(u_32 commid, u_char *buf, int len);
|
|
|
///////////////////////////指令生成函数结束/////////////////////////////
|
|
|
|
|
|
/////////////////////以下为POLLING规约常规函数接口//////////////////////
|
|
|
void Buban104FindNextCmd(int commid);
|
|
|
void Buban104FindNextProvCmd(int commid);
|
|
|
void Buban104SendCmdFormPollCmdBuf(int commid);
|
|
|
//////////////////////POLLING规约常规函数接口结束///////////////////////
|
|
|
|
|
|
///////////////////////以下为规约处理函数接口///////////////////////////
|
|
|
//======================以下为主站数据处理============================
|
|
|
void Buban104ProcessData(u_32 commid, BUBAN104PORTPARAM *psPortParam, BOOL bProcess);
|
|
|
//处理数据格式I
|
|
|
void Buban104FormatI(RTUMSG *rtumsg);
|
|
|
//处理数据格式U
|
|
|
void Buban104FormatU(RTUMSG *rtumsg);
|
|
|
|
|
|
//Buban104 初始化数据处理
|
|
|
void Buban104InitdataProecss(RTUMSG * rtumsg);
|
|
|
//电度结束帧
|
|
|
void Buban104PidataEnd(RTUMSG * rtumsg);
|
|
|
//设定确认
|
|
|
void Buban104SetAck(RTUMSG *rtumsg);
|
|
|
//Buban104 遥控遥调返校程序
|
|
|
void Buban104YkYtAck(RTUMSG * rtumsg);
|
|
|
//Buban104 对时程序
|
|
|
void Buban104SynTime(RTUMSG * rtumsg);
|
|
|
|
|
|
// 子站主动传送遥信变位帧
|
|
|
void Buban104AutoSendDiProcess(RTUMSG *rtumsg);
|
|
|
|
|
|
void Buban104AiWithPzDataProcess(RTUMSG *, int);
|
|
|
void Buban104AllAiDataProcess(RTUMSG *rtumsg);
|
|
|
void Buban104AllFloatAiDataProcess(RTUMSG *rtumsg);
|
|
|
void Buban104DiDataProcess(RTUMSG *rtumsg, int);
|
|
|
void Buban104SoeDataProcess(RTUMSG *rtumsg, int);
|
|
|
void Buban104PiDataProcess(RTUMSG * rtumsg);
|
|
|
void Buban104PiWithTimeDataProcess(RTUMSG *rtumsg);
|
|
|
|
|
|
//保护数据处理
|
|
|
void Buban104BaoHuDataProcess(RTUMSG *rtumsg);
|
|
|
void Buban104DefaultBaoHuDataProcess(RTUMSG *rtumsg);
|
|
|
|
|
|
// 新增函数,含有 7 BYTE 的时标
|
|
|
void Buban104SoeDataProcessWithCP56Time2a(RTUMSG *rtumsg, int flag);
|
|
|
void Buban104AiWithDataProcessWithM_ME_TD_1(RTUMSG * rtumsg);
|
|
|
void Buban104AiWithDataProcessWithM_ME_TE_1(RTUMSG * rtumsg);
|
|
|
void Buban104AiWithDataProcessWithM_ME_TF_1(RTUMSG * rtumsg);
|
|
|
void Buban104PiWithTimeDataProcessWithM_IT_TB_1(RTUMSG *rtumsg);
|
|
|
|
|
|
//======================以下为子站数据处理============================
|
|
|
void ProvBuban104dataProcess(int commid, RTUMSG *rtumsg);
|
|
|
void ProvBuban104FormatI(int commid, RTUMSG *rtumsg);
|
|
|
void ProvBuban104FormatU(int commid, RTUMSG *rtumsg);
|
|
|
void ProvBuban104FormatS(int commid, RTUMSG *rtumsg);
|
|
|
void ProvBuban104SendAllData(int commid, RTUMSG *rtumsg);
|
|
|
void ProvBuban104SendPIData(int commid, RTUMSG *rtumsg);
|
|
|
void ProvBuban104ProcessTime(int commid, RTUMSG *rtumsg);
|
|
|
//iGroupNo=0为响应总召唤
|
|
|
void ProvBuban104SendPI(int commid, RTUMSG *rtumsg, int iGroupNo);
|
|
|
void ProvBuban104SendAI(int commid, RTUMSG *rtumsg, int iGroupNo);
|
|
|
void ProvBuban104SendDI(int commid, RTUMSG *rtumsg, int iGroupNo);
|
|
|
void ProvBuban104SendSoe(int commid);
|
|
|
void ProvBuban104YkYtData(int commid, RTUMSG *rtumsg);
|
|
|
void MakeProvBuban104YkYtAckMsg(int commid, int pnt, int op, int step);
|
|
|
|
|
|
void ProvBuban104SendClass1(int commid);
|
|
|
void ProvBuban104SendClass2(int commid);
|
|
|
void ProvMakeBuban104Command(int commid, u_char cmdidx);
|
|
|
|
|
|
void ProvBuban104SendAIwithFloat(int commid, RTUMSG *rtumsg, int iGroupNo);
|
|
|
void ProvBuban104SendClass2withFloat(int commid);
|
|
|
/////////////////////////规约处理函数接口结束///////////////////////////
|
|
|
#endif // !defined(_BUBAN104_H_200509141152__INCLUDED_)
|