LabVIEW Pro 專業論壇-技術討論區-請問主程式大架構該怎麼寫?
 
     
 
 
 
LabVIEW 討論區基礎教學每月專題分享技術問題精選online Test
技術討論區 程式分享區 教育訓練與認證區 閒話家常區 工作機會討論區 回報區 ✦LabVIEW NXG 特區✦ 高手專訪系列
 熱門關鍵字 
    取得 NI 協助    3小時內學會 LabVIEW    CLD 考前衝刺    TOP 資源排行榜    量測概念充電站
 您的位置:首頁 > 技術討論區 > 請問主程式大架構該怎麼寫?
  技術討論區   板主:meiae
 之1(3篇)
請問主程式大架構該怎麼寫? 
 
b99601020
暱稱:李胖
經驗值:192
等級:師傅
發文:17
回文:19
版本:請選擇
闖關狀態:
惡魔沼澤
前往地圖:
 
字級設定

        如題,我的程式是不是要用一個state machine (或之類的)來弄出一個大架構?

   如果太多迴圈是不是會佔很多資源(公司最近找一個來寫程式順邊看了我的程式碼),而且說要有個大架構再

   開始寫程式碼,想請教大家如果要寫個工業的程式該從哪邊開始著手? 謝謝

  文章人氣: 2516 讚:0 文章日期:2018/01/03 23:36
jimmy20154

暱稱:Joy
經驗值:331
等級:師傅
發文:2
回文:33
版本:LabVIEW 2015
闖關狀態:
前往地圖:
1樓
字級設定

技術專欄裡的 寫好 LabVIEW 程式的利器(一)(二)(三)(四)參考一下會很有幫助

尤其是(四)裡面的Event Producer/Consumer 架構很萬用建議學起來。

    讚:1 文章日期:2018/01/04 08:18
CYTseng


2013 LabVIEW 至尊爭霸賽 Top 20    
暱稱:C.Y.
經驗值:5509
等級:總舵主
發文:21
回文:1179
版本:LabVIEW 2016
闖關狀態:
英雄殿
前往地圖:
2樓
字級設定

架構NI都幫你內建了

開專案的時候 選一個Template

並依照指示將檔案放入

[+]放大圖片

    讚:1 文章日期:2018/01/04 08:23
mingyenwei

暱稱:銘延
經驗值:2530
等級:總舵主
發文:4
回文:717
版本:LabVIEW 2013
闖關狀態:
飄渺嶺
前往地圖:
3樓
字級設定

下面會提到跟架構有關的三個方向:

  1. [Sequence Structure => State Machine]
  2. [Polling Loop => Event Structure]
  3. [Single Loop => FGV / Multi-loop with Queue]

 

************************************

[Sequence Structure => State Machine]

如果你常用到Sequence Structure,常做馬達,設備控制,一般流程處理 (優點面)

可能會存檔,分析卻不需要太即時,有人機介面但全由設計者掌控時間點 (弱點面但不嚴重)

需求流程一次畫完後,不會被User角度額外要求增加功能,不需要長期運作並監控多件事情 (弱點)

那麼可以從Sequence Structure進步到State Machine

 

State Machine的特性是狀態定義清楚,各狀態可以重複使用。你可以把它想像成可以多次重覆選擇出入的Stack Sequence Structure。

 

在程式交接學習的情形下,State Machine搭配上一張清楚的規劃流程圖放在程式中,是極好的選擇。

 

[Polling Loop => Event Structure]

如果你的人機介面不是自己一個人要用的,那麼建議使用Event Structure。

一個很重要的原因是使用者體驗。使用者會連續按鍵,並且預期他會有佇列功能。正確使用Event Structure的情況下,也可以把Latch(彈簧開關鎖)的行為處理得很好。

 

如果你的程式為了人機介面而用Polling Loop,被合作夥伴要求不要輪詢按鍵這麼快吃光資源,那麼你更需要使用Event Structure。

 

基本來說,只要一隻程式向下面對高權限的User,向平行層級與其他程式搭配,Event Structure都可以給你在Interface方面很好的幫助。

 

 

[Single Loop => FGV / Multi-loop with Queue]

