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

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

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

image.png

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

image.png

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

image.png

Теперь запустим саму модель и проанализируем результаты выполнения её.

# Подключение вспомогательной функции запуска модели.
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
run_model (generic function with 1 method)
run_model("Voltage_failure_generation",@__DIR__) # Запуск модели.
Building...
Progress 100%
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 – признак того, что одно из напряжений стало меньше порогового.

Построим графики этих сигналов.

# Считывание из 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);
using Plots
plot(v.time, [v.value, check_flag.value, res.value], layout = (3,1), title=["v" "check_flag" "res"])

interactive-scripts/images/state_machines_Voltage_failure_generation/d883489d2856bfed4412b328c2ad187805824bfd

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

Вывод

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