2013-12-18 28 views
0

我想在啓動時在cpu上啓動Redhawk Domain Mgr,Device Mgrs和Waveform,無需任何用戶干預。然後我應該可以通過IDE連接到它。波形的生命週期

我創建了一個Python腳本,執行以下操作:

#! /usr/local/bin/python 
from ossie.utils import redhawk 
#Start a new domain and device managers 
domain = redhawk.kickDomain() 
wave = domain.createApplication("/waveforms/msgWaveform/msgWaveform.sad.xml") 
wave.start() 

這將啓動域經理,設備管理和消息波形。

這個perl腳本完成之後,我再調出IDE。我連接到域。我看到這些設備,但波形不存在。看起來波形在perl腳本結束時結束。我希望波形不會消失,但我可以在稍後時間檢索。

是否需要啓動用於幫助保持波形存活的服務?

回答

2

當腳本退出時,「createApplication」有意清除,但有兩種方法可以解決它。

最簡單的方法是在腳本的末尾添加一個while循環。只要腳本正在運行,這將保持波形運行,並且您可以通過運行腳本的終端中的Ctrl-C來停止它。根據您的原始腳本,它將如下所示:

#! /usr/local/bin/python 
import time 
from ossie.utils import redhawk 
#Start a new domain and device managers 
domain = redhawk.kickDomain() 
time.sleep(1) 

wave = domain.createApplication("/waveforms/Test/Test.sad.xml") 
wave.start() 

while True: 
    time.sleep(1) 

這不建議用於除測試以外的其他任何操作。除了在腳本結束時關閉波形外,上面的代碼還會停止域和設備管理器。對於在啓動時啓動波形的系統,通常會通過/etc/init.d腳本啓動域和設備管理器,如下所示:

nodeBooter -D --daemon 
nodeBooter -d /nodes/DevMgr_[hostname]/DeviceManager.dcd.xml --daemon 

然後在你的腳本,你會做這樣的事情:

from ossie.utils import redhawk 
from ossie.cf import CF 

domain = redhawk.Domain('REDHAWK_DEV') 

try: 
    domain.installApplication("/waveforms/Test/Test.sad.xml") 
except CF.DomainManager.ApplicationAlreadyInstalled: 
    print "Already Installed, skipping." 

factories = domain._get_applicationFactories() 
#if multiple applications are installed you can look for the correct factory 
# using factories[i]._get_name() == 'Test' 
myFactory = factories[0] 

myFactory.create('Test_[UNIQUEID]', [], []) 
2

試試下面的腳本:

from ossie.utils import redhawk 
#Start a new domain and device managers 
domain = redhawk.kickDomain() 
domain.installApplication("/waveforms/msgWaveform/msgWaveform.sad.xml") 
appFactory = domain._get_applicationFactories()[0] 
wave = appFactory.create(appFactory._get_name(), [], []) 
wave.start() 
# Uninstall the Application Factory 
domain.uninstallApplication(appFactory._get_identifier()) 

你的波正在被釋放的原因是因爲createApplication()函數是特定於您導入的紅鷹Python模塊。它基本上將上述調用包裝爲一個乾淨的用戶調用。此外,它還會跟蹤哪些應用程序已啓動,以便在腳本退出時清除這些應用程序,這正是您所看到的。

通過上述操作,您可以直接訪問CORBA接口方法,避免從Python代碼中記錄應用程序,因此不會在腳本的退出時清除。