чтение VISA

Простейшие вопросы в области инженерной разработки
Ответить
Anna73
beginner
beginner
Сообщения: 11
Зарегистрирован: 12 авг 2014, 08:06
Версия LabVIEW: 2012
Контактная информация:

чтение VISA

Сообщение Anna73 »

Здравствуйте!
При работе с АЦП столкнулась с проблемой. При отправке команды происходит опрос восьми каналов, и на выходе должны получить 8 строк, показывающие значения по каждому каналу, и строку «ок». Отправляя команду через программу Terminal на выходе видим
A0004C4D
A1004C4D
A200595B
A3006467
A4007074
A500797E
A600848A
A7008F96
OK.

Проделывая всю ту же операцию в программе LabVIEW через VISA на выходе получаем лишь одну строку, для получение всех строк требуется отправить 9 запросов. Каждая команда заканчивается возвратом каретки и переводом строки.

С чем это может быть cвязано?
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5463
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 87 раз

Re: чтение VISA

Сообщение IvanLis »

Anna73 писал(а):Проделывая всю ту же операцию в программе LabVIEW через VISA на выходе получаем лишь одну строку, для получение всех строк требуется отправить 9 запросов. Каждая команда заканчивается возвратом каретки и переводом строки.

С чем это может быть cвязано?
Покажите программу, скорее всего там однократное считывание из порта идет, а вам необходимо читать, пока не получите OK
Borjomy_1

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

Re: чтение VISA

Сообщение Borjomy_1 »

Попробуйте в качестве терминального символа заказать либо точку (.)
Последний раз редактировалось Borjomy_1 28 сен 2016, 13:15, всего редактировалось 1 раз.
Аватара пользователя
dadreamer

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

Re: чтение VISA

Сообщение dadreamer »

Borjomy_1 писал(а):Попробуйте в качестве терминального символа заказать ... терминальную строку целиком (OK.перевод строки)
А как это сделать? :brows:
Вложения
2016-09-28_15-03-37.jpg
Borjomy_1

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

Re: чтение VISA

Сообщение Borjomy_1 »

Забылся ))
Blackman

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

Re: чтение VISA

Сообщение Blackman »

А вот так :)
Вложения
VISA Read while not OK.PNG
VISA Read while not OK.PNG (9.59 КБ) 2578 просмотров
VISA Read while not OK.vi
(16.59 КБ) 79 скачиваний
Anna73
beginner
beginner
Сообщения: 11
Зарегистрирован: 12 авг 2014, 08:06
Версия LabVIEW: 2012
Контактная информация:

Re: чтение VISA

Сообщение Anna73 »

спасибо большое за ответы.
в данном случае зная количество строк я отправляла нужное количество запросов.
Снимок.PNG
вопрос в том, что это очень замедляет сбор данных и возможно ли обойти этот момент.
Anna73
beginner
beginner
Сообщения: 11
Зарегистрирован: 12 авг 2014, 08:06
Версия LabVIEW: 2012
Контактная информация:

Re: чтение VISA

Сообщение Anna73 »

то же самое происходит с любым запросом где есть переход на другую строку. visa считывает 1 строку, а чтобы увидеть следующую нужно отправить еще один запрос. так и должно быть?
Borjomy_1

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

Re: чтение VISA

Сообщение Borjomy_1 »

Скорее не запрос.Это Функция чтения строки. (она не запрашивает, а считывает данные из буфера до признака конца строки). Так и должно быть. В принципе вы в цикле можете считывать строки после выдачи команды, в ожидании строки Ок, а результаты складывать. Т.е условием выхода из цикла будет то, что считанная строка по длине меньше строки с числом или соответствует строке "ОК." (это как вам нравится). Можно еще учесть реакцию на неправильную команду или то, что удаленное устройство не подключено. Таймаут следует, кстати, уменьшить. Если не подключено или ошибка, то программа зависнет на пару минут.
Аватара пользователя
dadreamer

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

Re: чтение VISA

Сообщение dadreamer »

Anna73, после строки "ОК." тоже идёт Line Feed (0xA) или точка - последний символ? Просто у вас там на 9-й операции чтения указано считать 10 байт... Выведите ответ от прибора в виде Hex или \ кодов (ПКМ на индикаторе -> \ Codes Display или Hex Display). Ошибка по таймауту возникает после всех этих 9 чтений или нет?
Anna73
beginner
beginner
Сообщения: 11
Зарегистрирован: 12 авг 2014, 08:06
Версия LabVIEW: 2012
Контактная информация:

Re: чтение VISA

Сообщение Anna73 »

немного сбило, что в терминале считываются все данные. спасибо большое, теперь все понятно)
Anna73
beginner
beginner
Сообщения: 11
Зарегистрирован: 12 авг 2014, 08:06
Версия LabVIEW: 2012
Контактная информация:

Re: чтение VISA

Сообщение Anna73 »

dadreamer писал(а):Anna73, после строки "ОК." тоже идёт Line Feed (0xA) или точка - последний символ? Просто у вас там на 9-й операции чтения указано считать 10 байт... Выведите ответ от прибора в виде Hex или \ кодов (ПКМ на индикаторе -> \ Codes Display или Hex Display). Ошибка по таймауту возникает после всех этих 9 чтений или нет?
это подпрограмма и в таком виде никаких ошибок не возникает. В данном случае удивило именно то, что надо считывать данные 9 раз подряд вместо одного.10 байт поставила как на всех остальных строках для удобства ( возможно количество байт надо уменьшить). после "ok" идет line feed
Аватара пользователя
dadreamer

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

Re: чтение VISA

Сообщение dadreamer »

Anna73 писал(а):
dadreamer писал(а):Anna73, после строки "ОК." тоже идёт Line Feed (0xA) или точка - последний символ? Просто у вас там на 9-й операции чтения указано считать 10 байт... Выведите ответ от прибора в виде Hex или \ кодов (ПКМ на индикаторе -> \ Codes Display или Hex Display). Ошибка по таймауту возникает после всех этих 9 чтений или нет?
это подпрограмма и в таком виде никаких ошибок не возникает. В данном случае удивило именно то, что надо считывать данные 9 раз подряд вместо одного.10 байт поставила как на всех остальных строках для удобства ( возможно количество байт надо уменьшить). после "ok" идет line feed
В данном случае всё логично. VISA Read настроен на работу с терминатором, который по умолчанию равен 0xA = \n = Line Feed. Как только в строке встречается такой символ, VISA Read прекращает работу и выдаёт строку в :labview: . Можно перенастроить это поведение, но не нужно, т.к. такой терминатор заложен в вашем протоколе. Число считываемых байт можно сделать и больше, хоть 4096, результат будет такой же. А вот меньше, чем реальный ответ от прибора, делать не стоит, т.к. будет считана лишь часть строки. А вот интересно, что ответит прибор, если каналов окажется подключено меньше, чем у вас заложено в программе? Если ответ окажется короче на 1 строку, то на последнем VISA Read может произойти таймаут. Потому, наверное, лучше не задавать число проходов VISA Read константой, а читать в While до тех пор, пока строка не окажется равна "ОК.", параллельно складируя результат в массив. Ну, а после цикла уже разбирать сам массив (смотреть размер, элементы).
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Для чайников»