Бібліотека NetBaseServices Codesys: TCP/UDP
TCP_Client (FB)
Щоб підключитися до TCP-сервера в кінцевій точці, означеній за допомогою itfIPAddress і uiPort, вхід xEnable має встановити значення TRUE. Під час налаштування підключення xBusy має значення TRUE, а xActive має значення FALSE. Після встановлення з’єднання xActive і xBusy мають значення TRUE, а вихід itfConnection дійсний. Після закриття з’єднання з боку сервера xActive стає FALSE, itfConnection стає недійсним, а xDone стає TRUE.
itfConnection можна використовувати як вхід itfConnection для функціональних блоків TCP_Write, TCP_Writer, TCP_Read і TCP_Reader.
| Ім’я | Тип | Початкове значення | коментар | Успадковано від |
|---|---|---|---|---|
| Input | ||||
xEnable |
BOOL |
TRUE: активує означену операцію. FALSE: перериває/скидає означену операцію |
LCon | |
udiTimeOut |
UDINT |
0 | Означує час (мкс), після якого встановлення з’єднання переривається з активним xError. |
|
itfIPAddress |
IIPAddress | Пов’язана адреса сервера (з ResolveHostname, можливе перетворення імені хоста на IP-адресу) | ||
uiPort |
UINT |
Відповідний порт сервера | ||
| Input Const | ||||
itfAsyncProperty |
IAsyncProperty | |||
itfTLSContext |
ITLSContext | |||
itfTSNContext |
ITSNContext | |||
| Output | ||||
xDone |
BOOL |
Готовий стан досягнуто | LCon | |
xBusy |
BOOL |
TRUE: операція виконується |
LCon | |
xError |
BOOL |
TRUE: Виникла умова помилки |
LCon | |
eErrorID |
ERROR | LCon | ||
xActive |
BOOL |
TRUE, якщо з’єднання встановлено |
||
itfConnection |
IConnection | Встановлене з’єднання з відповідним сервером дійсне, якщо xActive = TRUE |
TCP_Read (FB)
Цей функціональний блок служить для читання даних із попередньо встановленого з’єднання, указаного в itfConnection. Поки xEnable має значення TRUE і з’єднання дійсне. Покажчик pData вказує область пам’яті для запису прочитаних даних. udiSize визначає максимальну кількість байтів для читання. Коли дані було успішно прочитано, xReady встановлюється на TRUE, а udiCount вказує фактично прочитану кількість байтів.
| Name | Type | Comment | Inherited from |
|---|---|---|---|
| Input | |||
xEnable |
BOOL |
TRUE: Активує означену операцію FALSE: перериває/скидає визначену операцію |
LConC |
itfConnection |
IConnection | ||
pData |
__XWORD |
||
udiSize |
UDINT |
||
| Output | |||
xBusy |
BOOL |
TRUE: Операція виконується |
LConC |
xError |
BOOL |
TRUE: Досягнуто умови помилки |
LConC |
eErrorID |
ERROR | LConC | |
xReady |
BOOL |
||
udiCount |
UDINT |
TCP_Write (FB)
Цей функціональний блок служить для запису даних до попередньо встановленого з’єднання, указаного в itfConnection. Вміст області пам’яті, позначений покажчиком pData, містить дані, які потрібно записати. udiSize визначає кількість байтів для запису. Якщо xDone має значення TRUE, udiCount байтів даних було успішно записано.
| Name | Type | Comment | Inherited from |
|---|---|---|---|
| Input | |||
xExecute |
BOOL |
Наростаючий фронт: починає визначену операцію. FALSE: скидає визначену операцію після досягнення стану готовності |
ETrigTo |
udiTimeOut |
UDINT |
Макс. час роботи для виконання [мкс], 0: без обмеження часу роботи | ETrigTo |
itfConnection |
IConnection | ||
pData |
__XWORD |
||
udiSize |
UDINT |
||
| Output | |||
xDone |
BOOL |
Ready condition reached | ETrigTo |
xBusy |
BOOL |
TRUE: Operation is running |
ETrigTo |
xError |
BOOL |
TRUE: Error condition reached |
ETrigTo |
eErrorID |
ERROR | ETrigTo | |
udiCount |
UDINT |
Приклади
Функціональні блоки з вхідною або вихідною змінною з назвою hBlock внутрішньо використовуватимуть бібліотеку Segmented Block Manager. Ця бібліотека надає функціональні можливості для керування структурами даних таким чином, щоб кількість дій копіювання була якомога меншою. Наразі впровадження цієї бібліотеки має серйозну проблему (CDS-56664). Він часто використовує функцію для виділення (SysMemAlloc) і звільнення пам’яті (SysMemFree) розділів. Така поведінка може призвести до фрагментації пам’яті. Це не є хорошою практикою в промисловому середовищі, оскільки йдеться про можливість безперервної роботи цілодобово та 365 днів на рік.
У цьому прикладі право власності на дескриптор hBuffer безпосередньо пов’язано з обробкою наступних функціональних блоків або функцій. Якщо ви виконуєте деякі інші кроки обробки та отримуєте право власності на дескриптор hBlock, необхідно буде використовувати функцію SBM.DeleteBuffer, щоб звільнити підключені ресурси.
PROGRAM Client
VAR
Client : NBS.TCP_Client;
Write: NBS.TCP_Write;
Read: NBS.TCP_Read;
T1: TON;
TTrig: R_TRIG;
ATrig: R_TRIG;
FF: SR;
sTxData: STRING;
sRxData: STRING;
szSize: CAA.SIZE;
END_VAR
