REDHAWK——连接(二)https://developer.aliyun.com/article/1474048
9、例子
这两个示例展示了两个 C++ 组件之间的高速数据交换以及通过沙盒进行的基本数据操作。
①、高速数据
在这个例子中,创建了两个 C++ 组件:一个源和一个接收。然后,我们将通过沙盒部署这些组件,并评估它们之间数据传输的统计数据。
- 1)创建一个名为 source 的 C++ 组件,带有一个类型为 dataShort 的 uses 端口,名为 output。添加一个简单的属性,ID 为 xfer_length,类型为 ulong,默认值为 100000。生成组件代码。
- 2)打开文件 source.h,并向 source_i 类添加以下成员:
std::vector<short> data; bulkio::OutShortStream stream;
- 3)打开 source.cpp 文件,并通过以下方式对其进行编辑:
- 在 source_i 构造函数
data.resize(0); • 1
- 在 serviceFunction() 中注释掉 RH_DEBUG 语句并添加以下行:
if (data.size() != this->xfer_length) { data.resize(xfer_length); } if (!stream) { stream = output->createStream("sample"); } BULKIO::PrecisionUTCTime tstamp = bulkio::time::utils::now(); stream.write(data,tstamp); return NORMAL;
- 4)编译 source 组件并将其安装到 Target SDR上。(拖动项目到Target SDR)
- 5)创建一个名为 sink 的 C++ 组件,其提供端口称为 dataShort 类型的输入。生成组件代码。
- 6)打开该文件 sink.cpp 并通过以下方式对其进行编辑:
- 在 serviceFunction() 中,注释掉该 RH_DEBUG 语句
- 添加以下行:
bulkio::InShortStream stream = input->getCurrentStream(); if (!stream) { return NOOP; } bulkio::ShortDataBlock block = stream.read(); if (!block) { return NOOP; } return NORMAL;
- 7)编译该 sink 组件并将其安装在 Target SDR 上。(拖动项目到Target SDR)
将 source 和 sink 组件成功将其安装在 Target SDR 上后可以看到 rh 下多了 sink 和 source 组件
- 8)在命令行终端中启动 Python 会话并运行以下命令:
from ossie.utils import sb source = sb.launch("source") sink = sb.launch("sink") source.connect(sink) sb.start() print source._ports[0]._get_statistics()[0].statistics
-
print 语句的输出是 Bulk Input/Output(BulkIO)中的 PortStatistics 结构体的一个实例。该结构体包含了从这个连接收集的统计信息。数据速率的衡量单位是每秒比特数。
要显示每秒千兆比特的数量,请运行以下命令:
print source._ports[0]._get_statistics()[0].statistics.bitsPerSecond/1e9
-
得到的值是两个组件之间测量的数据传输速率。可以通过输入以下内容来查看当前的 xfer_length 属性:
source.xfer_length •
-
默认值是 100000。通过运行以下命令将属性更新为 200000:
source.xfer_length = 200000
- 通过重复调用 _get_statistics() 来检查新的数据速率。结果显示的数据速率现在已经发生了变化。