Перезапуск exe-файла LabVIEW

ActiveX, .NET, DLL
Ответить
Аватара пользователя
duke-kta
beginner
beginner
Сообщения: 16
Зарегистрирован: 28 июн 2017, 13:44
Версия LabVIEW: 13
Откуда: НиНо
Контактная информация:

Перезапуск exe-файла LabVIEW

Сообщение duke-kta »

Возникла весьма специфическая задача.
Необходимо скомпилированный exe-шник labview запустить, затем, остановить и снова запустить (не заново, а как если бы нажатием стрелки на FP).
Если делать это без создания exe - всё норм получается из другого VI через Open VI Reference - Abort VI/Run VI.
А можно ли как-то это сделать с exe-файлом?

Первый запуск, я так понимаю, можно сделать с помощью System Exec, а как дальше - не понятно?
Artem.spb

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

Re: Перезапуск exe-файла LabVIEW

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

После остановки можно не закрывать окно. тогда в нём появится стрелка запуска.
Аватара пользователя
duke-kta
beginner
beginner
Сообщения: 16
Зарегистрирован: 28 июн 2017, 13:44
Версия LabVIEW: 13
Откуда: НиНо
Контактная информация:

Re: Перезапуск exe-файла LabVIEW

Сообщение duke-kta »

В этом и заключался вопрос. Как на эту стрелку нажать программно.
Рассмотрим что надо по шагам.
1. Запускаем prog.exe (возможно из другого ехе или bat)
2. Она останавливается (или как-то мы её останавливаем программно).
3. Остаётся открытая FP со стрелочкой Run.
4. Надо как-то на эту стрелочку жамкнуть программно и дальше работать без выкрутасов.
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Перезапуск exe-файла LabVIEW

Сообщение dadreamer »

ShellExecuteEx / CreateProcess -> TerminateProcess: http://labviewportal.org/viewtopic.php?p=71738#p71738
Способ завершения процесса через TerminateProcess небезопасен (аналог закрытия через диспетчер задач), но это один из самых простых и быстрых способов. Если у вас в проге ничего серёьзного не случится при таком завершении (например, обмотки двигателя останутся под напряжением), то можете попробовать. В противном случае вам нужно наладить IPC (Inter-Process Communication) между экзешниками. Вариантов множество: TCP, UDP, SV, Network Streams, Pipes и т.д.

А вообще, считаю, что создавать два экзешника в рамках одного проекта - изврат. По первости делал такое, когда только начинал работать в :labview: , получил больше сложностей в реализации, чем каких-то удобств. Проще и эффективней создать отдельные :vi: и организовать связи между ними через стандартные методы коммуникации :labview: .
Аватара пользователя
duke-kta
beginner
beginner
Сообщения: 16
Зарегистрирован: 28 июн 2017, 13:44
Версия LabVIEW: 13
Откуда: НиНо
Контактная информация:

Re: Перезапуск exe-файла LabVIEW

Сообщение duke-kta »

Про изврат - полностью согласен!
Просто возникла непонятная проблема с драйвером измерителя мощности R&S, который отказывается работать после первого запуска (причём, только из ехе - из VI'ев работает нормально) - только после того, как остановишь и нажмёшь стрелку работает. А заказчику не нравиться, что надо совершать лишние телодвижения...
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Перезапуск exe-файла LabVIEW

Сообщение dadreamer »

duke-kta, можете выложить код, воспроизводящий проблему? Бывает, что "глаз замыливается", из-за чего упускаются элементарные вещи типа закрытия VISA-сессии в конце работы и т.п.
Аватара пользователя
duke-kta
beginner
beginner
Сообщения: 16
Зарегистрирован: 28 июн 2017, 13:44
Версия LabVIEW: 13
Откуда: НиНо
Контактная информация:

Re: Перезапуск exe-файла LabVIEW

Сообщение duke-kta »

Вот примерно чего надо: http://transfiles.ru/8ifgc
Starter1 запускаем, он запускает Starter2, тот стопит Starter1 и запускает его снова.
Если не компилить в ехе - работает отлично.
Аватара пользователя
duke-kta
beginner
beginner
Сообщения: 16
Зарегистрирован: 28 июн 2017, 13:44
Версия LabVIEW: 13
Откуда: НиНо
Контактная информация:

Re: Перезапуск exe-файла LabVIEW

Сообщение duke-kta »

dadreamer, ох, там до фига выкладывать-то...
Если в 2-х словах:
Драйвер R&S NRP Z для USB, последняя версия.

1. В основной программе проходит инициализация R&S NRP Z-11, получаем хэндлер.
2. Запускается саб с измерениями - туда передаём хэндлер.
3. В сабе ещё один саб с подстройкой - хендлер тот же - вот этом сабе и происходит illegal session. Причём, при вызове стандартной функции драйвера NRP RSNRPZ VXIPnp Error Converter.vi.

Запуская просто стартовый VI из проекта такого не бывает.
Если после запуска, даже до инициализации NRP остановить прогу и снова запустить стрелочкой - всё работает.

В R&S валят на глюки LV, в NI - на глюки дров - как обычно )))
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Перезапуск exe-файла LabVIEW

