Показано с 1 по 10 из 1207

Тема: Обновленный ПЛК110?

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    Цитата Сообщение от _Pavel_ Посмотреть сообщение
    Получил новый ПЛК-110-30Р-L [М02]. Столкнулся с такой особенностью: на ПЛК поднят TCP-клиент с помощью библиотеки SysLibSockets. Функция SysSockCreate отрабатывает нормально - возвращает дескриптор. Далее перевожу сокет в неблокирующий режим. Затем вызываю функцию SysSockConnect... собственно всё как обычно... и вот здесь мне непонятно: если IP-адрес, к которому я хочу приконнектиться из ПЛК существует (пингуется) в сети (неважно включен там сервер на этом порту или нет), то всё хорошо. Если же адреса нет (компьютер выключен, не пингуется), функция SysSockConnect вызывает блокировку ПЛК, при этом гаснут все выходы, программа соответственно приостанавливается секунды на 2-3. ВотчДог при этом не срабатывает. После этой паузы продолжается всё нормально.
    Кто-нибудь с таким сталкивался?
    В неблокирующем режиме функция Connect не выдаёт статуса коннекта, а лишь передаёт в стек запрос на коннект. Определить наличие коннекта можно посылая/принимая посылки и анализируя ответы соотв. функций и текущую ошибку.

    У Вас же в программе сокет работает в блокирующем режиме и заблокировал всё на время таймаута, к-й меньше времени срабатывания собаки.
    Правильный перевод в режим неблокирующего сокета:
    res:=SysSockSetOption(cur_socket,SOCKET_SOL,SOCK_N BIO,0,0);

    Также, для работы в неблокирующем режиме требуется установить ПО версии 0.3.43
    Последний раз редактировалось Филоненко Владислав; 08.12.2015 в 20:34.
    Тролль-наседка, добрый, нежный и ласковый

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

    По умолчанию

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    Правильный перевод в режим неблокирующего сокета:
    res:=SysSockSetOption(cur_socket,SOCKET_SOL,SOCK_N BIO,0,0);
    Владислав, а что это за опция такая: "SOCK_NBIO"?
    Нету такой:

    (* Socket options *)
    SOCKET_SO_DEBUGINT:=16#0001; (* turn on debugging info recording *)
    SOCKET_SO_ACCEPTCONNINT:=16#0002; (* socket has had listen() *)
    SOCKET_SO_REUSEADDRINT:=16#0004; (* allow local address reuse *)
    SOCKET_SO_KEEPALIVEINT:=16#0008; (* keep connections alive *)
    SOCKET_SO_DONTROUTEINT:=16#0010; (* just use interface addresses *)
    SOCKET_SO_BROADCASTINT:=16#0020; (* permit sending of broadcast msgs *)
    SOCKET_SO_USELOOPBACKINT:=16#0040; (* bypass hardware when possible *)
    SOCKET_SO_LINGERINT:=16#0080; (* linger on close if data present *)
    SOCKET_SO_OOBINLINEINT:=16#0100; (* leave received OOB data in line *)
    SOCKET_SO_REUSEPORTINT:=16#0200; (* allow local address & port reuse *)
    SOCKET_SO_SNDBUFINT:=16#1001; (* send buffer size *)
    SOCKET_SO_RCVBUFINT:= 16#1002; (* receive buffer size *)
    SOCKET_SO_SNDLOWATINT:=16#1003; (* send low-water mark *)
    SOCKET_SO_RCVLOWATINT:=16#1004; (* receive low-water mark *)
    SOCKET_SO_SNDTIMEOINT:=16#1005; (* send timeout *)
    SOCKET_SO_RCVTIMEOINT:=16#1006; (* receive timeout *)
    SOCKET_SO_ERRORINT:=16#1007; (* get error status and clear *)
    SOCKET_SO_TYPEINT:=16#1008; (* get socket type *)
    SOCKET_SO_PROTOTYPEINT:=16#1009; (* get/set protocol type *)
    (* TCPIP socket options *)
    SOCKET_TCP_NODELAYINT:=16#01; (* don't delay send to coalesce packets *)
    SOCKET_TCP_MAXSEGINT:=16#02; (* set maximum segment size *)
    Напильник, велосипед, бубен, грабли и костыли - основные инструменты программиста.

Похожие темы

  1. приобрел обновленный плк110
    от Ruffian в разделе ПЛК1хх
    Ответов: 5
    Последнее сообщение: 04.12.2009, 12:01

Ваши права

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