Горячее подключение прибора к РС и автоопределение

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы
sun170178
beginner
beginner
Сообщения: 24
Зарегистрирован: 08 июн 2012, 20:49
Версия LabVIEW: LabVIEW2010
Контактная информация:

Горячее подключение прибора к РС и автоопределение

Сообщение sun170178 »

Привет Всем любителям и профессионалам LabView!
Я пишу в LabView 2010 софт для тестирования приборов.
Для соединения с РС используется RS232, но физически со стороны компьютера используется переходник: USB/RS232 (FTDI), поэтому соответствующий COM порт всегда открыт, хотя прибор может быть и не подсоединен!
На программном уровне использую функции Visa
У меня в тех.задании на программу есть пункт: "горячее" подключение приборов к РС, при этом на лицевую панель должна выдаваться информация: тип прибора, версия внутреннего программного обеспечения (Firmware)...,
а при отключении прибора от РС на лицевой панели информационные соответствующие окошки должны быть пустыми. И так от прибора к прибору без выключении программы на компьютере.
Как организована работа: При старте LabView приложения происходит инициализация соединения, далее авто определение СОМ порта через которое происходит коммуникация с прибором, а далее классика: в цикле по условию Event структура, которая отслеживает все объекты управления по тайм-ауту делаю запрос (использую Write/Read Visa) о статусе прибора, если прибор все еще подключен, то он выдает мне свой статус, если ответа нет, то принимается решение: что прибор отключен от компьютера и вычищаем все информационные окошки. Проблема начинается когда прибор отключают от РС и подключают вновь или подключают другой прибор: LabView приложение его уже не видит. По каналу Error прилетает ошибка: -1073807194. Говорит о том что связь потеряна: в чем проблема тоже понятна: на момент отсоединения прибора не была выполнена функция Close Visa. При этом отключение происходит в случайный момент и если закрывать порт потом, то прилетает ошибка -1073807302, тоже в принципе понятно: закрываем порт, который уже отключен.
По всему этому у меня есть только одна идея: каждый раз при общении LabView приложения с прибором инициализировать порт, выкидывать команду в прибор через Write Visa, закрывать порт. Через паузу делать опять инициализацию порта, считывать статус прибора и опять закрывать порт... Думаю, что это не красиво, не предсказуемо, нестабильно...
Буду благодарен, если кто-то из вас уважаемые профессионалы LabView предложит какое-нибуть простое, красивое и эффективное решение...
P.S: Может как-то возможно сбрасывать на ходу ошибку: -1073807194 и тем самым оживлять функции Visa..., чтобы не открывать/закрывать постояно СОМ порт?
Аватара пользователя
dadreamer

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

Re: Горячее подключение прибора к РС и автоопределение

Сообщение dadreamer »

sun170178 писал(а):P.S: Может как-то возможно сбрасывать на ходу ошибку: -1073807194 и тем самым оживлять функции Visa..., чтобы не открывать/закрывать постояно СОМ порт?
Маловероятно, что это возможно, т.к. в начале инициализации VISA создает сессию порта, т.е. выделяет в памяти ресурсы для создания внутренней структуры, с помощью которой затем управляет портом (чтение/запись). Если вы извлекли устройство, а затем снова вставили его, сессия становится некорректной, её нужно открывать заново. Я могу, конечно, предложить вариант "жесткого" прерывания Визы, но не факт, что это вообще вам пригодится: http://forums.ni.com/t5/LabVIEW/Is-is-p ... 82#M693763 Грамотнее было бы, конечно, обращаться к драйверу или библиотеке с целью узнать, отключено ли устройство физически. Если да, то перезапускать конфиг Визы. Какой именно у вас USB конвертор? Устройства имеют на конце разъем USB или RS232?
sun170178
beginner
beginner
Сообщения: 24
Зарегистрирован: 08 июн 2012, 20:49
Версия LabVIEW: LabVIEW2010
Контактная информация:

Re: Горячее подключение прибора к РС и автоопределение

Сообщение sun170178 »

Дело в том, что в приборе: 1)микросхема FT2232D (FTDI) для USB и приемопередатчик RS232: согласно тех.заданию на прибор, он может работать как по USB, так и по RS232 через один универсальный разьем. Когда я подключаю прибор через USB к РС, то там все просто: я физически вижу наличие виртуального COM порта, по которому проишодит коммуникация, а если использовать RS232, то там все сложнее: в современных компьютерах нет физически COM порта, поэтому используем мост USB/RS232, а он создает виртуальный COM порт, когда его подсоединяют к компьютеру и ему не важо: что на другом конце моста (RS232): подключена что-то или нет.... Поэтому, в своем приложении я делаю опрос по тайма уту...
А каким образом перезапускать конфиг Визы?
Аватара пользователя
dadreamer

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

Re: Горячее подключение прибора к РС и автоопределение

Сообщение dadreamer »

Получается, конвертер стоит внутри прибора уже. Напоминает кабели конвертерные от Prolific, у них такой же принцип - создается виртуальный COM-порт. Но для них нужно ставить соответствующий драйвер. А вы ставили драйвер на этот чип? Сама винда по идее не должна создавать никакие виртуальные порты. Если так, то драйвер точно должен знать, присутствует ли в системе устройство. И здесь имеются библиотеки для работы с конвертором.
А каким образом перезапускать конфиг Визы?
Через VISA Configure Serial Port, только предварительно надо старую сессию закрыть. Можно попробовать закрыть все текущие сессии, посмотрите этот пример: http://digital.ni.com/public.nsf/allkb/ ... 080064D98F
sun170178
beginner
beginner
Сообщения: 24
Зарегистрирован: 08 июн 2012, 20:49
Версия LabVIEW: LabVIEW2010
Контактная информация:

Re: Горячее подключение прибора к РС и автоопределение

Сообщение sun170178 »

Когда мы общаемся по RS232, то со стороны прибора обычный от МАХ приемо-передатчик, но со стороны компьютера устанавливаем мост... И когда мост подключается 1-ы раз, то винда распознает устроство и устанавливает драйвер под этот мост... и виртуальный СОМ порт создается при подключении этого моста сразу же, не зависимо от того: включен прибор или нет, хотя я не исключаю, что где-то возможно хранится информация о физическом подключении прибора. Но я не хочу привязываться к определенному драйверу, потому что мое приложение вместе с прибором будет расходится тысячами по всему миру на диске в виде тестовой программы, а как мост будет использовать потребитель, какой драйвер неизвестно...
Но не в этом проблема: Проблема в том, что возможен вариант, когда прибор отсоединят от компьютера до закрытия сессии и до нового подсоединения приложение должно выполнить ряд действий по восстановлению функциий Виза...
Спасибо за пример... Я в принципе как-то так и представлял, что надо будет каждый раз переконфигурировать визу, когда будет потеря коммуникации
Аватара пользователя
dadreamer

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

Re: Горячее подключение прибора к РС и автоопределение

Сообщение dadreamer »

Хотите сказать, что порт создастся на чистой ОС сам по себе, даже на XP? На семёрке ещё быть может, там встроенных дров много, но на XP я такого никогда не видел =) Да и в описании микросхемы (выше ссылка была) сказано:
Virtual COM port (VCP) drivers cause the USB device to appear as an additional COM port available to the PC. Application software can access the USB device in the same way as it would access a standard COM port.
Просто, если делать всё "по уму", то при каждом чтении/записи в :labview: следует проверять наличие устройства в системе (вызов функции драйвера, например), и если всё ок, то тогда писать/читать данные. А если устройства нет, то сделать сразу VISA Close и на следующей итерации произвести инициализацию (точнее, подождать "вставки" устройства в порт и потом сделать VISA Configure Serial Port). Ну что ж, если у вас все работает, то пусть так и будет :)
sun170178
beginner
beginner
Сообщения: 24
Зарегистрирован: 08 июн 2012, 20:49
Версия LabVIEW: LabVIEW2010
Контактная информация:

Re: Горячее подключение прибора к РС и автоопределение

Сообщение sun170178 »

Да, вы правы... Приложение сейчас работает, но хотелось бы, чтобы оно работало все таки "по уму"... И я понимаю, что решение есть всегда, только время поискa, эффективность определяется наличием опыта по данному вопросу... :)
Подскажите, пожалуйста, каким образом "проверять наличие устройства в системе (вызов функции драйвера, например).." и потом, когда я закрываю сессию через Close Visa, a прибор уже отключен даже через USB, то есть на этот момент СОМ порт отсутствует, то возникает ошибка -1073807302
Аватара пользователя
dadreamer

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

