"Аварийный" режим для реле

Добрый день!

Есть небольшое предложение в реализации “безлопастного режима”, а именно чтобы при потере сигнала от контроллера работа реле происходила согласно mapping матрице. Это позволит обрабатывать сценарии на контроллере не боясь, что при выходе его из строя потеряться возможность хотя-бы простого управления.

Добрый день.
Да, такое уже обсуждали. Отказались - из-за того что в таком случае поведение реле будет неожиданным.

А если при восстановлении связи забирать текущее состояния реле? Просто хотелось бы иметь возможность обрабатывать в сценарии долгие и короткие нажатия, не боясь оказаться совсем без какого-либо контроля.

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

Таким образом - вы пишите скрипт для работы на языке Rules, по нему строится экивалентный C код для каждой единицы оборудования обрабатываемого в Rules и загружается в эти единицы оборудования. Пока связь есть данный код не активен, при некотором таймауте код считывает состояние входов/выходов и берет управление.

По поводу функций - думаю нужно реализовать различные обработчики задержек, счетчики количества нажатий, возможно сделать в виде набора блоков - по которым будет создаваться шаблонный код как для Rules так и для единиц оборудования. Естественно для внешних переменных нужен будет алгоритм замещения.

нельзя забывать и про безопасность - нужно что-то вроде контроля версий и фоновая проверка загруженного кода - чтобы нельзя было тайком загрузить сторонний код чтобы при аварии связи обрушить систему неверной коммутацией узлов. так и возможность физического сброса модуля к заводским параметрам - на уровне загрузчика микроконтроллера(зажал кнопку при подаче питания и он затер все парметры заводскими)

И цена обычного реле вырастет кратно. А зачем? Ну тогда уж, если закладываться на крайне маловероятную возможность выхода из строя контроллера - иметь резервный, даже не контроллер а просто роутер на openwrt, например с USB2RS485 адаптером. Чтоб выполнить перенастройку модулей на локальное управление. Даже просто скриптом, заранее приготовленным.

вспомнил эту тему (про сохранение состояния реле при отключении) недавно
когда мне помогали реализовывать режим мигания через виртуальные устройства
реле у меня стояли отдельно - через шлюз
я этот блок часто включал-выключал
так вот, виртуальные устройства, которые мигают реле по таймеру, они сохраняют состояние (конечно контроллер не выключался в это время)
т.е. при включении блока реле, те на которых включено мигание - сразу начинают мигать
я тогда подумал, что это можно использовать для сохранение состояния реле при отключении
например:
создать виртуальное устройство для реле, которое “мигает” по таймеру, но не “вкл-выкл”, а “вкл-вкл”, тогда если пропадало питание на реле (но не контроллера), то оно при первом событии таймера включится
а сохранение состояния этих виртуальных устройств при выключении контроллера можно как-то программно регулировать (настройками в конфигурации - восстанавливать по умолчанию или спрашивать при включении или привязать восстановление к кнопке)

У реле есть настройка “восстанавливать состояние выходов при включении питания”.