Бібліотека 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