⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iec103appdata_xuji.h

📁 许继公司103规约源码
💻 H
字号:



//DL/T667-1999(neq IEC60870-5-103:1997)规约应用层头文件

#ifndef _IEC103_APPDATA_XUJI_H_
#define _IEC103_APPDATA_XUJI_H_

namespace IEC103Ptl_XUJI{
// 应用层兼容范围信息元素定义
// 实际通道(ACC)
enum ACC_Code 
{
	Global_acc = 0, 
	IL1_acc,
	IL2_acc, 
	IL3_acc,
	IN_acc, 
	UL1E_acc,
	UL2E_acc,
	UL3E_acc, 
	UEN_acc, 

	Num_acc,
};

typedef BYTE ACC;
// 兼容级别(COL)
enum COL_Code {
	NoGen_col = 2,
	Gen_col = 3,
};
typedef BYTE COL;
// 双命令(DCO)
enum DCO {
	Inv_dco0 = 0,
	Off_dco,
	On_dco,
	Inv_dco1,
};
// 双点信息(DPI)
enum DPI_Code {
	Inv_dpi0 = 0,
	Off_dpi,
	On_dpi, 
	Inv_dpi1,
};
// 单点信息
enum SPI_Code {
	Off_spi = 0,
	On_spi, 
};
typedef BYTE DPI;
typedef BYTE SPI;
typedef WORD FAN;// 故障序号
typedef WORD InfoNT; // 信息元素间隔
// 命令类型编码(TOO_Code)
enum TOO_Code {
	// 1-31: ASDU_24帧扰动数据传输命令
	SelFault_too = 1,		

	ReqData_too = 2,		
	HangData_too = 3,		

	ReqAcc_too = 8,
	HangAcc_too = 9,

	ReqYxbw_too = 16,
	HangYxbw_too = 17,

	ReqTable_too = 24, 

	// 32-63: ASDU_31扰动数据传输结束
	NmlEnd_too = 32,
	MainEnd_too= 33,
	SubEnd_too = 34,

	NmlAcc_too = 35,
	MainAcc_too = 36,
	SubAcc_too = 37,

	NmlYxbw_too = 38,
	MainYxbw_too = 39,
	SubYxbw_too = 40,
	
	// 64-95: ASDU_25扰动数据传输认可
	AfmTrn_too = 64,
	NegTrn_too = 65,

	AfmAcc_too = 66,
	NegAcc_too = 67,

	AfmYxbw_too = 68,
	NegYxbw_too = 69,
};

typedef BYTE TOO;
// 扰动值类型(TOV)
enum TOV_Code {
	Inv_tov = 0,	// 未用
	Inst_tov = 1,
};
typedef BYTE TOV;
// 通用分类数据描述(GDD)
enum GDD_Code {
	none_gdd = 0,	// 无数据
	OS8_gdd,		// ASCII8位码
	BS_gdd,			// 成组8位串
	UINT_gdd,		// 无符合整数
	INT_gdd,		//
	UFLOAT_gdd,		// 无符合浮点数
	FLOAT_gdd,		//
	R32_gdd,		// 短实数
	R64_gdd,		// 长实数
	DPI_gdd,		// 双点信息
	SPI_gdd,		// 单点信息
	DPI_ERR_gdd,	// 带瞬变和差错
	MEA_gdd,		// 品质描述被测量
	res0_gdd,
	TIME7_gdd,		// 7位字节时间
	GIN_gdd,		// 通用分类标识序号
	RET_gdd,		// 相对时间
	FUNINF_gdd,		// 功能类型和信息序号
	DPI48_gdd,		// 带时标的报文
	DPI80_gdd,		// 带相对时间、时标
	MEA96_gdd,		// 带相对时间、时标
	UIi_gdd,		// 外部文本序号
	GRC_gdd,		// 通用分类回答码
	STRUCT_gdd,		// 数据结构{(GDD,GID)}
	INDEX_gdd,		// 索引
	num_gdd,		//
};
// 描述类别(KOD)
enum Kod_Code {
	NoSpec_kod = 0,	// 无指定描述类别
	ActVal_kod,		// 实际值
	DefaultVal_kod,	// 缺省值
	RangeVal_kod,	// 量程
	res0_kod,		//
	Precision_kod,	// 精度
	Factor_kod,		// 因子
	Referenct_kod,	// 参比
	Enum_kod,		// 列表
	Dimension_kod,	// 量纲
	Desc_kod,		// 描述
	res1_kod,		//
	PassWord_kod,	// 口令
	RdOnly_kod,		// 只读
	WrOnly_kod,		// 只写
	res2_kod,		//
	res3_kod,		//
	res4_kod,		//
	res5_kod,		//

