Добрый день, дорогие читатели этой статьи. Пишу это в формате обзора
Для тех, кого не пугает небольшая седина и амплитуда нервного тика, позже я опишу в подробностях как создавалось это технологическое чудо. В данной статье же краткий анализ проекта с определённой долей критицизма.
Собственно, работаю я в конструкторском бюро, и мы тестируем оборудование автоматизации для интеграции в наши заводы под ключ. Недавно на склад поступило оборудование ОВЕН и из него было решено собрать испытательный стенд:
Структура системы была выбрана с разграничением сетей по назначению:
Структура системы в общем виде представлена на изображении ниже:
![](https://habrastorage.org/r/w780q1/webt/0-/tj/wi/0-tjwifiyylqt8avwveavbpvrwe.jpeg)
Вроде ничего не упустили. Общее описание системы есть, а теперь, собственно, по теме(способы устранения буду описывать в статьях с реализацией каждого узла):
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.: Все тезисы, изложенные здесь, субъективны, и являются лишь попыткой предупредить неподготовленных, а не дискриминировать производителей, прошу отнестись к этой статье именно с этой точки зрения.
Вторая часть уже тут: щелкаем
Небольшое предупреждение
Хочу предупредить, что если вы сразу поняли о чём речь из заголовка, советую первый пункт(собственно, ПЛК-ядро) менять на что угодно из ценовой категории на ступень выше.
Никакая экономия денег не стоит такого количества нервов, субъективно.
Никакая экономия денег не стоит такого количества нервов, субъективно.
Для тех, кого не пугает небольшая седина и амплитуда нервного тика, позже я опишу в подробностях как создавалось это технологическое чудо. В данной статье же краткий анализ проекта с определённой долей критицизма.
Зарождение. Постановка задачи
Собственно, работаю я в конструкторском бюро, и мы тестируем оборудование автоматизации для интеграции в наши заводы под ключ. Недавно на склад поступило оборудование ОВЕН и из него было решено собрать испытательный стенд:
- ПЛК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 имеет выход в интернет через прокси-сервер
Структура системы в общем виде представлена на изображении ниже:
![](https://habrastorage.org/webt/0-/tj/wi/0-tjwifiyylqt8avwveavbpvrwe.jpeg)
Заложенный функционал
- Сбор и перенаправление данных с ПЛК на 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.: Все тезисы, изложенные здесь, субъективны, и являются лишь попыткой предупредить неподготовленных, а не дискриминировать производителей, прошу отнестись к этой статье именно с этой точки зрения.
Вторая часть уже тут: щелкаем