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

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

  1. #1

    По умолчанию Вопрос по MB_TcpSlave из Owen Communication

    Ситуация следующая.
    Работает сервер modbus slave на ПЛК200. К нему конектится панель СП310. Отключаю/подключаю кабель между панелью и контроллером, связь пропадает и появляется автоматически. Все нормально.
    Подключаю вместо панели ноут с эмулятором панели (овеновский) или OPC сервером. Связь есть пока не отключишь кабель. Как только кабель отключил/подключил, связь уже не восстановится пока не перезапущу MB_TcpSlave переменной xEnable.
    Интересно что после отключения ноута и подключения панели, панель автоматически подключается к контроллеру. А если отключить ноут или панель и подключить ноут, то нужно перезапускать MB_TcpSlave.

    Как быть в такой ситуации? Так как сервак с OPС может отключаться и соответственно связь нужно как-то восстанавливать. С чем связана разная реакция MB_TcpSlave на отключение кабеля от панели и от ноутбука?

  2. #2
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,134

    По умолчанию

    Ситуация следующая.
    Спецификация 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

  3. #3

    По умолчанию

    Спасибо за быстрый ответ. Техподдержка прямо молниеносная

  4. #4

    По умолчанию

    А как лучше менять ip адрес ПЛК200 из пользовательской программы. В СПК все понятно, а в ПЛК200 не понял как сделать. Хотел сделать через UpdateConfiguredIPSettings, но на 200 не работает.

  5. #5
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,134

    По умолчанию

    Цитата Сообщение от hermano Посмотреть сообщение
    А как лучше менять ip адрес ПЛК200 из пользовательской программы. В СПК все понятно, а в ПЛК200 не понял как сделать. Хотел сделать через UpdateConfiguredIPSettings, но на 200 не работает.
    Уточните, пожалуйста, для какой задачи вам потребовалась такая возможность и как именно будет изменяться IP контроллера в процессе его работы.

  6. #6

    По умолчанию

    Отгружаю установку на ПЛК 200 заказчику. Пароли ему не даю от вебморды (почему... отдельный вопрос). Хочу чтобы он с панели оператора поменял настройку сети на нужную и ничего не сломал. Во время работы на горячую менять не надо.

    На СПК делаю экран настройки Setup_Net.png, на 200 хотелось бы повторить.

    т.е. заказчик не должен нигде ковыряться, только на моих экранах. Вбить значения и нажать обновить настройки. Можно с перезагрузкой контроллера.
    Последний раз редактировалось hermano; 02.10.2022 в 18:54.

  7. #7
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,134

    По умолчанию

    Цитата Сообщение от hermano Посмотреть сообщение
    Отгружаю установку на ПЛК 200 заказчику. Пароли ему не даю от вебморды (почему... отдельный вопрос). Хочу чтобы он с панели оператора поменял настройку сети на нужную и ничего не сломал. Во время работы на горячую менять не надо.

    На СПК делаю экран настройки Setup_Net.png, на 200 хотелось бы повторить.

    т.е. заказчик не должен нигде ковыряться, только на моих экранах. Вбить значения и нажать обновить настройки. Можно с перезагрузкой контроллера.
    Для этого потребуется:

    1. Добавить в менеджер библиотек проекта библиотеку CmpSysExec.
    2. Узнать имя сетевого интерфейса, у которого вы хотите изменить IP (можно посмотреть в web-конфигураторе).

    2022-10-03_7-57-39.png

    Предположим, у вас есть сетевой интерфейс с именем WAN, которому вы хотите задать IP = 192.168.0.30.

    Тогда в коде вашего проекта делайте так:

    Код:
    IF xChangeIp THEN
    	
    	CmpSysExec.sysExecute('uci set network.wan.ipaddr=192.168.0.30');
    	CmpSysExec.sysExecute('uci commit');
    	CmpSysExec.sysExecute('reload_config');
    	
    	xChangeIp := FALSE;
    	
    END_IF

  8. #8

    По умолчанию

    Спасибо. Будем пробовать.

  9. #9

    По умолчанию

    Евгений, а как изменить значение g_c_usiMaxCountClients? Из-за того что это константа, не записать значение в OCL.Settings.g_c_usiMaxCountClients.

  10. #10

Похожие темы

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

Ваши права

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