Странное поведение Waveform Chart в цикле

Простейшие вопросы в области инженерной разработки
Ответить
tayalex
interested
interested
Сообщения: 8
Зарегистрирован: 28 апр 2017, 10:32
Версия LabVIEW: 2016
Контактная информация:

Странное поведение Waveform Chart в цикле

Сообщение tayalex »

Здравствуйте! Создал программу, в которой в цикле на Waveform Chart в реальном времени отображается график сигнала, поступающего через COM порт. Все работало отлично, график мгновенно отрабатывал изменения внешнего сигнала АЦП. Решил добавить во внутрь цикла элементы Property Nodes Waveform Chart для возможности изменения масштаба по оси Y с помощью кнопок во время выполнения цикла. Запустил. Масштаб отлично динамически меняется кнопками, но... график стал отрабатывать изменения входного сигнала с опозданием до 30 секунд! Стоило убрать Property Nodes Waveform Chart, как все стало нормально. С чем этом может быть связано? И как, все таки, правильно добавить функциональность динамического изменения масштаба во время исполнения цикла сбора данных?
Аватара пользователя
dadreamer

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

Re: Странное поведение Waveform Chart в цикле

Сообщение dadreamer »

tayalex писал(а):С чем этом может быть связано?
Property / Invoke Nodes исполняются в UI-потоке. Вероятно, с этим. Полагая, что в цикле есть какая-то минимальная задержка. Если её нет, то WFChart очень быстро наберёт максимальную историю данных и далее эта история будет довольно медленно обновляться (смотря, сколько точек хранится и каковы ресурсы системы).
tayalex писал(а):И как, все таки, правильно добавить функциональность динамического изменения масштаба во время исполнения цикла сбора данных?
Мухи отдельно, котлеты отдельно.

Выносите работу с (G)UI в отдельный цикл на эвентах. Там обрабатывайте все действия с панелью (кнопки, Property / Invoke). В цикле приёма данных не должно быть такого по хорошему.
Artem.spb

Activity Автор
professor
professor
Сообщения: 3394
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: Странное поведение Waveform Chart в цикле

Сообщение Artem.spb »

Вы бы программу свою показали, было бы проще.
Но скорее всего дело в том, что вы смотрите не всю шкалу по Х, а кусок начала данных
tayalex
interested
interested
Сообщения: 8
Зарегистрирован: 28 апр 2017, 10:32
Версия LabVIEW: 2016
Контактная информация:

Re: Странное поведение Waveform Chart в цикле

Сообщение tayalex »

В History Waveform Chart установлено максимальное значение, видна вся шкала X за все истекшее время. Данные в Waveform Chart добавляются с каждой итерацией цикла. Задержка возникает только после добавления Property Nodes в тело цикла. К сожалению, не знаю как на форуме вставить файл.
Аватара пользователя
dadreamer

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

Re: Странное поведение Waveform Chart в цикле

Сообщение dadreamer »

tayalex, нажмите "Ответить" / "Цитата" и под полем ввода сообщения найдёте вкладку "Добавить вложения".

Я имел в виду задержку в цикле, которая должна там быть, чтобы не нагружать на 100% процессор.
tayalex
interested
interested
Сообщения: 8
Зарегистрирован: 28 апр 2017, 10:32
Версия LabVIEW: 2016
Контактная информация:

Re: Странное поведение Waveform Chart в цикле

Сообщение tayalex »

Ага, понял, спасибо! Приложил.
Вложения
My2_2_ch_error_handling_QQQ.vi
(42.18 КБ) 116 скачиваний
Аватара пользователя
dadreamer

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

Re: Странное поведение Waveform Chart в цикле

Сообщение dadreamer »

tayalex, цикл в цикле - это тот ещё изврат :wink: Вы в курсе, что внутренний While у вас выполняется раз в 10 секунд, когда нет никаких данных в порту? Это дефолтный таймаут инструментов VISA. Чтобы :labview: мог реагировать на действия пользователя в реальном времени, нужно делать отдельный параллельный цикл по работе с панелью. Также неплохо было бы вынести обработку данных из порта в отдельный цикл. В таком случае у вас было бы 3 цикла:
- цикл получения данных из порта;
- цикл обработки/анализа данных и вывода на экран;
- цикл обработки UI-событий - кнопки, графики, property / invoke nodes и прочая работа с FP.
Связь между циклами организуется через очереди и уведомители (что больше подходит и больше нравится). Можно даже "локалками" обойтись, если совсем неохота париться. На форуме было много примеров по параллельным циклам, поищите. Также это описано в нескольких литературных источниках.

Кроме того, в цикл получения данных из порта я бы добавил обработчик таймаута, чтобы исключить работу с пустыми строками. Вот, как пример: http://www.labviewportal.org/viewtopic. ... 566#p69566 Не забудьте правильно сконфигурировать порт перед работой. Кроме таймаута, также важное значение имеет терминатор, если он используется в протоколе.
tayalex
interested
interested
Сообщения: 8
Зарегистрирован: 28 апр 2017, 10:32
Версия LabVIEW: 2016
Контактная информация:

Re: Странное поведение Waveform Chart в цикле

Сообщение tayalex »

Большое спасибо! Много информации, буду разбираться, как оптимизировать. Просто все срочно, как всегда)
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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