обновление дисплея и организация циклов

Простейшие вопросы в области инженерной разработки
rushonda
developer
developer
Сообщения: 289
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-20
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

обновление дисплея и организация циклов

Сообщение rushonda »

Добрый день! Подскажите как лучше сделать. Все вопросы на картинке)
Вложения
display.png
Аватара пользователя
IvanLis

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

Re: обновление дисплея и организация циклов

Сообщение IvanLis »

rushonda писал(а):Добрый день! Подскажите как лучше сделать. Все вопросы на картинке)
Не понятно, для чего верхний цикл (обработка GUI), если он не связан с другими?

С картинками не все так просто, реально Вы в кластер не изображение пишите, а указатель на него.
Внимательно прочтите тему: http://www.labviewportal.org/viewtopic.php?f=129&t=4226
rushonda
developer
developer
Сообщения: 289
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-20
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

Re: обновление дисплея и организация циклов

Сообщение rushonda »

Виноват, на рисунке не отобразил. Все три цикла связаны через очереди. IvanLis, Вашу ссылку я посмотрел - много непонятного, еще по изучаю. Только мне не нужно изображение на другой комп отправлять - просто передать из цикла в другой цикл.
Глобально задача такая: в первом цикле идет считывание из AVI файла - и передача изображения во 2-ой, во 2-м обработка изображения.

Пока не понятно где выводить изображение: во 2-м или в 3-м?
Ну и как правильнее передавать изображение через очереди из одного в другой цикл?
rushonda
developer
developer
Сообщения: 289
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-20
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

Re: обновление дисплея и организация циклов

Сообщение rushonda »

Отправляю я изображение во второй цикл, потому что считывание AVI медленное и пока идет обработка во 2 цикле, в 1-м происходит считывание из AVI.
Аватара пользователя
dadreamer

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

Re: обновление дисплея и организация циклов

Сообщение dadreamer »

IvanLis писал(а):С картинками не все так просто, реально Вы в кластер не изображение пишите, а указатель на него.
Внимательно прочтите тему: http://www.labviewportal.org/viewtopic.php?f=129&t=4226
Ну, если автор работает в рамках одного процесса (то есть, одного адресного пространства), то ему ни к чему париться об этом. Библиотека nivision сама сопоставит ссылки и их имена блокам памяти с картинками.
rushonda писал(а):Пока не понятно где выводить изображение: во 2-м или в 3-м?
А где вам будет удобнее. Очереди - универсальная штука, от цикла не зависят. Можно даже в нескольких циклах очередь проверять: в одном извлечение, в других просмотр. Здесь только надо помнить, что читать следует чаще (хотя бы в два раза), чем писать. Иначе буфер очереди, даже если он бесконечный, будет раздуваться и память, потребляемая программой, будет увеличиваться. Если за этим не следить, то прога рано или поздно подвиснет и в конце концов слетит.
rushonda писал(а):Ну и как правильнее передавать изображение через очереди из одного в другой цикл?
Так же как и любой другой элемент данных (число, строку, массив). Посмотрите примеры по очередям в папке C:\Program Files (x86)\National Instruments\LabVIEW 2016\examples\Synchronization\Queue.
rushonda
developer
developer
Сообщения: 289
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-20
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

Re: обновление дисплея и организация циклов

Сообщение rushonda »

Ivanlis, dadreamer спасибо за полезную инфу. Но все таки:

Есть avi файл, нужно получить из него кадры, обработать и вывести сами кадры и полученную в ходе обработки информацию.
Причем параметры обработки необходимо менять в процессе обработки.
Все можно сделать и в одном цикле, но это медленнее и плохо с точки зрения блок диаграммы. (расширение программы и др.).
Фото как мне кажется сделать прогу я прилагаю - но может можно оптимальнее???.
Вложения
while.png
Аватара пользователя
dadreamer

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

Re: обновление дисплея и организация циклов

Сообщение dadreamer »

rushonda писал(а):Ivanlis, dadreamer спасибо за полезную инфу. Но все таки:

Есть avi файл, нужно получить из него кадры, обработать и вывести сами кадры и полученную в ходе обработки информацию.
Причем параметры обработки необходимо менять в процессе обработки.
Все можно сделать и в одном цикле, но это медленнее и плохо с точки зрения блок диаграммы. (расширение программы и др.).
Фото как мне кажется сделать прогу я прилагаю - но может можно оптимальнее???.
Вы же с железом не работаете, насколько я понял? Зачем тогда городить столько циклов? Достаточно будет пары: для GUI-событий и на State Machine. Во второй цикл можно поместить всю работу с изображением: получение изображения из AVI файла, обработку изображения, вывод изображения на экран и т.п. Параллельные циклы хороши для времякритичных задач. У вас же чисто работа с файлами идёт, так?

