Просмотр полной версии : SysSockSend и несклько сокетов
Добрый день!
Есть, например, на ПЛК или СПК несколько открытых сокетов - сервера и клиенты. Могу ли я вызывать SysSockSend для разных сокетов в одном цикле или лучше за этим как то следить и разруливать?
Может исключение какое вернется, сталкивался кто нибудь? Codesys 3.5, но и для второго полезно будет узнать.
Сейчас все работает по очереди отправили запрос в один сокет - ждем ответа, затем другой... третий итд. Но это как-то не оптимально.
Евгений Кислов
19.09.2022, 16:04
Добрый день!
Есть, например, на ПЛК или СПК несколько открытых сокетов - сервера и клиенты. Могу ли я вызывать SysSockSend для разных сокетов в одном цикле или лучше за этим как то следить и разруливать?
Может исключение какое вернется, сталкивался кто нибудь? Codesys 3.5, но и для второго полезно будет узнать.
Сейчас все работает по очереди отправили запрос в один сокет - ждем ответа, затем другой... третий итд. Но это как-то не оптимально.
Добрый день.
Как я понимаю, у вас сокеты связаны с разными портами?
Тогда можно и в одном цикле вызывать SysSockSend.
Ваша текущая реализация выглядит разумнее с точки зрения джиттера - в пределах одного цикла задачи не будет "выбросов".
Спасибо, понял. А джиттер будет связан с тем, что именно моя задача (этот конкретный цикл) будет исполняться дольше или я получу управление на следующем цикле чуть позже? Сокеты открыты в неблокирующем режиме.
Евгений Кислов
19.09.2022, 16:29
Спасибо, понял. А джиттер будет связан с тем, что именно моя задача (этот конкретный цикл) будет исполняться дольше или я получу управление на следующем цикле чуть позже? Сокеты открыты в неблокирующем режиме.
То, что в неблокирующем режиме - это здорово.
Но всё равно, очевидно, что несколько SysSockSend в пределах цикла займут больше времени, чем один.
Если говорить о CODESYS V3.5 - я бы рекомендовал использовать библиотеку NetBaseServices.
Там более высокой уровень абстракции (и нужно писать меньше кода) и асинхронность из коробки.
В общем ясно. Буду "проходить по открытым сокетам" и если кто то начал SysSockSend или SysSockRead на этом с сокетами все. ну а если прием/передача закончились, то в следующем цикле листаю сокеты со следующего по списку итд... )
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot