Pull to refresh

Симулятор для тестирования ПО АСУТП

Reading time 6 min
Views 66K
Добрый день, уважаемые хаброжители!



Расскажу вам о своём проекте, который делаю в свободное время уже три года.

Работаю в компании занимающейся автоматизацией на должности программиста контроллеров. Последнее время, в основном, используем Siemens, ПЛК SIMATIC S7 и пакет визуализации WinCC, но есть опыт и по другим производителям. Профиль компании – нефтегазовый сектор (резервуарные парки, насосные, железнодорожные эстакады, причальные комплексы, системы пожаротушения).

Наверное, с самого первого проекта, меня интересовал вопрос тестирования программного обеспечения до этапа пуско-наладки на реальном оборудовании. Не так давно, на хабре был пост — Программирование ПЛК Siemens на Simatic Step7, и адреналин, про который говорилось в комментариях, знаком мне не понаслышке.

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


Введение


В упрощённом виде наша АСУТП состоит из следующих компонентов:

  • Датчики (давления, температуры) и исполнительные механизмы (задвижки, насосы).
  • Программируемый логический контроллер (ПЛК).
  • Система визуализации (SCADA, HMI).

От датчиков и исполнительных механизмов сигналы поступают в ПЛК, обрабатываются и передаются в систему визуализации, с которой взаимодействует человек-оператор. Команды оператора передаются обратно в ПЛК, который генерирует нужные сигналы для управления исполнительными механизмами. Автоматизированные функции и противоаварийные защиты (ПАЗ) реализуются в ПЛК.

У нас в разработке, обычно, участвуют два человека. Один пишет программу для ПЛК, второй делает систему визуализации. Сейчас стараемся задействовать третьего – тестировщика. Не могу сказать, что мы реализуем очень сложные алгоритмы управления, но есть своя специфика, связанная, прежде всего, с размерами системы. Например, мой текущий проект в сумме имеет приблизительно 2300 сигналов, большая часть из которых входные (около 1500).

Для тестирования, стенд, состоящий из ПЛК и системы визуализации, собираем в офисе. Некоторые производители предлагают программные симуляторы ПЛК, так что, иногда, можно обойтись обычной компьютерной техникой. Например, S7PLCSim от Siemens:

Остаётся вопрос с датчиками и исполнительными механизмами, которые связаны с нашей системой через дискретные/аналоговые входные/выходные сигналы.

Некоторые компании производители ПЛК предоставляют инструменты для программной имитации входных сигналов. Например, через среду программирования Step7 контроллеров Siemens можно значение любого входного сигнала, в реальном ПЛК, задать принудительно (форсировать), а если вы используете симулятор контроллера, просто установить через графический интерфейс. На приведённой выше иллюстрации: IB 10 – байт входов, IW 5 – слово входов, QB 7 и QW 2 – выхода, а MD 123 – двойное слово во внутренней памяти котроллера.

Другой подход, который необходимо упомянуть, это имитация входных сигналов на уровне железа. Для нас данный подход неудобен – слишком много времени тратится на подключение. Кроме того, в офисе, обычно, есть только модуль процессора от ПЛК, а модули для подключения входных/выходных сигналов, которые ставятся в отдельных шкафах, стоят на складе или уже отправлены для монтажа к заказчику.

Понятно, что таким средствами, можно провести простую проверку прохождения сигналов от контроллера в систему визуализации и обратно. Можно отладить не очень сложные автоматические алгоритмы, благо, что в Step7 есть точки останова (breakpoints). Но если в алгоритме участвует несколько единиц оборудования (несколько насосов + обвязка из задвижек и датчиков) это достаточно сложно.

Идея




Вот уже несколько лет для каждого своего проекта, помимо программы для ПЛК, я создаю программный симулятор автоматизируемого объекта. Англоязычные источники иногда называют подобные системы — Factory Acceptance Test (FAT) simulator (симулятор для заводской приёмки) и классифицируют их по степени достоверности симуляции. В сети совсем не много информации по созданию подобных симуляторов, в основном используются Matlab + Simulink, LabView, кто-то реализует симуляцию внутри ПЛК. Есть специальные средства разработки – WinMOD, Mynah MiMiC, Siemens SIMIT, APROS.

