我已经成功安装了 REDHAWK 1.8.3 版的 UHD 设备。如何将波形中的组件连接到由设备管理器管理的设备对我来说并不明显。我也不清楚 IDL 接口和 USRP 设备上的数据端口之间的相互作用。
我找不到使用 USRP 设备发送和接收波形的简单示例(例如,向 USRP 发送正弦波的信号发生器组件)。有没有人有这方面的经验或任何建议?
我已经成功安装了 REDHAWK 1.8.3 版的 UHD 设备。如何将波形中的组件连接到由设备管理器管理的设备对我来说并不明显。我也不清楚 IDL 接口和 USRP 设备上的数据端口之间的相互作用。
我找不到使用 USRP 设备发送和接收波形的简单示例(例如,向 USRP 发送正弦波的信号发生器组件)。有没有人有这方面的经验或任何建议?
在运行环境中将组件连接到设备的一种方法是通过 REDHAWK python 模块。它能够附加到正在运行的域,查询任何启动的应用程序并将端口从组件连接到设备。以下是一个示例 python 脚本(注意端口必须是相同的类型才能成功连接):
from ossie.utils import redhawk
from ossie.cf import CF
# Connect to the running domain
domain = redhawk.attach("REDHAWK_DEV")
# Gets a reference to the running application
for app in domain.apps:
# Find desired application
if app.name == 'desired_name':
application = app
# Gets the component from the application
for comp in application.comps:
# Find desired component
if comp.name == 'desired_name':
component = comp
# Gets the device to connect
for devMgr in domain.devMgrs:
for dev in devMgr.devs:
# Find desired device
if dev.name = 'desired_name':
device = dev
# Gets the references to the input and output ports
comp_port = component.getPort('port_name')._narrow(CF.Port)
dev_port = device.getPort('port_name')
# Makes the actual connection
comp_port.connectPort(dev_port, 'ConnectionID')
# Make sure device is started
device.start()
# Start application
application.start()
# To disconnect:
# Stop device and application
application.stop()
device.stop()
comp_port.disconnectPort('ConnectionID')
根据您的情况,有多种方法可以实现此目的。这里有几个:
A.) 问题:您正在调试 IDE 中的问题,并且很快想要将设备端口连接到组件端口
解决方案:当组件和设备都在域或沙箱中运行时,在 SCA Explorer 视图中展开组件和设备以公开端口。单击输出端口,然后 ctrl+单击您要连接的输入端口。突出显示两个端口后,您现在可以右键单击并选择连接。
B.) 问题:无论实现语言如何,您都需要一种通用方式将组件输入端口连接到特定类型的设备输出端口,而不管语言实现如何。
解决方案:这是一个多步骤的过程,一开始并不那么直观。我建议您查看 SCA 规范页面 D-43 以获取以下第 10 步及以后的更多详细信息。
在编辑器中打开组件并导航到 Implementations 选项卡。
右键单击要用于此连接的实现(例如 python)
选择新建 → 使用设备
为此连接生成(或输入)唯一的 DCE ID
输入类型“usesDevice”虽然我不是 100% 确定类型是否重要,但我使用了 usesDevice
右键单击 Uses Device 选择新的 Property Ref。您不会将组件 X 直接连接到设备 Y。而是将组件 X 连接到满足此处设置的属性限制的设备。IE。型号、类型等
在您的设备中,在属性选项卡中,将 device_kind 或 device_model 的 Name 字段等属性设置为您想要匹配的内容。我们以 XYZ123 为例。保存并将其部署到 SDR ROOT
回到我们设置属性 Ref 的组件中,选择浏览并选择您刚刚设置为匹配属性的设备上的属性。
将值设置为您将其设置为 ex XYZ123 的值。保存并部署组件
现在在您的波形中,您需要手动编辑 SAD 文件并添加类似这样的内容,其中[[TEXT]]
表示您需要更改的内容:
<connections>
<connectinterface id="[[Connection_Name]]">
<usesport>
<usesidentifier>[[Output Port Name]]</usesidentifier>
<deviceusedbythiscomponentref refid="[[DCE matching the componentinstantiationID]]" usesrefid="[[DCE matching the generated ID from step 4]]"/>
</usesport>
<providesport>
<providesidentifier>[[Input Port Name]]</providesidentifier>
<componentinstantiationref refid="[[DCE matching the componentinstantiationID]]"/>
</providesport>
</connectinterface>
</connections>
我建议您将一个虚拟组件添加到您的 SAD 编辑器并将虚拟组件连接到真实组件,这样您的 SAD 文件就可以填充连接接口块,并且您可以看到一个连接示例。
进行这些更改后,IDE 可能会告诉您 SAD 文件中存在错误,无论如何保存,关闭 SAD 编辑器并重新打开。如果没有显示错误,那么您的语法很好。像往常一样部署波形并启动。
C.) 问题:您想通过 REDHAWK 外部的 python 脚本、REDHAWK 中的 python 服务或波形中的 python 组件连接到设备。
解决方案:参见亚当的解决方案。