Документация Engee
Notebook

Формирование отказа по напряжению

Открыть пример в Engee

Данная демонстрация посвящена инструменту формирования логики конечных автоматов при помощи блока Chart. В этом блоке есть своя особая библиотека элементов, содержащая состояния, узлы и переходы. Она показана на рисунке ниже.

image.png

Для демонстрации возможностей инструмента мы рассмотрим систему формирования отказов по напряжению. В этом примере мы сравниваем напряжение на обмотках датчика (U+, U-) с пороговым значением (THRESHOLD). Когда напряжение меньше, формируем отказ. Верхний уровень системы показан на рисунке ниже.

image.png

Если рассматривать логику самого конечного автомата, то обратите внимание, что есть два напряжения обмоток. Когда какое-то напряжение становится меньше порогового значения THRESHOLD, запускается процесс подтверждения отказа (состояния CNTR_START, CNTR_STOP). Этот процесс длится 1 сек (1 сек – 0.01 сек – шаг расчета). Если по окончании процесса определения отказа отказное состояние сохраняется, то мы подтверждаем отказ и переходим в состояние FAULT. На рисунке ниже показана логика, реализованная в Chart.

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 = validity – признак валидности сигналов,
  • 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 [ ]:
using Plots
plot(v.time, [v.value, check_flag.value, res.value], layout = (3,1), title=["v" "check_flag" "res"])
Out[0]:

Как мы видим из графика, наша система корректно отработала при появлении состояния ошибки.

Вывод

В данном примере мы разобрали возможности использования Chart в Engee на примере системы формирования отказа по напряжению.

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