В предыдущей статье мы говорили о том, как настроить соединение между двумя ПЛК с помощью открытого пользовательского взаимодействия, и использовали протокол TCP для соединения между двумя ПЛК. В статье мы показали, как использовать такие инструкции, как TCON и TDISCON, для установления этого соединения.
Перемещение данных между ПЛК
В этой статье мы покажем, как можно начать перемещение ДАННЫХ между ПЛК, которые мы подключили в прошлой статье. Для этой цели мы будем использовать блоки TSEND и TRCV.
Отправка данных в ПЛК_2
Мы будем основываться на проекте, который мы создали в прошлой статье, то есть в нашем проекте уже установлены блоки TCON и TDISCON. и мы продолжим наш проект, добавив блоки TSEND и TRCV, чтобы начать перемещение данных между двумя ПЛК.
Чтобы отправить данные из ПЛК_1 в ПЛК_2, давайте начнем с создания блока данных, который будет содержать всю информацию, которую нам нужно отправить в ПЛК_2. См. рисунок 1.
рисунок 1. Создайте новый блок данных.
Как мы уже обсуждали, лучше всего давать блокам правильное название, так будет проще и интуитивно понятно, для чего предназначен каждый блок.
Во-вторых, давайте добавим некоторые данные в блок данных, которые мы хотим отправить в ПЛК_2.
Мы предположили, что нам нужно отправить три разных тега данных. См. рисунок 2.
рисунок 2. Определите некоторые данные для отправки в ПЛК_2.
Есть еще одна вещь, которую нам нужно сделать, чтобы иметь возможность отправить только что созданный нами блок данных в ПЛК_2, а именно убедиться, что оптимизированный доступ к блоку данных не выбран.
Для этого нам нужно перейти в свойства блока данных и снять этот выбор. См. рисунки 3 и 4.
рисунок 3. Перейдите в свойства блока данных.
рисунок 4. Снимите отметку с параметра Оптимизированный доступ к блоку.
Обязательно снимите отметку с этого параметра перед использованием блока TSEND, иначе он не сработает.
Теперь, когда мы подготовили данные, которые хотим отправить в ПЛК_2, давайте попробуем их отправить. Мы сделаем это с помощью блока TSEND. Просто перетащите инструкцию в ваш основной OB1, чтобы добавить ее в вашу логику. См. рисунок 5.
рисунок 5. Добавьте блок TSEND.
При добавлении блока TSEND вам будет предложено создать экземпляр блока данных, поскольку это по сути функциональный блок, снова дайте ему правильное имя. См. рисунок 6.
Рисунок 6. Создание экземпляра данных для TSEND.
Когда блок TSEND будет добавлен в вашу логику, вы обнаружите, что нам нужно сделать некоторые важные конфигурации. См. рисунок 7.
рисунок 7. Блок TSEND.
Как вы можете видеть, нам нужно сделать некоторые настройки:
- Сигнал REQ, чтобы разрешить отправку данных.
Что касается сигнала REQ, мы определим тег SendData, который будет использоваться для включения отправки данных.
- Идентификатор соединения, которое я буду использовать для отправки данных, поскольку у меня может быть более одного соединения, поэтому мне нужно назначить, какое соединение будет использоваться.
В последней статье мы определили идентификатор 1 для соединения между ПЛК_1 и ПЛК_2, поэтому мы установим идентификатор на 1.
- ДАННЫЕ, которые мне нужно отправить. Мы уже создали блок данных со всей информацией, которую мне нужно отправить, мы можем просто перетащить блок данных в блок TSEND. Смотрите рисунок 8.
рисунок 8. Настройте блок TSEND.
Получение данных из ПЛК_1
После того, как мы настроим TSEND для отправки данных в ПЛК_2, нам нужно получить эти данные внутри ПЛК_2. Для этого мы будем использовать блок TRCV. Смотрите рисунок 9.
рисунок 9. Добавьте блок TRCV.
Как видите, просто перетащите блок TRCV, чтобы добавить его в свою логику. И вы знаете, что далее нам нужно будет создать экземпляр данных для этого блока. Смотрите рисунок 10.
рисунок 10. Добавьте экземпляр данных в блок TRCV.
После вызова блока TRCV в вашу логику нам нужно будет настроить некоторые параметры, как мы это делали с TSEND. Смотрите рисунок 11.
рисунок 11. Блок TRCV.
Как вы можете видеть, EN-R — это разрешающий сигнал, который должен быть истинным, чтобы позволить блоку TRCV начать получать данные. ID — это соединение, которое будет использоваться, а DATA — это место, где будут храниться полученные данные.
Итак, нам нужно создать блок данных для получения данных внутри него. Не забудьте дать ему правильное имя. Смотрите рисунок 12.
рисунок 12. Создайте блок данных для получения данных.
Далее определите информационные теги, которые будут получены от ПЛК_1, лучше всего убедиться, что блок данных содержит ту же структуру данных, что и данные, которые будут получены. См. рисунок 13.
рисунок 13. Определите теги данных.
Для EN-R мы определим тег RecieveData, чтобы включить прием данных. А для идентификатора соединения это 1, как мы установили ранее. См. рисунок 14.
рисунок 14. Сигнал EN-R.
Затем перетащите созданный нами блок данных в наш блок TRCV, чтобы завершить все настройки. См. рисунок 15.
рисунок 15. Добавьте свой блок данных в блок TRCV.
Когда вы перетащите созданную нами базу данных, вы заметите, что TIA Portal выдает предупреждение и не принимает только что добавленный нами блок данных.
И это потому, что мы не сняли отметку с «Оптимизированного доступа к блоку» блока данных, как мы сделали с TSEND. Смотрите рисунок 16.
рисунок 16. Оптимизированный доступ к блоку.
Как мы уже говорили, нам нужно снять отметку с этой опции, иначе TSEND и TRCV не будут работать. Смотрите рисунок 17.
рисунок 17. Снимите отметку с опции оптимизированного доступа к блоку.
Вы можете видеть, что после снятия отметки с «оптимизированного доступа к блоку» блок данных теперь принимается с помощью инструкции TRCV.
Теперь, когда вызов и настройка блоков TSEND и TRCV завершены, давайте смоделируем наш проект и посмотрим, как будут отправляться и приниматься данные.
Сначала мы создадим простую логику, которая гарантирует наличие значений данных для наших определенных тегов.
Простая логика для автоматического создания значений данных
Мы создадим простую логику для автоматического создания и обновления значений данных, чтобы было легче увидеть передачу данных между двумя ПЛК. Смотрите рисунок 18.
рисунок 18. Простая логика.
Эта простая логика будет использовать тактовый бит %M50.5 для автоматического изменения значений данных, хранящихся в блоке данных SendToПЛК_2.
Моделирование проекта ПЛК
Давайте скомпилируем наш проект и начнем моделирование. Первое, что нам нужно будет сделать, это установить соединение между двумя ПЛК с помощью блока TCON, который мы настроили в прошлой статье.
Помните, что нам нужно будет включить возможность подключения из ПЛК_2 и установить соединение с ПЛК_1. См. рисунки 19, 20 и 21.
рисунок 19. Нет связи между ПЛК
рисунок 20. включите соединение.
рисунок 21. Установите соединение.
Теперь, когда мы установили соединение между двумя ПЛК, давайте переместим данные из ПЛК_1 в ПЛК_2, как мы его настроили.
Сначала установите тег SendData в значение TRUE. См. рисунок 22.
Рисунок 22. Сигнал REQ имеет значение true.
Вы можете видеть, что, хотя SendData имеет значение TRUE, данные не были отправлены из ПЛК_1 в ПЛК_2. И это потому, что блок TRCV еще не включен для приема каких-либо данных. См. рисунок 23.
picture23. Сигнал EN-R — ложь.
Как видите, поскольку RecieveData еще не имеет значения TRUE, блок TRCV не может принимать какие-либо данные. Как только EN-R становится истинным, данные будут отправлены из блока данных в ПЛК_1 в блок данных ПЛК_2. См. рисунок 24.
picture 24. Сигнал EN-R — Истина.
Как только EN-R становится истинным, вы можете видеть, что данные перемещаются из ПЛК_1 в ПЛК_2.
Если вы откроете проект и смоделируете его самостоятельно, вы обнаружите, что данные постоянно обновляются в ПЛК_1 и передаются в ПЛК_2.
И вот как мы можем установить связь между двумя ПЛК и использовать блоки TSEND, TRCV.