Основные возможности S7-коммуникации
- Обмен данными LOGO! <-> LOGO!
- Обмен данными LOGO! <-> SIMATIC S7 контроллерами
- Возможность соединения и обмена данными с системами визуализации LOGO! <-> SIMATIC HMI.
Эти три варианта основываются на S7-коммуникациях, которые представляют из себя проприетарный протокол для связи систем автоматизации SIMATIC. По существу этот протокол вшит в операционную систему контроллеров и основное его преимущество в относительной простоте использования.
Управление протоколом находится в ОС контроллера, от пользователя нужно только правильно указать несколько параметров и определить какие данные будут передаваться. Поддерживается клиент-серверный принцип обмена информацией, причём на стороне сервера параметризация сведена к минимуму. На стороне клиента нужно вызвать соответствующий SFC и прописать параметры адресации и набор переменных для обмена. В простых контроллерах LOGO! клиентский запрос состоит, буквально, в вызове специальной «сетевой» переменной, а для «сервера» вообще ничего в программе прописывать не нужно, всё сводится к заполнению параметров соединения.
К недостаткам можно отнести полное отсутствие какой либо защиты соединения (достаточно знать адреса, как можно подключиться любым прибором поддерживающим протокол и менять переменные по своему усмотрению), небольшое количество передаваемых данных, индивидуальное для каждого прибора (как в байтах так и количество подключений) и поддержка только «реальных» переменных (то есть таких к которым в принципе возможно обратиться через адресный регистр контроллера (сразу отпадают «оптимизированные» блоки данных в S7-1х00).
Основные термины для LOGO!
Коннекция (connection) - это организованный в операционной системе контроллера канал связи между устройствами с заданными IP.
Количество коннекций зависит от типа устройства (прописывается в технических характеристиках). Некоторое количество коннекций может жёстко резервироваться для определённых типовых задач (программирование, HMI). Коннекции могут быть фиксированными (прописанными на этапе создания проекта), а могут быть динамическими (организуемыми вызовом специальной функции из программы пользователя).
Важно! Для LOGO! возможно 8 коннекций. Из них только одна может быть зарезервирована для HMI соединения.
Параметр TSAP (точка доступа уровня передачи). Этот параметр фактически определяет адрес коннекции для программы пользователя. То есть коммуникационная функция в программе пользователя оперирует не IP адресом партнёра, а указателем стойка/слот (по сути рудимент) и выбирается из диапазона допустимых параметров. Для LOGO! рекомендуется выбирать 20.00 … 27.00. Имеет графическую визуализацию в пакете LOGO! Soft Comfort (LSC) в виде соответствия определённым квадратикам.
Параметр Local ID. То-же самое, но применительно к STEP7. Цифра, которая задаётся SFCшке для определения, каким именно каналом передачи отправлять именно эти данные. Имеет сквозную нумерацию (для всех, не только S7-коммуникаций) и раскладывается автоматически.
Пример 1: Соединение ведущий - ведомый
Открываем LSC и добавляем контроллер LOGO! 8.3, который будет «главным». Потом добавим разные «ведомые устройства».
Важно!
Протянуть мышкой логические связи не получится.Связи появятся, когда в схеме будут задействованы входы и выходы ведомых устройств.
Выглядит это вот так:
Кстати, это вся настройка. Ведомые LOGO! работают как входы-выходы для «главного». Собственной программы они не имеют, окно «редактор схем» имеет только одну вкладку. Доступны не только адреса центрального блока, но и модулей расширения, то есть ведомые LOGO! могут иметь собственные модули ввода-вывода. Таким образом можно обойти ограничение 24/20 физических входов/выходов на одно LOGO!. Теперь оно определяется только количеством доступных сетевых переменных (64/64), с которыми можно их связать.
Интересная возможность: можно подключить «ведомое» LOGO! которое не отображается в проекте. Для этого нужно вбить его IP и выбрать тип из выпадающего списка. Далее всё как в предыдущем примере.
Коннекция будет подключена на «землю». Обозначение сетевой переменной будет дополнено IP адресом ведомого.
Всё тоже самое и точно так-же можно выполнить в «несетевой» версии проекта. Вставляем сетевой выход, забиваем IP и выбираем нужную версию ведомого LOGO!. Коннекция будет отображаться во вкладке «автономные настройки». Окно сетевого проекта останется пустым. Когда коннекции закончатся будет выдано предупреждающее сообщение.
При всех плюсах такого подключения есть один минус - отсутствие диагностики. Ведущий LOGO! будет посылать команды на «удалённые» входа-выхода без контроля прохождения. Как вариант, можно активировать диагностику сети и осуществить мониторинг собственно порта, но если несколько «ведущих» устройств подключены, например, через коммутатор, то даже физическое отключение кабеля из «ведомого» устройства не будет распознано «ведущим» устройством. Конечно можно задействовать сетевой вход в режиме «диагностика сетевого подключения» но он реагирует только на пропадание сигнала непосредственно на сетевом порту LOGO!.
Пример 2: соединение независимых устройств.
Соединим несколько независимых устройств, каждое из которых работает по своей программе. В LSC создаём сетевой проект. Добавляем новые устройства из верхней части списка и присваиваем адреса. Теперь можно мышкой создать коннекцию и видим графический смысл параметра TSAP, это номер квадратика, к которому мы притянули линию. Самый правый это 27.00, самый левый 20.00. Между ними промежуточные 21…26.
Заполняем область передачи. IB и QB это физические входы-выходы. Можно писать их по сети, но сигналы из программы имеют более высокий приоритет и это имеет смысл делать только если они не задействованы в программе. MB это область флагов. Причём пишется она сразу байтами. Если мы выберем, например, MB0 и длину 1 то все флаги М1…М8 будут скопированы из первого устройства во второе. Если поставить длину 8 то будут прописаны вообще все флаги. Причём на схеме это не будет заметно. Можно «перекосить» передачу, например МВ0 -> МВ2 тогда флаги М1…М8 будут записаны в M17…M24.
Важно помнить!
Определённые номера флагов зарезервированы под служебные нужды и выбирать диапазон необходимо очень внимательно. В целом это транспорт для бинарных сигналов, передавать таким способом аналоговые флаги нельзя. Для передачи численных значений используются переменные типа VB. Длинна такой переменной 2 байта так как это слово. Будет передаваться всё поле указанной длинны разом.
В программе нужно вызвать «сетевой аналоговый вход» или выход (в зависимости от направления передачи), но не выбирать IP партнёра, а указать адрес в локальной памяти переменных VM.
Так же через область VB можно передать бинарные сигналы, если использовать «сетевой» вход или выход, но передаваться они будут всё равно байтом, так как это минимальная длинна переменной, которую можно установить.
Направление передачи можно выбирать любое, одновременно можно и отправлять, и получать данные. Нужно помнить, что в отличии от М-области V-область единая для цифровых и аналоговых сигналов. И если мы будем пользоваться в программе сетевым аналоговым выходом VW0 и просто сетевым выходом V0.0 данные будут считываться из одних и тех-же ячеек памяти. Это может привести к некоторым интересным эффектам и привести к непониманию.
Пример 3: LOGO! клиент а контроллер S7 сервер
Добавляем «Устройство с поддержкой S7», вводим IP и TSAP 10.01 и области передачи. Загружаем всё в LOGO.
С помощью TIA Portal создаём конфигурацию контроллера. В сетевых соединениях создаём S7 коннекцию и вводим параметры.
Локальный ID выбираем по порядку, указатель «активное установление соединения» снять и разрешить S7 соединения.
Теперь нужно создать DB1, обязательно неоптимизированный, и прописать там переменные, которые мы будем использовать.
После запуска видим следующее:
Если коннекция будет подсвечена красным и в деталях «ждем установки с соединения от активного участника» значит что-то неверно настроено в параметрах соединения или нет разрешения «S7-коммункации».
Какую задачу мы решили с помощью такого подключения?
Такое подключение позволяет нам использовать LOGO! как весьма экономичный модуль удалённого ввода-вывода для контроллеров S7. Программы в LOGO! нет, прямая связь входов-выходов с байтами в блоке данных.
Если в LOGO! необходимо иметь собственную программу, нужно прописывать обращение к VW области как в предыдущем примере учитывая все особенности. В контроллере ничего программировать не нужно, всё делает операционная система. Диагностики, соответственно, тоже нет. Даже если отключить кабель, ни LOGO!, ни S7 контроллер не будут это диагностировать и в диагностическом буфере никаких сообщений также не будет.
Что касается выбора параметров при наличии нескольких соединений. TSAP LOGO! будет меняться в зависимости от квадратика, к которому мы притянем соединение. TSAP контроллера выбирается из выпадающего списка а «локальный ID» присваивается просто по очереди.
Как организовать минимальную диагностику?
Для организации минимальной диагностики такой «удалённой периферии» можно использовать контроллер LOGO! в качестве сервера, а контроллер S7 в качестве клиента. Тогда можно будет посмотреть ошибки на выходе STATUS блока PUT\GET.
Создаём коннекцию как описано выше, но оставляем включенным «активное установление соединения».
Организуем вызов функции PUT в минимальной конфигурации SD_1 это наш DB1.DBB0 а ADDR_1 это указатель на VW0 в LOGO! В LOGO! прописываем «серверное соединение» с указанием IP и TSAP.
Можно ограничить принимаемые подключения конкретным IP, а можно принимать все запросы. Область передачи прописывать не нужно, так как переменные будут запрашиваться клиентом (в нашем примере контроллером S7). Локальный TSAP будет присваиваться в порядке создания коннекций, задать его принудительно не получится.
Теперь при обрыве соединения, во-первых, появится ERROR, во-вторых, в STATUS будет ошибка 19 (или описание конкретной ошибки). Это уже можно обработать программно. Но в диагностический буфер такие ошибки автоматически не прописываются.
То-же самое можно сделать в сетевом проекте. Но только не нужно вставлять «новое устройство» с «поддержкой S7 соединений» (это сервер), а нужно установить мышкой курсор на квадратик соединения и добавить клиента.
Информацию о передачи данных добавлять не нужно, это ни на что не влияет. А вот внесение IP позволяет отсечь подключения с других адресов. Дело в том, что если взять два контроллера и в обоих настроить подключение с одной и той-же TSAP то LOGO! будет с одинаковым успехом отрабатывать команды с обеих клиентов «по мере поступления». Правда, коннекция у обоих участников будет то и дело хаотически обрываться, но передача данных все равно будет идти. Это не рекомендуется, но возможно.
Пример 4: подключение к LOGO! панели оператора.
В линейке устройств LOGO! есть штатная панель LOGO! TDE. Программирование панели производится с помощью LSC и подробно описано в руководстве. Нужно только отметить, что такую панель можно подключить одну ( две возможно, но они будут показывать одно и тоже, индивидуально настроить их не представляется возможным) и в явном виде создавать коннекцию не требуется. Достаточно прописать IP, а всё остальное сделает операционная система. Гораздо интереснее вариант с подключением панелей оператора Basic или Comfort. Для этого в TIA Portal нужно выбрать желаемую панель и создать для неё проект. В настройках соединения выбираем протокол LOGO! и указываем адреса.
Далее создаём переменные и указываем нужное соединение и нужную область, например VW0 и VW2
Таким несложным образом можно обратиться к V области переменных c адресом 0 и 2 в LOGO! Теперь эти переменные можно вытащить на экран и очень красиво визуализировать.
Но есть нюансы.
- HMI коннекция никак не параметрируется и нигде не отображается. LOGO! «не знает», что к нему подключена операторская панель и берёт данные.
- К сожалению, не понятно, сколько таких панелей (коннекций) можно подключить и как они будут сосуществовать с остальными коммуникациями. Если все восемь коннекций свободны, то можно подключить несколько панелей, но разделение этого коммуникационного пространства нигде не параметрируется. По факту коммуникация идёт «в порядке живой очереди», по-этому подключать больше одной панели оператора не рекомендуется. Особенно проблемно это выглядит если все восемь коннекций прописать на связь с другими LOGO! или, например, SIMATIC S7-1200. Операторские панели начинают конкурировать и «лезть без очереди» перехватывая соединения, связь с отдельными приборами хаотично замирает, потом восстанавливается. Нужно помнить, что подключение LSC в режиме онлайн-тестирование тоже занимает одну коннекцию и может спровоцировать общую нестабильность в работе.
В целом гарантирована стабильная коммуникация в рамках этих самых 8-ми коннекций одной панели. То есть, если предполагается наличие устройства HMI интерфейса (включая TDE) нужно одну коннекцию всегда оставлять свободной.
Полезные ссылки:
CPU-CPU коммуникации с контроллерами SIMATIC
Как настраивается подключение на TIA Portal?
Какие различия существуют при настройке подключений S7?
LOGO! - S7 соединение с LOGO! клиент и S7-1200/1500 сервер
При подготовке публикации использовались материалы и изображения SIEMENS AG
<-