不用迴圈的計時的方式

目前看到的計時方式

大都是用迴圈的這個方式來做time-B.vi

但是如果上一級的vi(或是主vi)有比較長時間的delay

所計算的時間會變成上一級vi(或是主vi)的delay時間+本身的計時時間

而且常因為自身的vi在迴圈裡跑(計時時間比較久的時後)

使上一級vi(或是主vi)的控制信號無法及時進來控制

所以這個時後才想到這種不用迴圈的計時方式

time-A.vi

各位還是會堅持使用迴圈的計時方式嗎?

還是有高手有其他計時方式可以教分享一下的嗎?

把你的那2個VI分別用不同時間設定RUN約50次

第1個計時正常沒問題

第2個不用迴圈的方式有問題,計時時間不正確

時間沒有不正確

您是同時run二個vi吧!

你一進入迴圈當然是做到時間到了才能跳出呀

此時a當vi的時間當然會受到影響

當您b的vi在跑時其他的控制信號會無法進入

但是a的確可以

您可以在試試

 

追加一下

您可以同時放二個b模式的vi下去(設為B1和B2)

設為定不同的計時間下去跑

之後

改用A模式一樣放二個設不同的時間下去跑

您就會發現有很大的差異性了

 

Chushi39293.4934606481

觉得A模式的理念不对···只执行一次···

A的理念是

進入=>檢查時間是否到了(或超出)=>有:執行;沒有:離開

 

B的理念是

進入=>RUN迴圈直到時間到才準離開

 

假設A和B設定為1秒而當外部的DELAY為2秒時

分別以A和B模式跑了1分鐘後

A模式為執行30次受外部影響本身的1秒變成2秒

B模式為執行20次受外部影響DELAY2秒加上本身的1秒變成3秒

所以如果有外部的DELAY時採用A模式的準確度會比B模式的準

各位可以試試

Chushi 所說的是指「time-A.vi」不需要使用到「time-B.vi」自己程式碼裡頭的迴圈,
而是利用上層 VI 的迴圈來達到重覆檢查時間的動作。

「time-A.vi」的構想滿特別的,不過目前想不起應用的情況,所以無法提供意見,
Chushi 要不要再詳細描述一下你的需求。

目前看起來,你比較想要的是,在每隔一段固定時間就做一次指定的程序,
而不是一個單純的 Delay 而已
(「time-B.vi」相對於 上層 VI 給人感覺就滿像是個單純的 Delay 動作)。

Airbolt39293.7736458333

事實上

這個問題是我在寫某系統時發現的

當一次要對二台(a、b)儀器做控制時

每台儀器各設定一秒讀一次

用B的模式來做結果一分鐘下來

a儀器讀了30次,b儀器也只讀了30次

(如果儀器增加次數會更少)

而改用A的模式來做(時間一樣是一分鐘)

a儀器60次,b儀器也是60次

(儀器增加次數不會變) 

這個比較合乎我們所設定的一秒一次

一分鐘60次吧!

Chushi39294.4144560185

重新整理一下,「time-A.vi」的功能是,
當上層 VI 利用迴圈不斷重覆呼叫 time-A.vi 時,它可以用 指定時間間隔 為週期,
週期性地告知上層 VI 每一次的 指定時間間隔 已經到達。

以你這個概念及使用情況來看,我覺得是滿好的一個設計,
頂多就是就 code 部分做些小整理之類的。

看看其他人可不可以提供你多一些寶貴的意見了。

Airbolt39294.5058217593