Веселые уроки WinCC OA. Драйвер Modbus TCP

Продолжаем расширять мой базовый курс работы с системой WinCC OA. На этот раз речь пойдет о драйвере Modbus TCP.

Программный пакет для сбора данных и управления

Продолжаем расширять мой базовый курс работы с системой WinCC OA. На этот раз речь пойдет о драйвере Modbus TCP.

Довольно часто я слышу такое мнение среди своих коллег и сотрудников, и, будем честными, на то есть причины.
АСУ ТП (автоматизированные системы управления технологическими процессами) — это когда у вас большое предприятие, конвейер, производство, очистные сооружения или что-то подобное и вам нужно отладить весь процесс в автоматическом режиме, чтобы все работало без участия человека, а человек только наблюдал на большом мониторе.

Могут ли злоумышленники проникнуть в АСУ ТП[1]? Как они это делают и какие инструменты используют? А главное, обязательно ли атакующие должны что-то понимать в АСУ ТП и технологических системах, чтобы нанести ущерб промышленным предприятиям?
Дмитрий Федосов, специалист отдела экспертных сервисов и развития SOC в Positive Technologies, и Дмитрий Даренский, руководитель направления по развитию продуктов промышленной безопасности Positive Technologies, рассказывают, как злоумышленники видят технологическую сеть и что объективно необходимо для защиты промышленных инфраструктур. Их статья будет полезна специалистам SOC, инженерам промышленных компаний и тем, кто интересуется безопасностью АСУ ТП.

Связи S7 лет уже много. И многие про него знают тоже много. И даже много используют. Работать с ними весьма легко - создал S7 connection, разместил, где надо, функциональные блоки PUT/GET (самый простой вариант) или BSEND/BRECEIVE, выполнил download, и все - полный превед, знай только, контролируй состояние флагов NDR и Error.
Чаще всего оба коммуникационных партнера находятся в одной сети. А что делать, если CPU находятся в разных сетях Profinet? Или, еще круче, один участник обмена подключен к некоему промежуточному узлу по Profinet, а второй - к этому же промежуточному узлу по Profibus.

В данной заметке рассмотрим функционал, появившейся в «прошивке» 2.8 (поддерживается в Step 7 версии 16 и выше) серии контроллеров S7-1500, а именно — перенаправление (форвард) ip-пакетов между интерфейсами.

Классические линейки контроллеров Siemens, а именно — Simatic S7-300 и Simatic S7-400, поддерживают протокол Modbus TCP как в качестве клиента, так и в качестве сервера. Эта поддержка не лишена одного существенного недостатки, она платная, и стоимость лицензии весьма высока.
Если заказчик — «богатый», а интегратор — «умный» (опытный), то факт платности лицензии и ее стоимость не приводит к неприятностям, все известно заранее, на этапе составления спецификации, бюджет согласован заранее. Если применяется серия S7-1200 / 1500, то вопрос даже не поднимается, эти PLC поддерживают Modbus RTU и TCP без дополнительного лицензирования.
На практике встречаются случаи, когда ничто не «предвещало беды», но модбас на «трехсотнике» неожиданно становится нужен (никогда такого не было, и вот опять!). Не учли что-нибудь, форс-мажор или просто разгильдяйство. Какие в этом случае пути решения?

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

После просмотра «Форд против Феррари» мы с женой вышли из кинотеатра под первый снег ноябрьским вечером. Глаза у меня горели, руки чесались. И пронеслась мысль: «Вот это да! Вот бы что-то такое поизобретать. Всякое инженерное, чтоб рёв мотора, гарь бензина и масло во все стороны!».
И, вы не поверите, на следующий же день натыкаюсь на объявление в газете: нужен человек для программирования стенда испытаний коробок передач.

Disclaimer. Написанное относится к 16ой версии и публикуется очень запоздало. В версии 17 функционал был расширен, и добавлена возможность мигания как минимум динамическим диалогом свойства background color.

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

Суммируйте время циклов каждые 2-3 секунды и направляйте на HMI для визуализации на графике.
Логируйте время безотказной работы ПЛК, чтобы знать, когда он был перезапущен. Отслеживайте время безотказной работы на HMI для диагностики.
Храните события неожиданной остановки ПЛК из-за сбоев или отключений для будущего извлечения системой мониторинга в HMI, чтобы проанализировать их перед перезапуском ПЛК. Синхронизируйте время для получения корректных данных.
Измеряйте и предоставляйте базовую информацию об использовании памяти каждым контроллером, развернутым в производственной среде, и отображайте ее на HMI.
Разбираем рекомендации по безопасному программированию ПЛК, формируем список своих рекомендаций. Всех неравнодушных прошу под кат.

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

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

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

Здесь и далее речь идет про рынок промышленной автоматизации. Но если спроецировать все нижесказанное на другие рынки и отрасли, то аналогия будет очевидна.

Доступ к переменным ПЛК должен быть ограничен. Значение с HMI, вышедшее за допустимые пределы, должно быть корректно обработано или оператор должен получить об этом сообщение.
Следите за обращением к элементам массива, чтобы избежать ошибку неучтённой единицы.
Разбираем рекомендации по безопасному программированию ПЛК, формируем список своих рекомендаций. Всех неравнодушных прошу под кат.

Счётчики и таймеры написанные для программ ПЛК должны быть проверены на корректность, в том числе на обработку обратных отсчётов и значений меньше нуля.
Убедитесь, что парные сигналы не задаются одинаково. Оповещайте оператора, если состояние входов/выходов физически невозможно или недопустимо. Подумайте, как сделать парные сигналы независимыми или добавьте таймеры для переключений, которые могут нанести повреждения.
Разбираем рекомендации по безопасному программированию ПЛК, формируем список своих рекомендаций. Всех неравнодушных прошу под кат.

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

Статья по ссылке напомнила мне один недавний проект. Статья отличная, но в ней не хватает какого-нибудь практического примера. От этого остаются неясными границы применимости в принципе неплохих советов автора. В своем проекте я полностью следовал рекомендациям из упомянутой статьи и вот что вышло.

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