接上一篇的学习笔记
掉下巴的麋鹿:LabVIEW面向对象(LVOOP)学习笔记(1)zhuanlan.zhihu.com![e377f3c2eb8e85fd945a827c193f54d0.png](https://i-blog.csdnimg.cn/blog_migrate/ec8b2f7b2ff9868e1a1af0cc9603a0af.png)
在前五集的介绍中,油管博主讲解了为什么要引入面向对象编程,如何创建类,如何分派,如何在LabVIEW中继承,子类如何重写基类行为,类之间的数据如何传递的,样式如何自定义更改,还通过手动连线不同的对象后,展示VI动态调用的功能。
油管主第六集中介绍了如何动态选择要执行的类
油管主举了一个例子:simulation子类实现的功能是通过将已保存在本地的图像循环显示,是一个相机的模拟。WebCam子类是实际获取摄像头的实时图像显示。直到软件运行时用户才知道哪些相机可以选择,选择了那种相机,才实现对应相机的功能。
我自己的例子还是以数表父类,34401子类和NI DMM子类为例。参考油管主的例子,添加了实现动态选择要执行类的子VI(DMM Selector.vi和Find Supported Devices.vi)。
![34b591c7153057cfc1cb6e2ed9aeaf59.png](https://i-blog.csdnimg.cn/blog_migrate/6232fdf6fb15f62c0b83a2d694677804.png)
![1eac00b007bbb51f7c99fac75fc66733.png](https://i-blog.csdnimg.cn/blog_migrate/eb7163a9e8ed473e9bf5b24d7c202f53.png)
程序运行前,可以看到DMM Selector.vi前面板上的选择控件是空白的,这个控件直到运行的时候才会列出来哪些类是可以用的。这个DMM Selector.vi能做的就是让我们在运行时可以在不同的类中进行选择,这个视频里介绍的是如何从文件中加载类。
![61bc90c19fa0af77132be1f0cd374543.png](https://i-blog.csdnimg.cn/blog_migrate/5c3a4a0b96aba8f6dfce65f7298585eb.jpeg)
这个视频里介绍的是如何从文件中加载类,油管主还在其他视频里有更详细的介绍。(等找到看完补上)
看DMM Selector.vi的框图,里面的Find Supported Devices.vi用来在一个相对的文件夹中寻找带有.lvclass扩展名的文件,然后可以使用属性节点将这些类的文件名称扔到前面板上,更新前面板控件,接下来的事件结构等待用户单击,“好的”,一旦这发生了,对字符串和路径进行一些格式化,找到我们想要导入内存的.lvclass。这就会返回labview对象类,这也是祖先类,我们的类在labview中。通过Get LV Class Default Value.vi动态创建类对象,包括编辑时未知的类对象。因为在这个例子中,有VI用于重写,所以要选择一个实现。
![64a0d9eec8d0b0a2ab3e55266974fd77.png](https://i-blog.csdnimg.cn/blog_migrate/9aee560f0cadd324aad7cda5dd03d007.jpeg)
在Find Supported Devices.vi中,Recursive File List VI 用来列出文件夹或LLB的内容,这里用来实现一个相对的文件夹中寻找带有.lvclass扩展名的文件。Get File Extension VI 用于
返回指定文件的不带句点(.)的文件扩展名。这个Find Supported Devices.vi的输出更新了DMM Selector.vi前面板中选择控件的内容,实现了在运行后让用户直到有哪些可用的类,用户进行选择运行哪一个类。
![7317e3af3bcdf988c8ad78cca424d645.png](https://i-blog.csdnimg.cn/blog_migrate/704bcfdd74239dea683e86cb4b8fb0ef.jpeg)
![47a2cfbcf6f57c0e03e3572146bcf473.png](https://i-blog.csdnimg.cn/blog_migrate/bfc6c412f6bc6985c4e011babbcc1d2f.jpeg)
运行Main.vi后,用户在选择控件中进行选择
![d6fc4b13444f703e1d9ca8d1b7378267.png](https://i-blog.csdnimg.cn/blog_migrate/a18834ef0c8dafa140971c431bb8e2f7.jpeg)
当选择34401时,表现如第五集中介绍的实例化34401类的表现。
![e21ce60abdd53828bbf79b60899b4e40.png](https://i-blog.csdnimg.cn/blog_migrate/cbabe329fee3b18951c83b049a17ec69.jpeg)
当选择NI DMM时,表现如第五集中介绍的实例化NI DMM类的表现。
![4b28e4ddf67dda473f2245c21af4206a.png](https://i-blog.csdnimg.cn/blog_migrate/b069fbd535d3d5beddecbf21c93b6d64.jpeg)
以上只是面向对象编程能力的一个简单演示。这个例子很好的演示了没有可用的硬件时,可以创建一个模拟类,当有了可用的硬件,可以创建一个硬件类,并且可以在两个类之间选择一次加载。
看完了油管主的这五个小短视频后,让我感觉之前一直在学习LVOOP门口徘徊的阶段一下到了迈入半只脚的阶段,对SOLID的设计原则有了初步的认识,不再是字面的理解。