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

📄 iec103appdata_sf.h

📁 四方公司103规约
💻 H
字号:



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

#ifndef _IEC103_APPDATA_SF_H_
#define _IEC103_APPDATA_SF_H_

namespace IEC103Ptl_SF
{
	// 应用层兼容范围信息元素定义
	// 实际通道(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 + -