Страница 2 из 3

Re: работа подпрограммы

Добавлено: 01 авг 2017, 13:32
Елизавета
Добрый день! У меня возникла такая задача. Требуется сконфигурировать два аналоговых выхода платы сбора информации USB таким образом, чтобы они были разной формы, частоты (ограниченной длительности). При конфигурации возникает ошибка связанная с тем, что количество семплов для двух каналов должно быть одинаковым (хотя, насколько я понимаю, эта величина задается строго определенной в блоке тактирования). Вопрос. Как это исправить?

Re: работа подпрограммы

Добавлено: 01 авг 2017, 13:41
Artem.spb
Елизавета писал(а):У меня возникла такая задача.
это не контакт, ваш вопрос никак не связан с названием темы, не нужно засорять топик.
На вопрос же ответ был дан в контакте: у вас массивы разной длины, а должны быть одинаковыми.

Re: работа подпрограммы

Добавлено: 01 авг 2017, 16:18
kashegor
Вот пример моей куска моей программы

Re: работа подпрограммы

Добавлено: 01 авг 2017, 16:58
Artem.spb
ДВА ПАРАЛЛЕЛЬНЫХ цикла
glob.png
glob.png (16.58 КБ) 8616 просмотров
один цикл "работает", второй отображает данные на экране. Скорости работы циклов могут быть разными.
Внути subVI запись в глобальную переменную вместо слайда на экране.

В вашем варианте данные изнутри будут получены только после завершения работы subVI

Re: работа подпрограммы

Добавлено: 01 авг 2017, 17:23
kashegor
большее спасибо, завтра попробую на своей программе, о результатах отпишусь!

Re: работа подпрограммы

Добавлено: 02 авг 2017, 07:58
kashegor
Все таки не получается реализовать данное решение. Вы бы не могли подсказать как остановить данные циклы после окончания цикла в подпрограмме?

Re: работа подпрограммы

Добавлено: 02 авг 2017, 08:04
ladik
Используйте как у Вас и было изначально циклы Forloop.

Re: работа подпрограммы

Добавлено: 02 авг 2017, 08:16
kashegor
Пробовал, не получается, так как цикл в подпрограмме выполняется медленнее чем в основной программе.

Re: работа подпрограммы

Добавлено: 02 авг 2017, 08:55
ladik
А зачем Вам необходимо 25000000 итераций? Почему бы не сделать, к примеру 100, с задержкой в цикле, скажем 50 мс. А вообще пример Artem.spb вполне решает Вашу задачу. Если хотите автоматически остановить циклы после окончания работы подпрограммы, создайте логический индикатор в ней со значением True и подключите его к ConditionTerminal. Туда же индикатор и на него повесьте local variable, как в примере.

Re: работа подпрограммы

Добавлено: 02 авг 2017, 09:20
Artem.spb
По-моему у вас в корне неверное построение программы.
Зачем цикл в цикле? тем более такой длинный. Если вдруг возникнет потребность осановить программу, всё равно придётся ждать завершения действий.
Используйте одношаговый subVI, данные храните в сдвиговом регистре, посмотрите в сторону машины состояний.
1s.png

Re: работа подпрограммы

Добавлено: 02 авг 2017, 11:07
kashegor
У меня в программе for loop решает ДУ, пока не придумал как можно без него. Пока ни один из предложенных вариантов не получилось реализовать...

Re: работа подпрограммы

Добавлено: 02 авг 2017, 11:53
Artem.spb
kashegor писал(а):У меня в программе for loop решает ДУ, пока не придумал как можно без него. Пока ни один из предложенных вариантов не получилось реализовать...
почему это надо делать в 250К шагов без возможности прервать действие?
и чем принципиально отличаются эти два варианта?
loops.png
loops.png (13.82 КБ) 8578 просмотров
только тем, что второй можно прервать посередине, а первый нельзя.

Re: работа подпрограммы

Добавлено: 02 авг 2017, 14:53
kashegor
For loop тоже можно прервать, там добавляется conditional terminal.

Re: работа подпрограммы

Добавлено: 02 авг 2017, 15:20
Artem.spb
kashegor писал(а):For loop тоже можно прервать, там добавляется conditional terminal.
я знаю, но это не ответ на мой вопрос, почему уравнение можно решить в for loop, но нельзя в while?

Re: работа подпрограммы

Добавлено: 02 авг 2017, 16:21
kashegor
Попробовал сделать пример в котором все понятнее.