Просмотр полной версии : Socket и ПЛК
Доброго времени суток.
Пишу реализацию протокола поверх TCP/IP, использую SysLibSockets.
Возникает несколько вопросов:
Пока идет просто передача "неосмысленных" пустых пакетов без парсинга содержимого.
ПЛК является сервером, ПК - клиентом, отправляю пакеты запроса 30 Кб с ПК на ПЛК, получаю ответы 30 Кб обратно.
1. Максимальный объем принимаемых за 1 вызов SysSockRecv равен 512 Кб? можно ли увеличить этот объем?
2. Максимальный объем передаваемых SysSockSend 1536 Кб? Аналогично, можно ли больше?
3. Скорость обмена ПЛК - ПК через Ethernet выходит не более 100-200 Кбит/с, это нормальная скорость или можно сделать быстрее?
4. Помимо реализации протокола поверх TCP на этом же контроллере идет прием широковещательных пакетов с двух других ПЛК по UDP (Ваша стандартная реализация). Может ли UDP мешать работе сокета?
5. Можно в SysSockListen(socket, 1); использовать 2 и более соединения?
6. Как определить IP-адрес присоединившегося к сокету клиента?, в структуре SOCKADDRESS его вроде не проявляется.
7. ПЛК 304/308 уже в продаже? как у них обстоят дела с Ethernet?
все-таки хотелось бы чтобы тех.поддержка овен ответила
Филоненко Владислав
20.10.2009, 10:48
Доброго времени суток.
Пишу реализацию протокола поверх TCP/IP, использую SysLibSockets.
Возникает несколько вопросов:
Пока идет просто передача "неосмысленных" пустых пакетов без парсинга содержимого.
ПЛК является сервером, ПК - клиентом, отправляю пакеты запроса 30 Кб с ПК на ПЛК, получаю ответы 30 Кб обратно.
1. Максимальный объем принимаемых за 1 вызов SysSockRecv равен 512 Кб? можно ли увеличить этот объем?
512 Кб о_О???? Столько памяти в программе CoDeSys нету...
2. Максимальный объем передаваемых SysSockSend 1536 Кб? Аналогично, можно ли больше?
Нельзя. Но можно вызвать функцию 2 раза :)
3. Скорость обмена ПЛК - ПК через Ethernet выходит не более 100-200 Кбит/с, это нормальная скорость или можно сделать быстрее?
Нельзя, ПЛК предназначен для регулирования, Ethernet - вспомогательная функция и приоритет её низок. Опять же, откуда Вы берете 200Кбит/с данных?
4. Помимо реализации протокола поверх TCP на этом же контроллере идет прием широковещательных пакетов с двух других ПЛК по UDP (Ваша стандартная реализация). Может ли UDP мешать работе сокета?
какого сокета? 1 соединение-1 сокет. Число сокетов ограничено. Для сетевых переменных затят 1 UDP сокет (если их включили). Для CoDeSys занят 1 TCP сокет всегда.
5. Можно в SysSockListen(socket, 1); использовать 2 и более соединения?
Нет. 1 соединение-1 сокет. Число сокетов ограничено. Никакого произвольного распределения ресурсов. Хотите 5 соединений - сообщите об этом контроллеру явно. Чтобы в "ответственный" момент сокетов "вдруг" не оказалось меньше требуемых соединений.
6. Как определить IP-адрес присоединившегося к сокету клиента?, в структуре SOCKADDRESS его вроде не проявляется.
использовать функцию SysSockRecvFrom - в поле pSockAddr возвращается адрес и порт клиента.
[QUOTE=o_nik;28902]
7. ПЛК 304/308 уже в продаже? как у них обстоят дела с Ethernet?
Нет. Есть 2 порта Ethernet в наличии.
512 Кб о_О???? Столько памяти в программе CoDeSys нету...
Ошибся, 512 байт и 1536 байт, естественно, я имел в виду
Опять же, откуда Вы берете 200Кбит/с данных?
Примерно прикинул скорость "на глазок" (тем более Кбит, а не Кбайт)
Остальное понятно, спасибо.
Филоненко Владислав
20.10.2009, 14:28
прочитать за раз можно тоже не более 1536, т.к. это максимальный размер 1 пакета. но и эту функцию можно вызвать 2 раза :)
я имел в виду не измеренную на глазок скорость, так и есть, а потребность в ней. 200кбит/с еще надо умудрится сгенерить.
прочитать за раз можно тоже не более 1536, т.к. это максимальный размер 1 пакета. но и эту функцию можно вызвать 2 раза :)
я имел в виду не измеренную на глазок скорость, так и есть, а потребность в ней. 200кбит/с еще надо умудрится сгенерить.
1.
А вот у меня никак не получается прочитатьбольше чем 492 байта в одной посылке!
Нет ли у вас примерчика проектов где это получилось сделать?
2.
Если вызвать функцию чтения 2 раза, то если я хочу получить 3000 байт,
нкжно первым вызовом прчитать первые 1500 байт , а вторым оставшиеся 1500 байт?
C каим флагом в таком случае нужно вызывать функцию ?
Powered by vBulletin® Version 4.2.3 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot