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;

可以从命令行复制符号 ,在命令行中输入$\LaTeX$ 命令\notin 并按制表符键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]:

结论

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

示例中使用的块