0

ユーザーの介入なしに、起動時に CPU で Redhawk Domain Mgr、Device Mgr、および 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 スクリプトが終了すると波形が終了するようです。波形が消えないことを望んでいましたが、後で取得できると思います。

波形を維持するために使用されるサービスを開始する必要がありますか?

4

2 に答える 2

2

「createApplication」は、スクリプトの終了時に意図的にクリーンアップしますが、これを回避するには 2 つの方法があります。

最も簡単な方法は、スクリプトの最後に 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]', [], [])
于 2013-12-19T13:18:33.513 に答える
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() 関数が、インポートした redhawk python モジュールに固有であるためです。基本的に、上記の呼び出しを 1 つのクリーンなユーザー呼び出しにラップします。さらに、起動されたアプリケーションを追跡して、スクリプトの終了時にクリーンアップできるようにします。これが表示されていることです。

上記を実行することで、CORBA インターフェース メソッドに直接アクセスし、Python コードからのアプリケーションの簿記を回避するため、スクリプトの終了時にクリーンアップされません。

于 2013-12-19T11:54:43.020 に答える