测试COMTRADE文件的远程保护
模型描述
此示例显示通过从COMTRADE文件读取波形来测试远程保护算法。 COMTRADE文件是在电力系统模型中预先生成的,其中对各种短路(短路)进行建模。
COMTRADE文件生成
为了产生电流和电压波形,使用具有双向电源和双电路架空线(overhead line)的电力系统模型,其中第一电路分为两部分:L1_1和L1_2。 它们的长度因变量而异 L1_1 和 L1_2 因此,点KZK2沿着架空线相对于电力系统移动。 在C2和C1电力系统的总线上也分别存在短路点K1和K3。 所有短路都是三相的。 短路发生的时间是通过设置参数曝光时间在块c1,c2,c3连接到短路块的控制端口来改变的。 短路单元的响应时间设置为0.5秒,并且对于其关闭—10秒。 由于仿真时间为1.5秒,响应时间为10秒,短路单元将没有时间接通。
在架空线L1_1的开头,测量电流,在电力系统c1的母线上测量电压。 测量的信号被传送到[To COMTRADE]块(https://engee.com/helpcenter/stable/ru/fmod-electrical-sinks/to-comtrade.html )。 有关使用To COMTRADE块的更多信息,请参阅示例在comtrade中的power系统中记录事件файл。DZ的预定安装位置是架空线的开头L1_1。
电力系统的方案:
模型的外观:
模型参数:
电力系统参数1:
直接序列的有源电阻为0.393欧姆
直接序列的感应电阻为4,276欧姆。
零序的有源电阻为0.494欧姆
零序的感应电阻为4.02欧姆
等效EMF–230kV
电动势相位角为10°。
电力系统参数2:
直接序列的有源电阻为4.85欧姆
直接序列的感应电阻为25.604欧姆
零序的有源电阻为10.607欧姆
零序的感应电阻为53.347欧姆。
等效电动势为220kV
电动势相位角为0°。
架空线路参数:
长度100公里
直线的电阻率为0.0958+j0.4038欧姆/公里
零序线的电阻率为0.3471+j1.2432欧姆/公里
直接序列的比容量为8,411nF/km
零序的比容量为6.745nF/km。
在模型中进行以下实验:
- C2动力系统的轮胎上的点K1处短路。 预计只会触发2个DZ阶段。
- 在架空线路1上的K2点短路,距离C1电力系统的母线10公里。 预计将触发DZ的第一和第二阶段。
- 在架空线路1上的K2点短路,距离C1电力系统的母线50公里。 预计将触发DZ的第一和第二阶段。
- 在架空线路1上的K2点短路,距离C1电力系统的母线90公里。 预计只触发2个DZ阶段。
- C1电力系统总线上K3点短路。 DZ步骤预计会失败。
设置表显示每种体验的各种参数,包括短路块的响应时间和保护步骤的预期行为。:
/经验数\参数/1号短路的操作时间、s/2号短路的操作时间、s/3号短路的操作时间、s/线长L1_1、km/第1级DZ的操作|第2级DZ的操作|
|:---|:---|:---|:---|:---|:---|:---|
|1|0,5|10|10|50|0|1|
|2|10|0,5|10|25|1|1|
|3|10|0,5|10|50|1|1|
|4|10|0,5|10|90|0|1|
|5|10|10|0,5|50|0|0|
COMTRADE文件被写入data文件夹,该文件夹是使用此脚本在文件夹中创建的。 COMTRADE文件生成:
# 导入所需模块
using Plots, DataFrames
model_name = "电力系统";
model_name in [m.name for m in engee.get_all_models()] ? engee.open(model_name) : engee.load( "$(@__DIR__)/$(model_name).engee");
# 改变实验条件的数据
exp_data = DataFrame(
KZ1 = [0.5, 10, 10, 10, 10], # KZ No.1的发生时间
KZ2 = [10, 0.5, 0.5, 0.5, 10], # KZ2号发生时间
KZ3 = [10, 10, 10, 10, 0.5], # KZ2号发生时间
L1 = [50, 25, 50, 90, 50], # 1链的左侧部分的长度为
result1 = [0, 1, 1, 0, 0], # 第一阶段运作的预期结果
result2 = [1, 1, 1, 1, 0] # 第2阶段触发器的预期结果
)
# 此脚本的路径
current_path = @__DIR__
# 创建一个数据文件夹如果没有,COMTRADE文件将写在那里。
if !isdir("$(current_path)/data")
mkdir("$(current_path)/data")
end
# 生成COMTRADE文件的循环
for i in 1:nrow(exp_data)
# 架空线路长度1_1
L1_1 = exp_data[i, :L1]
# 架空线路长度1_2
L1_2 = 100 .- exp_data[i, :L1]
# 转移到KZ No.1的发生时间的块"c1"
engee.set_param!(model_name*"/c1", "Time" => exp_data[i, :KZ1]);
# 转移到KZ No.2的发生时间的块"c2"
engee.set_param!(model_name*"/c2", "Time" => exp_data[i, :KZ2]);
# 转移到KZ3号发生时间的"c3"区块
engee.set_param!(model_name*"/c3", "Time" => exp_data[i, :KZ3]);
# 将Exp_X格式的COMTRADE文件名称转移到"COMTRADE"块
engee.set_param!(model_name*"/COMTRADE", "files_path" => "\"$(current_path)/data/Exp_$i\"");
# 启动模型
engee.run(model_name);
end
检查远程保护算法
本例中远程保护算法的验证是使用以COMTRADE格式记录的电流和电压波形执行的。 为此,在电力系统的单独模型中预先建模了电网和短路的应急模式。 Энергосистема.engee,之后瞬态被记录为COMTRADE文件。 接收到的文件用作在单独模型中实现的远程保护模型的输入效果。 ДЗ.engee.
使用COMTRADE文件允许您将预先形成的波形馈送到算法的输入,从而在实际操作中再现保护的操作条件。 在这种情况下,作为仿真结果获得的示波图和真实瞬态示波图都可用于验证。
此外,使用COMTRADE文件可确保验证的可重复性和清晰度。 同一组波形可反复用于验证算法,分析各种类型的短路、瞬态电阻和损坏位置的保护操作的灵敏度和正确性。 这种方法允许您专注于评估保护算法的逻辑。
来自[open repository]的修改模块用于读取COMTRADE文件(https://github.com/dgm1971/COMTRADE.jl?tab=readme-ov-file )。 这个模块只有一个功能。 read_comtrade. 它有一个输入参数-文件的绝对或相对路径。 例如 "/user/data/Exp_1" 或 "Exp_1". 函数返回类型的对象 ComtradeData 与字段:
filename::String-没有扩展的halyards名称;cfg::ComtradeCfg-配置数据;dat::DataFrame-一个包含数据的表,其中每个通道都是一列;hdr::String-内容.hdr文件;inf::String-内容.inf的文件。
该模块支持1991年、1999年和2013年标准。 扩张 .cff 2013年推出,不支持。
从对象 ComtradeData 将电流电压波形数据提取为变量 V 和 I 像 Matrix,其中第一列包含时间,在2-4列中包含信号。 变量通过块[从工作区]加载到模型中(https://engee.com/helpcenter/stable/ru-en/base-lib-sources/from-workspace.html )。 模型的外观:
根据[110kv输电线路远程保护设置的计算和选择方法指南]计算DZ参数和выше](https://www.so-ups.ru/fileadmin/files/laws/standards/method_distanc_protect_power_lines_281123.pdf):
-
第一阶段DZ的响应电阻从被保护线路的总电阻调整(第4.3.2.3段):
$ $ 𝑍_{ust\1st}=k_{otc}𝑍_l=0.75/·|{1L\UD}·𝐿|=0.75·|0.0958+ j0.4038/·100=31.126\欧姆
哪里
$k_{\text{отс}}$ -调整系数;
$\alpha$ –考虑到dz阶段区域减少的系数,与之达成协议;
$k_{\text{т}}$ -电流分配系数等于保护中的初级电流与保护中的初级电流之比,在级联模式下匹配。 基于模型中的计算结果 $k_{\text{т}}=I_1/I_{10}=753.14/1801.49=0.418$;
$\text{𝑍}^{I}_{\text{уст}10}$ –第一保护级10对相对相短路的致动电阻;
$\text{𝑑}$ -是根据(4.5)确定的情况下的圆形特性。
-
电阻继电器最大灵敏度的角度取等于线的角度(第3.2段)。):
$ $\varphi_{mh}=\angle angle_{1l\ud}=\angle(0.0958+j0.4038)=76.654°
-
\text{第二阶段的响应时间(表达式}4.19\text{)}:
使用记录的COMTRADE文件检查远程保护算法:
# 首次启动时连接COMTRADE读取器模块
if !isdefined(Main, :COMTRADE)
include("$(@__DIR__)/COMTRADE.jl")
end
# 添加COMTRADE模块
using .COMTRADE, Plots
# 具有脚本路径的变量
current_path = @__DIR__
# 使用DZ算法的模型名称
model_rz = "DZ";
model_rz in [m.name for m in engee.get_all_models()] ? engee.open(model_rz) : engee.load( "$(@__DIR__)/$(model_rz).engee");
# 获取数据文件夹中的文件列表
files = readdir("$(current_path)/data")
# 获取没有扩展名的唯一文件名
unique_names = unique(map(f -> splitext(f)[1], files))
# 初始化模拟结果的矩阵
results = Matrix{Any}(undef, length(unique_names), 2)
for i in 1:length(unique_names)
# 阅读COMTRADE文件
data = read_comtrade("$(@__DIR__)/data/$(unique_names[i])")
# 将数据从COMTRADE传输到变量
global V = Matrix(data.dat[:, [:time, :Va, :Vb, :Vc]])
global I = Matrix(data.dat[:, [:time, :Ia, :Ib, :Ic]])
# 启动模型
result = engee.run(model_rz);
# 保存DZ步骤的操作信号
Сраб1 = result["高级1"].value;
Сраб2 = result["高级二"].value
结果[i,1]=Crab1
结果[i,2]=Crab2
end
测试结果的处理,比较实际结果和预期的保护措施:
# 检查信号Crab1和Crab2中是否存在逻辑单元
With1_bool=[any(results[i,1])for i in1:size(results)[1]]
With2_bool=[any(results[i,2])for i in1:size(results)[1]]
# 实际触发器与预期结果的比较
With1_vector=With Work1_bool。==exp_data[:,:result1]
与Lab2_vector=与Work2_bool。==exp_data[:,:result2]
# 检查实际结果是否与预期结果匹配
if all(With1_vector)&all(With Lab2_vector)
println("所有实验都成功了")
else
如果有的话(。!与Lab1_vector)
print("第一阶段在实验中工作不正确。:\n")
println(findall(!,With1_vector))
end
如果有的话(。!用Crab2_vector)
print("第二阶段在实验中工作不正确。:\n")
println(findall(!,With2_vector))
end
end
结论
此示例显示使用COMTRADE文件测试远程保护算法。 COMTRADE文件是在发生各种短路的电力系统模型中预先生成的。 COMTRADE使用修改后的模块读取文件,以便与COMTRADE一起使用。