Как запустить часть кода определенное количество раз?
-
- interested
- Сообщения: 8
- Зарегистрирован: 07 ноя 2020, 10:07
- Версия LabVIEW: 16
- Контактная информация:
Как запустить часть кода определенное количество раз?
Здравствуйте.
Есть один вопрос. Мне кажется, что решение простое, но не могу придумать как.
Ситуация следующая. Мне нужно реализовать функцию усреднения данных. А чтобы это сделать, для начала нужно запустить некоторое количество измерений.
Кнопка "Старт" у меня находится в ивент структуре и по ее нажатию запускается ряд процессов.
Как мне видится, самое простое чтобы запустить несколько измерений подряд, надо нажать кнопку "старт" столько раз, сколько надо.
И вот вопрос - как это сделать?
Есть один вопрос. Мне кажется, что решение простое, но не могу придумать как.
Ситуация следующая. Мне нужно реализовать функцию усреднения данных. А чтобы это сделать, для начала нужно запустить некоторое количество измерений.
Кнопка "Старт" у меня находится в ивент структуре и по ее нажатию запускается ряд процессов.
Как мне видится, самое простое чтобы запустить несколько измерений подряд, надо нажать кнопку "старт" столько раз, сколько надо.
И вот вопрос - как это сделать?
-
- professor
- Сообщения: 3406
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Как запустить часть кода определенное количество раз?
Самое простое - использовать цикл for. Остальное - попахивает извращением :)
-
- interested
- Сообщения: 8
- Зарегистрирован: 07 ноя 2020, 10:07
- Версия LabVIEW: 16
- Контактная информация:
Re: Как запустить часть кода определенное количество раз?
Нее, я думаю, что for не выход. А насчет "остального" - какие идеи? Как вообще можно запустить цикл одинаковых измерений?
У меня спектрометр собирает данные. Я бы хотел запустить несколько одноразовых измерений (к примеру 10) эти данные собрать, суммировать их и поделить на кол-во циклов, чтобы усреднить все.
Вот бьюсь над двумя задачами:
1) запустить N-ное кол-во измерений
2) написать код для усреднения данных (прилагаю скрин, как сделал. Этот код работает, но не совсем правильно).
-
- professor
- Сообщения: 3406
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Как запустить часть кода определенное количество раз?
Т.е. запустить цикл while - это вариант, а цикл for - не вариант?
Как спектрометр данные собирает, как отдаёт?
upd: в цикле вообще что-то странное происходит. Проще верхние массивы разделит на N и прибавить нижние, получится то же самое :)
Как спектрометр данные собирает, как отдаёт?
upd: в цикле вообще что-то странное происходит. Проще верхние массивы разделит на N и прибавить нижние, получится то же самое :)
-
- interested
- Сообщения: 8
- Зарегистрирован: 07 ноя 2020, 10:07
- Версия LabVIEW: 16
- Контактная информация:
Re: Как запустить часть кода определенное количество раз?
Не не. Первая задача такая - нажать кнопку старт N-ное кол-во раз. И вот мне кажется, что тут не вариант использовать цикл for (хотя я еще не пробовал). Если были подобные варианты реализованы, то было бы интересно глянуть. Второй вариант мне видится таким - что через генератор внешних импульсов подключить спектрометр. А на генератор подавать столько импульсов, сколько надо ( один импульс - один запуск). Этот вариант беспроигрышный, но хочется знать о программной части - может можно это сделать пока что без генератора.
Вторая задача - после запуска нескольких измерений (одного за другим) собрать их все, просуммировать и разделить. Вот мой скрин был про вторую часть.
НА моем скрине суммирование и деление идет нормально. НО общая логика построена не правильно:
Прилетает массив данных и там начинает гонятся по циклу и суммироваться сам с собой (столько раз, сколько задали количество измерений). Потом прилетает второй массив и тоже сам с собой (а первый массив пропадает). И так повторяется столько раз, сколько задаем. В итоге на выходе не среднее 10 измерений (к примеру), а среднее послу суммирования последнего одного массива. Вот и не понятно, что я делаю не так.
-
- interested
- Сообщения: 8
- Зарегистрирован: 07 ноя 2020, 10:07
- Версия LabVIEW: 16
- Контактная информация:
Re: Как запустить часть кода определенное количество раз?
Спектрометры Avantes. За основу я брал их лабвьюшный код и доделывал до того, что надо мне.
На скрине в кейс структуре показано, откуда берутся данные. Это свои dll библиотеки. Собирается массив по у и массив по х (там еще немного разных домножений и ограничений. это уже от меня) и потом мы объединяем все в один.
Спектрометра два. ПОтому по два массива от каждого объединяем в один и выводим на ху графф. Я вот хотел вставить усреднение где-то между ху графф и кейс структурой.
-
- professor
- Сообщения: 3406
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Как запустить часть кода определенное количество раз?
ЗАЧЕМ?
По-моему, это не задача, а кривой метод.
и в чём проблема зациклить?И вот мне кажется, что тут не вариант использовать цикл for (хотя я еще не пробовал).
я показал, как можно усреднить при чтении. Есть всякие MeanPtByPtВторая задача - после запуска нескольких измерений (одного за другим) собрать их все, просуммировать и разделить. Вот мой скрин был про вторую часть.
Если "идёт нормально", но "не нормально", то точно нарушена логика в умозаключениях :)НА моем скрине суммирование и деление идет нормально. НО общая логика построена не правильно:
Я опять же говорил, что ваш цикл выглядит так:
А - один массив, В - второй
Цикл N раз
{A = A + В
}
А = A/N
Что то же самое, что
A = A + NB
A = A/N
Или быстрее и короче:
А = A/N + B
-
- interested
- Сообщения: 8
- Зарегистрирован: 07 ноя 2020, 10:07
- Версия LabVIEW: 16
- Контактная информация:
Re: Как запустить часть кода определенное количество раз?
Спектрометр (он синхронизирует себя и лазер, чтобы на спектре не было видно следа лазера. Происходит быстрое включение лазера путем импульса, и после потухания включается спектрометр.) посылает импульс на лазер. На один запуск спектрометра - один импульс на лазер. При таком режиме работы комплекса, сигнал получается слабый и слегка зашумленный. Потому мне надо запустить несколько одинаковых измерений и усреднить это, чтобы шум распределился равномерно.ЗАЧЕМ?
По-моему, это не задача, а кривой метод.
Как я и сказал, у меня две мысли, как это сделать - генератор внешних импульсов (на него задать только параметры и он сам будет гонять циклы, сколько надо) и программно нажимать кнопку старт, сколько надо.
Кнопка старт у меня выглядит так (смотри скрин).
Там все считается делится нормально. Проблема в том, что все суммирование идет только с одним массивом:Если "идёт нормально", но "не нормально", то точно нарушена логика в умозаключениях :)
Массив прилетает, я его разделяю на х и у. И он начинает суммироваться сам с собой (кол-во суммирований согласно кол-ву измерений).
Потом идет второе измерение и прилетает массив. Старый теряется, а новый начинает опять летать по циклу и суммироваться сам с собой.
И так повторяется столько раз, сколько задал циклов. Массивы не суммируются друг с другом, а только сами с собой и на выходе я получаю среднее значение из последнего массива.
Мне казалось, что должен прийти массив, он записался в память и ждет следующего массива, происходит сумма и ждут третий массив и так далее.
-
- professor
- Сообщения: 3406
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Как запустить часть кода определенное количество раз?
Наивно полагать, что программная синхронизация будет работать лучше аппаратной.
Для особо настойчивых повторяю (последний раз): если "у меня всё сделано правильно, но считает почему-то не правильно", то это всего лишь значит, что сделано НЕ правильно.Там все считается делится нормально. Проблема в том, что все суммирование идет только с одним массивом:
Как усреднять прилетающие данные я уже показывал.
-
- interested
- Сообщения: 8
- Зарегистрирован: 07 ноя 2020, 10:07
- Версия LabVIEW: 16
- Контактная информация:
Re: Как запустить часть кода определенное количество раз?
В общем, я попробовал кнопку старт просто поместить в цикл for. В целом - получилось. Лазер загорается столько раз, сколько включается спектрометр. По сути это повторение нажатия кнопки старт.Наивно полагать, что программная синхронизация будет работать лучше аппаратной.
Но появилась другая проблема - почему-то пропал сигнал. Точнее шум остался, а полезный сигнал от люминофора пропал.
Может рассинхрон. Надо разбираться.
-
- interested
- Сообщения: 8
- Зарегистрирован: 07 ноя 2020, 10:07
- Версия LabVIEW: 16
- Контактная информация:
Re: Как запустить часть кода определенное количество раз?
Честно говоря, я не совсем понимаю ваш скрин. Не могли вы дать комментарии к нему?Как усреднять прилетающие данные я уже показывал.
-
- professor
- Сообщения: 3406
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Как запустить часть кода определенное количество раз?
Массив заполняется приходящими значениями. Как только заполнили - усреднить.
Размер массива задаётся на старте.
Индекс элемента зависит от шага цикла.
Размер массива задаётся на старте.
Индекс элемента зависит от шага цикла.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение