AnyMath 文档
Notebook

电压故障产生

本演示致力于使用图表块形成有限自动机逻辑的工具。 该块有自己的特殊元素库,其中包含状态,节点和转换。 如下图所示。

image.png

为了演示该工具的功能,我们将考虑一个电压故障产生系统。
在本例中,我们将传感器绕组两端的电压(U+,U-)与阈值进行比较。 当电压较低时,我们形成故障。 系统的上层如下图所示。

image.png

如果我们考虑状态机本身的逻辑,那么请注意有两个绕组电压。 当某一电压变得小于阈值时,启动故障确认处理(CNTR_START、CNTR_STOP状态)。 这个过程持续1秒(1秒–0.01秒是计算步骤)。 如果在故障检测过程结束时,故障状况仍然存在,那么我们确认故障并切换到故障状态。 下图显示了在图表中实现的逻辑.

image.png

现在让我们运行模型本身并分析其执行的结果。

In [ ]:
# 启用辅助模型启动功能。
function run_model( name_model, path_to_folder )
    
    Path = path_to_folder * "/" * name_model * ".engee"
    
    if name_model in [m.name for m in engee.get_all_models()] # 检查将模型加载到内核的条件
        model = engee.open( name_model ) # 打开模型
        model_output = engee.run( model, verbose=true ); # 启动模型
    else
        model = engee.load( Path, force=true ) # 上传模型
        model_output = engee.run( model, verbose=true ); # 启动模型
        engee.close( name_model, force=true ); # 关闭模型
    end

    return model_output
end
Out[0]:
run_model (generic function with 1 method)
In [ ]:
run_model("Voltage_failure_generation",@__DIR__) # 启动模型。
Building...
Progress 100%
Out[0]:
Dict{String, DataFrames.DataFrame} with 3 entries:
  "v"                => 501×2 DataFrame…
  "Chart.check_flag" => 501×2 DataFrame…
  "res"              => 501×2 DataFrame

从仿真结果可以看出,保存了三个信号:
*v=有效性-信号有效性的标志,
*cf=check_flag-内部计数器变量,
*res-表示其中一个电压已小于阈值。

让我们绘制这些信号。

In [ ]:
# 从simout读取信号
v = simout["Voltage_failure_generation/v"];
v = collect(v);

check_flag = simout["Voltage_failure_generation/Chart.check_flag"];
check_flag = collect(check_flag);

res = simout["Voltage_failure_generation/res"];
res = collect(res);
In [ ]:
plot(v.time, [v.value, check_flag.value, res.value], layout = (3,1), title=["v" "check_flag" "res"])
Out[0]:

从图中我们可以看到,当出现错误条件时,我们的系统正常工作。

结论

在本例中,我们以电压故障发生系统为例,分析了在Engee中使用Chart的可能性。