日本无码免费高清在线|成人日本在线观看高清|A级片免费视频操逼欧美|全裸美女搞黄色大片网站|免费成人a片视频|久久无码福利成人激情久久|国产视频一二国产在线v|av女主播在线观看|五月激情影音先锋|亚洲一区天堂av

  • 手機(jī)站
  • 小程序

    汽車測(cè)試網(wǎng)

  • 公眾號(hào)
    • 汽車測(cè)試網(wǎng)

    • 在線課堂

    • 電車測(cè)試

LabVIEWer的新突破—從面向過程到面向操作者

2022-04-08 20:58:15·  來源:恩艾NI知道  
 
注:本文轉(zhuǎn)載自公眾號(hào)上海眾執(zhí)芯信息科技有限公司LabVIEW作為測(cè)控行業(yè)非常經(jīng)典的編程環(huán)境與語言,從1986年發(fā)布至今,迭代了很多經(jīng)典的設(shè)計(jì)模式,例如:簡單狀態(tài)機(jī)

注:本文轉(zhuǎn)載自公眾號(hào)上海眾執(zhí)芯信息科技有限公司


LabVIEW作為測(cè)控行業(yè)非常經(jīng)典的編程環(huán)境與語言,從1986年發(fā)布至今,迭代了很多經(jīng)典的設(shè)計(jì)模式,例如:


簡單狀態(tài)機(jī)

利用該設(shè)計(jì)模式,可以設(shè)計(jì)出序列化執(zhí)行代碼,可根據(jù)當(dāng)前執(zhí)行狀態(tài)選取下一個(gè)執(zhí)行的步驟,可以方便地插入新的執(zhí)行步驟,修改執(zhí)行順序生成邏輯。其參考代碼如下:


圖片


QMH

該設(shè)計(jì)模式在狀態(tài)機(jī)的基礎(chǔ)上,添加了消息機(jī)制,將狀態(tài)機(jī)的狀態(tài)跳轉(zhuǎn)渠道,從移位寄存器改為隊(duì)列,隊(duì)列中傳遞的為消息,包含了消息名與消息內(nèi)容,利用該設(shè)計(jì)模式,可以進(jìn)行多線程編程,消息的產(chǎn)生方與消息的接收/執(zhí)行方分別存在于不同的線程中,其也是生產(chǎn)者/消費(fèi)者模式的一種,只是QMH中,消息的生產(chǎn)者也可以是其他消息渠道的消費(fèi)者,此處生產(chǎn)者與消費(fèi)者的定義只針對(duì)消息,不針對(duì)線程。


圖片


很多公司也推出了更加實(shí)用的設(shè)計(jì)參考架構(gòu),例如JKI狀態(tài)機(jī),其基本思想與狀態(tài)機(jī)、QMH基本類似。


上述設(shè)計(jì)模式能解決大多數(shù)小規(guī)模的應(yīng)用需求,例如經(jīng)典的SIMON游戲,小規(guī)模數(shù)據(jù)采集,晚會(huì)抽獎(jiǎng)程序等,其不管是從概念還是從實(shí)現(xiàn)角度,看上去都很直接,易于學(xué)習(xí)與掌握。


LabVIEW足夠優(yōu)秀,但在LabVIEW圈子中,很經(jīng)典的一句話就是:LabVIEW易學(xué)不易精。此話可以從兩個(gè)角度來理解:


一是對(duì)編程技巧的精通,例如各種函數(shù)功能的掌握。此處體現(xiàn)了LabVIEW的強(qiáng)大之處,其以圖形化、驅(qū)動(dòng)庫的方式集成了且可以繼續(xù)集成豐富的功能,需要工程師日積月累的勤學(xué)苦練

二是對(duì)參考架構(gòu)的渴求。大部分中途放棄LabVIEW或者對(duì)LabVIEW產(chǎn)生質(zhì)疑的工程師,是因?yàn)樵诙嗄甑氖褂煤?,發(fā)現(xiàn)永遠(yuǎn)停留于使用上述設(shè)計(jì)模式完成簡單的應(yīng)用,或者東拼西湊出稍復(fù)雜但日后自己都不想打開的應(yīng)用程序,在從小白LV工程師變?yōu)橘Y深LV工程師的路上,找不到隨心所欲的感覺


小編在與LabVIEW相伴多年的過程中,有幸加入了許許多多的LabVIEW社區(qū)/群,深深感受到LV圈中對(duì)新突破的渴望,都希望寫出真正的模塊化、可伸縮、可擴(kuò)展、可復(fù)用且清晰簡潔的代碼,在與其他編程語言對(duì)比時(shí),不再暗暗自卑。


路在何方?本文將拋磚引玉,介紹一個(gè)方法:


----以面向?qū)ο鬄樗枷耄圆僮髡邽榛?,以專業(yè)架構(gòu)(觀察者模式、MVC模式等)為藍(lán)圖,在高效、成熟的編程工具的輔助下開展LabVIEW開發(fā)。



本篇將介紹面向?qū)ο蟮乃枷肱c操作者這個(gè)基石,這也是NI官方推廣的兩種LabVIEW編程方式;下篇將介紹專業(yè)架構(gòu)與高效工具。


如何理解面向?qū)ο?操作者與上述設(shè)計(jì)模式的區(qū)別呢?我們以QMH為例。


