ошибка постановки в очередь

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы
Ann
beginner
beginner
Сообщения: 16
Зарегистрирован: 03 май 2008, 18:32
Контактная информация:

ошибка постановки в очередь

Сообщение Ann »

ошибка постановки в очередь(queue). в случае работы с одним внешним прибором - не возникает.
когда подключаю другой - возникает после считывания одного пакета.
моя программа считывает данные с сом-порта и кладет их в очередь. параллельный цикл из очереди вытаскивает и обрабатывает данные.
первый внешний прибор - с которым прога работает хорошо - работает с одним прерыванием на передачу данных мне.
второй - работает с 4 прерываниями, и в тот момент, когда внешн устройство переключается на свои прерывания - у меня идет ошибка постановки в очередь. самое интересное - виза не возмущается вообще. поток данных идет нормальный.
с чем это может быть связано?
Аватара пользователя
Eugen Graf

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

Re: ошибка постановки в очередь

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

Надо обратить особое внимание на установленые таймауты при чтении очереди и последовательного порта. Я думаю проблема закопана именно там.
А вообще желательно взглянуть на блок диаграмму.
Ann
beginner
beginner
Сообщения: 16
Зарегистрирован: 03 май 2008, 18:32
Контактная информация:

Re: ошибка постановки в очередь

Сообщение Ann »

таймаут бесконечный, также установлен большой в визе. время между пакетами 5 мс,независимо от того есть там м/у подачей данных "не мои" прерывания или нет. прилагаю файл. в событиях см. Start - там прием и обработка.
Вложения
MAX.vi
(349.49 КБ) 237 скачиваний
Аватара пользователя
Eugen Graf

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

Re: ошибка постановки в очередь

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

Ок, я посмотрел.

Верхний цикл считывает по одному байту с последовательного порта и записывает в очередь.
Другой цикл кроме считывания из очереди делает ещё много чего.
Этот второй цикл явно не успевает за первым. Это однозначно!
Вообще считывать с посл. интерфейса и записывать в очередь само по себе уже неправильно, но в принципе может работать.
Лучше считывать пакетами.

Какая ошибка возникает? Что написано?
Ann
beginner
beginner
Сообщения: 16
Зарегистрирован: 03 май 2008, 18:32
Контактная информация:

Re: ошибка постановки в очередь

Сообщение Ann »

можно ли с тобой связаться по аське?
будет проще. отвечаю. именно потому что второй цикл не успевает за первым пришлось организовывать очередь.
потому как программа должна работать в реал-тайме.
ошибка при подключении устройства с 4 прерываниями простая. Enqueu element. после считывания 1 пакета. в случае включения во внешней прогр. "своих" прерываний. когда работа двигателя стабильная. то левые прерывания не включаются. и у меня все работат.
ну и на симуляторе, там где генерируется сигнал "пила", там одно прерывание. все тоже работает.
связано ли это с прерываниями?
Ann
beginner
beginner
Сообщения: 16
Зарегистрирован: 03 май 2008, 18:32
Контактная информация:

Re: ошибка постановки в очередь

Сообщение Ann »

мой номер аси 156051392
пакетами считывать не могу. надо по ходу контролировать стартовые байты и контрольную сумму. и только тогда обрабатывать данные. это тз. считывать побайтно.
Аватара пользователя
Eugen Graf

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

Re: ошибка постановки в очередь

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

Дело в том что очередь стоит открывать в самом начале перед всеми циклами, а закрывать в самом конце программы, когда все циклы уже закончились. То же касается всех других реферексов, например последовательного порта.
Видимо врхний цикл хочет ещё записать данные в очередь, а нижний уже закончился и закрыл очередь. Вот и ошибка.

А лицевая панель мне понравилась, неплохо.
Ann
beginner
beginner
Сообщения: 16
Зарегистрирован: 03 май 2008, 18:32
Контактная информация:

Re: ошибка постановки в очередь

Сообщение Ann »

я пробовала выносить открытие и закрытие "подальше" - это не помогает.
нижний цикл заканчивает работу только по нажатии кнопки СТОП. тогда верхний перестает принимать данные и шлет нули, чтобы нижний цикл, встретившись с этими нулями прекратил работу.сам он не должен выходить и закрывать ничего.
почему с одним внешним устройством работает , а с другим нет...вот это мне не понятно. че по прерываниям думаш? они могут как-то передаваться?
Аватара пользователя
Eugen Graf

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

Re: ошибка постановки в очередь

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

И всё же какая именно ошибка возникает?

Вообще то нижний цикл заканчивается не только когда он получает "00", но и если нажат глобальный стоп. Так же и верхний заканчивается если нажат глобальный стоп.

Так вот если стоп нажат и вдруг нижний цикл закончится раньше, а так и будет если VISA Read в верхнем цикле ждёт данные, то и выскочит ошибка.

Наверняка один прибор посылает данные чаще чем другой.
Ann
beginner
beginner
Сообщения: 16
Зарегистрирован: 03 май 2008, 18:32
Контактная информация:

Re: ошибка постановки в очередь

Сообщение Ann »

ошибка так и звучит "enqueue element" под номером 1. /возникает в блоке "постановка в очередь"/
она появляется в случае, когда ссылка на очередь становится неактивной.
а так оно и происходит. название очереди перестает видеть.
Глобальный стоп. в рабочей программе я не использую. это аварийная кнопка для отладки, если я хочу все остановить.
она в работе участие не принимает. и ошибка возникает ДО ее нажатия.( я ей практич. не пользуюсь.)
в работе используется кнопка Stop(а не ГлобалСтоп), когда я просто хочу прекратить принимать данные. тогда в очередь идут нули, чтоб она не закрывалась раньше времени, очередь отрабатывается, встречает нули и только тогда очередь закрывается
Аватара пользователя
Eugen Graf

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

Re: ошибка постановки в очередь

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

А вообще конечно принимающий цикл должен успевать за отдающим иначе очередь рано или поздно переполнится. Очередь нужно использовать тогда, когда один цикл ТОЛЬКО временно не успевает.
А сделать это обычно несложно, так как чтение с прибора уж наверняка медленнее работы компа.
Ann
beginner
beginner
Сообщения: 16
Зарегистрирован: 03 май 2008, 18:32
Контактная информация:

Re: ошибка постановки в очередь

Сообщение Ann »

да. еще. проверяли на осцилографе. пакеты данных идут через каждые 5 мс. что в одном приборе, что в другом
Ann
beginner
beginner
Сообщения: 16
Зарегистрирован: 03 май 2008, 18:32
Контактная информация:

Re: ошибка постановки в очередь

Сообщение Ann »

так и есть. он не успевает только временно. я отслеживаю кол-во элементов в очереди. они могут увеличиться до 100, к примеру, если система загружена и параллельно работают другие проги. например ворд. или любая другая. а потом кол-во элементов спокойно падает до нуля прямо в процессе работы. очередь дает мне возможность не терять данные. в случаях загруза системы.
т.е. задержка обработки практически отсутствует.
Аватара пользователя
Eugen Graf

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

Re: ошибка постановки в очередь

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

Понятно.

А ведь ты же заканчиваешь верхний цикл при возникновении ошибки. Как она может выскакивать?
Вложения
Loop.PNG
Ann
beginner
beginner
Сообщения: 16
Зарегистрирован: 03 май 2008, 18:32
Контактная информация:

Re: ошибка постановки в очередь

Сообщение Ann »

поэтому и поставила обработчик ошибок
чтоб прога не вылетала, не люблю сюрпризов.
игнорировать ее нет смысла - данные-то не проходят в очередь
и ошибка повторяется на всех следующих итерациях цикла
поэтому я поставила - по ошибке - цикл останавливается - кнопка СТАРТ отщелкивается
когда жмешь ее снова - проходит какая-то инициализация - и следующий пакет проходит
но - до следующего левого прерывания.
мне нужно выяснить причину появления ошибки
и почему при повторном входе в стуктуру события СТАРТ - проходит следующий пакет...
видимо нужно пробовать вносить создание очереди внутрь цикла...
пока другого выхода не вижу.
пробовала на простом примере с генерацией синуса - работает.
надо попробовать с аппаратурой.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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