Re: Горячее подключение прибора к РС и автоопределение

Сообщение dadreamer »

sun170178, нужно поэкспериментировать с Визой, я попробую посмотреть, как завершить сессию при удалении порта из Windows. Должен быть какой-то вариант. А вы пока можете посмотреть, как ведёт себя ваш прибор при первичном подключении к компу с XP и 7.
Аватара пользователя
dadreamer

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

Re: Горячее подключение прибора к РС и автоопределение

Сообщение dadreamer »

Что-то не могу воспроизвести вашу ошибку, получается только -1073807343:
Error -1073807343 occurred at Property Node (arg 1) in VISA Configure Serial Port (Instr).vi->Serial.vi
Possible reason(s):
VISA: (Hex 0xBFFF0011) Insufficient location information or the device or resource is not present in the system.
Когда подключаю к компу телефон Nokia, у меня создается в системе виртуальный порт Nokia N8-00 USB Serial Port (COM4). В :labview: я открываю его и пишу с интервалом 100 мс туда пустую строку. Если извлечь "на горячую" кабель из USB-порта, то :labview: не выдаст никаких ошибок, даже VISA Close отрабатывает нормально. Ошибка -1073807343 возникает при новом запуске программы и конфигурировании порта. Попробовал также две программы для создания виртуального COM-порта: HW Virtual Serial Port 3.1.2 и Advanced Virtual COM Port 2.5.4, они создают порт, в :labview: спокойно подключаюсь, но во время работы программы нельзя удалить созданный порт. В диспетчере задач винды удаление возможно только после перезагрузки. Кажется, поведение порта при его извлечении зависит в большей степени от драйвера, и в меньшей - от Визы. Попробуйте обрабатывать кластер Error In/Out в LV, если возникает ошибка, то делайте "жёсткий" Abort (см. ссылку в моем первом посте) и попытайтесь закрыть все открытые сессии (см. Open VISA Session Monitor). Если не поможет, то будем думать дальше.
sun170178
beginner
beginner
Сообщения: 24
Зарегистрирован: 08 июн 2012, 20:49
Версия LabVIEW: LabVIEW2010
Контактная информация:

Re: Горячее подключение прибора к РС и автоопределение

Сообщение sun170178 »

Докладываю о своих исследованиях:
1) При первичном подключении к PC либо прибора через USB на прямую, либо по RS232 с использованием моста USB/RS232 происходит поиск драйверов и их установка, после чего создается виртуальный СОМ порт.
2) При отключении прибора в процессе работы LabView приложения возникает 2 варианта развития событий:
а) Если прибор работает прямо через USB, то виртуальный СОМ порт пропадает, что можно в LabView приложении легко отследить без опроса самого прибора;
б) Если прибор работает через мост USB/RS232, то виртуальный СОМ порт присутствует всегда, даже если прибор отключили и никаким способом, кроме как прямого опроса прибора не узнать присутствует прибор или
нет: тут на самом деле можно было бы поиграть железом, использовать служебные линии RS232, но на данном этапе железо для данного прибора уже произведено и нет возможности вернуться к перепроектированию
коммуникации.
3) Исходя из п.2 в LabView приложении по тайм ауту запускается процесс опроса статуса прибора, чтобы судить о наличии коммуникации прибора с РС. Делается следующим образом: Event структура просыпается через 1 секунду, формирует запрос на статус, записывается в Visa Write отсылается, далее стоит задержка по времени (чтобы прибор успел принять посылку, обработать ее о отослать ответ), после задержки с помощью Property Node "Bytes at Port" проверяем приемный буфер СОМ порта и если байты прилетели от прибора, то делаем вывод, что прибор подключен, если байты не прилетели, то делаем вывод, что прибор отключен, тогда вычищаем информационные окошки.....
Так вот: если в процесс отключить прибор, а затем подключить к РС (использую только USB), то при тайм ауте LabView приложение не может определить что прибор заново подключили, а обработчик ошибок выдает сообщение:
Error -1073807194 occurred at Property Node (arg 1) in LRF12K rev18.vi

