關於程式的問題

請問各位先進,我想用LABVIEW做出以下程式的功能,而我是用迴圈裡面的Formula Node這個icon,可是我不知道在LABVIW裡面如何寫IF A=1~3之間 就C=100,否則A=4~7之間就 c=1000,否則A=8~10之間就 c=10000,是否請各位先進能指導小弟或是有其icon能做到以上的功能。

if(1>=A<=3)
then c=100;
elseif(4>=A<=7)
then c=1000;
elseif(8>=A<=10)
then c=10000;

你的邏輯判斷寫錯了!!

如果單純用formula node的話很簡單,裡面就是寫c code, 但是不可用 "elseif"

2004-10-27_110207_simple_formulanode_7.0.vi

yao38287.459837963

非常謝謝你的指教,我有去執行一遍,真的沒問題。

小弟能再請問高手一個問題,就是如果我今天所要判斷的條件如有上百個,是不是也用formula node來寫比較好或是有其它方式比較好,我所謂的比較好是在說LABVIEW執行上的時間考量,能給小弟建議一下。

非常謝謝你

我做了一個測驗來回應你的問題
simple_formulanode.vi(使用formula node)
simple_formulanode2.vi(使用LabVIEW元件)
2004-10-29_143235_simple_formulanode_7.0.zip

我重新用LabVIEW的元件寫了一個同樣功能的判斷式,其他人機界面或者迴圈數都和使用formula node一樣, 我們來看一下兩個程式執行的結果(利用Profile VIs...)

兩個程式我同樣從1按到10, 可以看見使用LabVIEW元件的程式Total time較短,也就是效能應該比較好

然後我又將兩個程式的判斷式都封成subVI, 使用For Loop跑1萬次,看看結果是不是同樣

但是從這個測試中發現,使用LabVIEW元件的程式反而Total time較長了,因為subVI也花了一些時間, 但是居然用formula node的subVI幾乎沒有浪費任何時間

如果call subVI或者其他的環境條件都相同的話(看起來應該都相同), 在重覆跑多次的情況下, 使用formula node似乎就比較好
我不清楚為什麼會有這樣的結果, 也不敢斷言如果判斷式上百萬個的情況用哪一種比較好, 或許你可以再做更多的測試來試看看

本來以為兩個測試結果一致的話,可能可以有一個暫定的結論,但是很不巧,從這兩個測試中無法得到一個好的結論
如果其他人有好的測試方法, 或者有什麼見解, 麻煩提供一下意見來討論

yao38289.6060185185

前些時候,在寫「求中位數」的參賽作品時,
有試過 "全用 LabVIEW 內建元件" 完成及
 "絕大多數程式碼用一個 formula node" 完成。

結果發現了兩者的 CPU 利用率都拉到約 100%,
但是用 formula node 的程式反而所要花的時間較久,
原本以為直接寫 C code 可能會比較快的。

真是個奇怪的現象。

以 YAO 大所件測試來看FormulaNode 應該只是不列入 VI Time 的計算(大概他不算是VI吧)否則CPU 速度再怎麼快也不可能是 0 吧.

[QUOTE=Airbolt]

前些時候,在寫「求中位數」的參賽作品時,
有試過 "全用 LabVIEW 內建元件" 完成及
 "絕大多數程式碼用一個 formula node" 完成。

結果發現了兩者的 CPU 利用率都拉到約 100%,
但是用 formula node 的程式反而所要花的時間較久,
原本以為直接寫 C code 可能會比較快的。

真是個奇怪的現象。

[/QUOTE]

可能是LabVIEW還要另外再去花時間用C的compiler來compile,在這個過程中花了時間
這個問題可能就要請懂LabVIEW架構的人來說明才能得知了

yao38293.8560069444

非常謝謝各位先進的經驗分享,小弟會試試看各位的建議。

再請問各位先進一個問題,如果我今天要用formula node來做,而我的判斷條件中有副號,要如何用何種符號,底下是我原本沒有副號程式碼。

有副號條件  IF A=-1~-3之間 就C=100,否則A=-4~-7之間就 c=1000,否則A=-8~-10之間就 c=10000,

int c;

if(3<=A)
c=100;
if(4<=A &&A<=7)
c=1000;
if(8<=A &&A<=10)
c=10000;

有負號就加個"-"就可以了啊![](upload://qPCmzfq2KigUaPncn6Um67RUCob.gif)

int c;
if (A >= -3 )
  c=100;
if (-4 >= A && A>= -7)
  c=1000;
if (-8 >=A && A>= -10 )
  c=10000;

請問yao是不是改成這樣,是不是(負號)我有用錯,不然都呈現錯誤,能在指導小弟一下

int c;
if (A >= "-"3 )
  c=100;
if ("-"4 >= A && A>= "-"7)
  c=1000;
if ("-"8 >=A && A>= "-"10 )
  c=10000;

 sorry, 我畫蛇添足了

其實就是我上一篇的那樣就對了
你把那段copy進formula node就可以用了

真的非常謝謝你,我有跑一遍真的可以。感謝yao以及各位前輩們的指導

請問各位先進,小弟有一個問題想請問各位前輩們,我有做一個範例在底下,我的問題就是我是用LV的formula node所做的程式,如果w=1就x=0.57411, y=0.6496;可是他輸出都會自動四捨五入,會變為x=1,y=1,或如果w=2就x=0.17409,y=0.00496; 而輸出會變為x=0,y=0,而這樣就不是我所要的值,我所要的值要跟我ㄧ開始所定義的值一樣,假設有小數點到第五位,就要在輸出也要顯示小數第五位,而不是自動四捨五入。不知各位前輩們是否給能小弟指導。

謝謝

2004-12-22_172055_式子判斷.vi

x,y不要指定為int的型態,把int x,x;去掉,然後把x及y的Indicator資料型態指定為DBL就可以了.

![](upload://lY9o7YGwUcox6WS84frK6IlqE90.png)

因為你所指定的I32(Long signed integer)資料型態是從-2147483648到2147483647,不包含小數位數.

所以,才會出現你說的情形,而並不是四捨五入的結果.

jimmy-Chen38343.7432523148

謝謝你,原來是這樣,因為我也有把輸出改成DBL形式,只是不曉的formula node裡面的int給刪除,因為好像如果用int的話,好像一定輸出是整數,謝謝你的提醒。謝謝

我想請問"Boolean Array To Number"這個vi,
它是用true或false的各數來計算輸出的數值嗎???
我上網查他說要自己設定真值表,請問是要在哪裡設定???
麻煩各位大大解惑一下...感激不盡!!!