Сообщение dadreamer »

duke-kta писал(а):Вот примерно чего надо: http://transfiles.ru/8ifgc
Starter1 запускаем, он запускает Starter2, тот стопит Starter1 и запускает его снова.
Если не компилить в ехе - работает отлично.
Ссылки, очереди, уведомители и иже с ними не предназначены для коммуникации между процессами (exe) - это даже прописано в справке. Как я уже сказал, нужно использовать какой-то из вариантов с IPC, ну или "грохать" процесс через TerminateProcess. Если решили всё-таки пойти по пути с экзешниками, то сделайте для панели в настройках обеих программ "Run when opened" и попробуйте хотя бы тот вариант, что я выше предложил. То есть, запускаете через ShellExecute, закрываете через TerminateProcess. Дальше посмотрите, как будет работать.
Аватара пользователя
duke-kta
beginner
beginner
Сообщения: 16
Зарегистрирован: 28 июн 2017, 13:44
Версия LabVIEW: 13
Откуда: НиНо
Контактная информация:

Re: Перезапуск exe-файла LabVIEW

Сообщение duke-kta »

dadreamer, ясно. Думал, может это я не знаю, просто.
Значит, буду пробовать как советовали.
Наделал несколько вариантов - проверить только с прибором, у заказчика завтра получится.
Всё равно, спасибо за участие. Если получится - завтра ещё отпишусь. Ну, а если нет... пропишу в руководстве, что это такая особенность запуска программы )))

Если интересно, могу скинуть на почту исходники, чтоб не засорять тут (и не светить, особо :wink: )
Аватара пользователя
Andrew Lunev

Activity Professionalism
VIP
VIP
Сообщения: 957
Зарегистрирован: 11 дек 2010, 12:31
Награды: 2
Версия LabVIEW: 2014-2021
Откуда: Москва
Благодарил (а): 4 раза
Поблагодарили: 10 раз

Re: Перезапуск exe-файла LabVIEW

Сообщение Andrew Lunev »

Если совсем просто сделать, то может сделать копию кода в том же VI и выполнять его на этапе инициализации однократно? То есть будет первый запуск происходить один раз, а потом сразу вторая часть кода уже постоянно работать. Или в цикл код поместить и первая итерация будет с перезапуском, а вторая до выхода будет работать. Еще лучше найти тот участок кода, который требует перезапуск и только его вынести в инициализацию. Может надо просто открыть какую-то сессию и тут же закрыть, а потом открыть повторно. Зачем для этого весь VI перезапускать? Ну а вернее всего - найти причину и устранить. Так как сейчас вы пытаетесь устранить только следствие...
Аватара пользователя
duke-kta
beginner
beginner
Сообщения: 16
Зарегистрирован: 28 июн 2017, 13:44
Версия LabVIEW: 13
Откуда: НиНо
Контактная информация:

Re: Перезапуск exe-файла LabVIEW

Сообщение duke-kta »

Andrew Lunev, я пробовал в запущенном - не получается. Обязательно надо стопать и запускать.
А идея у меня и была не весь VI запускать, а маленький VI'чик, который будет тот же прибор инициализировать и стопать, а потом уже основной.
Причину я пытаюсь найти уже пол месяца, а сдать надо к концу месяца.
Потом, понятно, она найдётся, но сейчас надо что-то сдать работающее, а то денег не будет...
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Коммуникация с приложениями»