Possible reason(s):

VISA: (Hex 0xBFFF00A6) The connection for the given session has been lost.
sun170178
beginner
beginner
Сообщения: 24
Зарегистрирован: 08 июн 2012, 20:49
Версия LabVIEW: LabVIEW2010
Контактная информация:

Re: Горячее подключение прибора к РС и автоопределение

Сообщение sun170178 »

Важно дополнение: никаких ошибок не возникает при выключении прибора и новом подключении, если используем конфигурацию: порт прибора RS232, мост RS232/USB, компьютер. Все работает нормально, если отсоединяем мост от прибора и вновь соединяем: LabView приложение подхватывает на горячую и работает. Оснавная причина: при отключении прибора от моста RS232/USB, на РС остается виртуальный СОМ порт и никаких ошибок нет.
Что касается драйвера, то он один и тот же, что для моста RS232/USB, что и в приборе USB порт (обе микросхемы от FTDI)...
Получается, основная проблема кроется в том, что при отключении прибора, работающего по USB с РС, исчезает виртуальный СОМ порт, но к нему по прежнему обращается Visa,а после нового подключения прибора к PC, создается вновь виртуальный порт, но Visa уже не хочет с ним работать, а выкидывает ошибку -1073807194
Аватара пользователя
dadreamer

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

Re: Горячее подключение прибора к РС и автоопределение

Сообщение dadreamer »

Сложная какая-то у вас проблема. Я пока не могу посоветовать внятного решения. Может, вам пересмотреть способ управления программой? Пусть юзер каждый раз останавливает её перед извлечением прибора, чтобы Виза корректно завершалась. Или пусть дожидается какого-нибудь сообщения, когда можно отключать прибор без всякой опасности для системы. Можно, конечно, попробовать сторонние библиотеки для работы с COM-портом, я встречал даже :vi: под LabVIEW, но мне кажется, это не совсем правильный выход из ситуации. По идее "на горячую" не стоит извлекать никакое USB-устройство, хотя если нет иконки безопасного извлечения, то придется это сделать. А какая у вас винда и как вы отключаете прибор - просто выдёргиваете кабель?
sun170178
beginner
beginner
Сообщения: 24
Зарегистрирован: 08 июн 2012, 20:49
Версия LabVIEW: LabVIEW2010
Контактная информация:

Re: Горячее подключение прибора к РС и автоопределение

Сообщение sun170178 »

А какая разница в типе Windows..?
А горячее подключение избежать не могу - записано в тех.задании на софт! Сделано из благих намерений: Представьте, что вам надо проверить за ограниценое время соттню приборов.. Что, каждый раз выключать и включать софтину?
А отключается просто: выдергиваешь кабель из USB и вставляешь в РС уже другой прибор с другим кабелем.........
sun170178
beginner
beginner
Сообщения: 24
Зарегистрирован: 08 июн 2012, 20:49
Версия LabVIEW: LabVIEW2010
Контактная информация:

Re: Горячее подключение прибора к РС и автоопределение

Сообщение sun170178 »

Делать какие-либо дополнительные кнопки для безопасного выключения можно, но дело в том, что этот софт будет использоваться во многих странах, причем военными.... Они же не будут на какие-то кнопки при выключении нажимать: дернут кабель и все.... Для военных софтина должна быть простая и надежная, как автомат калашников....
Сейчас напал на статью: http://www.ni.com/white-paper/4256/en#toc5, но пока не могу увязать со своей задачей, хотя на форуме NI есть на нее ссылка для решении этой ошиби...
Аватара пользователя
Jakob Brontfeyn

Activity Gold Silver Black
expert
expert
Сообщения: 1729
Зарегистрирован: 28 фев 2008, 11:01
Награды: 6
Благодарил (а): 1 раз
Контактная информация:

Re: Горячее подключение прибора к РС и автоопределение

Сообщение Jakob Brontfeyn »

Не работайте с VISA, есть альтернатива,
смотрите здесь
http://www.labviewportal.org/viewtopic. ... =23#p26551
и здесь
http://www.labviewportal.org/viewtopic. ... =15#p26564
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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