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

Тема: Вопрос по MB_TcpSlave из Owen Communication

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #2
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,974

    По умолчанию

    Ситуация следующая.
    Спецификация TCP/IP описывает, что корректное завершение соединения должно производиться путем отправки специального пакета (FIN или RST).
    Если вы физически отключаете и заново подключаете кабель - то в большинстве случаев master-устройство открывает новое соединение.
    Старое соединение остается в "полуоткрытом" состоянии.
    У ФБ MB_TcpSlave есть ограничение на число одновременных соединений; оно определяется константой g_c_usiMaxCountClients, у которой значение по умолчанию - 1.
    Т.е. после физического разрыва канала связи - блок продолжает ждать запросов в рамках "полуоткрытого" соединения, а мастер пытается установить новое соединение и не может этого сделать.

    Справедливый вопрос - сколько блок будет продолжать ждать пакетов в рамках "полуоткрытого" соединения, прежде чем закроет его сам?
    На самом деле, это зависит не от блока, а определяется реализацией стека TCP/IP для конкретной операционной системы и ее настройками.
    Я не могу сходу сказать, какое значение у нас; для Windows, насколько я помню, значение по умолчанию составляет 2 часа.

    С чем связана разная реакция MB_TcpSlave на отключение кабеля от панели и от ноутбука?
    Вероятно, панель не успевает разорвать соединение со своей стороны и пытается работать по старому соединению, а ноутбук сразу создает новое.
    Я так понимаю, кабель вы отключаете на несколько секунд.
    Если подождать дольше (минут 5, например) - думаю, и поведение панели будет таким же, как у нотбука.

    Как быть в такой ситуации?
    У блока есть выход xNewRequest.
    Заводите его инвертированное значение на вход IN экземпляра таймера TON c PT, например, 30 секунд.
    Если выход таймера сработал - значит, в течение этого времени от мастера не было запросов - тогда перезапускаете блок с помощью xEnable.

    В нашем трекере задач есть пожелание на доработку блока - чтобы у него появился вход tSocketTimeout, который будет обрабатываться по описанному выше алгоритму (нет запросов в течение заданного времени - значит, разрываем соединение).

    01-10-2022 21-34-05.png

Похожие темы

  1. OWEN Communication Library
    от Zulfiqor в разделе СПК210, СПК1xx [М01]
    Ответов: 2
    Последнее сообщение: 12.09.2021, 18:21
  2. опрос по owen communication
    от Dmitrijb в разделе СПК1xx (архив)
    Ответов: 9
    Последнее сообщение: 19.03.2021, 09:55
  3. Вопрос по OWEN Logic и таймерам
    от Хитрый в разделе Среда программирования OWEN Logic
    Ответов: 6
    Последнее сообщение: 01.05.2018, 10:37
  4. библиотека ArhivatorOwenLib, 0.1 (OWEN) - вопрос
    от dimessen в разделе СПК1xx (архив)
    Ответов: 2
    Последнее сообщение: 15.01.2016, 19:15
  5. Вопрос по протоколу OWEN (разбор ASCII текста на PRESENTATION LAYER)
    от ASM в разделе Помощь Разработчикам
    Ответов: 6
    Последнее сообщение: 08.12.2012, 11:36

Ваши права

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