Скачки при считывании

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы
Ответить
Udjin
beginner
beginner
Сообщения: 33
Зарегистрирован: 27 фев 2008, 01:19
Версия LabVIEW: 7.0 и 8.6
Откуда: Россия/Клин
Контактная информация:

Скачки при считывании

Сообщение Udjin »

Здравствуйте! При написании программы, столкнулся с небольшой проблемой. Суть проблемы заключается в следующем: получая массив данных с прибора, я заметил периодически появляющиеся «скачки» (значения в массиве обнуляются).Чем это может быть вызвано? Связь с прибором осуществляется при помощи COM порта.На данный прибор написаны аналогичные программы на C++ и Delphi и подобных проблем не возникало. За ранее спасибо.
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Не могу добиться стабильной работы прибора.

Сообщение Eugen Graf »

Это связано с таймаутом при чтении данных с порта. Обнуление данных происходит из за того, что ты ждёшь данные, а они в течении определённого времени не приходят с порта. Это время устанавливается при конфигурации порта (обычно это 10 секунд). Я знаю три выхода из этой ситуации:

1. поставить ооочень большой таймаут при конфигурации
2. всю диаграмму находящуюся после считывания данных с порта поместить в свичь кейс, условием которого является ошибка исходящая при чтении с порта.
3. использовать систему ивентов (интерраптов) порта

Советую использовать второй вариант, т.к первый и третий не очень совместимы с драйвером VISA.
Лучше всего загрузи на форум картинку куска блок диаграммы, отвечающего за конфигурацию и считывание порта.
Udjin
beginner
beginner
Сообщения: 33
Зарегистрирован: 27 фев 2008, 01:19
Версия LabVIEW: 7.0 и 8.6
Откуда: Россия/Клин
Контактная информация:

Re: Не могу добиться стабильной работы прибора.

Сообщение Udjin »

Выкладываю кусок программы отвечающий, за считывание с COM порта.
Вложения
Считывание с порта.vi
(83.76 КБ) 273 скачивания
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Не могу добиться стабильной работы прибора.

Сообщение Eugen Graf »

Вот что я имел ввиду.
Вложения
VISARead.PNG
Udjin
beginner
beginner
Сообщения: 33
Зарегистрирован: 27 фев 2008, 01:19
Версия LabVIEW: 7.0 и 8.6
Откуда: Россия/Клин
Контактная информация:

Re: Не могу добиться стабильной работы прибора.

Сообщение Udjin »

Спасибо за предложенное решение! Но массив данных всеравно продолжает скакать, правда значительно реже, примерно каждые 40 секунд, причем обнуляется не весь массив, а лиш несколько значений, еще я заметил, что скачки происходят в момент, когда я пытаюсь загружать какие-нибудь программы.
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Не могу добиться стабильной работы прибора.

Сообщение Eugen Graf »

О каком массиве именно идёт речь? Попробуй перед тем как ты записываешь данные на порт обнулить буфер с помощью Flush. Может быть ты считываешь не те 13 байт которые нужно, а например половину последнего пакета и половину нужного.

А что за бяку ты записываешь на порт? При чём здесь число double 185? Вот этого я точно не понимаю, а ты? :think:
Вложения
FlushBuffer.PNG
FlushBuffer.PNG (2.77 КБ) 11163 просмотра
Udjin
beginner
beginner
Сообщения: 33
Зарегистрирован: 27 фев 2008, 01:19
Версия LabVIEW: 7.0 и 8.6
Откуда: Россия/Клин
Контактная информация:

Re: Не могу добиться стабильной работы прибора.

Сообщение Udjin »

