Как записать в VISA длинную строку?

Простейшие вопросы в области инженерной разработки
Ответить
Taba
beginner
beginner
Сообщения: 35
Зарегистрирован: 02 дек 2015, 15:06
Версия LabVIEW: 2018
Контактная информация:

Как записать в VISA длинную строку?

Сообщение Taba »

Всем привет. Осваиваю SMU Keithley 2636B, прибор подключен по USB. Cтолкнулся с проблемой, что не могу заставить его разворачивать напряжение из большой таблицы значений; из маленькой получается (проблемы начинаются при примерно 150 элементах).
прибор корректно выполняет команду
VISA WRITE
SweepVListMeasureI(smua,{-1,-0.98,-0.96,-0.94,-0.92,-0.9,-0.88,-0.86,-0.84,-0.82,-0.8,-0.78,-0.76,-0.74,-0.72,-0.7,-0.68,-0.66,-0.64,-0.62,-0.6,-0.58,-0.56,-0.54,-0.52,-0.5,-0.48,-0.46,-0.44,-0.42,-0.4,-0.38,-0.36,-0.34,-0.32,-0.3,-0.28,-0.26,-0.24,-0.22,-0.2,-0.18,-0.16,-0.14,-0.12,-0.1,-0.08,-0.06,-0.04,-0.02,0,0.02,0.04,0.06,0.08,0.1,0.12,0.14,0.16,0.18,0.2,0.22,0.24,0.26,0.28,0.3,0.32,0.34,0.36,0.38,0.4,0.42,0.44,0.46,0.48,0.5,0.52,0.54,0.56,0.58,0.6,0.62,0.64,0.66,0.68,0.7,0.72,0.74,0.76,0.78,0.8,0.82,0.84,0.86,0.88,0.9,0.92,0.94,0.96,0.98,1,0.98,0.96,0.94,0.92,0.9,0.88,0.86,0.84,0.82,0.8,0.78,0.76,0.74,0.72,0.7,0.68,0.66,0.64,0.62,0.6,0.58,0.56,0.54,0.52,0.5,0.48,0.46,0.44,0.42,0.4,0.38,0.36,0.34,0.32,0.3,0.28,0.26,0.24,0.22,0.2,0.18,0.16,0.14,0.12,0.1,0.08,0.06,0.04,0.02,0,-0.02,-0.04,-0.06,-0.08,-0.1,-0.12,-0.14,-0.16,-0.18,-0.2,-0.22,-0.24,-0.26,-0.28,-0.3,-0.32,-0.34,-0.36,-0.38,-0.4,-0.42,-0.44,-0.46,-0.48,-0.5,-0.52,-0.54,-0.56,-0.58,-0.6,-0.62,-0.64,-0.66,-0.68,-0.7,-0.72,-0.74,-0.76,-0.78,-0.8,-0.82,-0.84,-0.86,-0.88,-0.9,-0.92,-0.94,-0.96,-0.98,-1}, 0.0001, 201)

Если же количество точек здесь удвоить, то уже хрен. Я вроде как догадался :crazy: , что проблема в том, что я пишу во входящий буффер слишком длинную строку. Вопрос: как мне туда (в буффер) засунуть строку какой угодно длины?

Пробовал ковыряться с VISA SET I/O BUFFER SIZE - не получилось - всё время какие-то ошибки, проблемы.

Посмотрел как это сделано на SMU 2450 (в готовой библиотеке драйверов, с которой никогда таких проблем не возникало) - там большая строка разбивается так:
сначала создаётся таблица, из которой потом будут браться данные для источника:
VISA WRITE
SOUR:LIST:VOLT -800.000000E-3,-790.000000E-3,-780.000000E-3,-770.000000E-3,-760.000000E-3,-750.000000E-3,-740.000000E-3,-730.000000E-3,-720.000000E-3,-710.000000E-3
потом в массиве (for/while) с каждой итерацией к этой таблице прибавляются все оставшиеся данные
VISA WRITE
SOUR:LIST:VOLT:APP -700.000000E-3,-690.000000E-3,-680.000000E-3,-670.000000E-3,-660.000000E-3,-650.000000E-3,-640.000000E-3,-630.000000E-3,-620.000000E-3,-610.000000E-3
и так до победного конца исходной большой таблицы значений для источника.


Примера с большой таблицей для 2636B в библиотеке драйверов и в мануале нет. Там типичные примеры из нескольких элементов.
Artem.spb

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

