Документация 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]:

Заключение

Пример показывает, как без особого труда моделировать логические схемы, вручную переключая значения входных сигналов, а затем построить график для всех входных комбинаций.

Блоки, использованные в примере