avatarcommunity
Лонгриды3 дня назад

Мой симулятор релейной логики (уже в раннем доступе)

Клюзивно для Энтхаба!

Релейно-контактная схема (также называемая релейно-контакторной) - это электрическая схема, состоящая из реле (вместе с их контактами) и соединительных проводов. Реле - это электромеханическое устройство, которое замыкает или размыкает контакты при подаче на него напряжения. Другие виды реле, реагирующие на тепло, давление и т.д. опущены как ненужные. Теоретическая часть закончена!

Классическое малогабаритное реле
Классическое малогабаритное реле

Релейно-контактные схемы - это основа любой промышленной автоматики. Любая схема станка или технологической установки выполнена на этих скромных, но незаменимых элементах. После распространения программируемых промышленных контроллеров (ПЛК) реле так никуда и не делись. Программы для ПЛК в большинстве случаев пишутся на языке Ladder Diagramm и его разновидностях. Этот язык фактически имитирует релейную схему. Место физических реле и контактов - их программные аналоги, добавлены высокоуровневые блоки (арифметические, счетчики импульсов и т.д.). Язык LD завоевал свою популярность в основном из-за того, что он описывает работу технологического оборудования на наиболее естественном для этого языке. Только на LD можно просто и надёжно написать конструкцию, вроде “включить гидроклапан Y1, пока не сработал датчик S2, в случае нажатия  кнопки аварийной остановки - ОТКЛЮЧИТЬ ВСЕ ВЫХОДНЫЕ УСТРОЙСТВА”. На языке релейной логики можно легко реализовать логику защиты с доказанной корректностью. Достаточно разместить перед основным модулем стоповые кнопки последовательно. Таким образом, реле все ещё живы и прекрасно себя чувствуют. Так, насчет конца теоретической части я обманул.

Пример непростой релейной схемы
Пример непростой релейной схемы
Пример простой программы на LD
Пример простой программы на LD

Сталкиваясь с релейными схемами на работе, я никак не мог пройти мимо идеи создать их программную реализацию. Этот проект был заведомо лишен смысла, но меня очаровали простота и красота релейной логики. Из-за отсутствия опыта я не смог быстро добиться успеха с проектом. Прошло 10 лет… Теперь у меня появилось достаточно знаний, чтобы завершить его!

В качестве среды для разработки я изначально выбрал WinForms, но был быстро разочарован его ограниченными возможностями и сложностью отладки. В итоге я вернулся к хорошо знакомому мне Unity3d. Будучи разочарованным сложностью моего проекта пошаговой стратегии, я решил максимально упростить релейный симулятор (далее SLR - Simulateur de Logique de Relais), чтобы добиться минимально приемлемого результата. Добавление элементов на схему - перетаскиванием с панели. Возможности выделение элементов рамкой - нет (позже добавлено). Возможности изменения добавленного элемента - нет. Элементы - только базовые (контакты реле, входные кнопки, катушки реле). Схема принципиально однопроводная, т.е. источник сигнала является “плюсом”, а “минус” для реле не нужен. Главный вопрос: а как вообще рассчитывать состояние схемы? После недолгих размышлений я понял - мне просто нужен поиск в ширину! Расчет состояния схемы происходит следующим образом:

  1. Все элементы сбрасываль в исходное состояние.
  2. Все контакты реле переводились в состояние, соответствующее состоянию их катушек реле.
  3. Все катушки реле выключаются.
  4. Далее проходит поиск в ширину (BFS), начиная от стартовых точек (это единственный источник сигнала). Все катушки, до которых дошел сигнал, включаются.
  5. Конец! (на самом деле цикл повторяется в следующем кадре)

Кроме логики работы остается ещё один вопрос - визуал. Мало сделать дизайн UI, надо также выбрать обозначения для элементов. В этом деле нет никаких общепринятых стандартов, многие страны имеют свои системы обозначений элементов. Конечно, опытный специалист (вроде меня) может понять любой из стандартов, просто логически осмыслив схему. Но для проекта нужно выбрать что-то одно. Я остановился на японском стандарте схем — во многих из-за ностальгических воспоминаний о японских станках на прошлом месте работы. Катушки обозначаются зигзагообразной линией, контакты реле — две вертикальные черты, для размыкающих контактов добавляется горизонтальная черта внизу. Эти обозначения должны читаться лучше, чем другие варианты.

Пример запуска реле с самоподхватом
Пример запуска реле с самоподхватом

Наконец, все было готово и можно было проверить работу схемы. Берем источник сигнала, ставим правее NC-контакт реле K1, справа от него — катушку K1, и… Катушка замигала! Это означало, что идея полностью работает. Можно откинуться в кресле и думать, что делать дальше.

Более сложная схема с арифметическими операциями
Более сложная схема с арифметическими операциями

Как оказалось, я выбрал очень удачную архитектуру проекта, позволявшую легко добавлять новые элементы. Дальнейшее развитие шло легко и гладко - я добавил численные значения сигналов, арифметические блоки, счетчики импульсов, реле времени, компараторы… Единственное, что я не придумал - это название. Наконец, я опубликовал проект на itch.io. Просто, бесплатно, удобно - чего ещё желать?..

После публикации обнаружились проблемы:

  1. Я не знаю, как описать то, что я сделал. 
  2. Проект по-прежнему не имеет смысла. Хотя, в его бессмысленности есть своё очарование.
  3. Он по-прежнему не имеет названия.

Но проект имеет и плюсы:

  1. Это первый проект, который я довёл до релиза!
  2. Он достаточно стабилен, что его нельзя сломать случайно — только намеренно.
  3. Проект имеет широкие возможности развития - например, на его основе можно сделать аркадный симулятор реального промышленного оборудования.
  4. По удобству и дизайну он УЖЕ превосходит коммерческую программу Siemens Simatic Step7 и имеет все шансы стать ещё лучше. 

Кстати, последний пункт - это не шутка. Люди, работающие с ПО от Siemens, шутят, что его написали недобитые фашисты, чтобы отомстить миру за поражение в войне. Другие производители во многом копируют их решения, что не делает им чести. Во всяком случае, я ещё не видел ПО для ПЛК, которые бы не проклинали пользователи. Кажется, что эти программы в процессе своей эволюции собрали все возможные проблемы, и даже запуск её - это нетривиальная задача. К сожалению, низкое качество ПО для контроллеров во многом обусловлено тем, что пользователь платит за само “железо”, а выбора программы у него попросту нет.

В МОЕМ ПРОЕКТЕ ТАКОГО НЕТ! Вы можете прямо в браузере создать релейную схему своей мечты, проверить, сохранить её и поделиться с другими! А дальше будет ещё больше возможностей, включая станки, датчики, исполнительные механизмы, толстозадые эльфиечьки с хлыстиками, энкодеры и термопары!

image

Вот такие дела, ОНДР!

24
24комментария