LabVIEW论坛
直播中

荣琪

8年用户 689经验值
擅长:可编程逻辑 测量仪表 嵌入式技术
私信 关注
[文章]

荣小菜补钙记第5期:基于LabVIEW OOP的仪表控制库(3)

`
荣小菜补钙记第5期:基于labviewOOP的仪表控制库(3)
同步更新于 WeChat:荣小菜在补钙
大家好,我是荣小菜,也可以叫我Richie,今天继续分享基于LabVIEW OOP的仪表控制库系列。上一期中我们完成了底层设计,本期进入仪表控制库的中层设计。
1.     任务调用-策略类
上两期我们建立了一大堆类,实现了“创建一个仪表”和“执行一个动作”这两个任务,下面就要调用这两个任务了,这里我设计“策略“类来调用任务。工程树如下,这里我们还是参照工厂模式建立策略类,建立策略抽象父类及子类、策略工厂。策略类包含3个方法,”创建仪表“、”创建仪表动作“、”执行“,它们的职责分别是建立一个仪表(如信号源SMF100A)、建立一个仪表的动作(如信号源设置RF开关)、执行操作(如执行信号源SMF100A对应的打开RF方法)。通过这3个方法,我们就可以完成调用。
信号源策略类工程树.JPG
2.     策略工厂
如下图所示,Creator依旧采用映射技术,通过输入“消息”簇来创建具体策略类。
比如输入“信号源_设RF开关”,则创建“信号源策略”类。注意输入端口的“消息“簇,它包含动作和执行动作所需的数据,这里的“动作“又包含两部分,一部分指明要创建的仪表类型,另一部分表示要创建的仪表动作,本Creator里只用到了前半部分,但后续还会用到其他内容,因此这里将其作为私有数据传递。
策略工厂前面板.JPG 策略工厂后面板.JPG
3.     信号源策略类详解
下面我们通过讲解一个具体类“信号源策略“来看看是怎么完成任务调用的。
首先,它的私有数据包含“信号源方法“类和”信号源Creator“类,这样就可以完成创建信号源动作,注意,这里我们将创建的信号源类和TCP Link写入到了”信号源方法“类中,这是因为上一期我们讲到”信号源方法“类中包含的私有数据是”信号源“类和TCP Link的,从这里是提前写入,方便后续继续使用。
信号源策略类私有数据.JPG
可以看到信号源策略的“创建仪表“方法如下,根据”仪表信息“,调用信号源Creator,并将创建好的信号源和对应的TCP Link提前写入”信号源方法“类。

创建仪表_信号源策略.JPG 创建仪表_信号源策略2.JPG

之后我们继续看“创建仪表动作“方法,根据消息簇中的“动作”,通过调用“信号源方法Creator“创建一个“信号源方法”,比如“动作”是“信号源_设RF开关”,就会创建一个“信号源_设RF开关”类。注意,上一期里我们特意提到过“信号源方法Creator”的Create方法有些特殊,它还有一个输入端是“信号源_方法”类,这里我们就将刚刚在“创建仪表”中的“信号源_方法“从这输入,就可以在创建“信号源_方法”类的同时顺利的将TCP Link和信号源类写入其私有数据了。
创建仪表动作_信号源策略.JPG
最后,我们讲“执行”方法,代码很简单,就是调用刚才创建的“信号源方法”的“Do”函数,将消息簇中的“所需数据”传递给”Do”函数,如果方法是“信号源_设RF开关”那么就执行对应的”Do”函数,而又因为“信号源方法”中已经包含了“信号源”类(如SMF100A),因此在执行“设RF开关“时就可以执行到对应的具体方法上了(如SMF100A_设RF开关)。
执行_信号源策略.JPG
4.     建立“仪表操作Core“
策略类我们就这样完成了,我们下面建立一个“仪表操作Core“函数来统一调用策略,代码如下,输入端主要是”消息“和”仪表信息“,通过调用”策略Creator“、”创建仪表“、”创建仪表动作“和”执行“方法完成对某一具体仪表的具体操作。
这样理论上我们就可以使用一个函数“仪表操作Core“来完成对任意仪表的控制啦。^_^
仪表操作Core前面板.JPG 仪表操作Core前面板2.jpg
仪表操作Core后面板.JPG
5.     总结
本期我们通过建立“策略“类及其方法完成了中层设计,最后又写了一个”仪表操作Core“函数进行统一调用,理论上实现了仅通过一个函数即可对不同种类不同类型的仪表进行不同方法的控制。
不过这样的一个函数肯定是不方便使用的,因为比较难以理解且还没有具体的输入数据,因此下一期我们将进行”顶层设计“,设计一系列顶层函数,方便用户快速使用。
6.     成果展示
成果展示.gif
本期成果展示

` 抽象策略类工程树.JPG

回帖(2)

荣琪

2021-2-14 11:57:03
搞错啦,是第6期
举报

魏祖强

2021-2-16 07:45:05
厉害,有水平,顶起。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分