Добрый день, дорогие читатели этой статьи. Пишу это в формате обзора
Никакая экономия денег не стоит такого количества нервов, субъективно.
Для тех, кого не пугает небольшая седина и амплитуда нервного тика, позже я опишу в подробностях как создавалось это технологическое чудо. В данной статье же краткий анализ проекта с определённой долей критицизма.
Зарождение. Постановка задачи
Собственно, работаю я в конструкторском бюро, и мы тестируем оборудование автоматизации для интеграции в наши заводы под ключ. Недавно на склад поступило оборудование ОВЕН и из него было решено собрать испытательный стенд:
- ПЛК110[M02]-MS4 (исполнительная среда MasterSCADA 4D)
- Панель оператора СП307
- Модуль универсальный ввода аналоговых сигналов МВ110-224.2А
- Модуль ввода сигналов тензодатчиков МВ110-4ТД
- Модуль электроизмерительный МВ110-220.3М
Структура системы была выбрана с разграничением сетей по назначению:
- Modbus RTU на базе RS-485 — общение ПЛК с подчинёнными устройствами(модули, частотники, интеллектуальные датчики, HMI панель СП307), ПЛК-мастер сети.
- Modbus TCP на базе Ethernet — Общение разных ПЛК друг с другом и с OPC-сервером
- ПК-сервер OPC и SCADA-системы является одновременно шлюзом между двумя разными сетями(Корпоративная LAN предприятия и Modbus TCP сеть контроллеров(два сетевых адаптера с маршрутизацией данных стандартными средствами Windows)
- Корпоративный LAN имеет выход в интернет через прокси-сервер
Структура системы в общем виде представлена на изображении ниже:
Заложенный функционал
- Сбор и перенаправление данных с ПЛК на OPC-сервер
- Локальное управление и мониторинг посредством HMI-панели
- Управление и мониторинг из SCADA через OPC-сервер
- Управление с любого ПК из LAN предприятия и через интернет с помощью SCADA-клиента
- Подключение мобильных OPC-мониторов через LAN и интернет
- Разумеется, архивация и генерация отчётов
Вроде ничего не упустили. Общее описание системы есть, а теперь, собственно, по теме(способы устранения буду описывать в статьях с реализацией каждого узла):
Возникшие сложности
1. Документация к ПЛК
Beta-тестирование заявленного ПЛК на ядре MasterSCADA 4D было обозначено производителем в 2012 году. Несмотря на такой внушительный срок существования концепта, всё что имеет разработчик в 2019-м — это руководство по программированию в 28(!?) страниц, на которых полезной информации чуть менее чем нисколько, причём скриншоты в мануале из MasterSCADA 3D, что довольно забавно с учётом того, что интерфейс сменился.
Также активно поддерживается тремя адептами и менеджером по продажам ветка форума в 20 топиков.
2. Архитектура ПЛК-модули
Это отдельная тема для обсуждения. Кратко: ПЛК общается с модулями как с Modbus RTU slave устройствами, которые предварительно необходимо сконфигурировать утилитой отдельно подключив каждый к ПК через преобразователь RS-485.
Умные дяди, конечно, наверняка умеют делать это без преобразователя через ПЛК, последовательно подключая модули в сеть и записывая нужные регистры, но такое приходит с опытом и огромным количеством боли.
Для разработчика впервые увидевшего такую архитектуру совсем не юзер-френдли.
Также все аналоговые модули любят уходить в отказ по неизвестным причинам, забирая за собой всю RS-485 сеть в Терра Инкогнита, но об этом я также хочу рассказать отдельно, целая эпопея, конечно. Проблеме, к слову, лет 10, производитель отшучивается «Следует признать, шаблоны нам не удались», однако это единственный интерфейс общения с модулями, и люди, вполне серьёзно, давно прописывают свои реализации Modbus RTU.
3. IDE MasterSCADA
Про графические инструменты говорить не будем, сильно я не тестировал, но скажу сразу, что не понравилось.
Говорим про реализацию обмена данными и языки стандарта МЭК:
Физические вводы выводы контроллера не являются глобальными переменными и к ним нельзя обратиться из любой части программы, написав алиас, например «DI1». В каждую программу следует перетаскивать это ручками, там формируется локальная переменная, которая наследует или передаёт значение. Т.е. сама сущность ПЛК, в моём видении, немного утеряна: устройство должно упрощать программирование логики работы физических каналов до уровня «Если сработал вход DI1 — Включаем выход DO1», а выглядит это так «Вход DI1 — Переменная LI1 — Переменная LO1-Выход DO1», также по незнанию этого принципа IDE можно словить восхитительное предупреждение «Преобразование Boolean-Boolean невозможно»(вероятнее всего, что то из них указатель, но представляю в редакции создателей, так гармоничнее).
Библиотеки языков ST, FBD, SFC достаточно объемные и выбор для удобства программирования есть, однако эти компоненты являются не функциями, а классами, внутри которых зашиты методы, а во вторых на большинство отсутствует справка с описанием функционала и типов данных. Настырность привела меня в библиотеки ядра CodeSys, откуда все эти функции и были взяты, их справка помогла.
4. Обмен с панелью СП307
Довольно интересное мероприятие для тех, кому некуда потратить пару дней.
Стандартное тестирование GUI(HMI или SCADA) для меня это сделать 6 проб:
- Чтение дискретного сигнала
- Запись дискретного сигнала
- Чтение целочисленного значения
- Запись целочисленного значения
- Чтение вещественного значения
- Запись вещественного значения
Соответственно, я рисую на экран 6 компонентов-примитивов и каждый по порядку проверяю
Обмен абсолютно такой же как и с модулями, но с отдельного порта ПЛК RS-232/485, и, вроде как, более стабильный. Поскольку HMI-слэйв, то писал я в него по изменению, а читал поллингом 500мс, чтобы не упустить действия оператора.
Первые 4 пункта были выполнены на отлично, но 5 и 6 вызвали проблемы.
Отправляем данные типа Single Float, на экране их выводим и видим, что данные не те, хотя все настройки вывода(Float, размерность 1 регистр и прочее) стоят правильно. Будет неправдой сказать, что в документации прецедент не описан, однако, попробуйте найти в какой и где, это со стороны забавно.
После истеричного перебора всех настроек, касаемых самих данных и их отправки, пишем в техподдержку, ответ в среднем 5-6 календарных дней, работаем по стандартному скрипту техподдержки «Проверьте, что питание включено — проверьте версию ПО — ожидайте, пожалуйста еще неделю-Идём разбираться сами».
К слову, решилось установкой одной галочки в абсолютно неадекватном месте с абсолютно неадекватной подписью.
В функционал экрана не заложен ввод аналогового сигнала формата «Бегунок», можно вписать только в текстовое поле цифрами. Это просто восхитительно, либо пишем кнопки "±" и скрипт самостоятельно либо вводим цифру с клавиатуры, о мягком управлении каким-нибудь приводом забываем.
Не буду сильно перегружать статью, поэтому буду описывать проблемы с верхним уровнем в части 2.
Резюмируя, хочу отметить, что я имел достаточную свободу и много времени для решения этих проблем, которые на первый взгляд кажутся смешными, но вызывают много боли у пострадавшего. В условиях ограниченных сроков с такими проблемами сталкиваться критично.
P.S.: Все тезисы, изложенные здесь, субъективны, и являются лишь попыткой предупредить неподготовленных, а не дискриминировать производителей, прошу отнестись к этой статье именно с этой точки зрения.
Автор: Вадим Долгов