Ручное переключение логических схем¶
В этом примере мы покажем, как проверить или продемонстрировать работу логической схемы, вручную выставляя нужные входные сигналы при помощи переключателей.
Описание модели¶
Данная модель состоит из одного блока типа Logic
, на вход которому подаются логические сигналы, выставленные ручными переключателями – блоками типа Manual Switch
.
Переставляя входные переключатели мы можем выставить любую допустимую комбинацию входных сигналов и изучить работу схемы в разных условиях.
Выполнение модели¶
Выходной сигнал можно изучить, запустив модель и открыв панель графиков. Там входные и выходные данные собраны в форме таблицы.
Автоматическая проверка всех комбинаций¶
Организуем автоматизированное тестирование этой модели чтобы увидеть все комбинации входа. При этом нашей целью будет ничего не менять в топологии модели, а только переставлять переключатели программным способом.
Загрузим модель (если необходимо):
# Если модель еще не открыта, загрузим из файла
if "switching_logic" ∉ [m.name for m in engee.get_all_models()] engee.load( "$(@__DIR__)/switching_logic.engee"); end;
Символ ∉
можно скопировать из командной строки, где можно набрать $\LaTeX$ команду \notin
и нажать клавишу табуляции Tab
.
Чтобы узнать, какие параметры можно переключить программным способом, вызовем команду get_param
.
engee.get_param( "switching_logic/Manual Switch" )
Теперь организуем цикл по всем комбинациям входных условий и построим таблицу:
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
Стоит учитывать, что каждое отдельное обращение к модели при помощи программного управления занимает около секунды, независимо от времени выполнения самой модели. По этой причине перебор параметров лучше осуществлять в рамках не слишком большого набора комбинаций.
Выведем таблицу истинности:
gr()
heatmap( X1, X2, Y, xticks=([0,1],["ложь", "истина"]), yticks=([0,1],["ложь", "истина"]) )
И построим еще один график в другом формате:
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 )
Заключение¶
Пример показывает, как без особого труда моделировать логические схемы, вручную переключая значения входных сигналов, а затем построить график для всех входных комбинаций.