關(guān)于LabVIEW用于儀器(示波器、頻譜儀等)測(cè)控的自動(dòng)測(cè)試程序的程序框架的選擇問(wèn)題!
有很長(zhǎng)一段時(shí)間沒(méi)有在公眾號(hào)平臺(tái)上輸出、總結(jié)關(guān)于LabVIEW的知識(shí)文字內(nèi)容了!
主要是這段時(shí)間自己本職工作任務(wù)甚為繁重,加上各種家庭事宜的牽絆,耗費(fèi)了過(guò)多的時(shí)間和精力,也就無(wú)力及時(shí)更新了。

今天是端午節(jié)假期第二天,這里祝大家端午節(jié)安康和順,并略有一點(diǎn)余暇時(shí)間,于是從知乎更新同步一個(gè)LabVIEW的問(wèn)答過(guò)來(lái)。以此證明本公眾號(hào)未死,成長(zhǎng)更新尚在努力中……。
回到文章題目上:“關(guān)于LabVIEW用于儀器(示波器、頻譜儀等)測(cè)控的自動(dòng)測(cè)試程序的程序框架的選擇問(wèn)題!”
這是一個(gè)開放式的問(wèn)答!
也就是說(shuō):從理論上講,LabVIEW中主流的程序設(shè)計(jì)框架都可以用以對(duì)儀器設(shè)備(例如數(shù)字多用表、示波器等)的控制上,如何選擇開發(fā)框架(Framework)主要取決于你的業(yè)務(wù)領(lǐng)域問(wèn)題的技術(shù)需求,并沒(méi)有固定的單一標(biāo)準(zhǔn)答案。如果,只是給你這么一段話的回答,你肯定要罵娘!這TM說(shuō)了跟沒(méi)說(shuō)一樣呀!裝什么假高深!

下面我結(jié)合一下LabVIEW維基百科上“框架設(shè)計(jì)模式”的范例頁(yè)面內(nèi)容,對(duì)咱們這個(gè)問(wèn)題場(chǎng)景進(jìn)行一下簡(jiǎn)單的范例演繹。https://labviewwiki.org/wiki/Design_Pattern_Case_Study:_A_Simple_Counter

LabVIEW的設(shè)計(jì)框架從宜到難的技術(shù)發(fā)展路線圖如下圖所示:分別是入門級(jí)別的狀態(tài)機(jī)(State Machine)、事件處理(Event Handler),初級(jí)級(jí)別的主從(Master/Slave)、生產(chǎn)者消費(fèi)者(Producer/Counsumer)、動(dòng)作機(jī)(Action Engine),中級(jí)級(jí)別的各種隊(duì)列消息為主的設(shè)計(jì)框架(QMH、DQMH),以及高級(jí)的多異步通信線程的操作者框架(Actor Framework)。

入門級(jí)別的狀態(tài)機(jī)(State Machine)、事件處理(Event Handler)設(shè)計(jì)框架模式,就是用LabVIEW開發(fā)一個(gè)小的快速應(yīng)用程序,完成一些簡(jiǎn)單的業(yè)務(wù)功能測(cè)量,一般常規(guī)的測(cè)量功能又可以細(xì)分為測(cè)試配置,測(cè)試采集,數(shù)據(jù)呈現(xiàn),結(jié)果保存的軟件功能模塊。此類框架的特點(diǎn)就是以單一循環(huán)線程為主。LabVIEW為此提供一個(gè)簡(jiǎn)單狀態(tài)機(jī)的模板起點(diǎn),為初學(xué)者搭建好的起始點(diǎn)。


LabVIEW維基百科的狀態(tài)機(jī)的設(shè)計(jì)范例程控框圖代碼示意。

當(dāng)業(yè)務(wù)開發(fā)對(duì)數(shù)據(jù)測(cè)試采集的實(shí)時(shí)性有一定特殊要求時(shí),就需要將采集、數(shù)據(jù)呈現(xiàn)和結(jié)果保存進(jìn)一步細(xì)分分解到不同的線程循環(huán)當(dāng)中,入門級(jí)別簡(jiǎn)單的生產(chǎn)者/消費(fèi)者的兩三循環(huán)就是更適合的設(shè)計(jì)模式。同樣的,LabVIEW的新建中也給出相關(guān)的空白模板的開發(fā)起始點(diǎn)。

但是,往往實(shí)際業(yè)務(wù)開發(fā)上,較為復(fù)雜的工程程序中,單靠?jī)扇齻€(gè)循環(huán)是不能覆蓋住的!
因此,經(jīng)典的隊(duì)列消息處理器模板(QMH,Queued Message Handler)就是不得不上的設(shè)計(jì)框架。
LabVIEW維基百科的QMH的設(shè)計(jì)范例程控框圖示意。

框架的復(fù)雜到了一定程序,面向?qū)ο缶幊痰姆庋b、多態(tài)可以更好的控制復(fù)雜變化,進(jìn)一步演化出了DQMH和AF(Actor Framework 操作者框架)。關(guān)于這方面的相關(guān)資料可以看看我的知乎專欄。

綜上,開發(fā)程序使用哪種設(shè)計(jì)程序框架,主要是看你的業(yè)務(wù)場(chǎng)景中的技術(shù)特點(diǎn)驅(qū)動(dòng)的!而對(duì)儀器設(shè)備的程控并不是決定框架的因素。關(guān)于框架的選擇主要要選擇適合的,而不是選擇最復(fù)雜、顯示自己能力牛逼的!這個(gè)就是另外一個(gè)話題了。
最后,還特別需要注意的一點(diǎn)是,往往程序和硬件程控相關(guān)時(shí),則會(huì)帶來(lái)硬件耦合的問(wèn)題,需要使用IVI可互換驅(qū)動(dòng),或者使用面向?qū)ο缶幊碳夹g(shù)設(shè)計(jì)硬件抽象層(Headware Abstract Layer),通過(guò)針對(duì)抽象層編程,以期獲得更大的靈活性和擴(kuò)展性。
關(guān)于數(shù)字表測(cè)量?jī)x器的硬件抽象層簡(jiǎn)單入門可以參考下面這篇文章。
https://www.dmcinfo.com/latest-thinking/blog/id/10056/a-simple-hardware-abstraction-using-labview-oop