在QMH中,消息處理線程如下,我們將從隊(duì)列中接收消息,根據(jù)消息的名稱進(jìn)入不同的Case分支,然后取出消息中的數(shù)據(jù)以及QMH消息處理線程移位寄存器緩存的數(shù)據(jù),進(jìn)行特定功能的處理,最后將結(jié)果再次存儲(chǔ)進(jìn)線程移位寄存器中。


圖片


從復(fù)用的角度,該程序中的消息處理部分,只能通過復(fù)制代碼片段進(jìn)行復(fù)用,或者簡單的創(chuàng)建子VI模塊;但是隨著子VI越來越多,會(huì)發(fā)現(xiàn)難于管理,因此有經(jīng)驗(yàn)的工程師會(huì)想到用庫的方式進(jìn)行管理,此舉會(huì)大大減低子VI的管理難度,并提升復(fù)用的可能性。但是,此處我們忽略了一個(gè)點(diǎn),那就是數(shù)據(jù)。


我們看到了QMH中,消息處理部分用一個(gè)移位寄存器存放了線程的狀態(tài)信息,子VI間傳遞的其實(shí)也是經(jīng)過其處理后的該狀態(tài)信息。我們?nèi)绻麑?shù)據(jù)信息也封裝到我們的庫中,那就得到了我們的對(duì)象,如下圖所示:


圖片


面向?qū)ο笏枷氩⒉粌H僅是將數(shù)據(jù)存進(jìn)庫中,僅是如此的話,與.lvlib庫并無太大區(qū)別。面向?qū)ο笫牵?/span>


把一組數(shù)據(jù)結(jié)構(gòu)與處理他們的方法組成對(duì)象

->對(duì)象=數(shù)據(jù)+方法

把具有相同行為的對(duì)象歸納為

->:人 數(shù)據(jù):性別/年齡/...方法:呼吸/吃飯/...對(duì)象:張三/李四/...

->:汽車 數(shù)據(jù):長度/品牌/...方法:啟動(dòng)/剎車/...對(duì)象:張三的別克/李四的比亞迪...

通過封裝隱藏類的內(nèi)部細(xì)節(jié)

->外界無法直接獲得對(duì)象內(nèi)部細(xì)節(jié),如:外界無法僅憑外貌得知一個(gè)人的具體年齡

通過繼承使類得到泛化

->女性類繼承了人類,擴(kuò)展了生育的方法

通過多態(tài)實(shí)現(xiàn)基于對(duì)象類型的動(dòng)態(tài)派生

->新能源車與燃油車都繼承了汽車類,但當(dāng)他們啟動(dòng)時(shí),使用的能源及啟動(dòng)的方式都是各自獨(dú)有的


從下圖就能看到其好處,其描述的是:如果應(yīng)用程序需要一個(gè)新的版本,其頂層邏輯不變,僅是隊(duì)列消息具體執(zhí)行方法及系統(tǒng)狀態(tài)包含的信息有變化,此時(shí)通過面向?qū)ο笏枷氲睦^承與多態(tài),即可在不需要修改主程序Case分支及其內(nèi)部代碼的情況下,通過創(chuàng)建一個(gè)新的類,在類的數(shù)據(jù)與方法中,實(shí)現(xiàn)需求的變更,在主程序中,通過輸入不同的對(duì)象,執(zhí)行方法時(shí)會(huì)根據(jù)對(duì)象的類型,動(dòng)態(tài)調(diào)用對(duì)應(yīng)的方法。


圖片


LabVIEW面向?qū)ο缶幊套銐騼?yōu)秀,但是,在擴(kuò)展時(shí),如果我們?cè)黾有碌南⒚Q,那么就需要對(duì)Case分支數(shù)量進(jìn)行擴(kuò)充,還是需要修改主程序,那么有沒有更好的方式,在不修改主程序的情況下,完成需求的擴(kuò)展呢?此時(shí)就需要操作者了。


下圖為面向操作者的QMH消息處理線程,我們發(fā)現(xiàn)有兩個(gè)變化,

1. 將消息簇封裝為消息類對(duì)象

2. 將Case結(jié)構(gòu),簡化為Do.vi

圖片


其優(yōu)化邏輯為:

1. 消息類中封裝了a. 某個(gè)Case結(jié)構(gòu)的功能執(zhí)行代碼,命名為Do.vi,不同Case有不同的消息類,這樣就可通過消息類名稱替代了原消息簇中的消息名,b. 將消息簇?cái)?shù)據(jù)部分封裝進(jìn)了消息類的數(shù)據(jù)中

2. Do.vi為多態(tài)VI,可根據(jù)傳遞的具體消息類,動(dòng)態(tài)調(diào)用該類的Do.vi,這樣就通過多態(tài)替換了原來QMH中的Case分支


綜上,我們通過:

1. 將QMH的消息執(zhí)行部分從面向過程編程替代為面向操作者

2. 將QMH的消息簇從簇結(jié)構(gòu)替代為消息類

即完成了從面向過程至面向操作者的編程轉(zhuǎn)換


利用面向操作者的編程方式,我們無需修改主題程序,僅需針對(duì)不同的"Case",編寫不同的消息類,這樣即可完成程序的擴(kuò)展,符合模塊化,可復(fù)用性等特點(diǎn)。

分享到:
 
反對(duì) 0 舉報(bào) 0 收藏 0 評(píng)論 0
滬ICP備11026917號(hào)-25