<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 測試測量 > 設(shè)計(jì)應(yīng)用 > LabVIEW程序設(shè)計(jì)模式(一)

          LabVIEW程序設(shè)計(jì)模式(一)

          作者: 時(shí)間:2017-01-09 來源:網(wǎng)絡(luò) 收藏
          我是從LabVIEW的中文版幫助文檔中接觸“程序設(shè)計(jì)模式”一詞的,這個(gè)相對學(xué)術(shù)化的詞語是對一系列用于LabVIEW程序設(shè)計(jì)結(jié)構(gòu)的歸納和總結(jié)。在建造房子時(shí),需要針對房子的用途設(shè)計(jì)整個(gè)房屋的架構(gòu),確保房子在這個(gè)架構(gòu)上的堅(jiān)固性和可建造性。寫程序時(shí)同樣如此,不同的應(yīng)用需要使用不同的程序設(shè)計(jì)結(jié)構(gòu)。例如我們在LabVIEW中構(gòu)建一個(gè)用戶界面型程序時(shí),往往首先在背面板中加入一個(gè)大的while循環(huán)以使程序持續(xù)運(yùn)行。如果需要響應(yīng)用戶界面事件則還需要加入一個(gè)Event事件結(jié)構(gòu)。那么我們是否曾經(jīng)考慮過以下的這些問題:
          1. 應(yīng)用中是否存在并行響應(yīng)的情況?如在持續(xù)的數(shù)據(jù)采集過程中,是否需要同時(shí)響應(yīng)單擊菜單的事件?
          2. 底層獲取的數(shù)據(jù)如何與上層的數(shù)據(jù)顯示部分進(jìn)行數(shù)據(jù)交互?
          3. 上層的界面如何受底層程序的控制?
          4. 同一個(gè)循環(huán)中采用哪種方式進(jìn)行數(shù)據(jù)交換?是局域變量、全局變量、共享變量還是移位寄存器
          5. 程序是否具有可擴(kuò)展性?
          6. 如果程序運(yùn)行過程中,發(fā)生系統(tǒng)錯(cuò)誤或者硬件通訊錯(cuò)誤,是否會停止運(yùn)行?待錯(cuò)誤排除后是否會繼續(xù)運(yùn)行?
          7. 如何組織程序中的核心數(shù)據(jù)結(jié)構(gòu)?是否需要采用面向?qū)ο蟪绦蛟O(shè)計(jì)?
          8. 如何記錄測試數(shù)據(jù)并生成報(bào)表?如何保存用戶配置參數(shù)?
          9. 如何處理程序運(yùn)行中的斷電情況?重新啟動時(shí)的繼續(xù)運(yùn)行?數(shù)據(jù)的最低丟失?
          10. 如何實(shí)現(xiàn)運(yùn)行過程的采樣觸發(fā)和多點(diǎn)采樣的同步?
          當(dāng)然,也許只是使用LabVIEW臨時(shí)地調(diào)試或開發(fā)某個(gè)小的應(yīng)用,無需考慮上述的問題。但是,如果使用LabVIEW開發(fā)一個(gè)典型應(yīng)用的程序卻無法回避這些問題。因此,有必要對各種程序開發(fā)的應(yīng)用進(jìn)行歸納和總結(jié),提取它們對應(yīng)的LabVIEW程序結(jié)構(gòu)中的共性。此外,針對這些共性研究哪種結(jié)構(gòu)更加適合于應(yīng)用。這些結(jié)論綜合起來就形成了程序設(shè)計(jì)的模式。
          對于初學(xué)者而言,理解和掌握程序設(shè)計(jì)模式往往能起到事半功倍的效果;而對高級用戶而言,歸納各種程序設(shè)計(jì)模式又能夠不斷完善程序中遇到的問題,并衍生一套符合特定應(yīng)用的特有的程序設(shè)計(jì)模式。


          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();