	FunInf_kod = 19,// 功能类型和信息序号
	Event_kod,		// 事件
	TxtArr_kod,		// 文本阵列
	ValArr_kod,		// 值阵列
	RelEty_kod,		// 相关联的条目
	num_kod,		//
};
typedef BYTE KOD;	// 描述类别
// 通用分类回答码(GRC)
enum GRC_Code {
	Afm_grc = 0,	// 认可
	InvGin_grc,		// 无效通用分类标识序号GIN
	NoData_grc,		// 不存在所请求的数据
	ReSend_grc,		// 数据不能用,过后再来一次
	ErrChg_grc,		// 改变设定时确认出错
	InvChg_grc,		// 改变设定时超出量程
	RagOvr_grc,		// 条目范围太大
	MoreOP_grc,		// 太多的命令
	RdOnly_grc,		// 条目是只读
	Password_grc,	// 设定受口令保护
	Local_grc,		// 当地设置在进行中
	Err_grc,	    // 带有上面所描述的错误
	Num_grc,
};

typedef BYTE GRC;	

// 带品质描述词的被测量(MEA)
struct MEA{
	union {
		WORD	mval:13,	// 带符号规一化定点数,最高位符合位,数据位占12位
				res:1,		// 备用位:未用(常为0)
				er:1,		// 差错位:0-有效,1-无效
				ov:1;		// 溢出位:0-无溢出,1-溢出
		WORD    wVal;
	}mea;
};
// 故障状态SOF
struct SOF{
	BYTE	res:4,		// 未用
			otev:1,		// 0-由启动/检出故障触发被记录的扰动数据
						// 1-由其他事件触发被记录的扰动数据
			test:1,		// 扰动数据记录模式:0-正常操作记录,1-测试模式记录
			tm:1,		// 扰动数据传输:0-等待传输,1-正在传输
			tp:1;		// 故障跳闸:0-未跳,1-跳闸
};
typedef WORD NFE;		// 第一信息元素序号
typedef BYTE NOC;		// 通道数目
typedef BYTE NOE;		// 通道中信息元素的数目
typedef WORD NOF;		// 电网故障序号
typedef BYTE NOT;		// 带标志的状态变位数目
typedef BYTE NDV;		// 关联扰动值得数目
typedef WORD RET;		// 相对时间
typedef float RFA;		// 参比因子
typedef float RPV;		// 额定一次值
typedef float RSV;		// 额定二次值
typedef BYTE RII;		// 返回信息标识符
typedef float SCL;		// 短路位置
typedef BYTE SCN;		// 扫描序号
typedef short SDV;		// 单个扰动值
typedef BYTE SIN;		// 附加信息
// 4字节时间(TIME_4)
const BYTE TIME4_LEN (4);
struct TIME_4{
	//WORD	wMillisecond;
	BYTE    byLowMs;
	BYTE    byHighMs;
	BYTE	inv:1,
			res1:1,
			Minutes:6;
	BYTE	ST:1,	// 夏时制
			res2:2,
			Hours:5;	
};
// 7字节时间(TIME_7)
struct TIME_7 {
	TIME_4	time;
		
	BYTE	week:3,
			bay:5;
	BYTE	res3:3,
			month:5;
	BYTE	res4:1,
			year:7;
};
typedef WORD TAP;		// 带标志的状态变位的位置
// 通用分类数据集数目(NGD)
struct NGD{
	BYTE	cont:1,	// 1-跟随相同RII的数据单元,0-未跟随
			count:1,// 具有相同返回信息标识符RII的计数器位(初始化位1)
			num:6;	// 通用分类数据集数目
};
// 描述元素数目(NDE)
struct NDE{
	BYTE	cont:1,	// 1-跟随相同RII和GIN的数据单元,0-未跟随
			count:1,// 具有相同返回信息标识符RII的计数器位
			num:6;	// 通用分类描述数目
};
// 通用分类标识序号(GIN)				 
struct GIN{
	BYTE	group;
	BYTE	entry;
};
// 通用分类数据描述(GDD)
struct GDD {
	BYTE	byDataTyp;
	BYTE	byDataSize;
	BYTE	cont:1,	// 0-未跟随数据元素,1-跟随数据具有相同的RII
			num:7;
};  
typedef BYTE NOG;	// 通用分类标识数目	
typedef BYTE* PGID;	// 通用分类标识数据指针
// ==================================================
// 应用层专用范围信息元素定义
// 带品质描述单点信息(SIQ)
struct SIQ{
	BYTE	iv:1,	// 0-有效, 1-无效
			nt:1,	// 0-非当前值, 1-当前值
			sb:1,	// 0-未取代, 1-取代
			bl:1,	// 0-未闭锁, 1-闭锁
			res:3,		
			spi:1;	// 0-OFF, 1-ON
};
// 带品质描述的双点信息(DIQ)
struct DIQ{
	BYTE	iv:1,	// 0-有效, 1-无效
			nt:1,	// 0-非当前值, 1-当前值
			sb:1,	// 0-未取代, 1-取代
			bl:1,	// 0-未闭锁, 1-闭锁
			res:2,		
			dpi:2;	// 0-不确定,1-OFF, 2-ON, 3-不确定
};
// 二进制计数器读数(CR)
const BYTE CR_LEN (5);
struct CR {
	long	lVal;
	union {
		BYTE	IV:1,	// 0-读数有效; 1-无效	
				CA:1,	// 0-上次读数后,计数器未被调整; 1-被调整
				CY:1,	// 0-累加期内无溢出; 1-有溢出
				SQ:5;	// 顺序号<0-31>
		BYTE    byVal;
	}sq;
};
// 状态和状态变化检出(SCD)
struct SCD {		 
	WORD	st;	// 当前状态
	WORD	cd;	// 状态变化检出
};
// 设定命令限定词(QOS)
struct QOC{
	BYTE	se:1,	// 0-执行; 1-选择
			ql:7;	// 0-缺省,其他-保留
};
typedef short SE;	// 设定值
// 控制断路器的双命令(DCC)
struct DCC{
	BYTE	se:1,	// 0-执行,1-撤销
			act:1,	// 0-命令有效,1-撤销
			qu:4,	// 0-被寻址的控制功能属性,
					// 1-短脉冲持续时间
					// 2-长脉冲持续时间
					// 3-持续输出
					// 4-不闭锁重合闸的跳闸命令
					// 其他-保留
			dcs:2;	// 0-Inv, 1-Off, 2-On, 3-Inv
};
// 升降命令(RCC)
struct RCC{
	BYTE	se:1,	// 0-执行,1-撤销
			act:1,	// 0-命令有效,1-撤销
			qu:4,	// 0-被寻址的控制功能属性,
					// 1-短脉冲持续时间
					// 2-长脉冲持续时间
					// 3-持续输出
			rcc:2;	// 0-不允许,1-降一步,2-升一步,3-急停
};
// 控制命令(CCC)
struct CCC{
	BYTE	se:1,	// 0-执行,1-撤销
			act:1,	// 0-命令有效,1-撤销
			qu:3,	// 0-无额外定义, 其他-没有定义
			ccs:3;	// 0-不允许,
					// 1-同期设备的同期工作方式
					// 2-同期设备的检无压工作方式
					// 3-同期设备的不检定同期工作方式
					// 4-同期设备的合环(母线有电压)工作方式
};
// 带瞬变状态指示的值(VTI)
struct VTI{
	BYTE	T:1,	// 0-设备未在瞬变状态,1-在瞬变状态	
			val:7;
};
// 电能脉冲计数召唤命令限定词(QCC)
struct QCC{
	BYTE	frz:2,	// 0-无冻结或复位,
					// 1-冻结不复位,
					// 2-冻结且复位
					// 3-复位
			rqt:6;	// 0-无电能脉冲计数量被请求,5-电能脉冲总请求
};
// 品质描述(QDS)
struct QDS{
	BYTE	iv:1,	// 0-有效; 1-无效
			nt:1,	// 0-当前值; 1-非当前值
			sb:1,	// 0-未取代; 1-取代
			bl:1,	// 0-未闭锁; 1-闭锁
			res:3,	
			ov:1;	// 0-无溢出; 1-溢出
};
// 品质描述的被测值向量(VEC)
struct VEC{
	MEA	mr;	// 向量实部
	MEA mi;	// 向量虚部
}; 
// 带品质描述的被测谐波值(MEA_HR)
struct MEA_HR {
	BYTE	hrtm:4, // 谐波次数
			sq:4;	// 顺序-此谐波值为对应帧内测量值的循序号,0对应第1个
	MEA		mh;
};
// 带品质描述的被测谐波值向量(VEC_HR)
struct VEC_HR {
	DWORD	ovi:1,
			mvali:11,// 谐波虚数值
			ovr:1,	// 0-mvalr无溢出,1-mvalr溢出
			mvalr:11,// 谐波实数值
			er:1,	// 0-谐波有效,1-谐波无效
			hrtm:4, // 谐波次数
			sq:3;	// 顺序-此谐波值为对应帧内测量值的循序号,0对应第1个
};
// BCD
struct BCD{
	DWORD	iv:1,
			nt:1,
			sb:1,
			bl:1,
			res:4,
			bcd:24;
};

// 精确定时时钟
class CTickCnt 
{
public:
	// 构造、析构函数
	CTickCnt()
	{
		m_dwTickCnt = 0;
		m_dwWaitSpan = 1000;	// 默认间隔1S
	}

	virtual ~CTickCnt()	{}
	// 操作
	// 设置计时间隔
	void SetWaitSpan(DWORD dwSpan) {m_dwWaitSpan = dwSpan;}
	
	void Start(INT nCnt)	// 计时开始 
	{
		m_dwTickCnt = nCnt * 1000;
	}

	BOOL IsOverTime(INT nCnt)	// 计时结束返回TRUE,否则返回FALSE
	{
		DWORD dwCurTickCnt = nCnt * 1000;
		DWORD dwSpan = 0;

		if (m_dwTickCnt <= dwCurTickCnt)
			dwSpan = dwCurTickCnt - m_dwTickCnt;
		else 	// 记时溢出
			dwSpan = 0xffffffff  - m_dwTickCnt + dwCurTickCnt;
		
		return (dwSpan >= m_dwWaitSpan);
	}

private:
	DWORD	m_dwTickCnt;
	DWORD	m_dwWaitSpan;
};

}//end namespace
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -