VISA - датчик положения ротора - ошибка

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы
Ответить
ray.raimond
interested
interested
Сообщения: 6
Зарегистрирован: 04 янв 2014, 23:59
Версия LabVIEW: 8
Контактная информация:

VISA - датчик положения ротора - ошибка

Сообщение ray.raimond »

Добрый день!
Помогите пожалуйста разобраться вот в каком вопросе.

Задача стандартная, но ее решение на форуме найти не удалось.
Микроконтроллер по сигналам от датчика положения ротора рассчитывает частоту вращения и передает ее в 8-битном формате через УАПП в Labview.
"Посылки" отправляются 1 раз в 0,1 с, а все остальное время контроллер всячески пытается оптимизировать работу двигателя.
Terminal "видит" посылки и частота, которую он получает, совпадает с реальной (+-погрешность).
Но наглядности результатов - никакой.

Установил Labview и Visa. Com-port программа видит.
Построил простой виртуальный измеритель. Но программа все время ругается на элемент Scan string: Error 1 occurred at Scan From String (arg 1).
Файл я прикрепил к сообщению.

Здесь - http://parts.dn.ua/instruction/arduino- ... annyh.html
это объясняли тем, что "чтение данных из порта начинается на «полуслове»" и для борьбы с этим использовали элемент "clear errors".
Если я добавляю его, то ошибка не возникает, но индикаторы ничего не видят. Программа просто молчит.

Если я правильно понимаю, то из-за того, что посылки идут с паузами (в моем случае около 0,1 с), то должны использоваться "терминаторы".
Т.е. за "полезной" посылкой нужно послать еще одну, которая временно остановит работу виртуальных приборов.
По-умолчанию в VISA терминатор 0xA (если я правильно понял). Перемежаю посылки с частотой вращения с посылками 0xA. Terminal все видит, а Labview - нет - по-прежнему молчит. Если здесь "clear errors" не добавлять - то тоже будет ругаться.

Пожалуйста подскажите в чем здесь может быть дело и как с этим бороться.


Извините, если я что-то не так или неточно формулирую. Дело в том, что всем этим занимаюсь совсем недавно.
Вложения
encoder.vi
(15.45 КБ) 177 скачиваний
IORIK
adviser
adviser
Сообщения: 240
Зарегистрирован: 14 дек 2010, 20:46
Версия LabVIEW: 7.0; 8.2

Re: VISA - датчик положения ротора - ошибка

Сообщение IORIK »

ray.raimond, настройка COM-порта не сводится только к установке скорости обмена. Также важны такие параметры как: кол-во бит, четность, кол-во стоповых бит, terminal char, timeout. По хорошему, у вас должны быть одинаковые настройки порта в микроконтроллере и компьютера. Соответственно, вы должны установить в :labview: тот terminal char, который установлен в микроконтроллере (0xA, 0xD, или другой символ).
Естественно, работать с terminal char приятно.
Мой небольшой опыт с энкодерами подсказывает, что микроконтроллер посылает строку одной и той же длины. Поэтому, перед тем как считывать данные, можно проверять кол-во байт в порту и при достижении нужного кол-ва их считывать.
В вашем примере вы пытаетесь прочитать 200 байт, но считывается тот объем, который есть в порту. При возникновении ошибки в "VISA READ" на выходе создается пустая строка, которую вы пытаетесь преобразовать в число. А на пустую строку уже ругается "SCAN from STRING". Чтобы избежать такой ошибки, можно делать проверку на пустую строку.
ray.raimond
interested
interested
Сообщения: 6
Зарегистрирован: 04 янв 2014, 23:59
Версия LabVIEW: 8
Контактная информация:

Re: VISA - датчик положения ротора - ошибка

Сообщение ray.raimond »

IORIK, спасибо большое!

Подскажите пожалуйста с помощью каких элементов можно "смотреть" сколько байт поступило в порт и потом разрешать их считывание.

И еще один вопрос: termination байты будут видны в этом буфере и их нужно самому отсекать или VISA их не записывает, а пишет только "полезные" посылки?
IORIK
adviser
adviser
Сообщения: 240
Зарегистрирован: 14 дек 2010, 20:46
Версия LabVIEW: 7.0; 8.2

Re: VISA - датчик положения ротора - ошибка

Сообщение IORIK »

b]ray.raimond[/b], начать работать с ком-портом можно так:
fig1.jpg
напомню еще раз, настроить ком-порт вы должны идентично микроконтроллеру. Поскольку у вас "enable termination char"=True, то "termination char" будет отсекаться автоматически. Но практика ваш помощник, в начале добейтесь что бы в :labview: считывалась та же строка, что и в HTerminal. И только потом разбирать и конвертировать в числовые данные.
ray.raimond
interested
interested
Сообщения: 6
Зарегистрирован: 04 янв 2014, 23:59
Версия LabVIEW: 8
Контактная информация:

Re: VISA - датчик положения ротора - ошибка

Сообщение ray.raimond »

Спасибо!

Сделал все как на блок-схеме. Ошибка исчезла.

Получается теперь такая ситуация, что индикатор все время "видит" NaN из второй Case Structure.
Выходит так, что :labview: все время принимает только пустые посылки.
Но Terminal с такими же настройками (9600 бод, 8 бит, четность - нет, стоп-бит 1, СOM-port 1) читает нормальную частоту вращения.
Пробовал и с терминаторами и без них - получается одно и то же.

Единственный момент, который заметил - в блоке "Visa Serial" в окошке "error out" стоит красный крестик и написано:
Property Node (arg 8) in VISA Configure Serial Port (Instr).vi->encoder.vi

Подскажите пожалуйста, как с этим можно справиться.
Куда деваются посылки?
Вложения
encoder.vi
(23.51 КБ) 178 скачиваний
IORIK
adviser
adviser
Сообщения: 240
Зарегистрирован: 14 дек 2010, 20:46
Версия LabVIEW: 7.0; 8.2

Re: VISA - датчик положения ротора - ошибка

Сообщение IORIK »

ray.raimond, побывал по первой вашей ссылке http://parts.dn.ua/instruction/arduino- ... annyh.html.
По идее, программа с микроконтролера постоянно посылает данные в порт. Программа :labview: в это же время должна считывать данные. Иначе у вас может произойти переполнение буфера. Вам надо разобраться с кодом ошибки, что на самом деле происходит. Как я понял что вы описали, ошибка происходит при инициализации порта. Но я могу ошибаться, код ошибки вы не показали. Либо вы что то напутали при программировании микроконтроллера.
ray.raimond
interested
interested
Сообщения: 6
Зарегистрирован: 04 янв 2014, 23:59
Версия LabVIEW: 8
Контактная информация:

Re: VISA - датчик положения ротора - ошибка

Сообщение ray.raimond »

Обнаружил, что в Measurement and Automation Explorer при выделении COM-porta1, с которого пытаюсь считтывать данные и при нажатии кнопки Open Visa test panel вылетает ошибка:

Error opening resource:
ASRL1::INSTR
VISA: (Hex 0xBFFF0072) The resource is valid, but VISA cannot currently access it.

Дальше интересней. Извлекаю контроллер из СОМ-порта и он исчезает из списка в Measurement and Automation Explorer и одновременно в диспетчере устройств.
Так и должно быть?
Наверное самая важная деталь - я работаю на ноутбуке и реального СОМ-порта у меня нет, поэтому для того чтобы "подружить" контроллер с компьютером использую преобразователь USB-UART на микросхеме PL-2303.

Все это добро продолжает нормально работать с Terminalom, а :labview: предательски молчит.
Аватара пользователя
dadreamer

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

Re: VISA - датчик положения ротора - ошибка

Сообщение dadreamer »

