PDA

Просмотр полной версии : SysSockSend и несклько сокетов



lazy
19.09.2022, 15:54
Добрый день!

Есть, например, на ПЛК или СПК несколько открытых сокетов - сервера и клиенты. Могу ли я вызывать SysSockSend для разных сокетов в одном цикле или лучше за этим как то следить и разруливать?
Может исключение какое вернется, сталкивался кто нибудь? Codesys 3.5, но и для второго полезно будет узнать.

Сейчас все работает по очереди отправили запрос в один сокет - ждем ответа, затем другой... третий итд. Но это как-то не оптимально.

Евгений Кислов
19.09.2022, 16:04
Добрый день!

Есть, например, на ПЛК или СПК несколько открытых сокетов - сервера и клиенты. Могу ли я вызывать SysSockSend для разных сокетов в одном цикле или лучше за этим как то следить и разруливать?
Может исключение какое вернется, сталкивался кто нибудь? Codesys 3.5, но и для второго полезно будет узнать.

Сейчас все работает по очереди отправили запрос в один сокет - ждем ответа, затем другой... третий итд. Но это как-то не оптимально.

Добрый день.
Как я понимаю, у вас сокеты связаны с разными портами?
Тогда можно и в одном цикле вызывать SysSockSend.

Ваша текущая реализация выглядит разумнее с точки зрения джиттера - в пределах одного цикла задачи не будет "выбросов".

lazy
19.09.2022, 16:19
Спасибо, понял. А джиттер будет связан с тем, что именно моя задача (этот конкретный цикл) будет исполняться дольше или я получу управление на следующем цикле чуть позже? Сокеты открыты в неблокирующем режиме.

Евгений Кислов
19.09.2022, 16:29
Спасибо, понял. А джиттер будет связан с тем, что именно моя задача (этот конкретный цикл) будет исполняться дольше или я получу управление на следующем цикле чуть позже? Сокеты открыты в неблокирующем режиме.

То, что в неблокирующем режиме - это здорово.
Но всё равно, очевидно, что несколько SysSockSend в пределах цикла займут больше времени, чем один.

Если говорить о CODESYS V3.5 - я бы рекомендовал использовать библиотеку NetBaseServices.
Там более высокой уровень абстракции (и нужно писать меньше кода) и асинхронность из коробки.

lazy
19.09.2022, 17:01
В общем ясно. Буду "проходить по открытым сокетам" и если кто то начал SysSockSend или SysSockRead на этом с сокетами все. ну а если прием/передача закончились, то в следующем цикле листаю сокеты со следующего по списку итд... )