Перезапуск exe-файла LabVIEW
- duke-kta
- beginner
- Сообщения: 16
- Зарегистрирован: 28 июн 2017, 13:44
- Версия LabVIEW: 13
- Откуда: НиНо
- Контактная информация:
Перезапуск exe-файла LabVIEW
Возникла весьма специфическая задача.
Необходимо скомпилированный exe-шник labview запустить, затем, остановить и снова запустить (не заново, а как если бы нажатием стрелки на FP).
Если делать это без создания exe - всё норм получается из другого VI через Open VI Reference - Abort VI/Run VI.
А можно ли как-то это сделать с exe-файлом?
Первый запуск, я так понимаю, можно сделать с помощью System Exec, а как дальше - не понятно?
Необходимо скомпилированный exe-шник labview запустить, затем, остановить и снова запустить (не заново, а как если бы нажатием стрелки на FP).
Если делать это без создания exe - всё норм получается из другого VI через Open VI Reference - Abort VI/Run VI.
А можно ли как-то это сделать с exe-файлом?
Первый запуск, я так понимаю, можно сделать с помощью System Exec, а как дальше - не понятно?
-
- professor
- Сообщения: 3410
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Перезапуск exe-файла LabVIEW
После остановки можно не закрывать окно. тогда в нём появится стрелка запуска.
- duke-kta
- beginner
- Сообщения: 16
- Зарегистрирован: 28 июн 2017, 13:44
- Версия LabVIEW: 13
- Откуда: НиНо
- Контактная информация:
Re: Перезапуск exe-файла LabVIEW
В этом и заключался вопрос. Как на эту стрелку нажать программно.
Рассмотрим что надо по шагам.
1. Запускаем prog.exe (возможно из другого ехе или bat)
2. Она останавливается (или как-то мы её останавливаем программно).
3. Остаётся открытая FP со стрелочкой Run.
4. Надо как-то на эту стрелочку жамкнуть программно и дальше работать без выкрутасов.
Рассмотрим что надо по шагам.
1. Запускаем prog.exe (возможно из другого ехе или bat)
2. Она останавливается (или как-то мы её останавливаем программно).
3. Остаётся открытая FP со стрелочкой Run.
4. Надо как-то на эту стрелочку жамкнуть программно и дальше работать без выкрутасов.
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Перезапуск exe-файла LabVIEW
ShellExecuteEx / CreateProcess -> TerminateProcess: http://labviewportal.org/viewtopic.php?p=71738#p71738
Способ завершения процесса через TerminateProcess небезопасен (аналог закрытия через диспетчер задач), но это один из самых простых и быстрых способов. Если у вас в проге ничего серёьзного не случится при таком завершении (например, обмотки двигателя останутся под напряжением), то можете попробовать. В противном случае вам нужно наладить IPC (Inter-Process Communication) между экзешниками. Вариантов множество: TCP, UDP, SV, Network Streams, Pipes и т.д.
А вообще, считаю, что создавать два экзешника в рамках одного проекта - изврат. По первости делал такое, когда только начинал работать в , получил больше сложностей в реализации, чем каких-то удобств. Проще и эффективней создать отдельные и организовать связи между ними через стандартные методы коммуникации .
Способ завершения процесса через TerminateProcess небезопасен (аналог закрытия через диспетчер задач), но это один из самых простых и быстрых способов. Если у вас в проге ничего серёьзного не случится при таком завершении (например, обмотки двигателя останутся под напряжением), то можете попробовать. В противном случае вам нужно наладить IPC (Inter-Process Communication) между экзешниками. Вариантов множество: TCP, UDP, SV, Network Streams, Pipes и т.д.
А вообще, считаю, что создавать два экзешника в рамках одного проекта - изврат. По первости делал такое, когда только начинал работать в , получил больше сложностей в реализации, чем каких-то удобств. Проще и эффективней создать отдельные и организовать связи между ними через стандартные методы коммуникации .
- duke-kta
- beginner
- Сообщения: 16
- Зарегистрирован: 28 июн 2017, 13:44
- Версия LabVIEW: 13
- Откуда: НиНо
- Контактная информация:
Re: Перезапуск exe-файла LabVIEW
Про изврат - полностью согласен!
Просто возникла непонятная проблема с драйвером измерителя мощности R&S, который отказывается работать после первого запуска (причём, только из ехе - из VI'ев работает нормально) - только после того, как остановишь и нажмёшь стрелку работает. А заказчику не нравиться, что надо совершать лишние телодвижения...
Просто возникла непонятная проблема с драйвером измерителя мощности R&S, который отказывается работать после первого запуска (причём, только из ехе - из VI'ев работает нормально) - только после того, как остановишь и нажмёшь стрелку работает. А заказчику не нравиться, что надо совершать лишние телодвижения...
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Перезапуск exe-файла LabVIEW
duke-kta, можете выложить код, воспроизводящий проблему? Бывает, что "глаз замыливается", из-за чего упускаются элементарные вещи типа закрытия VISA-сессии в конце работы и т.п.
- duke-kta
- beginner
- Сообщения: 16
- Зарегистрирован: 28 июн 2017, 13:44
- Версия LabVIEW: 13
- Откуда: НиНо
- Контактная информация:
Re: Перезапуск exe-файла LabVIEW
Вот примерно чего надо: http://transfiles.ru/8ifgc
Starter1 запускаем, он запускает Starter2, тот стопит Starter1 и запускает его снова.
Если не компилить в ехе - работает отлично.
Starter1 запускаем, он запускает Starter2, тот стопит Starter1 и запускает его снова.
Если не компилить в ехе - работает отлично.
- duke-kta
- beginner
- Сообщения: 16
- Зарегистрирован: 28 июн 2017, 13:44
- Версия LabVIEW: 13
- Откуда: НиНо
- Контактная информация:
Re: Перезапуск exe-файла LabVIEW
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 - на глюки дров - как обычно )))
Если в 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
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Перезапуск exe-файла LabVIEW
Ссылки, очереди, уведомители и иже с ними не предназначены для коммуникации между процессами (exe) - это даже прописано в справке. Как я уже сказал, нужно использовать какой-то из вариантов с IPC, ну или "грохать" процесс через TerminateProcess. Если решили всё-таки пойти по пути с экзешниками, то сделайте для панели в настройках обеих программ "Run when opened" и попробуйте хотя бы тот вариант, что я выше предложил. То есть, запускаете через ShellExecute, закрываете через TerminateProcess. Дальше посмотрите, как будет работать.duke-kta писал(а):Вот примерно чего надо: http://transfiles.ru/8ifgc
Starter1 запускаем, он запускает Starter2, тот стопит Starter1 и запускает его снова.
Если не компилить в ехе - работает отлично.
- duke-kta
- beginner
- Сообщения: 16
- Зарегистрирован: 28 июн 2017, 13:44
- Версия LabVIEW: 13
- Откуда: НиНо
- Контактная информация:
Re: Перезапуск exe-файла LabVIEW
dadreamer, ясно. Думал, может это я не знаю, просто.
Значит, буду пробовать как советовали.
Наделал несколько вариантов - проверить только с прибором, у заказчика завтра получится.
Всё равно, спасибо за участие. Если получится - завтра ещё отпишусь. Ну, а если нет... пропишу в руководстве, что это такая особенность запуска программы )))
Если интересно, могу скинуть на почту исходники, чтоб не засорять тут (и не светить, особо )
Значит, буду пробовать как советовали.
Наделал несколько вариантов - проверить только с прибором, у заказчика завтра получится.
Всё равно, спасибо за участие. Если получится - завтра ещё отпишусь. Ну, а если нет... пропишу в руководстве, что это такая особенность запуска программы )))
Если интересно, могу скинуть на почту исходники, чтоб не засорять тут (и не светить, особо )
-
Andrew Lunev
- VIP
- Сообщения: 957
- Зарегистрирован: 11 дек 2010, 12:31
- Награды: 2
- Версия LabVIEW: 2014-2021
- Откуда: Москва
- Благодарил (а): 4 раза
- Поблагодарили: 10 раз
Re: Перезапуск exe-файла LabVIEW
Если совсем просто сделать, то может сделать копию кода в том же VI и выполнять его на этапе инициализации однократно? То есть будет первый запуск происходить один раз, а потом сразу вторая часть кода уже постоянно работать. Или в цикл код поместить и первая итерация будет с перезапуском, а вторая до выхода будет работать. Еще лучше найти тот участок кода, который требует перезапуск и только его вынести в инициализацию. Может надо просто открыть какую-то сессию и тут же закрыть, а потом открыть повторно. Зачем для этого весь VI перезапускать? Ну а вернее всего - найти причину и устранить. Так как сейчас вы пытаетесь устранить только следствие...
- duke-kta
- beginner
- Сообщения: 16
- Зарегистрирован: 28 июн 2017, 13:44
- Версия LabVIEW: 13
- Откуда: НиНо
- Контактная информация:
Re: Перезапуск exe-файла LabVIEW
Andrew Lunev, я пробовал в запущенном - не получается. Обязательно надо стопать и запускать.
А идея у меня и была не весь VI запускать, а маленький VI'чик, который будет тот же прибор инициализировать и стопать, а потом уже основной.
Причину я пытаюсь найти уже пол месяца, а сдать надо к концу месяца.
Потом, понятно, она найдётся, но сейчас надо что-то сдать работающее, а то денег не будет...
А идея у меня и была не весь VI запускать, а маленький VI'чик, который будет тот же прибор инициализировать и стопать, а потом уже основной.
Причину я пытаюсь найти уже пол месяца, а сдать надо к концу месяца.
Потом, понятно, она найдётся, но сейчас надо что-то сдать работающее, а то денег не будет...
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение