Показано с 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

    По умолчанию

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

    По умолчанию

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

  6. #6

    По умолчанию

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

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

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

  7. #7

    По умолчанию

    Цитата Сообщение от 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

    По умолчанию

    Цитата Сообщение от Jukki Посмотреть сообщение
    Евгений, а как изменить значение g_c_usiMaxCountClients? Из-за того что это константа, не записать значение в OCL.Settings.g_c_usiMaxCountClients.
    См. скриншот:

    2023-11-10_9-05-33.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

Ваши права

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