Список форумов   Список форумов  

Программное управление другим ВП

Всё о программировании на Labview

Модераторы: Техподдержка NI, Robert, Модератор

Программное управление другим ВП

Сообщение scientist » Пт июн 22, 2007 6:17 pm

Добрый вечер.
Такие проблемы возникли.
Необходимо в LabVIEW 6.1 из одного ВП программно открывать и закрывать другой ВП. Пока получается только запускать другой ВП с помощью Open VI Reference и Run VI Method (Invoke Node). А вот открыть лицевую панель запускаемого ВП или закрыть этот ВП пока не получается. Может что подскажете...
И второе. В старших версиях LabVIEW (например, 8.20) встречал такую функцию как Deallocate memory. Насколько я понял, с ее помощью можно очищать буфер. Как реализовать аналогичное действие в версии 6.1?
Заранее спасибо за ответы.
scientist
 
Сообщений: 7
Зарегистрирован: Пт июн 22, 2007 2:37 pm

Сообщение romero » Вс июн 24, 2007 8:48 pm

Могу сказать на примере LV 7.1:
1) После Open VI Reference вставляешь блок Invoke Node (с функцией Open FP), а после него Run VI. Чтобы закрыть ВП нужно использовать Invoke Node (c функцией Close FP) и Close Reference, не помню в каком порядке. Попробуй, поэкспериментрируй, должно получиться.
2) Этот вопрос для меня пока недоступен.
romero
 
Сообщений: 9
Зарегистрирован: Пт июн 22, 2007 1:57 pm

Сообщение scientist » Пн июн 25, 2007 10:11 am

romero писал(а):Могу сказать на примере LV 7.1:
1) После Open VI Reference вставляешь блок Invoke Node (с функцией Open FP), а после него Run VI. Чтобы закрыть ВП нужно использовать Invoke Node (c функцией Close FP) и Close Reference, не помню в каком порядке. Попробуй, поэкспериментрируй, должно получиться.

Спасибо за ответ, с лицевой панелью я уже разобрался. А вот что касается закрытия ВП, то похоже в версии 6.1 функции Close FP нет. По крайней мере я ее не вижу, хотя в книге Суранова для версии 7 такая функция упоминается.

romero писал(а):2) Этот вопрос для меня пока недоступен.

А тут единственное, что я смог найти, так это в меню Tools -> Option можно установить галочку перед Deallocate memory as soon as possible. Вот только эффекта я пока никакого от этого действия не заметил.
scientist
 
Сообщений: 7
Зарегистрирован: Пт июн 22, 2007 2:37 pm

Сообщение romero » Пн июн 25, 2007 11:02 am

А где применяется эта функция и с какой целью? Разве LV не выгружает из памяти все ненужное на автомате?
Если поможет, то в Run VI есть такое поле Wait until done (true/false).
romero
 
Сообщений: 9
Зарегистрирован: Пт июн 22, 2007 1:57 pm

Сообщение scientist » Пн июн 25, 2007 2:38 pm

romero писал(а):А где применяется эта функция и с какой целью? Разве LV не выгружает из памяти все ненужное на автомате?
Если поможет, то в Run VI есть такое поле Wait until done (true/false).


Похоже на то, что не выгружает. По мере работы программы постоянно увеличиваются загрузка процессора и размер файла подкачки. Я конечно поигрался со всевозможными задержками, но это только лишь отстрочило конечный результат. Однако эти параметры легко сбрасываются, если закрыть и заново запустить программу. Я так понял, что идет переполнение буфера, поэтому и решил прибегнуть к такой функции.
А что касается Wait until done, то с этим я уже тоже поработал - не то, что я ищу. Эта функция ждет завершения выполнения открываемой по ссылке программы - только и всего.
Понимаю, что проще всего поменять версию LabVIEW, но в данном случае это не выход.
scientist
 
Сообщений: 7
Зарегистрирован: Пт июн 22, 2007 2:37 pm

Сообщение romero » Пн июн 25, 2007 2:59 pm

