г. Москва, ул. Азовская, 14
+7 (495) 310-97-15
Пн-пт: с 9.00 до 18.00
Заказать звонок
Обратный звонок
Ваше имя *
Ваш телефон *
Ваш Email *
Перезвоните мне
WinCC OA: настраиваем встроенный драйвер MODBUS TCP

Пошаговая инструкция настройки встроенного драйвера Modbus scada-системы WinCC OA

Целью данной статьи является создание пошаговой инструкции для освоения настройки встроенного драйвера Modbus у scada-системы WinCC OA

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

Итак, пошаговая инструкция по соединению стандартной станции WinCC OA по протоколу Modbus TCP. Используется популярный симулятор Modbus TCP протокола Modbus Tools
1. На рабочей машине должна быть предустановлена 64-битная операционная система, демонстрационная или ключевая версия Wincc OA (v3.14 или более поздние)
2. Скачиваем и устанавливаем ModbusPollSetup64Bit.exe и ModbusSlaveSetup64Bit.exe. Устанавливаем данные компоненты для эмуляции потока данных (посылка-прием телеграмм) по протоколу Modbus TCP
3. Сначала запускаем Modbus Slave (генерация телеграмм) с настройками, как указано на рисунках, допуская работу в домашней сети (верхняя галочка)

Modbus Slave

Net agrid

4. Выставляем на эмуляторе слейва какие-либо числа

Modbus Slave

5. Настраиваем эмулятор мастера в соответствии с рисунком. Запускаем Modbus Poll

Modbus Pool

6. Видим, тикает счетчик телеграмм (TX), видим полученные и переданные данные. По умолчанию настроена функция 03 Holding Register

Modbus Pool value

7. Создаем новый стандартный проект Wincc OA. Выбрав два языка для интерфейса, отказываюсь от ввода пароля.

Создание проекта WinCC OA

8. Запускаем созданный проект «TestModbusTCP»

Admin WinCC OA

9. Дожидаемся запуска всех служб консоли

Consol Wincc OA

10. Останавливаем драйвер эмуляции протоколов (заглушку) и устанавливаем новый мастер Modbus driver

Manager Wincc OA

11. Устанавливаем строку инициализации в менеджере Modbus

Инициализация менеджера

Инициализация менеджера

Консоль должна выглядеть так:

Консоль Wincc OA

12. Выставляем в конфигурационном файле проекта
[mod_1]
tcpServerPort = 502
и перезагружаем весь наш пустой проект

Использование в частной сети

Использование в частной сети

13. Подтверждаем доступ

Консоль Wincc OA

Консоль Wincc OA

Консоль должна выглядеть вот так
14. Настраиваем драйвер как на кадре ниже и активируем, жмем Active и Apply

Настройка драйвера

15. Пробуем запустить эмулятор Slave
Если ругается что порт занят – ХОРОШИЙ ПРИЗНАК
Оставляем эту идею без действия и запускаем Modbus Pool

Модбас пул

Видим, что идут телеграммы (меняется Tx) двигается счетчик, горит поочередно ошибка, то ошибка чтения, то на запись. Учитываем, что пока у нас не создано ни одного тэга и опрос не создан.
16. Создаем новый тип данных и новую точку данных. Новой точке задаем тип данных целочисленный (Int)

Точка данных

Точка данных - канал


17. Добавляем к этой переменной алеас перефирийного адреса и кликаем на параметры

Выбор протокола

Задаем из списка протокол Modbus

Задаем параметры опроса

Задаем параметры опроса

18. Выбираем, какой у нас ПЛК, задаем период опроса. Важно!!! везде где попадается ставить галочку «Active»
19. Остается правильно с пониманием сети, запустить процесс обмена и все должно получиться
Запустить вначале нужно Modbus Slave (приемник телеграмм), только затем драйвер WinCC OA. Меняя значение в слейве мы видим, что WinCC OA считывает/получает данные
Modbus Poll так же можно запустить, например, для замены значения в регистре, но после запуска основного драйвера WinCC OA

Запрос вида:
00 1C 00 00 00 06 01 03 00 00 00 0A
00 1C – идентификатор пакета.
00 00 – всегда такое значение
00 06 – длина информационной части пакета 6 байт
01 – логический адрес контроллера/обычно равен 1, но…/
03 – команда чтения регистров
00 00 – с адреса 0000
00 0A – всего читается десять регистров (двадцать байт)

Ответ вида:
00 1C 00 00 00 17 01 03 14 00 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 1C – идентификатор повторить из запроса
00 00 – всегда такое значение
00 17 – длина информационной части (двадцать три байта)
01 – адрес ПЛК /повторить из запроса/
03 – функция
02 – число байт /регистры обычно 16-битные, потому число байт кратно двум/
хххх – значение регистра

00 1C 00 00 00 06 01 03 00 00 00 0A
00 1C 00 00 00 17 01 03 14 00 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Совет, если не выходит: перезагружайтесь почаще при настройке драйверов + если не идет обмен или пишет ерунду, то анализируйте, то что есть внутри пакетов обмена.
Удобный снифер для Modbus TCP можно взять здесь:
https://soft.mydiv.net/win/files-SmartSniff.html

Связь установлена

Видим, что связь работает и данные меняются. Пока это писал опоздал на поезд, блин. В Самаре и Москве разные часовые пояса

Более подробное изложение данной темы в статье Александра Кузнецова

#WinCCOA, #MODBUSTCP
1

13.08.2018

Доброго времени суток! Всё заработало. Ларчик просто открывался =) Насколько я понял, в текущей версии WinCC OA (3.16) есть возможность обмена через "Modbus TCP" и через "Modbus RTU over TCP". А вот как раз классический "Modbus RTU" по RS485 не поддерживается. Нет выбора номера com-port'a. Доступен только выбор IP и номер порта. Чтобы (в нашем случае) заработал обмен через "Modbus RTU over TCP" требуется в настройках из пункта 14 выбрать Frame coding = RTU Unit address = 1 в лог постоянно пишутся предупреждения: Соединение разорвано. Однако обмен работает...

09.08.2018

Всем бы такую отдачу) Благодарю за наводку!

Vyacheslav Lapshin

09.08.2018

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

09.08.2018

Добрый день! Отличная инструкция! Крепко жму руку. Подскажите, пожалуйста, можно ли сконфигурировать|отредактировать встроенный в WinCC OA драйвер протокола modbus, чтобы этот драйвер смог распознать посылки "Modbus RTU over TCP". Каждая посылка представляет собой посылку (кадр) Modbus RTU упакованный в TCP. Отличие "Modbus RTU over TCP" от "Modbus TCP" в 6 'лишних' байтах (адрес RTU) , которые по сути не нужны, но передаются.
Ваш комментарий добавлен