2017-01-24 48 views
2

Я реализую систему управления воротами IoT, которая получает пакеты, которые имеют два параметра, значение и временную метку. Все сообщения получаются и обрабатываются в моей системе в строгом хронологическом порядке из-за системы брокерских сообщений.Теоретическая модель для алгоритма на основе временной метки IoT

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

Отметка находится в левом столбце, значение является правильным

  1. ПОЛУЧАЛ СООБЩЕНИЕ

    2017-01-24 10:00:00 - ИСТИНА (1) (это означает, что затвор открыт, файл журнала записывает, что ворота был открыт в этой временной метки)

  2. ТАЙМЕР

    2017-01-24 10:00:30 - После того, как 30 (configurabl постоянное значение), секундомер указывает, что ворота должны быть закрыты. Это заставляет программу записывать в журнал, который между 2017-01-24 10:00:00 - 2017-01-24 10:00:30 ворота были открыты в течение 30 секунд.

  3. ПОЛУЧАЛ СООБЩЕНИЕ

    2017-01-24 10:00:15 - значение FALSE (0) (это означает, что ворота на самом деле был закрыт в 10:00:15, это означает, что программа должна отрегулировать журнал поэтому запись открытия было 2017-01-24 10:00:00. - 2017-01-24 10:00:15

Другой проблемой является также, например, что в более сложных ситуациях, задержка должна поддерживаться, например: ворота должны ТОЛЬКО регистрироваться открытыми, если в течение 10 секунд был установлен твердотельный ИСТИННЫЙ сигнал. Это означает, что когда появляется истинный сигнал, сначала запись записывается в журнал, временно говорящий у ворот открыт, чтобы показать работнику, что это произошло, во-вторых, таймер запускается, считая до 10. Когда таймер достигает 10 секунд, система пишет, что ворота были открыты 10 секунд. Однако через 5 минут после (из-за, например, сбоя сети) система получает сообщение о том, что затвор фактически получил сигнал FALSE через 5 секунд после появления сигнала TRUE, что означает, что запись OPEN не должна записываться вообще (поскольку это было только 5 секунд между сигналом TRUE и FALSE). Обратите внимание, что между этими двумя сообщениями не было отправлено никаких других сообщений, поэтому они все еще находятся в строгом соответствии с хронологическим порядком. Это важный фактор, который всегда принимается здесь.

Я уверен, что существуют другие алгоритмы, шаблоны и теоретические модели для таких проблем при обработке временных событий и откатов из-за ошибок «наилучшей информации». Но я не знаю, что они называются и где их найти, можете ли вы направить меня к соответствующим теориям, примерам и тем, что нужно искать, чтобы иметь прочную модель для этого типа проблем и, в свою очередь, сделать хорошую реализацию. Из-за множества правил (ворота могут также посылать комбинацию импульсов и true/false, где комбинация используется для определения статуса) и откаты, реализация очень легко заканчивается большим блобом с if-утверждениями, невозможными для поддержания, расширения и поддержки.

ответ

1

Приобретение событий похоже на путь сюда. Вместо сохранения авторитетного состояния системы, храните события и кешируйте состояние. Когда вам нужно переписать историю, повторите события с момента изменения.Я не буду пытаться воспроизвести множество статей, написанных здесь о источниках событий.

+0

Благодарим за ответ. Это то, что я искал. Вы случайно не знаете какой-либо пример или статью, близкую к этому типу? Статьи источников событий, которые я видел, очень общие. –

+0

@ Erik888 Не знаю, извините. –

 Смежные вопросы

  • Нет связанных вопросов^_^