Посмотрел в хелпе для 7.1, вроде что-то похожее на то что надо, может и в 6 версии такая функция есть:

Request Deallocation
Deallocates unused memory after the VI that contains this function runs. When a top-level VI calls a subVI, LabVIEW allocates a data space of memory in which that subVI runs. When the subVI finishes running, LabVIEW does not deallocate the data space until the top-level VI finishes running or until the entire application stops, which can result in out-of-memory conditions and degradation of performance. Place the Request Deallocation function in the subVI you want to deallocate memory for. When you set the flag Boolean input to TRUE, LabVIEW reduces memory usage by deallocating the data space for the subVI. Details


If flag is TRUE, this function deallocates memory after the VI that contains this function runs.

Request Deallocation Details
Refer to the LabVIEW Performance and Memory Management Application Note for more information about managing memory in LabVIEW.
romero
 
Сообщений: 9
Зарегистрирован: Пт июн 22, 2007 1:57 pm

Сообщение Indey » Вт июн 26, 2007 10:19 am

scientist писал(а):Похоже на то, что не выгружает. По мере работы программы постоянно увеличиваются загрузка процессора и размер файла подкачки.


В этом случае 99% вероятность того что некорректно написана программа. Утечка памяти как правило возникает именно из-за этого.
LabView либо сразу отжирает большой кусок свопа, либо стоит на месте, а если программа выполняет одни и те же действия, а в процессе времени увеличивается объем занимаемой памяти, то это точно утечка и искать надо в коде. Возможно где то не хватает задержки или тайм-айта. Второй причиной может быть глюкавость некоторых модулей в ранних версиях ЛВ. Например lvsound начала работать нормально только в 8хх.
Indey
Специалист LabVIEW
 
Сообщений: 148
Зарегистрирован: Пт фев 02, 2007 9:34 am
Откуда: Электросталь

Сообщение scientist » Чт июн 28, 2007 2:07 pm

romero писал(а):Посмотрел в хелпе для 7.1, вроде что-то похожее на то, что надо, может и в 6 версии такая функция есть:

Request Deallocation

Вот-вот, я как раз об этой функции и говорил в начале. Но в версии 6.1 ее нет.
Ну а сейчас проблему я решил следующим образом:
1) запускаю ВП через Open VI Reference и Run VI Method (Invoke Node);
2) затем через определенный интервал времени останавливаю его через Open VI Reference и Abort VI Method (Invoke Node);
3) а потом перезагружаю и снова запускаю ВП через Open VI Reference, Revert VI Method (Invoke Node) и Run VI Method (Invoke Node).
Пока работает. Увеличения загрузки процессора и размера файла подкачки наблюдаются лишь до следующего выполнения пунктов 2 и 3.
scientist
 
Сообщений: 7
Зарегистрирован: Пт июн 22, 2007 2:37 pm

Сообщение scientist » Чт июн 28, 2007 2:15 pm

Indey писал(а):В этом случае 99% вероятность того, что некорректно написана программа. Утечка памяти как правило возникает именно из-за этого.

Я в принципе тоже склоняюсь к этому выводу. Однако программа досталась мне по наследству и сейчас, в данный момент, уже используется. Времени на устранение самой причины - нет, поэтому проще и оперативней оказалось справиться с последствиями.
scientist
 
Сообщений: 7
Зарегистрирован: Пт июн 22, 2007 2:37 pm

Сообщение Indey » Пт июн 29, 2007 8:51 am

scientist писал(а):Я в принципе тоже склоняюсь к этому выводу. Однако программа досталась мне по наследству и сейчас, в данный момент, уже используется. Времени на устранение самой причины - нет, поэтому проще и оперативней оказалось справиться с последствиями.


Да ужж.. С чужими программами действительно как правило ковыряться некогда, сам через это прошел.. :(
Indey
Специалист LabVIEW
 
Сообщений: 148
Зарегистрирован: Пт фев 02, 2007 9:34 am
Откуда: Электросталь


Вернуться в LabVIEW

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1