Система дублирующих датчиков
В данном демо-примере рассмотрим, как создать модель системы дублирующих датчиков с помощью блока Chart библиотеки конечных автоматов.
Дублирующие датчики повышают надежность системы за счет резервирования: при отказе одного сенсора его заменяют другие, что критично в авиации, промышленности и робототехнике. Моделирование такой системы позволяет проанализировать отказоустойчивость, оптимизировать алгоритмы обработки данных и определить минимально необходимое количество датчиков для стабильной работы. Использование дублирующих датчиков снижает риск аварий и повышает точность измерений в ответственных системах.
Описание модели
Модель содержит два блока Chart, которые моделируют обнаружение неисправности датчика и логику формирования выходных данных с датчиков. Входными сигналами являются: данные с датчиков и сигналы о сбоях.

Обнаружение неисправности
Датчики моделируются с помощью двух параллельных состояний в блоке Chart.
Алгоритм обнаружения неисправности разберем на примере датчика №1. По у молчанию датчик является активными. Однако, если входной сигнал sensor1Failure
больше 0, датчик становится неактивным. Датчик №1 остается неактивным на протяжении 5 шагов моделирования. Но на каждом шаге происходит тестирование входного сигнала sensor1Failure
. Если сигнал будет по-прежнему нулевым, отсчет 5 шагов начнется заново. В этот период времени выходные данные формируются только из данных полученных от датчика №2, если он активен.

Логика формирования фактического выходного сигнала
Формирование выходного сигнала реализовано с помощью графа-переходов. И определяется использованием следующей логики.
Фактическое значение выходного сигнала получается путем усреднения двух сигналов с датчиков для того, чтобы уменьшить шум измерений. Если оба датчика активны, на выходе получаем среднее значение суммы sensor1 и sensor2. Если один из датчиков не активен, то есть данные с него не идут, на выход идут данные со второго датчика. Если оба датчика неактивны, то на выходе будет 0.

Симуляция модели
Запустите скрипт с определением параметров системы.
engee.script.run("/user/start/examples/state_machines/dual_sensors/_set_params.ngscript");
function start_model_engee()
try
engee.close("dual_sensors", force=true) # закрытие модели
catch err # в случае, если нет модели, которую нужно закрыть и engee.close() не выполняется, то будет выполнена её загрузка после catch
m = engee.load("$(@__DIR__)/dual_sensors.engee") # загрузка модели
end;
try
engee.run(m) # запуск модели
catch err # в случае, если модель не загружена и engee.run() не выполняется, то будут выполнены две нижние строки после catch
m = engee.load("$(@__DIR__)/dual_sensors.engee") # загрузка модели
engee.run(m) # запуск модели
end
end
Загрузите и запустите модель, чтобы получить данные о моделировании из переменной simout
.
start_model_engee();
result = collect( simout )
Постройте графики данных с датчика №1 и датчика №2.
plot(
plot(result[3].time, result[3].value, lab = "Данные с датчика №1"),
plot(result[4].time, result[4].value, lab = "Данные с датчика №2", c = "red"),
layout = (1,2)
)
Отобразим сигналы о сбоях датчиков.
plot(result[2].time, [result[2].value result[1].value], lab = ["Сбой датчика №1" "Сбой датчика №2"])
Результирующий сигнал измерений двух датчиков.
plot(result[5].time, result[5].value, lab = "Данные с датчиков")
Заключение
В результате мы получили график измерения некого сигнала. Отдельные сигналы с первого и второго датчиков имеют пропуски значений из-за сбоев в работе датчиков. Результирующее значение измеренного сигнала имеет одно нулевое значение примерно на 7 секунде. Это обусловлено тем, что в этот момент времени оба датчика оказались неактивными.