Система резервирования датчиков

Автор
avatar-daryadarya
Notebook

Система дублирующих датчиков

В данном демо-примере рассмотрим, как создать модель системы дублирующих датчиков с помощью блока Chart библиотеки конечных автоматов.

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

Описание модели

Модель содержит два блока Chart, которые моделируют обнаружение неисправности датчика и логику формирования выходных данных с датчиков. Входными сигналами являются: данные с датчиков и сигналы о сбоях.

sensors_07_07_25_20_39_02.png

Обнаружение неисправности

Датчики моделируются с помощью двух параллельных состояний в блоке Chart.

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

image.png

Логика формирования фактического выходного сигнала

Формирование выходного сигнала реализовано с помощью графа-переходов. И определяется использованием следующей логики.

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

image.png

Симуляция модели

Запустите скрипт с определением параметров системы.

In [ ]:
engee.script.run("/user/start/examples/state_machines/dual_sensors/_set_params.ngscript");
In [ ]:
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
Out[0]:
start_model_engee (generic function with 1 method)

Загрузите и запустите модель, чтобы получить данные о моделировании из переменной simout.

In [ ]:
start_model_engee();
In [ ]:
result = collect( simout )
Out[0]:
5-element Vector{WorkspaceArray}:
 WorkspaceArray{Float64}("dual_sensors/s2_fail")
 WorkspaceArray{Float64}("dual_sensors/s1_fail")
 WorkspaceArray{Float64}("dual_sensors/sens1_data")
 WorkspaceArray{Float64}("dual_sensors/sens2_data")
 WorkspaceArray{Float64}("dual_sensors/out")

Постройте графики данных с датчика №1 и датчика №2.

In [ ]:
plot(
    plot(result[3].time, result[3].value, lab = "Данные с датчика №1"),
    plot(result[4].time, result[4].value, lab = "Данные с датчика №2", c = "red"),
    layout = (1,2)
)
Out[0]:

Отобразим сигналы о сбоях датчиков.

In [ ]:
plot(result[2].time, [result[2].value result[1].value], lab = ["Сбой датчика №1" "Сбой датчика №2"])
Out[0]:

Результирующий сигнал измерений двух датчиков.

In [ ]:
plot(result[5].time, result[5].value, lab = "Данные с датчиков")
Out[0]:

Заключение

В результате мы получили график измерения некого сигнала. Отдельные сигналы с первого и второго датчиков имеют пропуски значений из-за сбоев в работе датчиков. Результирующее значение измеренного сигнала имеет одно нулевое значение примерно на 7 секунде. Это обусловлено тем, что в этот момент времени оба датчика оказались неактивными.