Это «бяка - 185» дает команду на передачу 4 значений Rt – сопротивления, взял я ее из протокола, кстати, схожий протокол я тебе отсылал. Прибор называется электронный термометр, определяющий температуру по 4 каналам. Данный термометр определяет температуру с помощью платиновых датчиков сопротивления. Кусок программы как раз и отвечает за передачу сопротивления с прибора. Думаю, пакет считываю я правильно, так как значения совпадают с прибором практически до сотой (0,01). Видимо проблема кроется в другом, на мой взгляд, она связана из-за постоянного изменения сопротивления датчика, я заметил если температура резко изменяется, то скачки появляются чаще, а при ее стабилизации программа работает практически идеально. Может мне нужно установить время опроса Com порта??? Вот как это сделать в LabVIEW правильно я не знаю. Пробовал ввести задержки в цикл Case Structure, но нужного результата мне это не дало!
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Не могу добиться стабильной работы прибора.

Сообщение Eugen Graf »

Обязательно проверь что ты отсылаешь, потому что эта бяка выглядит неправильно. Так это не делается, возьми лучше обычный Type Cast или же Flatten To String.

А время для считывания у тебя установлено при инициализации порта. Оно установлено по умолчанию на 10 секунд, попробуй увеличить это время, хотя я не думаю что в этом проблема. Ты знаешь как быстро реагирует прибор на команду? Я думаю быстрее чем 10 секунд, так что искать надо в другом месте.

Попробуй продибагить (жёлтая лампочка в меню) твою программу, посмотри как часто выскакивают ошибки при чтении.
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Не могу добиться стабильной работы прибора.

Сообщение Eugen Graf »

Я по-моему нашёл в чём может быть проблема!!! :crazy:

Ведь ты используешь бинарный протокол, а не ASCII. Поэтому при инициализации порта тебе надо обязательно указать, что ты не используешь Termination Character. Там сверху есть флэг, его надо поставить на False.

Termination Char используется для ASCII протоколов. Обычно это <cr><lf> то есть <новая строка><возврат каретки>, в общем обозначает конец строки. При чтении порта, прибор VISA Read считывает порт и заканчивает чтение если:
1. истекло установленое время Timeout
2. считалось установленое количество байт
3. в буфере чтения находится Termination Char, но конечно если при конфигурации порта он включен

У тебя Termination Char был включен, и если вдруг в пакете случайно он оказывался, что не исключено при использовании бинарных протоколов, то чтение прерывалось и ты на выходе получал неполный пакет, который заменялся на нули.
Udjin
beginner
beginner
Сообщения: 33
Зарегистрирован: 27 фев 2008, 01:19
Версия LabVIEW: 7.0 и 8.6
Откуда: Россия/Клин
Контактная информация:

Re: Не могу добиться стабильной работы прибора.

Сообщение Udjin »

Я отключил "Termination Char" и действительно при постоянном значение температуры скачки прикатились, но когда температура начинает резко меняться, они все-же имеют место быть, правда горазда реже. Может мне стоит сделать интервал времени через который, я буду получать значения Rt сопротивления? А вот как это сделать я не знаю. Мне ведь не обязательно постоянно получать данные с прибора, гораздо важнее иметь ровную кривую на графики совпадающую со значениями на приборе. Спасибо за помощь!!!
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Не могу добиться стабильной работы прибора.

Сообщение Eugen Graf »

Ну так добавь задержку "Wait(ms).VI" например в 100 милисекунд перед каждым "VISA Write.VI" или просто в общий цикл While.
Udjin
beginner
beginner
Сообщения: 33
Зарегистрирован: 27 фев 2008, 01:19
Версия LabVIEW: 7.0 и 8.6
Откуда: Россия/Клин
Контактная информация:

Re: Не могу добиться стабильной работы прибора.

Сообщение Udjin »

Я сделал немножко подругому.Заметив, что значения в результате скачка меняются на одну и туже величину, я поместил значение Rt в цикл Case Structur, а условием цикла задал сравнения с приблизительно нужным результатом. Теперь в тот момент, когда происходит скачок, у меня остается последнее значения удовлетворяющая заданному условию. Конечно это не совсем правильный выход из ситуации, но теперь хоть можно провести исследования в автоматическом режиме, хотя в дальнейшим хотелось бы разобраться с этой проблемой. Огромное спасибо за помощь!
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Не могу добиться стабильной работы прибора.

Сообщение Eugen Graf »

Ну как успехи? Получается что нибудь рабочее?
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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