本节将带领大家创建一个完整的SMO Demo。
1.在桌面创建一个文件夹,同时打开LabVIEW创建一个空白项目并保存。
2.打开SMO Editor。
3. 创建两个SMO。
一个做电压采集,不需要界面,选择SMO.Basic模板。
一个做电压显示和报警提示,需要用到SMO.UI.Basic模板。
创建完成,如下图所示,
4.为Volt Acq SMO类创建事件。
事件1:Volt Acq SMO类向外发布采集到的电压值。
事件2: Volt Acq SMO类向外发布警告状态。
在Volt Acq SMO类里编写核心程序,并对事件进行发布。
打开process.vi类核心程序,切换至 "", "Idle" 状态,修改事件结构的超时时间为100ms,即每100ms进行一次电压采集, 需要用到解除捆绑函数,获取当前SMO对自身的引用,并将电压值和警告状态进行发布。
修改完成以后,可以点击Volt Acq SMO类里的Volt Acq.TestLauncher.vi类,打开高亮显示,可以查看对应的执行过程。
5.为Signal Display类创建事件。
Signal Display SMO是依赖Volt Acq SMO的,因此需要将后者添加到前者的私有控件(.ctl)中。
打开Signal Display SMO里的Signal Display.ctl控件前面板,然后在项目中直接将Volt Acq类拖进data簇里即可。
右击Signal Display SMO创建它的成员访问器,
在下面弹窗里,我们可以看到类的成员,同时修改权限为读写,创建静态访问器(动态访问器支持被子类继承和读写,静态不支持),同时命名一个新文件夹保存访问器。
创建完成以后,会有两个VI弹出,在项目目录里创建一个Data Accessors文件夹,同时将两个VI保存到里面。
将读写访问器设置为私有。
打开Signal Display SMO的process.vi类,在前面板创建一个波形图和布尔显示控件,用于显示采集的电压值和报警状态。
打开程序框图,在JKI状态机的“EVents:Register”分支去注册Volt Acq发布的公共事件。
切换至状态机的 "", "Idle" 分支,添加两个事件。
这样就可以看到事件里面有Volt数据,并接上波形图空间。并参考其他事件,补全代码。
到此两个SMO的程序就已经写完了,这里我们需要在项目里新建一个Launcher.vi用来启动SMO。
6.编写启动VI。
打开Launcher.vi,在前面板创建一个停止控件。
切换至程序框图,在项目中将两个SMO类拖放到程序框图中,同时在下面路径找到SMO的函数。
程序实现逻辑如下:
引用对象创建SMO,将Volt Acq SMO类的值写入Volt Acq类,然后启动SMO并显示Signal Display的前面板,最后创建一个停止事件结构用于关闭前面板、停止SMO、销毁SMO。
运行效果如下图: