Страница 3 из 5 ПерваяПервая 12345 ПоследняяПоследняя
Показано с 21 по 30 из 46

Тема: TCP клиент на SysLibSockets

  1. #21

    По умолчанию

    Цитата Сообщение от Scream Посмотреть сообщение
    наверное чаще?
    Да, перепутал, не чаще. Надеюсь, что на правильном пути.

  2. #22
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,251

    По умолчанию

    Да отправляется чаще .Просто не получилось

  3. #23

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Да отправляется чаще .Просто не получилось
    Что не получилось? Отправить не получилось? Или что имеете ввиду? Если есть что подсказать, то подскажите явно, а не воду пишите, уже несколько дней одно и тоже.

  4. #24

    По умолчанию

    Друзья, может подскажете, как вы справлялись с сокетами, если, конечно, это для вас не секретная информация. Какое время цикла ставите, чтение\запись делаете в одном цикле, после каждой транзакции закрываете сокеты или это зависит от ПЛК? На ПЛК154 получается читать и писать в одном цикле, если SysSockCreate() возвращает 2, если 1, то читает сокет через раз, как будто сокет создался в блокирующем режиме, хотя это не так.

  5. #25
    Пользователь
    Регистрация
    30.11.2012
    Адрес
    40RUS
    Сообщений
    316

    По умолчанию

    Цитата Сообщение от Carter Посмотреть сообщение
    Какое время цикла ставите
    У меня на ПЛК 110 new и ПЛК 100 МинВЦ = 0 и прекрасно и максимально быстро работает.

    Цитата Сообщение от Carter Посмотреть сообщение
    чтение\запись делаете в одном цикле,
    В разных.

    Цитата Сообщение от Carter Посмотреть сообщение
    транзакции закрываете сокеты или это зависит от ПЛК?
    При работе с HTTP закрываю сокет после каждой транзакции. С собственным протоколом работаю при постоянно открытом соединении.

    Цитата Сообщение от Carter Посмотреть сообщение
    На ПЛК154 получается читать и писать в одном цикле, если SysSockCreate() возвращает 2, если 1, то читает сокет через раз, как будто сокет создался в блокирующем режиме, хотя это не так.
    Я думаю что не стоит писать и читать в одном цикле. По сокетам есть очень полезное видео, правда для CDS V3, но суть одна.
    Напильник, велосипед, бубен, грабли и костыли - основные инструменты программиста.

  6. #26

    По умолчанию

    Сокеты не закрываю, точнее, закрываю если сокет "сервер" и к нему нет обращений какое то время (так определяю обрыв связи) чтобы в следующем цикле открыть снова. Клиенты бомбят без остановки но за цикл либо пишу либо читаю, причем если сокетов открыто много то читаю/пишу только одним сокетом, на следующем цикле другим итд. Если прием/передача проходят с ошибкой клиента закрываю чтобы открыть в следующем цикле.
    С серверами сложнее. В одном цикле перебираю все фунцией чтения, если с какого есть данные(запрос) - перебор прекращаю на следующем цикле если нужно ответить отвечаю и(или) продолжаю перебор оставшихся сокетов. И так по кругу.
    вощемто работает )

  7. #27

    По умолчанию

    Спасибо за ответы! Разделил чтение\отправку, чередую в цикле. Проблема только в том, что не всегда могу получить данные, повторюсь, если если SysSockCreate() возвращает 1, если 2, то сколько бы я с сервера ни отправлял, все доходит...

  8. #28

    По умолчанию

    Есть у меня подозрение... )
    Насчет дискрипторов... У меня сокеты открываюцо с дискрипторами 1,2,3...15. Первый всегда создается с дискриптором 1. (если у вас первый с двойкой смотрите код внимательнее возможно их открываецо два и отсюда все траблы)

    открываем:
    IF m_dnSocket = SOCKET_INVALID THEN
    m_dnSocket := SysSockCreate( ... );
    END_IF

    А вот с закрытием сложнее...

    o_dnRes := BOOL_TO_INT( SysSockClose ( m_dnSocket ) );

    для 110-го:
    IF o_dnRes = 0 THEN
    m_dnSocket := SOCKET_INVALID;
    END_IF
    причем в какой-то прошивке SysSockClose возвращал правильное значение но реально сокет не закрывался. (значит следующий отрывался с дискриптором на еденичку больше)

    для 100-го:
    IF o_dnRes = 1 THEN
    m_dnSocket := SOCKET_INVALID;
    END_IF

    по моему как то так. кто сможет опровергните )

  9. #29

    По умолчанию

    У меня открывается или с дескриптором 1 или 2, других пока не наблюдал, проверю вариант с незакрытием сокета. Просто, по логике вещей, если у меня открыто два сокета, то траблов как раз таки нет...

  10. #30

    По умолчанию

    Итак, при запуске должен открываться сокет с handle=1, 0-й занят средой CoDeSys.
    Если при открытии 1 сокета handle=2 - что-то тут не так.

    Учтите, что listen->accept позвращает тот-же handle, т.е. как в винде нельзя поступать - открыть сокет, поставить в listen и плодить сокеты по приходящим соединениям.
    1 сокет - 1 и только 1 соединение.
    Тролль-наседка, добрый, нежный и ласковый

Страница 3 из 5 ПерваяПервая 12345 ПоследняяПоследняя

Похожие темы

  1. ПЛК100 TCP клиент
    от DmitriyFara в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 08.04.2015, 12:13
  2. TCP клиент - ПЛК100
    от DmitriyFara в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 28.03.2015, 16:54
  3. SysLibSockets
    от osipov86 в разделе Сетевые технологии
    Ответов: 18
    Последнее сообщение: 27.01.2014, 18:43
  4. FTP клиент на ОВЕН ПЛК
    от Jumo в разделе Сетевые технологии
    Ответов: 12
    Последнее сообщение: 05.09.2011, 07:27

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •