📄 iec103appdata_sf.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 + -