VISA - датчик положения ротора - ошибка
-
- interested
- Сообщения: 6
- Зарегистрирован: 04 янв 2014, 23:59
- Версия LabVIEW: 8
- Контактная информация:
VISA - датчик положения ротора - ошибка
Добрый день!
Помогите пожалуйста разобраться вот в каком вопросе.
Задача стандартная, но ее решение на форуме найти не удалось.
Микроконтроллер по сигналам от датчика положения ротора рассчитывает частоту вращения и передает ее в 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" не добавлять - то тоже будет ругаться.
Пожалуйста подскажите в чем здесь может быть дело и как с этим бороться.
Извините, если я что-то не так или неточно формулирую. Дело в том, что всем этим занимаюсь совсем недавно.
Помогите пожалуйста разобраться вот в каком вопросе.
Задача стандартная, но ее решение на форуме найти не удалось.
Микроконтроллер по сигналам от датчика положения ротора рассчитывает частоту вращения и передает ее в 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 скачиваний
Re: VISA - датчик положения ротора - ошибка
ray.raimond, настройка COM-порта не сводится только к установке скорости обмена. Также важны такие параметры как: кол-во бит, четность, кол-во стоповых бит, terminal char, timeout. По хорошему, у вас должны быть одинаковые настройки порта в микроконтроллере и компьютера. Соответственно, вы должны установить в тот terminal char, который установлен в микроконтроллере (0xA, 0xD, или другой символ).
Естественно, работать с terminal char приятно.
Мой небольшой опыт с энкодерами подсказывает, что микроконтроллер посылает строку одной и той же длины. Поэтому, перед тем как считывать данные, можно проверять кол-во байт в порту и при достижении нужного кол-ва их считывать.
В вашем примере вы пытаетесь прочитать 200 байт, но считывается тот объем, который есть в порту. При возникновении ошибки в "VISA READ" на выходе создается пустая строка, которую вы пытаетесь преобразовать в число. А на пустую строку уже ругается "SCAN from STRING". Чтобы избежать такой ошибки, можно делать проверку на пустую строку.
Естественно, работать с terminal char приятно.
Мой небольшой опыт с энкодерами подсказывает, что микроконтроллер посылает строку одной и той же длины. Поэтому, перед тем как считывать данные, можно проверять кол-во байт в порту и при достижении нужного кол-ва их считывать.
В вашем примере вы пытаетесь прочитать 200 байт, но считывается тот объем, который есть в порту. При возникновении ошибки в "VISA READ" на выходе создается пустая строка, которую вы пытаетесь преобразовать в число. А на пустую строку уже ругается "SCAN from STRING". Чтобы избежать такой ошибки, можно делать проверку на пустую строку.
-
- interested
- Сообщения: 6
- Зарегистрирован: 04 янв 2014, 23:59
- Версия LabVIEW: 8
- Контактная информация:
Re: VISA - датчик положения ротора - ошибка
IORIK, спасибо большое!
Подскажите пожалуйста с помощью каких элементов можно "смотреть" сколько байт поступило в порт и потом разрешать их считывание.
И еще один вопрос: termination байты будут видны в этом буфере и их нужно самому отсекать или VISA их не записывает, а пишет только "полезные" посылки?
Подскажите пожалуйста с помощью каких элементов можно "смотреть" сколько байт поступило в порт и потом разрешать их считывание.
И еще один вопрос: termination байты будут видны в этом буфере и их нужно самому отсекать или VISA их не записывает, а пишет только "полезные" посылки?
Re: VISA - датчик положения ротора - ошибка
b]ray.raimond[/b], начать работать с ком-портом можно так:
напомню еще раз, настроить ком-порт вы должны идентично микроконтроллеру. Поскольку у вас "enable termination char"=True, то "termination char" будет отсекаться автоматически. Но практика ваш помощник, в начале добейтесь что бы в считывалась та же строка, что и в HTerminal. И только потом разбирать и конвертировать в числовые данные.-
- interested
- Сообщения: 6
- Зарегистрирован: 04 янв 2014, 23:59
- Версия LabVIEW: 8
- Контактная информация:
Re: VISA - датчик положения ротора - ошибка
Спасибо!
Сделал все как на блок-схеме. Ошибка исчезла.
Получается теперь такая ситуация, что индикатор все время "видит" NaN из второй Case Structure.
Выходит так, что все время принимает только пустые посылки.
Но Terminal с такими же настройками (9600 бод, 8 бит, четность - нет, стоп-бит 1, СOM-port 1) читает нормальную частоту вращения.
Пробовал и с терминаторами и без них - получается одно и то же.
Единственный момент, который заметил - в блоке "Visa Serial" в окошке "error out" стоит красный крестик и написано:
Property Node (arg 8) in VISA Configure Serial Port (Instr).vi->encoder.vi
Подскажите пожалуйста, как с этим можно справиться.
Куда деваются посылки?
Сделал все как на блок-схеме. Ошибка исчезла.
Получается теперь такая ситуация, что индикатор все время "видит" NaN из второй Case Structure.
Выходит так, что все время принимает только пустые посылки.
Но 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 скачиваний
Re: VISA - датчик положения ротора - ошибка
ray.raimond, побывал по первой вашей ссылке http://parts.dn.ua/instruction/arduino- ... annyh.html.
По идее, программа с микроконтролера постоянно посылает данные в порт. Программа в это же время должна считывать данные. Иначе у вас может произойти переполнение буфера. Вам надо разобраться с кодом ошибки, что на самом деле происходит. Как я понял что вы описали, ошибка происходит при инициализации порта. Но я могу ошибаться, код ошибки вы не показали. Либо вы что то напутали при программировании микроконтроллера.
По идее, программа с микроконтролера постоянно посылает данные в порт. Программа в это же время должна считывать данные. Иначе у вас может произойти переполнение буфера. Вам надо разобраться с кодом ошибки, что на самом деле происходит. Как я понял что вы описали, ошибка происходит при инициализации порта. Но я могу ошибаться, код ошибки вы не показали. Либо вы что то напутали при программировании микроконтроллера.
-
- interested
- Сообщения: 6
- Зарегистрирован: 04 янв 2014, 23:59
- Версия LabVIEW: 8
- Контактная информация:
Re: VISA - датчик положения ротора - ошибка
Обнаружил, что в 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, а предательски молчит.
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, а предательски молчит.
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: VISA - датчик положения ротора - ошибка
Видимо, порт занят каким-то процессом. Драйвера от Prolific последней версии стоят? Надеюсь, поверх них драйвера от VISA не накатывали?ray.raimond писал(а):VISA: (Hex 0xBFFF0072) The resource is valid, but VISA cannot currently access it.
-
- interested
- Сообщения: 6
- Зарегистрирован: 04 янв 2014, 23:59
- Версия LabVIEW: 8
- Контактная информация:
Re: VISA - датчик положения ротора - ошибка
Драйвера для Prolifica устанавливались автоматически. Я в этот процесс не вмешивался.Драйвера от Prolific последней версии стоят?
Сейчас зашел в диспетчер устройств и попросил его обновить драйвера Prolofica из интернета - пишет, что обновление драйверов устройству не требуется.
Вначале работал с портом с помощью Terminala. Только потом возникло стремление как-то это все визуализировать.Надеюсь, поверх них драйвера от VISA не накатывали?
Установил Labview 8.2. Потом на формуах вычитал, что нужна еще какая-то VISA. Скачал ее с официального сайта и установил.
Вот такая хронология получается. Это неправильно?
Странно это все . Если бы 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
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: VISA - датчик положения ротора - ошибка
ray.raimond, да по сути всё верно, я сперва подумал, что вероятно установлен драйвер NI-VISA через Driver Wizard, но судя по мануалу последовательный порт не поддерживается Wizard'ом.
Не вижу большого смысла заменять VISA на альтернативные инструменты. Она достаточно универсальна и проста в работе с COM-портом, поддерживает как обычные операции чтения/записи, так и низкоуровневое программирование, а также триггеры и события. Если VISA будет работать в , то и другие инструменты заработают однозначно. Вы уверены, что при работе с портом в никакие другие программы не пытаются работать с портом (например, Hyperterminal)? Может быть, переустановить VISA последней версии с сайта NI. Настройки порта точно везде одинаковые (в МК, в диспетчере устройств, в LV)?
Не вижу большого смысла заменять VISA на альтернативные инструменты. Она достаточно универсальна и проста в работе с COM-портом, поддерживает как обычные операции чтения/записи, так и низкоуровневое программирование, а также триггеры и события. Если VISA будет работать в , то и другие инструменты заработают однозначно. Вы уверены, что при работе с портом в никакие другие программы не пытаются работать с портом (например, Hyperterminal)? Может быть, переустановить VISA последней версии с сайта NI. Настройки порта точно везде одинаковые (в МК, в диспетчере устройств, в LV)?
-
- interested
- Сообщения: 6
- Зарегистрирован: 04 янв 2014, 23:59
- Версия LabVIEW: 8
- Контактная информация:
Re: VISA - датчик положения ротора - ошибка
С портом другие программы не работают. Hyperterminal "дисконнектю" когда пытаюсь читать порт с помощью VISA.Вы уверены, что при работе с портом в никакие другие программы не пытаются работать с портом (например, Hyperterminal)? Может быть, переустановить VISA последней версии с сайта NI. Настройки порта точно везде одинаковые (в МК, в диспетчере устройств, в LV)?
Дошло вообще до маразма - отключал даже bluetooth-ную мышь)
VISU попробую переустановить.
Вчера попробовал сделать тоже самое в матлабе. Даже неудобно как-то, но все заработало с первой попытки. Все видит, все читает.
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: VISA - датчик положения ротора - ошибка
Я бы вам ещё порекомендовал обновить хотя бы до 11-й версии, а то 8.2 старовата в наше время уже. Вдруг где-то здесь тоже собака зарыта...
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 5 Ответы
- 1575 Просмотры
-
Последнее сообщение Artem.spb
-
- 2 Ответы
- 657 Просмотры
-
Последнее сообщение Borjomy_1
-
- 4 Ответы
- 240 Просмотры
-
Последнее сообщение Embedder74