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

Темы связанные с инженерными разработками, но не подходящие в другие ветки форума

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

Postby Usss on 24 Dec 2018, 14:43

Я столкнулся с непонятной проблемой. Программа состоит из рекурсивной стейт-машины, в которой все данные лежат в объекте. Стейт-машина имеет несколько простых состояний, в которых выполняются относительно простые операции, а так же имеются сложные состояния, в которых выполняется комбинация простых сотояний. Для выполнения такого финта решил использовать рекурсию. Но оказалось, что labview стал сильно тормозить в определенных vi в процессе редактирования. Буквально просто передвинуть подвп или положить в блок-диаграмму новый подвп или разорвать/соединить провод занимает от одной до 10 секунд. Работать невозможно. Компилятор явно выполняет лишние операции. Решил попробовать заменить классический способ рекурсии (когда в свойствах Execution выбирается Shared clone) вызовом через Call By Reference. После замены тормоза пропали. Только теперь не понятно какие параметры следует задать в Open VI Reference.
В примере сделал упрощенную модель. Программа должна остановиться, когда счетчик дойдет до 6. У меня программа либо зависает, либо выдает разные ошибки.
Attachments
Main.vi
(7.41 KiB) Downloaded 23 times
Call main.vi
(7.78 KiB) Downloaded 21 times
Screenshot_2.png
Screenshot_2.png (23.47 KiB) Viewed 420 times
Usss
user
user
 
Posts: 82
Joined: 19 Apr 2017, 23:06
LabVIEW Version: 2017
Karma: 10

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

Postby Artem.spb on 24 Dec 2018, 15:07

Функция должна быть реентрантной, об этом ошибки и кричат.
У вас параметр вместо 256 идёт -256, задавайте числом х80 для простоты.
Artem.spb
expert
expert
 
Posts: 1512
Joined: 31 Jul 2011, 23:05
Medals: 2
Activity (1) Автор (1)
LabVIEW Version: 12,14,15
Karma: 252
CLD hardware I/O VIP freelance


Return to Общие

Who is online

Users browsing this forum: No registered users and 3 guests

cron