atpv

Навчальні матеріали з автоматизації технологічних процесів та виробництв, розроблені спільнотою

<- До підрозділу

Приклад реалізації MODBUS TCPIP Клієнтської програми для зв’язку VIPA Speed7 з віддаленими модулями вводу/виводу VIPA IM 253NET

Розглянемо приклад реалізації MODBUS TCPIP Клієнтської програми для зв’язку VIPA Speed7 з віддаленими модулями вводу/виводу VIPA IM 253NET. Необхідно написати прикладну програму в середовищі Step7 для реалізації періодичного (1 раз в 500мс) зчитування значення 4-х аналогових входів в ПЛК Vipa Speed7NET з віддалених модулів вводу/виводу на базі VIPA IM 253NET (рис.6.29) .

img

Рис.6.29. Постановка задачі до прикладу 6.7

Даний приклад розглянутий з максимальними спрощеннями і без деталізації, яка не стосуються даної теми. Враховуючи, що для програмування VIPA можна скористатися іншим програмним продуктом (WinPLC7) деталі створення конфігурації для Step7 в прикладі упущені. Слід також відмітити, що Siemens пропонує свій комунікаційний функціональний блок, як для реалізації Клієнта так і Сервера MODBUS TCP/IP, однак в даному прикладі використовуються стандартні функції AG_SEND та AG_RECV.

З рис.6.29 видно, що 4-ри 12-бітні входи будуть зчитуватися як 4 слова. Оскільки вони знаходяться на першому посадочному місці, змінна AI0 – буде адресуватись як 0-вий вхідний регістр, а AI3 – як 3-тій. Таким чином задачу можна сформувати так: написати прикладну програму в ПЛК Vipa Speed7NET (IP=192.168.0.1) для реалізації зчитування по MODBUS TCP/IP перших 4-х вхідних регістрів з Серверу з адресою IP=192.168.0.2. При такій постановці вже не важлива конкретика реалізації віддаленого пристрою.

Для повноти картини наведемо схему мережних з’єднань (рис. 6.30). Слід відмітити, що у VIPA S7 NET серед 2-х портів Ethernet X8 та X5 тільки один порт, а саме X8(TP), може використовуватись для різних типів з’єднань аналогічних CP343 від Siemens. Інший порт (X5) може використовуватись тільки для PG/OP з’єднань. Таким чином, для з’єднання даного ПЛК по MODBUS TCP/IP необхідно використати роз’єм Х8 (ТР).

Підпис: AI 4x12 bits

Рис.6.30. Схема мережних з’єднань до прикладу 6.7

Для реалізації обміну по протоколу TCP в S7-подібних контролерах конфігурують з’єднувальні канали (Connections). Для кожного каналу вказують:

В принципі, використовуючи з’єднувальні канали, можна обмінюватися поверх TCP по будь-якому відкритому протоколу. Тому MODBUS TCP/IP є один із багатьох варіантів використання даного типу комунікацій Siemens. Так, наприклад, Step5 сумісний зв’язок теж конфігурується подібним чином, однак порти TCP будуть інші і протокол прикладного рівня теж інший.

Для поставленої задачі створюється з’єднувальний канал з наступними характеристиками:

Після такої конфігурації, навіть без написання додаткової програми, між ПЛК та модулем віддаленого вводу/виводу створиться TCP з’єднання. Однак ніякими даними користувача вузли обмінюватися не будуть.

Для передачі даних від ПЛК VIPA S7 NET, необхідно скористуватися комунікаційною функцією AG_SEND, яка поставляється з бібліотеками для VIPA. Ця функція відправляє блок даних по створеному з’єднувальному каналу. Одним із аргументів цієї функції є вказівник на блок даних, які необхідно відправити. В нашому випадку це, по суті, MODBUS TCP/IP ADU. Найбільш зручний спосіб описати в Step7 подібну структуру та виділити для неї пам’ять – це використати блоки даних типу DB. Таким чином формуємо DB10 для створення MODBUS TCP/IP ADU, відповідно до таблиці 6.5 та синтаксису функції читання вхідних регістрів (див. п. 6.2.2). Результат формування блоку DB10 в Step7 показаний на рис.6.31.