上面提到的Event Structure,沒有限制在單迴圈或多迴圈。多迴圈的需求在於二件事情以上被要求以高頻度處理,不允許遞延或太明顯的優先權等待。

合併前兩項來舉例子,你可以寫一個單迴圈,State Machine,裡面有Event Structure with Short Timeout。但整個都是單迴圈的。這可能會變成一個自寫自用且不容易增加意料之外功能的程式。

 

承前:

單迴圈Event Structure的一大弱點在於通常得hold住整個迴圈。如果使用了Timeout不用hold住迴圈,難免仍會有掉按鍵的疑慮。因為這個層級的Programmer若使用的State Machine,雖然狀態定義清楚,但如果走進了一個負責儲存的狀態,那麼就不容易同時監控與處理其他行為,等到儲存完繞回來就掉按鍵了(即便有按鍵佇列)。

 
高手們會在這情況增加(Functional Global Variable) FGV這種功能強大的子VI。你可以想像FGV做成的Active Engine,行為就像是被下命令就會照著在一旁做事情的另一台機器。他相當於另開一個迴圈,或說另開一個等待命令的狀態機(狀態機就是一種迴圈),可以讓設計者拋一個命令給這個子VI他就自己做事情,然後自己做完事情又回到等待命令,完成後又自己刪除資源。
 
 
選擇:
不過如果這個設計者連Multi-loop都還不會,是沒有辦法掌控平時程式碼會看不到的FGV Active Engine的。做小型的計時器可以(輔助功能),小計時器FGV可以避過對多迴圈Queue的害怕階段。
 
 

對這個層級的Programmer來說,FGV與多迴圈都是下一個進階的方向。他們都動用了其他的執行緒來處理多樣化的事情。多迴圈,多執行緒下,難管控的就是「共用」。「共用(Sharing)」記憶體變數與時間點。

 

*** a ***

FGV適用於做計時器等小工具,在初學者來說,大多用到的是「共用(Sharing)」時間點,做控制的人在這方面會非常的稱手。(往這條路走下去還是要克服「共用(Sharing)」記憶體變數,也就是傳Reference)

 

*** b ***

多迴圈Queue,我們大多用到的是「共用(Sharing)」記憶體變數,做資料擷取的人,在這方面會較稱手。那條初學者不習慣的線,就是傳Reference,儲存資料的記憶體門牌位置。

雖然Queue可以從前端插入緊急佇列,但如果要真的克服時間點方面資料(data)與事件(Event)的時序問題,就需要未來再進化了。在學會下一步之前,我們可能會經歷到塞一個如-32768之類的(data)給Queue,告訴Queue抽到這個資料就代表結束這個資料區段,或是該做特定的行為。

 

 

這段資訊,後半段只要先有聽過的概念就好,未來碰到有機會學習時,就有了很好的起頭。希望對你能有幫助。

 

引言自 b99601020:

        如題,我的程式是不是要用一個state machine (或之類的)來弄出一個大架構?

   如果太多迴圈是不是會佔很多資源(公司最近找一個來寫程式順邊看了我的程式碼),而且說要有個大架構再

   開始寫程式碼,想請教大家如果要寫個工業的程式該從哪邊開始著手? 謝謝

    讚:1 文章日期:2018/01/05 11:49
 之1(3篇)
 
 
   會員中心 
帳號:
     
密碼:
     
  以後自動登入
 
註冊
   待回覆文章 
1. 請問如何做字數統計
2. 如何在labview內進行相關矩陣運算
3. 請教:labview處理生理訊號讀取與...
4. 用支持向量機作為-非侵入式負載監測系統
5. 问题请教
 
   Top 5 熱門討論 
1. 【公告中獎名單】下載"快速認識 LabVIEW NXG 的三個秘訣"就抽限量好禮
2. 請問如何做字數統計
3. labview
4. 桌機上的NI-MAX 認不到PXI-1033機箱上的PXI-4072DMM
5. 請教:labview處理生理訊號讀取與...
 
 
 
LabVIEW討論區 站長信箱 關於我們 站內聲明
國家儀器股份有限公司贊助;Sponsored by NI.
© 2010 National Instruments, Taiwan. All rights reserved. design by begonia