天问系统中的组件开发方法
组件开发界面主要分为三个区域,三个区域功能详见下图:

点击组件列表右上角的“+新建”按钮新建组件工程,如下图所示。

弹出新建组件工程对话框,输入自定义组件工程名称,此处以myblock为例,点击“新建”按钮完成新建工程,如下图所示。此处的名称为组件工程名称,即工程文件夹的名称。

新建成功后会在左侧的组件列表中出现一个新的文件夹,且该文件夹的命名规则为“gr-用户名称_工程名称”,工程名称为上一步自定义的名称,此处是myblock,单击“gr-admin_myblock”可以看到已自动生成一些文件夹,文件夹存放文件类型详见如下说明:
lib:存放C/C++源代码和头文件(这些头文件只在编译时用到)。
include:存放C/C++的头文件(这些头文件是接口)。
python:存在python相关文件。
grc:存放模块的.yml描述文件。
examples:用来存放应用示例,供其他开发者查看模块如何使用。
此步骤完成后,该工程是空的,需要进一步完成组件开发。
对于简单组件开发,着重关注lib、python和grc文件夹。

在之前建立的工程上进行组件模块开发,这里用简单的加法器为例进行说明,组件功能是实现2个信号相加。
点击建立的工程文件夹“gr-admin_myblock”,右键选择“新建组件” 。

输入自定义组件名称(此处以add_f为例)→选择组件类型→选择开发语言(此处选择python)
参数可添加可不添加,加法器模块未添加参数,此处不填写。

组件类型种类较多,常用的为前6种,说明如下,可根据组件类型进行选择:
信宿组件(只有输入)选择sink类型
信源组件(只有输出)选择source类型
同步组件(输入输出采样率相等)选择sync类型
抽取组件(输入输出采样率比为N:1)选择decimatior类型
插值组件(输入输出采样率比为1:N)选择interpolator类型
其它组件(输入输出采样率比非整数)选择general类型。

开发语言类型支持Python、matlab和C++三种,此处选择Python。
加法器模块没有输入参数,此处留空。
测试代码按默认选择,编写代码时不添加测试代码。

组件添加完成后,系统会自动在工程目录下创建以下2个代码模板,需要用户开发自定义模块时进行编辑的文件:add_f.py,admin_myblock_add_f.block.yml。

add_f.py文件用于编写加法器组件的主要功能(控制输入的2个信号相加,再输出2个信号和)。
admin_myblock_add_f.block.yml用于控制组件输入输出参数,如加法器有2个输入端口和1个输出端口。
打开python文件夹下的add_f.py文件,可以看到系统已经生成了一套代码模板。

在代码中有一些标记为 <+ … +> 的地方,这是提示我们需要根据模块功能进行修改的地。除此之外,还需要对work函数进行修改,以满足我们的设计需求。
首先修改构造函数,这里定义模块的输入端口和输出端口。(全程使用英文输入法)

in_sig=[numpy.float32 ,numpy.float32]表示该模块有两个输入端口,端口数据类型为浮点型。
out_sig=[numpy.float32]表示该模块有一个输出端口,端口数据类型为浮点型。

第24、25行定义了两个浮点型指针(in0和in1)指向模块的输入缓冲区,当模块有多个输入端口时,用下标对端口进行区分,即input_items[0]表示第1个输入端口,input_items[1]表示第2个输入端口。
第26行定义了一个浮点型指针(out)指向模块的输出缓冲区。
然后定义加法器的实际运算过程。在for循环中,我们把两个输入端口的数值相加然后赋给输出端口。(注意:for语句末尾有冒号,out[i]需要缩进4个空格)
编辑完add_f.py文件之后,还需要编辑admin_myblock_add_f.yml文件,该文件在grc文件夹下,在组件列表中单击grc即可展开。


组件不需要参数时,可注释掉第15行-22行的parameters块(行前添加#符号)
主要修改yml文件里面模块的输入/输出端口以及端口数据类型。
修改完add_f.py和admin_myblock_add_f.yml后,选中组件工程夹gr-admin_myblock,点击右键,按顺序进行编译→安装→模块入库。编译无错误才可进行下一步安装,如有错误,返回检查代码书写过程中是否出错;安装成功后才可以入库。安装成功后会在日志区域显示如下信息,则说明入库成功。


全部回复 (0)
lium
社区创作者
