Среда разработки Unimod PRO 2 (версия 2.3.40)
 Руководство по программированию
×

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
Код типа сокета:
  • 0 - UDP-сокет
  • 1 - TCP-сокет
IP_MODE
INTEGER
Код режима обмена:
  • 0 - в режиме Master мастер-модуль является инициатором TCP соединения;
  • 1 - в режиме Slave мастер-модуль ожидает запроса на соединение.
COMMAND
INTEGER
Управляющая команда:
  • 1 - открыть сокет с заданными параметрами
  • 0 - закрыть сокет
TIMEOUT
INTEGER
Период времени в миллисекундах, в течение которого блок будет пытаться установить соединение с одним из указанных абонентов. При отсутствии соединения по истечении таймаута - выводится ошибка, и осуществляется попытка подключения ко второму абоненту.
Актуален при работе с TCP-сокетом (IP_TYPE=1).
PARAM
INTEGER
Зарезервированный параметр, в настоящее время не используется.
 
Выходные параметры.
Название параметра
Тип данных
Краткое описание
SOCK_ID
INTEGER
Идентификатор открытого сокета. При возникновении ошибок идентификатор сокета равен -1.
NET
INTEGER
Код статуса сети, с которой установлено соединение:
  • 0 - при соединении с основной сетью или при попытке подключения к ней в течение таймаута;
  • 1 - при соединении с резервной сетью или при попытке подключения к ней в течение таймаута.
STA
INTEGER
Код статуса сокета:
  • 0 - Сокет не открыт
  • 1 - Сокет открывается
  • 2 - Выполняется/контролируется соединение
  • 3 - Режим UDP
CODE
INTEGER
Служебный код статуса соединения, может быть сообщен разработчикам в случае некорректной работы блока для выявления ошибок.
FAULT
INTEGER
Код завершения операции:
  • 0 - Выполнено успешно
  • 1 - Обрыв линии
  • 3 - Ошибка открытия/соединения
 
Описание алгоритма.
  • Через входные параметры передаются настройки открываемого сокета. Параметры подключения для основного абонента (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;