我正在使用Redhawk 1.9。我使用默認設置創建了Redhawk設備,組件,節點和波形。我在所有上面使用C++實現。問題是設備不能被分配,因爲它不是可執行設備。在代碼部分的實現選項卡中,「類型」變量設置爲「可執行」(默認值)。如果這是不正確的,那該怎麼辦?組件無法分配不可執行的設備設備
注意:當我從可執行設備派生設備時,問題就消失了。
我能夠重現與虛擬設備和組件的問題,如下所示: 我更新組件,以便它將使用該設備。
<usesdevice id="dummy_device_2" type="usesdevice">
<propertyref refid="DCE:cdc5ee18-7ceb-4ae6-bf4c-31f983179b4d" value="dummy_device_kind_1"/>
</usesdevice>
我更新設備屬性:
<simple id="DCE:cdc5ee18-7ceb-4ae6-bf4c-31f983179b4d" mode="readonly" name="device_kind" type="string">
<description>This specifies the device kind</description>
<value>dummy_device_kind_1</value>
<kind kindtype="configure"/>
<kind kindtype="allocation"/>
<action type="eq"/>
</simple>
我在這裏補充創建成此創建的虛擬節點虛擬器件。 我將虛擬組件添加到虛擬波形。 我啓動了僅包含虛擬設備的虛擬節點 我啓動了僅包含上述虛擬設備的虛擬波形。 我收到以下錯誤信息:
- 未能創建應用程序: DeviceOnlyTestWaveform_343_114533234發生的 以下CORBA異常:InvalidCapacity在創建 應用IDL:CF/ApplicationFactory/CreateApplicationError:1.0 *
域管理器(使用跟蹤日誌記錄運行)顯示以下內容:
DEBUG:ApplicationFactory_impl - Trying to find the device
TRACE:ApplicationFactory_impl - Searching for a place to deploy component amongst 1 devices
TRACE:ApplicationFactory_impl - Checking Device DummyNode:DeviceOnlyTesTDevice_1
TRACE:ApplicationFactory_impl - Device DummyNode:DeviceOnlyTesTDevice_1 is loadable
TRACE:ApplicationFactory_impl - Device DummyNode:DeviceOnlyTesTDevice_1 is not loadable
TRACE:ApplicationFactory_impl - Done checking all the devices
DEBUG:ApplicationFactory_impl - Device Allocation Failed.. need to clean up
在ApplicationFactory_impl中,代碼似乎顯示分配失敗,因爲設備不是從可執行設備派生的。代碼部分的「類型」爲可執行文件(默認設置)。如果這不正確,那該怎麼辦?
// Check that the device meet's the needs of this component
// - Validate the type of device meets the requirements in the 'code' section of the implementation
//
LOG_TRACE(ApplicationFactory_impl, "Checking Device " << deviceNodeIter->identifier);
if (deviceNodeIter->device->usageState() == CF::Device::BUSY)
{
LOG_TRACE(ApplicationFactory_impl, "Ignoring Device " <<deviceNodeIter->label << " is BUSY");
continue;
}
if ((implementation->getCodeType() == CF::LoadableDevice::EXECUTABLE) ||
(implementation->getCodeType() == CF::LoadableDevice::SHARED_LIBRARY)) {
// Does this device provide LoadableDevice?
LOG_TRACE(ApplicationFactory_impl, "Device " << deviceNodeIter->identifier << " is loadable");
CF::LoadableDevice_var loaddev;
loaddev = ossie::corba::_narrowSafe<CF::LoadableDevice> (deviceNodeIter->device);
if(CORBA::is_nil(loaddev)) {
LOG_TRACE(ApplicationFactory_impl, "Device " << deviceNodeIter->identifier << " is not loadable");
continue;
}
if (implementation->getEntryPoint().size() != 0) {
// Does this device provide ExecutableDevice?
LOG_TRACE(ApplicationFactory_impl, "Device " << deviceNodeIter->identifier << " is executable");
CF::ExecutableDevice_var execdev;
execdev = ossie::corba::_narrowSafe<CF::ExecutableDevice> (deviceNodeIter->device);
if(CORBA::is_nil(execdev)) {
LOG_INFO(ApplicationFactory_impl, "Device " << deviceNodeIter->identifier << " is not executable");
continue;
}
}
}
這寫得很好,它清除了我的誤解。因此,如果我有一個與調諧器一起工作的組件,那麼它將需要兩個設備:1.)GPP 2.)調諧器 –