Подключение к "умному дому"

Автор Vlad, 23 августа 2019, 20:16:00

« назад - далее »

Vlad

Здравствуйте. Есть такая задача: подключить два контроллера М100 каждый со своей панелью Z033  к системе "умный дом" (далее УД) по протоколу Modbus RTU, при том, что мастером в сети должен быть контроллер УД. С УД хотят задавать уставку t, скорость вентилятора, вкл/выкл установку, хотят считывать значение t приточного воздуха. Но при этом должна остаться возможность управления с Z033. Переключение между управлением от УД и от панели Z033 можно, например, выбором скорости: "auto" - управление от УД, любая другая скорость - панель Z033. Реализация такой задачи в принципе возможна?

mike

Если использовать стандартную программу с форума - то эта возможность есть изначально

Vlad

Замечательно! Я не сомневался в правильности выбора контроллеров, только Zentec!  ;D

Vlad

Я просмотрел все видеоуроки в ZWB. А можно попросить сделать еще один? Было бы крайне интересно, разобрать такой пример: подключение одного контроллера Zentec №1 (master) по Modbus с другим контроллером №2 (slave), к которому в свою очередь подключена Z033 (тоже slave). И вот как организовать простейшую программу, чтобы включение дискретного входа на контроллере №1 приводило к включению выхода на №2, изменение скорости вентилятора на Z033, приводило к изменению аналогового выхода на №1 и т.п. А еще бы было интересно посмотреть связки контроллеров Zentec по Modbus с новыми модулями ввода-вывода, например с ПЛК M244. Очень прошу. Пожалуйста.

mike

Цитата: Vlad от 24 августа 2019, 16:28:45
Я просмотрел все видеоуроки в ZWB. А можно попросить сделать еще один? Было бы крайне интересно, разобрать такой пример: подключение одного контроллера Zentec №1 (master) по Modbus с другим контроллером №2 (slave), к которому в свою очередь подключена Z033 (тоже slave). И вот как организовать простейшую программу, чтобы включение дискретного входа на контроллере №1 приводило к включению выхода на №2, изменение скорости вентилятора на Z033, приводило к изменению аналогового выхода на №1 и т.п. А еще бы было интересно посмотреть связки контроллеров Zentec по Modbus с новыми модулями ввода-вывода, например с ПЛК M244. Очень прошу. Пожалуйста.
Задача совсем несложная, но модбас не любит циклических связей. Разумнее было бы назначить панель мастером, и работать через нее. Тем более что Z031 - это полноценный ПЛК, который приходит на смену Z033.
Тем не менее вопрос интересный - постараюсь на него ответить.

mike

Предлагаю задачу разбить на несколько этапов.
Сначала передача сигнала от мастера к слейву.
В приложении простейший проект.
Дискретный вход имитирую одноимённой переменной.
Запуск проекта осуществляется с поляны (оба контроллера в симуляцию). Почему все так настроено - читаем по форуму. Я писал об этом.
В ЗВБ есть несколько методов общения с подчиненными:

  • Блоки чтения и записи (поддерживаются групповые запросы)
  • Блоки чтения и записи карты памяти, принадлежащей проекту (в одном проекте может быть много контроллеров и с ними очень удобно работать через блоки "Чтение переменных" и "Запись переменных"
  • Обращение к произвольной карте памяти через автоматические запросы (Функция "Переменные Modbus")
Обо всем этом есть статьи и на форуме и есть описание в справке. Например, "Переменные Modbus" см. скриншот
Для Вашей задачи подойдет третий вариант, его и будем рассматривать.

mike

Дальше надо решить задачу с имитацией панели 033. Подключать ее проводами к компьютеру мне лень, хоть она вместе с переходником и БП лежит у меня в ящике стола. Для задачи Влада достаточно создать виртуальный контроллер и добавить единственную переменную. Но не наглядно как-то получится. Что же делать? Есть идея! Я не так давно написал эмулятор панели 033 для платформы Z031. Ей и воспользуемся!
Добавляю программу в проект и перехожу к настройке симулятора сети.

mike

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

mike

Итак, рассмотрим сегмент сети (см. приложение)
По заданию, контроллер "Главный" имеет главный порт, который обращается к подчиненному порту контроллера "Подчиненный". Надо оговориться, что по факту оба контроллера по порту СОМ0 являются слейвами, а по порту СОМ1 - мастерами: "Главный" запрашивает "Подчиненного", а "Подчиненный" запрашивает панель и результат запроса сохраняет в промежуточной переменной, которую читает "Главный" контроллер. Это придумал не я, а Влад. Так что если сложно - за разъяснениями к нему)))

mike

Итак, настраиваю на контроллере "Главный" порт СОМ1 как Мастер и подключаю его к виртуальному порту 0 рабочей станции. Настраиваю на разделение порта на несколько задач и назначаю TCP порт 50000 (можно назначать любой TCP порт, который не занят в системе)
Для контроллера "Подчиненный" устанавливаю модбас адрес (я взял дефолтный 247 (лент было циферьку двигать)) и подключаю СОМ0 к виртуальному порту 0 рабочей станции. Для того что бы все заработало, - необходимо сделать идентичные настройки второй копии порта рабочей станции.

mike

Собственно все готово к первому тесту.
Запускаю симуляцию Подчиненного и Главного.

mike

Исходная картинка у Подчиненного - переменная равна 0. Переходим на вкладку Главного и устанавливаем 1 у переменной "Дискретный вход". Через 500 мс у подчиненного произойдет смена состояния (почему 500 мс - смотрим настройки времени опроса переменных)

mike

Первая часть задачи решена и даже протестирована.
Решаем вторую часть.
Подключаю симулятор панели к контроллеру "Подчиненный".
Делаю все так же, как в прошлый раз. Но порт TCP указываю 50001. Если бы указал 50000, то была бы каша из данных. Не смотря на то, что используются разные виртуальные порты, сама виртуализация (если можно так сказать) происходит через TCP порты. Поэтому для разных подсетей необходимо устанавливать разные TCP порты.

mike

Дальше все очень просто. Берем карту памяти подчинённой панели (033 или 031 или что-то там еще, нет разницы). Изучаем её. В конкретном примере 031 панели я сделал 2 переменные, функционально дублирующие друг друга. 114h - это для совместимости с панелями 033 и 9c40h - просто отдельная переменная уставки скорости вентилятора, - так проще управлять. Вот к ней и привяжемся. Собираем простейшие схемы, как на картинках и запускаем симуляцию всех устройств.

mike

#14
Собственно, задача решена.
Смотрим на скриншоты и удивляемся, как все просто.
Пожалуйста, не забывайте благодарить наших ребят за то, что они делают ваши программы лаконичными и простыми.
Попробуйте написать то же самое, и, главное, отладить на Codesys или SMlogix.
В приложении проект - запускайте в симуляторе и изучайте.