plcnext

Замітки по роботі з PLCnext

Розширені функції та функціональні блоки -> Ethernet

TLS_SEND_2

Функціональний блок TLS_SEND_2 поєднує обробку TCP і TLS в одному FB. Крім того, він підтримує сервер TCP/TLS, який може спілкуватися з кількома клієнтами. FB TLS_SEND_2 потрібно використовувати з дескрипторами сокетів, створеними FB TLS_SOCKET_2.

image-20221101130428296

Опис роботи

Функціональний блок використовується для надсилання даних через TCP або TLS (Transport Layer Security) на пристрій Ethernet із підтримкою TCP/TLS. Це робиться за допомогою сокета TCP/TLS. Перш ніж надсилати дані, спершу потрібно відкрити сокет за допомогою функціонального блоку TLS_SOCKET_2.

Після відкриття сокета та встановлення з’єднання функціональний блок надсилає дані комунікаційному партнеру через чисте з’єднання TCP або захищене з’єднання TLS. Тип підключення залежить від значення входу START_TLS функціонального блоку TLS_SOCKET_2:

Функціональний блок забезпечує перевірку безпеки для визначення того, чи програма IEC очікує, що дані надсилатимуться через з’єднання TCP чи через захищене з’єднання TLS. Перевірка безпеки виконується шляхом порівняння значень входу SEND_SECURE функціонального блоку та виходу START_TLS FB TLS_SOCKET. Якщо виявлено невідповідність вхідних значень, наприклад, SEND_SECURE = TRUE (додаток IEC вимагає безпечної передачі даних) а START_TLS = FALSE (протокол TLS ще не ініціалізовано), вихід ERROR встановлюється в TRUE, а на виході STATUS вказується код помилки 16#C150 .

Кожна операція передачі ініціюється переднім фронтом на вході запиту REQ. Під час цього циклу функціональний блок копіює дані для надсилання (застосовуються до вхідних даних DATA) у внутрішній буфер. Вихід BUSY встановлено на TRUE, поки дані надсилаються з внутрішнього буфера. Якщо BUSY = TRUE, вхід REQ ігнорується. Передача нових даних, які доступні на вході DATA під час поточного циклу передачі, може бути ініційована лише за допомогою переднього фронту на вході REQ, якщо для виходу BUSY встановлено значення FALSE.

Якщо з’єднання розірвано та партнера по зв’язку неможливо досягти, вихід ERROR встановлюється на TRUE протягом одного циклу. Відповідний код помилки надається на виході STATUS протягом цього циклу.

Сокет, відкритий функціональним блоком TLS_SOCKET_2, можна використовувати лише для наступних викликів функціонального блоку TLS_SEND_2, якщо вихід ACTIVE функціонального блоку TLS_SOCKET_2 має значення TRUE. Виклик функціонального блоку TLS_SEND_2, коли ACTIVE = FALSE, викликає помилку у функціональному блоці TLS_SEND_2 (видається ERROR = TRUE і код STATUS code= 0xC210).

Для контролерів із вбудованим брандмауером переконайтеся, що брандмауер не блокує порти, залучені до зв’язку. В іншому випадку з’єднання не вдасться встановити.

Входи

Назва Тип Призначення
REQ BOOL Передній фронт на вході запиту REQ ініціює передачу даних, застосованих до входу DATA. Доки надсилаються дані (BUSY = TRUE) введення ігнорується. Усі інші вхідні параметри оцінюються з наростаючим фронтом на вході REQ у випадку, якщо BUSY = FALSE.
HANDLE DWORD Дескриптор сокета, який було відкрито за допомогою функціонального блоку TLS_SOCKET_2 . Параметр оцінюється лише в тому циклі, в якому параметр REQ змінює значення TRUE.
DATA_CNT UDINT Кількість байтів, які потрібно надіслати з буфера DATA (DATA_CNT = DATA_CouNT). Максимальна кількість байтів для надсилання обмежена максимальним значенням 2147483647 байт. Якщо значення дорівнює 0 (= початкове значення параметра), буде надіслано всю змінну, пов’язану з DATA. Параметр оцінюється лише в циклі, у якому параметр REQ перемикається на TRUE. Ви можете використовувати функцію SIZEOF, щоб визначити розмір змінної (кількість байтів, зарезервованих для змінної в пам’яті контролера).
SEND_SECURE BOOL Означує, чи програма IEC очікує, що дані надсилатимуться через з’єднання TCP чи через TLS:
TRUE: програма очікує через захищене з’єднання TLS
FALSE: програма очікує з’єднання через TCP.
Вхідне значення порівнюється зі значенням START_TLS, що вводиться FB TLS_SOCKET_2. Якщо виявлено невідповідність вхідних значень, наприклад, SEND_SECURE = TRUE (додаток IEC вимагає безпечної передачі даних) і START_TLS = FALSE (протокол TLS ще не ініціалізовано), вихід ERROR встановлюється на TRUE, а код помилки 16# C150 вказується на виході STATUS

Входи/виходи

Назва Тип Призначення
DATA ANY Буфер даних, який містить дані для надсилання. Дані передаються як потік байтів. Перетворення Little-/Big-Endian не виконується. Якщо типом даних підключеної змінної є STRUCT (або ARRAY OF STRUCT), потік байтів може містити байти заповнення.

Виходи

Назва Тип Призначення
DONE BOOL Після успішного надсилання даних установлює значення TRUE. Вихід встановлюється лише на один цикл.
BUSY BOOL Встановлює значення TRUE, коли система намагається надіслати дані. Поки для параметра встановлено значення TRUE, вхід REQ ігнорується.
ERROR BOOL Якщо виникає помилка, вихід ERROR встановлюється на TRUE. Відповідний код помилки можна прочитати на виході STATUS, коли ERROR = TRUE. У разі виявлення помилки вихід встановлюється на TRUE лише на один цикл. Код помилки має бути прочитаний на виході STATUS протягом цього циклу. Див. коди помилок / коди стану для функціональних блоків TLS_*.
STATUS WORD Надає код помилки у разі помилки (ERROR = TRUE) або поточний стан функціонального блоку (ERROR = FALSE). Коди помилок починаються з 16#Cxxx, а коди стану — з 16#8xxx.Див. коди помилок/коди стану для функціональних блоків TLS_*.