Рис.6.31. Блок DB10 для формування клієнтського запиту MODBUS до прикладу 6.7

Перші два поля при ініціалізації блока прирівнюються нулю. Поле TransactionID можна використати для відслідковування послідовності відповідей на запити (який TransactionID в запиті, такий і у відповіді), однак це не обов’язково. ProtocolID=0, бо використовується сервер MODBUS.

Кількість наступних байт залежить від функції, в нашому випадку їх 6. Адреса Веденого=0, тому що адресат знаходиться безпосередньо на Ethernet. Функція=4, оскільки необхідно зчитати вхідні регістри, початкова адреса=0 а кількість =4 (див. рис.6.28).

Вказівник на сформований блок даних вказується в аргументах функції AG_SEND. Частина програми, яка відповідає за відправку запитів буде мати вигляд як на рис. 6.32.

Рис.6.32. Частина програми (Network1-3), яка відповідає за відправку запитів, (до прикладу 6.7).

Програма написана в організаційному блоці OB1 (циклічний виклик). В першому ланцюжку (Network1) кожні 500 мс, перезапускається таймер і генерується одиничний імпульс M100.0 тривалістю в один цикл. Цей імпульс використовується для відправки даних в мережу (параметр ACT) раз в 500 мс. З цією ж періодичністю в Network2 збільшується значення 0-го слова в блоці даних DB10 (DB10.DBW0), яке вказує на ідентифікатор транзакції. Крім безпосередньо вказівника на блок з даними для відправки довжиною 12 байт (параметр SEND), в функції вказується ідентифікатор з’єднувального каналу (параметр ID=3), адреса комунікаційного модуля (LADDR=140h), та кількість байт для відправки. Контроль відправки та виклику функцій проводиться за допомогою параметрів DONE (біт виконання операції), ERROR (біт наявності помилки) та STATUS (слово статусу операції), про використання яких можна можна прочитати в довідниковій літературі.

Після запуску програми на виконання, процесор ПЛК буде записувати вказані в DB10 дані в вихідний буфер комунікаційного модулю з адресою LADDR=140h, які відправляться цим модулем по з’єднувальному каналу TCP з ідентифікатором 3. Інтерфейсний модуль розподіленої системи вводу/виводу VIPA IM 253NET, отримавши по з’єднувальному каналу дані MODBUS TCP/IP ADU, сформує повідомлення-відповідь і відправить його по цьому ж каналу. Це повідомлення попадає у вхідний буфер комунікаційного модулю. Для того, щоб прочитати дані з вхідного буферу, використовується функція AG_RECV.

В якості одного з параметрів функції AG_RECV є вказівник на дані, куди необхідно помістити результат функції, тобто дані вхідного буферу. Аналогічно попередній частині програми, найкраще використати блок даних, наприклад DB11. Значення ініціалізації полів даного блоку не відіграє ніякої ролі, оскільки заповнюється значеннями буферу. Однак бажано задати структуру блоку, яка і показана на рис.6.33.

Рис.6.33. Блок DB11 для отримання відповіді серверу MODBUS (до прикладу 6.7).

Друга частина програми, в якій реалізоване отримання необхідних значень аналогових входів, показана на рис.6.34.

Рис.6.34. Частина програми (Network4-5), яка відповідає за отримання відповіді з вхідного буферу комунікаційного модулю (до прикладу 6.7).

У випадку позитивного результату виконання функції та отримання нових даних (NDR=0 та ERROR=0) записуємо значення в змінні MW200-MW206, відповідно до завдання. Слід зазначити, що даний приклад значно спрощений, зокрема в ньому не враховані випадки виникнення комунікаційних помилок. Однак він показує яким чином використовується клієнтський бік MODBUS TCP/IP в Siemens-сумісних ПЛК. Аналогічно можна прописати і серверний бік MODBUS TCP/IP, однак це набагато складніша задача.