SOCK_OPEN - открытие сокета IP

Назначение.
Функциональный блок SOCK_OPEN применяется для открытия сокета IP.
Входные параметры.
|
Название параметра
|
Тип данных
|
Краткое описание
|
|
IP_ADDR1
|
INTEGER
|
IP-адрес в формате Ipv4 основного абонента
|
|
IP_ADDR2
|
INTEGER
|
IP-адрес в формате Ipv4 резервного абонента
|
|
IP_PORT1
|
INTEGER
|
Номер IP порта основного абонента
|
|
IP_PORT2
|
INTEGER
|
Номер IP порта резервного абонента
|
|
IP_TYPE
|
INTEGER
|
Код типа сокета:
|
|
IP_MODE
|
INTEGER
|
Код режима обмена:
|
|
COMMAND
|
INTEGER
|
Управляющая команда:
|
|
TIMEOUT
|
INTEGER
|
Период времени в миллисекундах, в течение которого блок будет пытаться установить соединение с одним из указанных абонентов. При отсутствии соединения по истечении таймаута - выводится ошибка, и осуществляется попытка подключения ко второму абоненту.
Актуален при работе с TCP-сокетом (IP_TYPE=1).
|
|
PARAM
|
INTEGER
|
Зарезервированный параметр, в настоящее время не используется.
|
Выходные параметры.
|
Название параметра
|
Тип данных
|
Краткое описание
|
|
SOCK_ID
|
INTEGER
|
Идентификатор открытого сокета. При возникновении ошибок идентификатор сокета равен -1.
|
|
NET
|
INTEGER
|
Код статуса сети, с которой установлено соединение:
|
|
STA
|
INTEGER
|
Код статуса сокета:
|
|
CODE
|
INTEGER
|
Служебный код статуса соединения, может быть сообщен разработчикам в случае некорректной работы блока для выявления ошибок.
|
|
FAULT
|
INTEGER
|
Код завершения операции:
|
Описание алгоритма.
-
Через входные параметры передаются настройки открываемого сокета. Параметры подключения для основного абонента (IP_ADDR1 и IP_PORT1) и резервного (IP_ADDR2 и IP_PORT2) передаются в виде целых чисел.Для преобразования строкового представления IP-адреса в числовое используйте системную функцию TO_IP_ADDR().
-
После передачи входных параметров функциональный блок в течение заданного таймаута осуществляет попытку подключения к основному абоненту, и при успешном подключении выводит информацию о созданном сокете.
-
Если в течение таймаута соединение с основным абонентом не установлено, возвращается код ошибки FAULT=3, и осуществляется попытка подключения к резервному абоненту. При успешном подключении к резервному, выводится информация о созданном сокете.
-
Если в течение таймаута соединение с резервным абонентом не установлено, возвращается код ошибки FAULT=3, и осуществляется попытка подключения к основному.Таким образом, функциональный блок по очереди в течении времени таймаута будет пытаться установить связь с одним из указанных абонентов.
Обмен данными через сокет.
Для передачи данных используйте функциональный блок FL_WR.

Для приема данных используйте функциональный блок FL_RD.

Для определения количества принятых и доступных для считывания данных используйте функциональный блок PORT_CTRL.

Пример синтаксиса на языке ST.
//указываем IP-адрес и номер порта основного абонента
Block.IP_ADDR1 := TO_IP_ADDR('192.168.0.1');
Block.IP_PORT1 := 80;
//указываем IP-адрес и номер порта резервного абонента
Block.IP_ADDR1 := TO_IP_ADDR('192.168.1.1');
Block.IP_PORT2 := 80;
//создаем TCP сокет и инициируем соединение в режиме Master
Block.IP_TYPE := 1;
Block.IP_MODE := 0;
//открытия сокета с таймаутом ожидания 1000 мсек
Block.COMMAND := 1;
Block.TIMEOUT := 1000;
//вызов функционального блока
Block.SOCK_OPEN();
//чтение выходных параметров
SOCK_ID := Block.SOCK_ID;
NET := Block.NET;
STA := Block.STA;
CODE := Block.CODE;
FAULT := Block.FAULT;
|
