СТА 3/2018

В ЗАПИСНУЮ КНИЖК У ИНЖЕ Н Е РА Для организации общения клиент должен знать IP-адрес и номер порта сервера, по которым он подключается к удалён- ному устройству. В рамках стека протоколов TCP/IP разли- чают два типа сокетов – TCP и UDP [4]. Также TCP-сокеты называют потоковыми , а UDP – датаграммными . Р ЕАЛИЗАЦИЯ СОКЕТОВ В CODESYS V3 Системные библиотеки Реализовать работу TCP- и UDP-сокетов на базе контрол- лера CPM723-01 можно с помощью системной библиотеки SysSocket . Эта библиотека включена в комплект поставки среды разработки CODESYS V3 и позволяет создавать сокеты на всех устройствах, поддерживающих данную платформу (рис. 4). В качестве дополнительных библиотек в проект должны быть включены CmpErrors и ISysTypes2 Interfaces (рис. 4). Библиотека ISysTypes2 Interfaces необходима для создания системных идентификаторов hServer и hClient , представлен- ных типом RTS_IEC_HANDLE . Кроме того, некоторые функ- ции SysSocket возвращают результат (переменная result ) в ви- де кодов ошибок, представленных типом RTS_IEC_RESULT , которые также декларированы в системной библиотеке ISysTypes2 Interfaces . Тип RTS_IEC_RESULT предназначен для передачи прило- жению кода ошибки вызова системной функции. Перечень кодов ошибок находится в библиотеке CmpErrors в списке констант Errors . Пример сокетов для CPM723-01 Текущая версия пакета адаптации CODESYS V3 для конт- роллеров FASTWEL 1.0.1.0 (от 29.12.2017) содержит готовые примеры программирования для библиотеки SysSocket (рис. 5): проект для одного контроллера и для двух контроллеров для TCP- и UDP-сокетов, в которых можно посмотреть пол- ностью реализованный код для контроллера. Также готовые примеры реализации сокетов для контроллера CPM723-01 и CODESYS V3 можно скачать по ссылке: ftp://ftp.prosoft.ru/ pub/Hardware/Fastwel/Fastwel_IO/AppNotes/AN-0001/. TCP-сокеты TCP-сокеты используют TCP-соединения, в которых на транспортном уровне (рис. 2) обеспечивается надёжная до- ставка данных. TCP-протокол отвечает за установление и под- держание соединения, сегментацию, доставку и буферизацию данных, упорядочивание и избавление от дублированных TCP-сегментов данных, контроль ошибок и скорости переда- чи данных [5]. Схема работы простого TCP-сокета [6] пред- ставлена на рис. 6. В процессе обмена данными с помощью сокетов участвуют две стороны: сервер и клиент. Рассмотрим вначале работу сер- верного TCP-сокета. На рис. 6 слева представлена блок-схема работы простого серверного TCP-сокета. Для удобства ис- пользованы функции из библиотеки SysSocket среды разра- ботки CODESYS V3. Серверный TCP-сокет При старте программы, отвечающей за управление серве- ром, вначале происходит инициализация сокета. Данный процесс осуществляется один раз. С помощью функции SysSockCreate() создаётся системный идентификатор («хэндл» – от английского handle) сокета. Данная функция в качестве входных параметров принимает аргументы, задающие тип и протокол сокета. Для использо- вания TCP-протокола функция SysSockCreate() должна полу- чить входные аргументы, как показано в листинге 1. Далее сокет сервера привязывается к определённому IP-ад- ресу и порту с помощью функции SysSockBind() . Для привяз- СТА 3/2018 81 www.cta.ru Сокет клиента Сокет сервера Инициализация Инициализация hServerSocket = = SysSockCreate() SysSockBind() Рабочий режим Рабочий режим Окончание работы Окончание работы hClientSocket = = SysSockCreate() SysSockListen() hClientSocket = = SysSockAccept() SysSockConnect() SysSockRecv() SysSockRecv() SysSockSend() SysSockSend() SysSockClose (hClientSocket) SysSockClose (hServerSocket) SysSockClose (hClientSocket) Установка соединения Рис. 5. Примеры для библиотеки SysSocket на базе контроллера CPM723-01 Рис. 6. Работа простых клиентского (справа) и серверного (слева) TCP-сокетов

RkJQdWJsaXNoZXIy MTQ4NjUy