После некоторых размышлений, решил попробовать создать свою платформу. Прежде всего, было желание изучить что-то новое (.NET и С#). Обстоятельства сложились удачно, и наша компания, для одного из проектов, приобрела готовую библиотеку OPC клиента. Это позволило мне сконцентрироваться на основной задаче.

Чтобы создать программный симулятор для стенда с реальным ПЛК необходимо предусмотреть в нём подмену данных получаемых с физических входов на имитационные. К сожалению, это приходится делать в самой программе контроллера. Следующий шаг – обеспечить доступ к этим данным через OPC интерфейс. После этого, можно приступать к написанию программы ПЛК и созданию симулятора автоматизируемого объекта.

Если использовать S7PLCSim – в подмене данных нет необходимости. При этом систему визуализации придётся запустить на той же машине вместе с S7PLCSim и симулятором объекта (ограничение S7PLCSim). В случае нехватки мощности можно попробовать разнести их с помощью бесплатной утилиты NetToPLCSim.

Платформа


Платформа, которую я разработал, похожа на примитивную среду для создания систем визуализации. Работу можно разбить на три этапа:

  1. Создание переменных (Item). Их всего три типа:
    • Internal — внутренняя переменная, которая используется для связи между объектами внутри симулятора.
    • OPC — переменная связанная с внешним OPC сервером. В данном случае симулятор выступает OPC клиентом.
    • S7PLCSim — данная переменная предназначена для связи с симулятором контроллера SIMATIC S7. Поддерживаются области памяти I, Q, M и DB.
    На текущей стадии развития, платформа позволяет подключение только к одному симулятору контроллера SIMATIC S7 и одному OPC серверу. Зато, все переменные видны по OPC, так как платформа является OPC сервером.

    Добавлять и удалять переменные можно во время работы симулятора. Система не позволит удалить переменную, которая используется.

  2. Создание объектов симуляции. В настоящий момент, реализовано 13 типов объектов. Среди них есть совсем примитивные – дискретный и аналоговый датчики, и достаточно сложные – генератор аналоговых сигналов и задвижка. Один из типов объектов позволяет писать скрипты на C#. Конфигурируя каждый объект симуляции, пользователь устанавливает переменные (Item), которые будет читать или писать данный объект, а также другие его параметры.

    Объекты можно добавлять, удалять и редактировать его свойства во время работы симулятора.

  3. Создание интерфейса пользователя. Как база используется панель с закладками (TabControl). На каждом созданном экране можно размещать отображения объектов симуляции. Например, аналоговый датчик, можно отобразить его в виде ползунка, поля для ввода значения или графика, в любом месте панели. Один и тот же объект можно вывести любое количество раз, на одной или нескольких панелях, в разных видах.

    Для того чтобы удалить объект симуляции необходимо сначала удалить все его отображения на всех панелях.

Конфигурация симулятора сохраняются в виде XML файла с простой структурой:

<ProcessSimulator>
    <Items>
         [Переменные]
    </Items>
    <SimulationObjects>
         [Объекты симуляции]
    </SimulationObjects>
    <Screens>
         [Панели с отображениями объектов симуляции]
    </Screens>
</ProcessSimulator>

Это позволяет редактировать его вручную, генерировать скриптами, например в Excel, а также полноценно использовать систему контроля версий.

Так может выглядеть интерфейс симулятора:


Возможности


Создание симулятора автоматизируемого объекта даёт множество преимуществ:

  • Удобство разработки и тестирования. Создавая программу для ПЛК и параллельно с ней симулятор объекта, я могу проверить каждый участок кода и смоделировать практически любую ситуацию. Разработчик системы визуализации, также, пользуется всеми удобствами симулятора, не вникая, при этом, в программу ПЛК (и не дёргая меня, каждый раз, когда хочет что-то проверить). Более-менее нормальный графический интерфейс позволяет привлечь к тестированию системы человека, который не принимал участия в её создании, а значит, найдёт больше ошибок, чем любой из создателей. Кроме того, даже на объекте, можно переключить систему в режим симуляции, что-то доработать и проверить полностью программным методом, без использования реального оборудования.
  • Демонстрация работы программной части системы независимо от степени готовности всего остального.
  • Обучение операторов. Работа системы в режиме симуляции позволяет оператору более подробно, и главное без стресса, изучить работу системы (и найти ошибки).
  • Упрощение гарантийного сопровождения системы. Если воссоздать условия возникновения ошибки, иногда, можно обойтись без командировки на объект.

Дальнейшее развитие


Так как это мой первый опыт создания чего-то серьёзного на С#, прежде всего, хотелось бы переработать архитектуру:

  • Выделить слой отвечающего за внешние соединения и реализовать их в виде подключаемых модулей (Plug-in). Это позволит подключаться к нескольким OPC серверам и экземплярам Siemens SIMATIC S7PLCSim. Кроме того, облегчит добавление других типов соединений, например Modbus.
  • Внедрить класс визуальных элементов не связанных с симуляционными объектами. В настоящий момент, любой элемент интерфейса пользователя на экране обязательно связан с объектом симуляции, что не очень удобно. Иногда действительно не хватает возможности чего-нибудь нарисовать, вставить картинку или просто написать поясняющий текст.
  • Создать систему подключаемых модулей (Plug-in) для объектов симуляции и их отображений. Основное направления развития платформы – расширение библиотеки объектов симуляции, поэтому удобство их создания и интеграции является ключевым фактором.




Сайт


На сайте automation.ucoz.com можно скачать демонстрационную версию. Она не ограничена по времени, но в ней можно создать только 20 переменных и 10 объектов симуляции (все типы, кроме С# скриптов). полную версию (Freeware).
Tags:
Hubs:
+15
Comments 14
Comments Comments 14

Articles