Engee 文档
Notebook

逻辑电路的手动切换

在这个例子中,我们将展示如何通过使用开关手动设置必要的输入信号来测试或演示逻辑电路的操作。

模型描述

此模型由单个块类型组成 Logic,其输入提供由手动开关设置的逻辑信号-类型的块 Manual Switch.

image.png

通过重新排列输入开关,我们可以设置任何可接受的输入信号组合,并研究电路在不同条件下的操作。

模型执行

可以通过运行模型并打开图表面板来研究输出信号。 在那里,输入和输出数据以表格的形式收集。

image.png

自动验证所有组合

我们将组织该模型的自动化测试,以查看所有输入组合。 与此同时,我们的目标不会改变模型拓扑中的任何内容,而只是以编程方式重新排列开关。

上传模型(如有必要):

In [ ]:
# Если модель еще не открыта, загрузим из файла
if "switching_logic"  [m.name for m in engee.get_all_models()] engee.load( "$(@__DIR__)/switching_logic.engee"); end;

符号 您可以从命令行复制它,在那里您可以键入 命令 \notin 并按tab键 Tab.

要找出哪些参数可以通过编程方式进行切换,请调用命令 get_param.

In [ ]:
engee.get_param( "switching_logic/Manual Switch" )
Out[0]:
BlockParameters(
  PortValue => true,
)

现在我们将为所有输入条件组合组织一个循环并构建一个表:

In [ ]:
X1 = [ false, true ]
X2 = [ false, true ]
Y = zeros( length(X1), length(X2) )

for (i,x1) in enumerate(X1) 
    for (j,x2) in enumerate(X2)
        # Переставим переключатели в нужное состояние
        engee.set_param!( "switching_logic/Manual Switch", "PortValue"=>x1 )
        engee.set_param!( "switching_logic/Manual Switch-1", "PortValue"=>x2 )
        # Запустим модель с новыми параметрами
        data = engee.run( "switching_logic" )
        # Поместим результаты в матрицу
        Y[i,j] = data["Y"].value[end]
    end
end

应该记住,使用软件控制对模型的每个单独访问都需要大约一秒钟,而不管模型本身的执行时间如何。 出于这个原因,最好在一组不太大的组合中对参数进行排序。

让我们输出真值表:

In [ ]:
gr()
heatmap( X1, X2, Y, xticks=([0,1],["ложь", "истина"]), yticks=([0,1],["ложь", "истина"]) )
Out[0]:

让我们以不同的格式构建另一个图表。:

In [ ]:
gr()
scatter(  repeat(X1, inner=2), repeat(X2, outer=2), zcolor=Y[:],
          markersize=40, xlimits=(-1.5,2.5), ylimits=(-0.5,1.5), size=(500,280),
          xticks=([0,1],["ложь", "истина"]), yticks=([0,1],["ложь", "истина"]),
          label=false )
Out[0]:

结论

该示例演示了如何通过手动切换输入信号的值来轻松模拟逻辑电路,然后绘制所有输入组合的图形。

示例中使用的块