ray.raimond писал(а):VISA: (Hex 0xBFFF0072) The resource is valid, but VISA cannot currently access it.
Видимо, порт занят каким-то процессом. Драйвера от Prolific последней версии стоят? Надеюсь, поверх них драйвера от VISA не накатывали?
ray.raimond
interested
interested
Сообщения: 6
Зарегистрирован: 04 янв 2014, 23:59
Версия LabVIEW: 8
Контактная информация:

Re: VISA - датчик положения ротора - ошибка

Сообщение ray.raimond »

Драйвера от Prolific последней версии стоят?
Драйвера для Prolifica устанавливались автоматически. Я в этот процесс не вмешивался.
Сейчас зашел в диспетчер устройств и попросил его обновить драйвера Prolofica из интернета - пишет, что обновление драйверов устройству не требуется.
Надеюсь, поверх них драйвера от VISA не накатывали?
Вначале работал с портом с помощью Terminala. Только потом возникло стремление как-то это все визуализировать.
Установил Labview 8.2. Потом на формуах вычитал, что нужна еще какая-то VISA. Скачал ее с официального сайта и установил.
Вот такая хронология получается. Это неправильно?

Странно это все :dntknw: . Если бы Terminal не читал, тогда да. Но ведь читает и из-того же самого порта.
А вообще из того что увидел на английских форумах - ошибки типа:

Error opening resource:
ASRL1::INSTR
VISA: (Hex 0xBFFF0072) The resource is valid, but VISA cannot currently access it.

довольно распространены. Но вот рецепт пока еще не нашел.
Подскажите пожалуйста, а как-то эту VISU обойти можно?

Просто на соседнем форуме обсуждается альтернатива:
http://labviewportal.org/viewtopic.php?f=22&t=23

Но я наверное что-то недопонимаю, потому что на диаграммах, которые там приводятся VISA все равно присутствует.
Аватара пользователя
dadreamer

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

Re: VISA - датчик положения ротора - ошибка

Сообщение dadreamer »

ray.raimond, да по сути всё верно, я сперва подумал, что вероятно установлен драйвер NI-VISA через Driver Wizard, но судя по мануалу последовательный порт не поддерживается Wizard'ом.
Не вижу большого смысла заменять VISA на альтернативные инструменты. Она достаточно универсальна и проста в работе с COM-портом, поддерживает как обычные операции чтения/записи, так и низкоуровневое программирование, а также триггеры и события. Если VISA будет работать в :labview: , то и другие инструменты заработают однозначно. Вы уверены, что при работе с портом в :labview: никакие другие программы не пытаются работать с портом (например, Hyperterminal)? Может быть, переустановить VISA последней версии с сайта NI. Настройки порта точно везде одинаковые (в МК, в диспетчере устройств, в LV)?
ray.raimond
interested
interested
Сообщения: 6
Зарегистрирован: 04 янв 2014, 23:59
Версия LabVIEW: 8
Контактная информация:

Re: VISA - датчик положения ротора - ошибка

Сообщение ray.raimond »

Вы уверены, что при работе с портом в никакие другие программы не пытаются работать с портом (например, Hyperterminal)? Может быть, переустановить VISA последней версии с сайта NI. Настройки порта точно везде одинаковые (в МК, в диспетчере устройств, в LV)?
С портом другие программы не работают. Hyperterminal "дисконнектю" когда пытаюсь читать порт с помощью VISA.
Дошло вообще до маразма - отключал даже bluetooth-ную мышь)
VISU попробую переустановить.

Вчера попробовал сделать тоже самое в матлабе. Даже неудобно как-то, но все заработало с первой попытки. Все видит, все читает.
Аватара пользователя
dadreamer

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

Re: VISA - датчик положения ротора - ошибка

Сообщение dadreamer »

Я бы вам ещё порекомендовал обновить :labview: хотя бы до 11-й версии, а то 8.2 старовата в наше время уже. Вдруг где-то здесь тоже собака зарыта...
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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