【喂饭】MVA-S02 MVA子面板(Model实现状态栏 数据采集 状态机)
导语: MVA-S01中,我们实现的MVA子面板的切换与优雅的退出,本章我们将继续完善功能,开始创建Model,实现状态栏的更新,数据持续采集Model与状态机Model的编写方法。本系列文章采用MVA-SXX编号,可顺序查看。
📑 文章目录
🔹 1. 创建状态栏_Model,状态栏_Viewable,实现状态栏显示
🔹 2. 随机数采集_Model,波形图表绑定显示
🔹 3. 创建正弦状态机_Model,滑动杆控制正弦幅值与Viewable复用
🔹 4. 入门总结
1. 创建状态栏_Model,状态栏_Viewable,实现状态栏显示
1.1 打开自己写的MVA-S01MVA子面板切换项目,也可以公众号发送[MVA子面板]获取。

1.2 我们先重命名MVA-S01子面板为MVA-S02子面板,并新建虚拟文件夹,把Launcher单退出与Launcher子面板切换放到虚拟文件夹中,并新建Model库,保存到本地Model文件夹中。

1.3 右击Model库,新建操作者,继承Model.lvclass(C:\Program Files (x86)\National Instruments\LabVIEW 2018\vi.lib\Composed Systems\MVA Framework\modules\mva-core\Source\IModel\IModel\IModel.lvclass),命名为状态栏_Model,存放于Model文件夹中

1.4 右击状态栏_Model.lvclass重写Pre launch init,选择请求数据,名称:Panel Choose,类型:字符串,这里的Panel Choose就是之前Main_ViewModel中捕获的ViewManager值更新的主题数据后,进行发布的,这里Model可以直接请求进行处理显示。写完保存。



1.5 Model请求了数据之后,当有数据更新的时候,中介者会自动给订阅者发送消息,我们需要重写接受消息的vi进行数据处理,需要重写观察数据

1.6 首先接受到的数据默认按照主题,数据,时间三个输入给到,进行处理之后,进行数据发布,新数据名称:Status,数据类型:字符串。写好保存。


1.7 Model已经创建完成了,收到Panel Choose数据之后会进行处理,发布Status数据。这里的数据类型请求方、发布方一定要一致,否则收不到的,防止数据异常。现在右击Viewable库创建状态栏_Viewable.

1.8 重写状态栏_Viewable.的Actor Core,前面板放置一个字符串显示控件,右击匹配窗格大小

1.9 Actor Core中我们使用请求数据,然后重写观察数据vi,将请求的Status写入文本。写完保存。


1.10 我们现在来写个Launcher状态栏,先把之前Launcher子面板切换的启动器内容复制过来,基础上进行修改,状态栏_Viewable与静默启动的输出一起创建数组,并增加Down类View。需要完善上下双子界面_VieManager的Initialize Front Panel.vi,当插入Down类View时,插入到Down Subpanel中。加载Model需要使用Model配置器,右击Model常量显示类库,选择Write Auto-Launch Nested Models.vi



1.11启动Launcher,状态栏View已经插入到子面板中,点击按钮切换,状态栏显示信息。

2. 创建随机数_Model,波形图表进行实时显示
2.1 右击Model库,新建操作者随机数采集_Model,右击随机数采集_Model.lvclass新建静态vi,保存为随机数采集执行.vi,内容进行随机数发布,主题名称:Random Number 类型:Double。右击随机数采集执行.vi选择操作者>生成消息。



2.2 重写Pre Launch init,使用操作者的时间延迟发送进行持续的采集数据发布数据。


2.3 现在我们打开波形图表_Viewable.lvclass的Actor Core,将刚刚发布的Random Number数据与波形图表进行绑定。第一个方法就是使用请求数据,然后重写观察数据,将数据传入波形图表的ref中。这里使用第二个方法,使用绑定终端值。绑定终端值可以直接将指定的与控件类型相同数据类型的数据更新到控件中


2.4 OK 我们进行编写Launcher,只需要把刚刚新建的Model并到数组中,其他地方不需要修改,运行。


3. 创建正弦状态机_Model,滑动杆控制正弦幅值与Viewable复用
3.1 右击Model库,新建正弦状态机_Model操作者。新建静态vi,命名正弦状态机.vi,前面板放置cmd字符串输入与变体Data输入。右击该Vi生成消息。


3.2 新建静态vi,CMD.vi,封装给正弦状态机.vi发送消息逻辑,便于使用。


3.3 编写状态机内容,实现正弦数据采集动作的编写。




3.4 重写Pre Launch Init,请求滑动杆的值改变数据,并初始化状态机。

3.5 重写观察数据,当收到Slider Number,进行幅值更新。

3.6 我们现在需要完善滑动杆_Viewable,注册值改变事件,在重写接受值改变事件中,进行值更新。


3.7 记得我们之前Main_ViewModel,会自动将捕获的值更新发布出去,Model所以已经可以接受到。

3.8 我们为了复用波形图表_Viewable,所以我们需要为其分配名称,需要根据不同的名称来绑定不同的数值。右击Viewable类显示其父类,名称的方法已经存在,可以直接使用。


3.9 完善上下双子面板_ViewManager.lvclass,Actor Core上增加一个一个按钮,来切换正弦的波形图表显示。


3.10 我们为了区分按钮,修改了按钮的标签名称,所以需要修改一下接受Value Change事件重写vi,直接把标签名称值更新,发送给Panel Choose。只需要Launcher编写的时候与按钮标签名称对应就行

3.11 我们来进行Launcher的配置。放置两个波形图表_Viewable,写入名称,分别为Random与Sine,与ViewManager的前面板按钮的标签名称一致。正弦状态机_Model直接捆绑就行。

3.12 运行

4. 入门总结
Viewable单纯的界面显示的,Model是单纯的业务逻辑的,ViewManager是管理界面的,ViewModel进行简单的转发的。四个之间在隐形的中介者Mediator下是解耦的。每次一个功能我都重新写一个Launcher就是想表达他们的组合能力,这个是MVA精妙的地方,不同的项目使用同一个库,但是可以达到不同的效果。之后的内容我将继续在这个基础上进行优化,大家想要了解的也可以留言。
📢 获取方式:
关注微信公众号:「G 代码思维」,在后台发送暗号: 【MVA子面板S02】 ,即可原版源码压缩包。
下一期,我们将开始接触MVA的弹窗页面与快捷菜单部分,这个部分也会重写上一期的退出对话框功能。
点个【赞】和【推荐】 ,咱们下期见!
试读已结束,解锁完整内容与工程源码
本文包含 LabVIEW MVA 框架完整实战源码包、架构逻辑导图与核心技术细节。升级会员即可解锁全站 VIP 专栏!

