Формирование отказа по напряжению¶
Данная демонстрация посвящена инструменту формирования логики конечных автоматов при помощи блока Chart. В этом блоке есть своя особая библиотека элементов, содержащая состояния, узлы и переходы. Она показана на рисунке ниже.
Для демонстрации возможностей инструмента мы рассмотрим систему формирования отказов по напряжению. В этом примере мы сравниваем напряжение на обмотках датчика (U+, U-) с пороговым значением (THRESHOLD). Когда напряжение меньше, формируем отказ. Верхний уровень системы показан на рисунке ниже.
Если рассматривать логику самого конечного автомата, то обратите внимание, что есть два напряжения обмоток. Когда какое-то напряжение становится меньше порогового значения THRESHOLD, запускается процесс подтверждения отказа (состояния CNTR_START, CNTR_STOP). Этот процесс длится 1 сек (1 сек – 0.01 сек – шаг расчета). Если по окончании процесса определения отказа отказное состояние сохраняется, то мы подтверждаем отказ и переходим в состояние FAULT. На рисунке ниже показана логика, реализованная в Chart.
Теперь запустим саму модель и проанализируем результаты выполнения её.
# Подключение вспомогательной функции запуска модели.
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("Voltage_failure_generation",@__DIR__) # Запуск модели.
Как мы видим по результату моделирования, было сохранено три сигнала:
- 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"])
Как мы видим из графика, наша система корректно отработала при появлении состояния ошибки.
Вывод¶
В данном примере мы разобрали возможности использования Chart в Engee на примере системы формирования отказа по напряжению.