LabVIEWer的新突破—从面向过程到面向操作者
注:本文转载自公众号上海众执芯信息科技有限公司
LabVIEW作为测控行业非常经典的编程环境与语言,从1986年发布至今,迭代了很多经典的设计模式,例如:
简单状态机
利用该设计模式,可以设计出序列化执行代码,可根据当前执行状态选取下一个执行的步骤,可以方便地插入新的执行步骤,修改执行顺序生成逻辑。其参考代码如下:
QMH
该设计模式在状态机的基础上,添加了消息机制,将状态机的状态跳转渠道,从移位寄存器改为队列,队列中传递的为消息,包含了消息名与消息内容,利用该设计模式,可以进行多线程编程,消息的产生方与消息的接收/执行方分别存在于不同的线程中,其也是生产者/消费者模式的一种,只是QMH中,消息的生产者也可以是其他消息渠道的消费者,此处生产者与消费者的定义只针对消息,不针对线程。
很多公司也推出了更加实用的设计参考架构,例如JKI状态机,其基本思想与状态机、QMH基本类似。
上述设计模式能解决大多数小规模的应用需求,例如经典的SIMON游戏,小规模数据采集,晚会抽奖程序等,其不管是从概念还是从实现角度,看上去都很直接,易于学习与掌握。
LabVIEW足够优秀,但在LabVIEW圈子中,很经典的一句话就是:LabVIEW易学不易精。此话可以从两个角度来理解:
一是对编程技巧的精通,例如各种函数功能的掌握。此处体现了LabVIEW的强大之处,其以图形化、驱动库的方式集成了且可以继续集成丰富的功能,需要工程师日积月累的勤学苦练
二是对参考架构的渴求。大部分中途放弃LabVIEW或者对LabVIEW产生质疑的工程师,是因为在多年的使用后,发现永远停留于使用上述设计模式完成简单的应用,或者东拼西凑出稍复杂但日后自己都不想打开的应用程序,在从小白LV工程师变为资深LV工程师的路上,找不到随心所欲的感觉
小编在与LabVIEW相伴多年的过程中,有幸加入了许许多多的LabVIEW社区/群,深深感受到LV圈中对新突破的渴望,都希望写出真正的模块化、可伸缩、可扩展、可复用且清晰简洁的代码,在与其他编程语言对比时,不再暗暗自卑。
路在何方?本文将抛砖引玉,介绍一个方法:
----以面向对象为思想,以操作者为基石,以专业架构(观察者模式、MVC模式等)为蓝图,在高效、成熟的编程工具的辅助下开展LabVIEW开发。
本篇将介绍面向对象的思想与操作者这个基石,这也是NI官方推广的两种LabVIEW编程方式;下篇将介绍专业架构与高效工具。
如何理解面向对象/操作者与上述设计模式的区别呢?我们以QMH为例。
在QMH中,消息处理线程如下,我们将从队列中接收消息,根据消息的名称进入不同的Case分支,然后取出消息中的数据以及QMH消息处理线程移位寄存器缓存的数据,进行特定功能的处理,最后将结果再次存储进线程移位寄存器中。
从复用的角度,该程序中的消息处理部分,只能通过复制代码片段进行复用,或者简单的创建子VI模块;但是随着子VI越来越多,会发现难于管理,因此有经验的工程师会想到用库的方式进行管理,此举会大大减低子VI的管理难度,并提升复用的可能性。但是,此处我们忽略了一个点,那就是数据。
我们看到了QMH中,消息处理部分用一个移位寄存器存放了线程的状态信息,子VI间传递的其实也是经过其处理后的该状态信息。我们如果将数据信息也封装到我们的库中,那就得到了我们的对象,如下图所示:
面向对象思想并不仅仅是将数据存进库中,仅是如此的话,与.lvlib库并无太大区别。面向对象是:
把一组
数据
结构与处理他们的方法
组成对象
->对象=数据+方法
把具有相同行为的对象归纳为
类
->类:人数据:性别/年龄/...方法:呼吸/吃饭/...对象:张三/李四/...
->类:汽车数据:长度/品牌/...方法:启动/刹车/...对象:张三的别克/李四的比亚迪...
通过
封装
隐藏类的内部细节->外界无法直接获得对象内部细节,如:外界无法仅凭外貌得知一个人的具体年龄
通过
继承
使类得到泛化->女性类继承了人类,扩展了生育的方法
通过
多态
实现基于对象类型的动态派生->新能源车与燃油车都继承了汽车类,但当他们启动时,使用的能源及启动的方式都是各自独有的
从下图就能看到其好处,其描述的是:如果应用程序需要一个新的版本,其顶层逻辑不变,仅是队列消息具体执行方法及系统状态包含的信息有变化,此时通过面向对象思想的继承与多态,即可在
不需要修改主程序Case分支及其内部代码的情况下
,通过创建一个新的类,在类的数据与方法中,实现需求的变更,在主程序中,通过输入不同的对象,执行方法时会根据对象的类型,动态调用对应的方法。LabVIEW面向对象编程足够优秀,但是,在扩展时,如果我们增加新的消息名称,那么就需要对Case分支数量进行扩充,还是需要修改主程序,那么有没有更好的方式,在不修改主程序的情况下,完成需求的扩展呢?此时就需要操作者了。
下图为面向操作者的QMH消息处理线程,我们发现有两个变化,
1. 将消息簇封装为消息类对象
2. 将Case结构,简化为Do.vi
其优化逻辑为:
1. 消息类中封装了a. 某个Case结构的功能执行代码,命名为Do.vi,不同Case有不同的消息类,这样就可通过消息类名称替代了原消息簇中的消息名,b. 将消息簇数据部分封装进了消息类的数据中
2. Do.vi为多态VI,可根据传递的具体消息类,动态调用该类的Do.vi,这样就通过多态替换了原来QMH中的Case分支
综上,我们通过:
1. 将QMH的消息执行部分从面向过程编程替代为面向操作者
2. 将QMH的消息簇从簇结构替代为消息类
即完成了从面向过程至面向操作者的编程转换
利用面向操作者的编程方式,我们无需修改主题程序,仅需针对不同的"Case",编写不同的消息类,这样即可完成程序的扩展,符合模块化,可复用性等特点。
责任编辑:hnmd003
相关阅读
-
天天热文:基于NSGA-Ⅱ算法对发动机噪声激励下的整车声学包优化
摘要:通过整车声学包合理设计能有效的改善发动机传至车内的噪声。基于统计能量法,利用Hypermesh和VAOn...
2022-06-27 -
当前观察:平安不动产“借新还旧”2022年第三期15亿公司债票面利率定为4.10%
中华网财经6月27日讯深交所消息,近日,平安不动产有限公司披露2022年公开发行公司债券(面向专业投资者...
2022-06-27 -
今日热议:南通启东2宗宅地8.43亿挂牌 未设新房限价将于7月26日出让
6月24日,南通启东市吕四港镇挂牌2宗住宅地,将于7月26日采用“限地价+摇号”方式出让,均未设新房限价...
2022-06-27 -
【环球速看料】济南城市建设集团20亿公司债券发行结束 票面利率3.75%
6月24日,济南城市建设集团有限公司发布公开发行2022年可续期公司债券(第二期)发行结果公告。据观点新...
2022-06-27 -
世界速看:一周公告合辑丨偿债高峰来袭 房企流动性压力持续
鲁商服务通过港交所上市聆讯。世茂服务2021年收入83 434亿元同比增长66%。慕思股份今日上市发行价格38 93元 股
2022-06-27 -
引来阵阵叫好声 互联网账号“一键解绑”手机号被一些人看作是“最值得期待的服务”
据媒体报道,中国信息通信研究院近期上线一键解绑功能,用户可通过手机号查询注册绑定的互联网应用账号...
2022-06-27 -
热议:2021年全国住房公积金缴存额2.9万亿元 同比增长11.24%
6月24日,住房和城乡建设部、财政部、中国人民银行联合发布《全国住房公积金2021年年度报告》。2021年,...
2022-06-27 -
全球新资讯:鲁商生活服务:拟全球发售3334万股股份 发售价5.30-7.92港元
6月27日,鲁商生活服务股份有限公司发布全球发售公告。公告显示,公司拟全球发售3334万股股份,其中香港...
2022-06-27 -
环球微速讯:银亿股份:已进入《重整计划》执行阶段 完成资本公积金转增股本方案
6月26日,银亿股份有限公司发布关于公司重整计划执行进展的公告。公告显示,关于资本公积金转增股本方案...
2022-06-27 -
今日热门!广东:1—5月房地产开发投资0.60万亿元,同比下降3.2%
6月24日,广东统计信息网公布2022年1—5月广东房地产市场运行简况。1—5月,广东完成房地产开发投资0 6...
2022-06-27 -
结合区域实际和群众需求 丰台国有房屋租金减免第一阶段进度已达100%
北京市丰台区1+3+N政策组合拳已在多个领域持续推进。截至6月23日,丰台国有房屋租金减免第一阶段进度已...
2022-06-27 -
观速讯丨鲁商服务拟全球发售3334万股 发售价5.30-7.92港元
6月27日,鲁商生活服务股份有限公司公告称,该公司拟全球发售3334万股股份,其中香港发售股份333 4万股...
2022-06-27
阅读排行
资讯播报
- 天天即时:中国房企巨头信用接连...
- 今日要闻!方便跨城买房 多地公...
- 【速看料】中房协搭建平台 下月...
- 世界播报:贝壳重生
- 世界今亮点!多地“解绑”非中心...
- 视点!锂电池自放电测量方法:动...
- 【世界时快讯】【地评线】中安时...
- 环球快讯:【2022中国有约】宁夏...
- 天天热文:基于NSGA-Ⅱ算法对发...
- 【天天热闻】损害大、成瘾快、花...
- 环球最新:广西启动花样滑冰“选...
- 每日聚焦:“在突破中传承,在传...
- 每日报道:男选手19年来首次颗粒...
- 当前速读:华裔乒乓球运动员倪夏...
- 每日热门:游泳世锦赛,中国跳水...
- 快报:【地评线】紫金e评:“好...
- 当前动态:北京金泰地产拟底价575...
- 焦点滚动:绿景控股正式退市,公...
- 每日视讯:国内首发┃整车级LTE-...
- 【时快讯】公维洁:强制性国家标...
- 全球快报:【大美边疆行】乌拉盖...
- 全球简讯:合肥松绑楼市“放大招...
- 当前速读:锂电池自放电测量方法...
- 今日播报!公务员进村卖房:没有销...
- 华英会两大公会——江晨&腾飞公...
- 天天速讯:游泳世锦赛:中国花游...
- 每日简讯:津门虎队赢得两连胜
- 当前热议!“混编”国足将出战东亚杯
- 世界热资讯!专为大型电动汽车打...
- 当前滚动:2022年第二届银川沿黄...
- 全球热讯:游泳世锦赛花游项目结...
- 每日热闻!荣盛发展:拟4.92亿元...
- 【世界热闻】雅居乐获得8.94亿港...
- 每日速递:领地控股:已根据交换...
- 当前信息:“天空地网”全覆盖监...
- 环球热资讯!场边VAR设备被晒爆...
- 全球视点!麒麟电池相关专利情况
- 当前播报:建发物业:张国钧辞任...
- 世界时讯:大美边疆|他们,守护...
- 天天观热点:荣万家:刘勇罡因个...
- 世界热文:大美边疆行·黑龙江丨...
- 每日热议!空气悬挂在新能源汽车...
- 每日关注!国内唯一“三高一多”...
- 全球球精选!守好“中国粮仓” ...
- 仁膳和元酵素在人体的功用,不可不知!
- 新五年 新玩法 新生态|《大国...
- 爱慕股份旗下女士家居服合集,夏...
- 广东华兴银行亮相第十一届金交会...
- 芙艾联合艾尔建学苑成功举办2022...
- 世界微头条丨2022年离校未就业高...
- 当前讯息:太不容易!别辜负TA~
- 世界视讯!【走进县城看发展】河...
- 【独家】新华全媒+|把饭碗牢牢端...
- 全球快报:成都大运会延期至2023...
- 【天天快播报】南京:计划将筹集...
- 全球快资讯:中南建设:控股股东...
- 世界热文:夜读·房企融资|中国...
- 世界今日讯!西门子工程咨询服务...
- 世界微头条丨万科斥资约5179.79...
- 今日播报!融创房地产:“PR融创0...
- 环球聚焦:不撞?怎么知道汽车安...
- 今亮点!再次征战世预赛 中国...
- 世界观热点:上海汽检顺利完成20...
- 【快播报】上海汽检汽车NVH开发...
- 滚动:国乒WTT冠军赛名单出炉:...
- 环球新动态:第31届世界大学生夏...
- 速讯:嘎玛顿东:我的家在高原,...
- 热门:三人篮球世界杯:小组赛1...
- 热文:学习总书记用典|习近平在...
- 天天观天下!一场中超比赛之后,...
- 环球滚动:金观平:坚持防汛抗旱...
- 每日观点:【地评线】太阳鸟时评...
- 世界速读:商用车惯性试验台
- 天下秀旗下虹宇宙联手艾菲奖,开...
- 大众通信云呼小号入驻华为云云商...
- 福瑞达生物股份荣膺“2021山东社...
- 福瑞达生物股份荣获2021年度“美...
- 共祭中华人文始祖 同品金徽美酒...
- 膜法世家牵手王心凌,实力出圈全...
- 中安建培:赋能建工企业 成就职...
- 饮水升级|昆仑山矿泉水连续6年...
- 随着支付行业大环境改变,代理商...
- 专访REVA执行总裁Kunov.Alidor:...
- “猕猴桃女孩”请查收脱毛指令!...
- 波司登发布21/22财年财报:营收...
- 云启点“支付+”场景拓展,助力...
- 依托深圳供电局“双碳大脑”平台...
- 空间公式 创想装搭丨2022东鹏空...
- 多数跨国公司仍将中国视为首要市...
- 开护肤品店,当然选有保障的嘉柏...
- LG新能源新建电池研发中心 扩大...
- 全球要闻:平安不动产:拟发行15...
- 焦点讯息:恒大地产:拟召开“15...
- 今热点:中国奥园:回笼资金1.05...
- 视焦点讯!和讯曝财报丨佳兆业美...
- 1—5月我国对外承包工程完成营业...
- 看热讯:中国双胞胎组合王柳懿/...
- 【全球时快讯】北京城建:25亿元...
- 对外开放不断扩大 我国基本建立...
- 焦点日报:怎么报考、待遇如何、...