Отвечая на вопрос на БД: кнопка как и её локальная переменная читается из промежуточного буфера, в отличие от Property Node, который читает сперва с панели. То есть, это неблокирующее чтение, на UI не влияет.
Аватара пользователя
IvanLis

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

Re: обновление дисплея и организация циклов

Сообщение IvanLis »

dadreamer писал(а):Ну, если автор работает в рамках одного процесса (то есть, одного адресного пространства), то ему ни к чему париться об этом. Библиотека nivision сама сопоставит ссылки и их имена блокам памяти с картинками.
В том то и дело, что сопоставит и перезапишет область памяти, где хранится изображение.
Возникает "состояние гонки", неизвестно, когда и как будет модифицирована картинка.
Подробнее здесь: http://digital.ni.com/public.nsf/allkb/ ... D200810EDF
Внизу ссылка, с вариантом обхода этой проблемы с организацией буфера.
rushonda писал(а):Фото как мне кажется сделать прогу я прилагаю - но может можно оптимальнее???.
Дорогу осилит идущий.
Вы еще много раз переделаете и поменяете организацию своей программы.
На данном этапе сложность в том, что Вы не имеете представления, как вообще эти очереди работают.
Аватара пользователя
dadreamer

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

Re: обновление дисплея и организация циклов

Сообщение dadreamer »

IvanLis писал(а):В том то и дело, что сопоставит и перезапишет область памяти, где хранится изображение.
Возникает "состояние гонки", неизвестно, когда и как будет модифицирована картинка.
Подробнее здесь: http://digital.ni.com/public.nsf/allkb/ ... D200810EDF
Внизу ссылка, с вариантом обхода этой проблемы с организацией буфера.
Прошу прощения. Не обратил внимания, что у ТС очередь для одного IMAQ элемента. Просто недавно работал с Vision'ом и у меня был массив IMAQ-картинок (уникальных, естественно). Вот представлял, что ТС тоже сделал очередь для массива.

Если не хочется переделывать текущую программу, то можно просто копировать картинку в новую локацию (IMAQ Create -> IMAQ Copy), а потом отправлять в очередь. В цикле разбора очереди картинку после ненадобности уничтожать (IMAQ Dispose).

Как вариант, можно передавать через очередь массив, а не IMAQ-ссылку. Тем более что преобразования этих двух типов не занимают много времени и выполняются одной парой :vi: .
rushonda
developer
developer
Сообщения: 289
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-20
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

Re: обновление дисплея и организация циклов

Сообщение rushonda »

Вы же с железом не работаете, насколько я понял? Зачем тогда городить столько циклов? Достаточно будет пары: для GUI-событий и на State Machine. Во второй цикл можно поместить всю работу с изображением: получение изображения из AVI файла, обработку изображения, вывод изображения на экран и т.п. Параллельные циклы хороши для времякритичных задач. У вас же чисто работа с файлами идёт, так?
Да, но считывание avi медленное, поэтому нужен цикл просто для считывания - а ещё один для обработки. Или нет?
Аватара пользователя
dadreamer

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

Re: обновление дисплея и организация циклов

Сообщение dadreamer »

rushonda писал(а):Да, но считывание avi медленное, поэтому нужен цикл просто для считывания - а ещё один для обработки. Или нет?
А чем AVI разбираете? IMAQ AVI2 Read Frame?
rushonda
developer
developer
Сообщения: 289
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-20
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

Re: обновление дисплея и организация циклов

Сообщение rushonda »

А чем AVI разбираете? IMAQ AVI2 Read Frame?
Да именно так.
Аватара пользователя
dadreamer

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

Re: обновление дисплея и организация циклов

Сообщение dadreamer »

rushonda, ну, сами смотрите, нужен ли вам отдельный цикл...
2016-10-30_13-45-36.jpg
2016-10-30_13-46-22.jpg
64 миллисекунды по идее не так уж много для юзера. Если, конечно, речь о небольшом числе извлекаемых кадров. В противном случае реально нужен отдельный цикл.
rushonda
developer
developer
Сообщения: 289
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-20
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

Re: обновление дисплея и организация циклов

Сообщение rushonda »

64 миллисекунды по идее не так уж много для юзера. Если, конечно, речь о небольшом числе извлекаемых кадров. В противном случае реально нужен отдельный цикл.
Да, кадров много. Плюс к этому разрешение кадра 1920 на 1080 (примерно), это еще дольше. А нет ли кстати инструментов побыстрее файл открывать?
Аватара пользователя
dadreamer

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

Re: обновление дисплея и организация циклов

Сообщение dadreamer »

rushonda писал(а):А нет ли кстати инструментов побыстрее файл открывать?
Встроенных нету. Есть сторонние решения наподобие VLC, но они сложноваты даже для профи, не говоря о чайниках. :wink: Так что решение на Vision'е - наиболее простое и эффективное в данном случае.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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