Re: Как записать в VISA длинную строку?

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

Может, дело ещё и в слушателе? Умеет ли он принимать такие длинные строки?
Если вариант из примеров работает, то чем он не устраивает? Там я так понимаю тоже по частям засылается?
Taba
beginner
beginner
Сообщения: 35
Зарегистрирован: 02 дек 2015, 15:06
Версия LabVIEW: 2018
Контактная информация:

Re: Как записать в VISA длинную строку?

Сообщение Taba »

Artem.spb писал(а): 12 апр 2021, 20:12 Если вариант из примеров работает, то чем он не устраивает?
В примере с частями речь о приборе Keithley 2450 -он понимает команду SOUR:LIST:VOLT:APPend - т.е. добавить к предыдущей таблице. Мой прибор Keithley 2636B такого не понимает и в мануале (https://www.tek.com/keithley-source-mea ... 636b-syste - тыща страниц однако) подобного не нашёл.

У меня надежда, что в самой VISA есть такой функционал или можно увеличить размер принимаемой строки.
Может, дело ещё и в слушателе? Умеет ли он принимать такие длинные строки?
Да, может быть и так, прибор древний. Но надеюсь всё же на настройки VISA. В мануале на счёт объма входящего буффера информации не нашёл, возможно придётся писать в поддержку/на форум tektronix.
Artem.spb

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

Re: Как записать в VISA длинную строку?

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

Taba писал(а): 12 апр 2021, 19:53 всё время какие-то ошибки, проблемы.
Значит, пора раскрывать тайны.
По ссылке ничего сказать не получается, а рыскать по множеству страниц лень (где-то на десятой попытке задолбался)
Аватара пользователя
IvanLis

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

Re: Как записать в VISA длинную строку?

Сообщение IvanLis »

Наверняка есть признак окончания пакета, какой-нибудь терминальный бит.
Так вам нужно в цикле писать в буфер данные, а прибор их складывать их в одну строку, пока не будет идентифицирован конец пакета.
Я не думаю, что у вас скорость передачи превышает скорость вычитывания данных из буфера.
Borjomy_1

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

Re: Как записать в VISA длинную строку?

Сообщение Borjomy_1 »

Очевидно, что в приборе буФер приема имеет ограниченный размер. А так как разбор идет полностью принятой команды, то переполнение буфера, в процессе приема, вызывает ошибку. Видно два варианта источника проблем - размер приемного буфера (в байтах) и размер таблицы (в значениях). Выясняется это просто: подбираются две команды - одна выполняется успешно, другая - нет. После этого в успешную команду добавляются значащие разряды одного (или нескольких) значений до тех пор, пока команда перестанет выполняться. Если эффекта нет, то добавляется еще одно значение. Таким образом в первом случае причина это размер буфера в байтах и соответственно, успешность команды зависит от количества знаков, а во втором - точность элементов значения не имеет, имеет значение именно количество элементов
Taba
beginner
beginner
Сообщения: 35
Зарегистрирован: 02 дек 2015, 15:06
Версия LabVIEW: 2018
Контактная информация:

Re: Как записать в VISA длинную строку?

Сообщение Taba »

Спасибо всем ответившим. Пока повозиться с прибором времени нет, появится, попробую настроить buffer size.
Borjomy_1

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

Re: Как записать в VISA длинную строку?

Сообщение Borjomy_1 »

Ковыряться с размером передающего буфера затея бессмысленная. При переполнении вы получите ошибку. А ее нет. Да и размер по умолчанию составляет килобайты. Наиболее вероятной является проблема именно на стороне прибора, который априори не имеет тех объемов памяти и мощности процессора, которые доступны в ПК.
ujin1
adviser
adviser
Сообщения: 231
Зарегистрирован: 06 ноя 2020, 15:37
Версия LabVIEW: 19
Благодарил (а): 18 раз
Поблагодарили: 37 раз
Контактная информация:

Re: Как записать в VISA длинную строку?

Сообщение ujin1 »

Borjomy_1 писал(а): 14 апр 2021, 09:25 Ковыряться с размером передающего буфера затея бессмысленная. При переполнении вы получите ошибку. А ее нет. Да и размер по умолчанию составляет килобайты. Наиболее вероятной является проблема именно на стороне прибора, который априори не имеет тех объемов памяти и мощности процессора, которые доступны в ПК.
Управление потоком можно попробовать если есть. Аппаратное RTS/CTS или программное XON/XOFF.
Изображение
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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