如何計算while迴圈裡面的三個sequences的執行時間

如何計算while迴圈裡面的三個sequences的執行時間
這是我的程式但是不知為何執行ㄧ次所需的時間與平均時間永遠一樣

可能是因為在while迴圈裡面計算所以執行ㄧ次的時間跟平均時間永遠一樣

但是即使我把這部份拉到while外面還是ㄧ樣

請問各位先進我該怎麼改呢

請問你有用highlight的方式去看嗎??

看起來Build array的input只是一個數值

所以build出的應該是一個1x1的array, 當然執行一次的時間和平均時間會一樣

這兩者應該和總時間也一樣吧?? 就這幾張圖我是這樣猜想

你用highlight mode確定一下吧......

你的code看不出來有任何加總的地方

yao38503.0380787037

『Build Array.vi』在你的程式裡頭不能這麼用的,
這樣會求不到你要的東西。

你的程式碼的規劃是有 3 個 依序執行 的程式碼,
(採用了 Sequence Structure)

「執行一次的時間」:

在 3 段 程式碼裡頭要各用一個 indicator 來顯示。

或者 第 1 段 程式碼,用一個 indicator ,
另外 2 個用 該 indicator 的 local variable,
讓同一個 indicator 依序顯示出 3 段 執行時間。

 

「總時間」、「平均時間」:

你要集合 3 段 程式碼 的 "個別" 的「執行一次的時間」來求解,
所以從 Sequence Structure 會有 3 條 data flow 拉出外面,
此時再來算出你要的 「總時間」、「平均時間」。

Airbolt38503.3704282407

先前的問題已解決了  謝謝!!

另外相同的問題在這個地方

目的是想求完成這個sequence的時間

但是程式執行ㄧ次的時間

為什麼跟執行很多次所求得的平均時間會相差這麼多ㄋ

![](upload://jjKy97aCYSCB2jL8TSJ6BpkAgNG.jpeg)

![](upload://oDRTjUn63SLEIFMcidvVkIwBBDo.jpeg)

p2002yu1024b38505.7783796296

因為你用的好像是 Vision 或 Motion
這個是我所沒有接觸過的,
所以只能憑 NI 的驅動程式一般的程式設計慣例來試著解答看看。

一般而言,
一開始會有個 VI 是負責打開該通訊管道,
然後會有相關的動作 VI ,
最後當你使用完這個通訊管道時,
會有另一個 VI 可以讓你來關閉通訊管道。

比方說,我要用 VISA 來對儀器下指令,
所以我會用 『VISA Write.vi』來達到我的要求,
但是正確的做法是,要在這個 VI 的前後,
各加上『VISA Open.vi』、『VISA Close.vi』
來打開 VISA 這個通訊管道。

 

同理可証,你的程式裡頭用到了一個好像是 init 的 VI ,
我相信這個 VI 會幫你把 通訊管道打開。

但是問題來了!!!
程式裡頭有個迴圈,
不斷打開通訊管道,
但是從來沒有關閉過,
因此有可能出現一種很慘的情況,
當你的迴圈跑了 1000 次,
那麼就有 1000 個 這樣子的通訊管道被打開,
而系統資源也相對的被消耗掉許多。

我想,你所提到的時間不一致,
可能就是出了這個問題。

正如你所說的我的影像處理程式的前後

的確有initialized與close的部份

在這裡我想要計算打開這個通訊管道的平均時間

但是因為我加了while迴圈當他打開了通訊管道後並沒有做close動作

反而利用不斷的重複這個迴圈來計算他的平均時間的方法應該是錯的

所以~~另ㄧ個圖所算出來的initial time才是比較接近正確的時間對不對??

嗯,應該會是沒有放迴圈的那一個圖會是最正確的,
其實你可以試著將有放迴圈的這一個程式改成以下的樣子:

1. Sequence Structure 的第一個 Frame 放 init 及你所要計算費時的程式碼
    及 『Tick Count (ms).vi』記錄起始時間
2. Sequence Structure 的第二個 Frame 放『Tick Count (ms).vi』 記錄結束時間
3. Sequence Structure 的第三個 Frame 放 Close 的動作

這樣子一來,你的程式可以不斷觀測到 "打開這個通訊管道" 的時間,
又可以正確關閉這個通訊管道。

目前還只是推論而已,試試看,也或許有其它的因素也不一定。