Одновременные сессии по telnet

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы
Ответить
Александр Красочкин
interested
interested
Сообщения: 6
Зарегистрирован: 04 июл 2015, 15:39
Версия LabVIEW: 10
Контактная информация:

Одновременные сессии по telnet

Сообщение Александр Красочкин »

Приветствую участников форума. Помогите решить следующую проблему.
Имеется два устройства, подключенные к компу по локальной сети. В качестве протокола передачи был выбран telnet.
С каждого устройства приходят данные приблизительно 50 раз в секунду. Каждое устройство естественно имеет свой ip, но передача данных осуществляется по одному порту (23-ему).
В labview создаю два параллельных цикла, в которых открываю соединение telnet для каждого устройства с дальнейшем чтением информации.
Проблема заключается в том, что с одного устройства данные поступают в реальном времени, а с другого с большой задержкой. Чем дольше работает программа, тем больше накапливается задержка (от 30 секунд до 5 минут). Как это можно исправить или с чем это может быть связано?
p.s.
1) По отдельности оба устройства работают нормально.
2) С помощью синхронизации удалось добиться последовательного сбора информации и данные с обоих устройств приходили практически в реальном времени (я имею ввиду, что для человека разница не заметна - доля секунды). Однако необходимо организовать именно одновременную, параллельную передачу данных, так как устройств необходимо подключать большое количество.
3) Мне кажется, что проблема связана с использованием одного порта. Что данные со второго устройства передаются только тогда, когда порт становится открытым (т.е. не занятым первым устройством). Так ли это?
Artem.spb

Activity Автор
professor
professor
Сообщения: 3404
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 175 раз
Контактная информация:

Re: Одновременные сессии по telnet

Сообщение Artem.spb »

Кто и как открывает соединение?
Порт одинаковый на какой стороне?
Покажите код, может там банальная ошибка, которая и приводит к таким результатам.
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2211
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 27 раз

Re: Одновременные сессии по telnet

Сообщение Borjomy_1 »

Может быть использована :vi: , которая участвует в обоих процессах, но в которой происходит ожидание чего-либо. Без объявления такой :vi: "реентрантной", она будет последовательно выполняться в каждом процессе, другой процесс будет ждать окончания ее выполнения. Точно также, даже если ожидания не происходит, могут быть проблемы с локальными переменными внутри :vi: - оба процесса пользуются одной копией данных. Такую :vi: также надо объявлять реентрантной.
Александр Красочкин
interested
interested
Сообщения: 6
Зарегистрирован: 04 июл 2015, 15:39
Версия LabVIEW: 10
Контактная информация:

Re: Одновременные сессии по telnet

Сообщение Александр Красочкин »

Artem.spb, Спасибо за оперативный отклик. Даже не думал, что кто-то так быстро ответит.
Соединение открывается в labview. Порт используется телнетовский 23-ий, т.е. получается он одинаковый и для приема и для передачи. Комп считывает два потока данных: с 192.168.0.101:23 и с 192.168.0.102:23
Прикрепляю часть программы, отвечающую за telnet.
Вложения
Подключение двух устройств.rar
(28.05 КБ) 192 скачивания
Александр Красочкин
interested
interested
Сообщения: 6
Зарегистрирован: 04 июл 2015, 15:39
Версия LabVIEW: 10
Контактная информация:

Re: Одновременные сессии по telnet

Сообщение Александр Красочкин »

Borjomy_1, Спасибо. Как раз все выходные просидел на форумах и узнал про реентерабельность. Сегодня обязательно попробую.
Artem.spb

Activity Автор
professor
professor
Сообщения: 3404
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 175 раз
Контактная информация:

Re: Одновременные сессии по telnet

Сообщение Artem.spb »

Всех функций просто напросто нет, так что что-то определённое сказать сложно, но вот тут
Untitled-1.png
Untitled-1.png (11.65 КБ) 8543 просмотра
таймаут аж 10 сек, это и может быть причиной задержек, если функция как раз не реентрантная.

По поводу одинаковых портов: если он 23 на стороне прибора, то никаких проблем. Если LV открывает соединение, то система сама разберётся, какой порт выделить.
Александр Красочкин
interested
interested
Сообщения: 6
Зарегистрирован: 04 июл 2015, 15:39
Версия LabVIEW: 10
Контактная информация:

Re: Одновременные сессии по telnet

Сообщение Александр Красочкин »

Artem.spb, хорошо, попробую. Позже отпишусь о результатах.
Насчет функций: я просто скачивал дополнительно internet toolkit. Вот так выглядит.
internet toolkit.png
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 127 раз
Контактная информация:

Re: Одновременные сессии по telnet

Сообщение dadreamer »

По основной проблеме пока ничего не могу сказать, но есть кое какие "косяки" в программе.
1) Зачем нужна вот эта задержка?
2015-07-06_16-09-16.jpg
По правилам хорошего тона в программировании задержка должна помещаться в цикл, в данном случае у вас есть основной цикл While и внутренний цикл While. В каждый из них нужно вставить задержку по 50-100 мс. А задержка между записью данных и закрытием сессии... вряд ли нужна вообще.
2) Избавьтесь от локальных переменных, вместо них используйте notifier.
2015-07-06_16-17-34.jpg
Пример использования нотифаера (уведомителя):
Вложения
Untitled 1.vi
lv2010
(7.27 КБ) 179 скачиваний
Александр Красочкин
interested
interested
Сообщения: 6
Зарегистрирован: 04 июл 2015, 15:39
Версия LabVIEW: 10
Контактная информация:

Re: Одновременные сессии по telnet

Сообщение Александр Красочкин »

dadreamer, Задержка между отправкой команды и закрытием сессии вызвана необходимостью. Без этой задержки устройство не успевало принимать команду и соединение закрывалось некорректно и устройство зависало. А с задержкой, устройство сначало принимает команду "стоп", успевает за эти 500 мс обработать команду и затем нормально закрывается соединение.
Насчет notifier, попробую потестировать. Спасибо за помощь.
Александр Красочкин
interested
interested
Сообщения: 6
Зарегистрирован: 04 июл 2015, 15:39
Версия LabVIEW: 10
Контактная информация:

Re: Одновременные сессии по telnet

Сообщение Александр Красочкин »

Artem.spb, Borjomy_1, попробовал потестить прогу с реентрантными vi. Сначало всё отлично, но опять же, чем дольше работает программа, тем больше накапливаются задержки (хотя и не с такой скоростью как раньше).
К сожалению не могу нормально поэкспериментировать. На работе навернули одно из устройств ( проблема с микросхемами), коллеги третий день пытаются починить. А я пока в ожидании.
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 127 раз
Контактная информация:

Re: Одновременные сессии по telnet

Сообщение dadreamer »

Александр Красочкин писал(а):А с задержкой, устройство сначало принимает команду "стоп", успевает за эти 500 мс обработать команду и затем нормально закрывается соединение.
А после получения команды "стоп" прибор ничего не выдаёт в ответ? Если он может отправлять флаг завершения работы, то вместо задержки корректнее считывать его. Ну, или в принципе можно оставить как есть. Только замените Wait Until Next ms Multiple на Wait (ms). А что касается остального, то лучше всего было бы оформить программу в виде архитектуры State Machine, тогда получился бы всего 1 цикл вместо 3-х. Telnet сессию можно было бы пробросить через сдвиговый регистр для корректного закрытия/повторного открытия девайса.
Ответить

Вернуться в «Коммуникация с приборами»