Рекурсия через Call By Reference

Темы связанные с инженерными разработками, но не подходящие в другие ветки форума
Ответить
Аватара пользователя
Juri
I/O
I/O
Сообщения: 263
Зарегистрирован: 19 апр 2017, 23:06
Версия LabVIEW: 2021
Благодарил (а): 13 раз
Поблагодарили: 6 раз

Рекурсия через Call By Reference

Сообщение Juri »

Я столкнулся с непонятной проблемой. Программа состоит из рекурсивной стейт-машины, в которой все данные лежат в объекте. Стейт-машина имеет несколько простых состояний, в которых выполняются относительно простые операции, а так же имеются сложные состояния, в которых выполняется комбинация простых сотояний. Для выполнения такого финта решил использовать рекурсию. Но оказалось, что labview стал сильно тормозить в определенных vi в процессе редактирования. Буквально просто передвинуть подвп или положить в блок-диаграмму новый подвп или разорвать/соединить провод занимает от одной до 10 секунд. Работать невозможно. Компилятор явно выполняет лишние операции. Решил попробовать заменить классический способ рекурсии (когда в свойствах Execution выбирается Shared clone) вызовом через Call By Reference. После замены тормоза пропали. Только теперь не понятно какие параметры следует задать в Open VI Reference.
В примере сделал упрощенную модель. Программа должна остановиться, когда счетчик дойдет до 6. У меня программа либо зависает, либо выдает разные ошибки.
Вложения
Main.vi
(7.41 КБ) 164 скачивания
Call main.vi
(7.78 КБ) 140 скачиваний
Screenshot_2.png
Screenshot_2.png (23.47 КБ) 1925 просмотров
Artem.spb

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

Re: Рекурсия через Call By Reference

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

Функция должна быть реентрантной, об этом ошибки и кричат.
У вас параметр вместо 256 идёт -256, задавайте числом х80 для простоты.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Общие»