cluster可以像array一樣可調整輸入個數嗎?

請教各位大大

array的property裡面有number of columns,number of rows可以更改array大小, 不曉得cluster有沒有此功能?

因為我使用DB Tools Insert Data此VI,其data需為cluster

但因我資料為array,且資料庫裡面每個table的欄位個數不同,所以必須依據欄位個數來建立array,且轉為cluster輸入到DB Tools Insert Data此vi

可以使用case 的方式來做,但覺得很麻煩,不曉得cluster 有沒有這樣的屬性,還是需配合其他VI來達成??

 

個人是覺得基本上是沒辦法做到的。
因為 Cluster 裡頭的 element 種類、個數不同,就是一個不一樣型態的資料,
感覺上滿像是 要把 一個 string 控制元 改成 numeric 控制元。

另外「number of columns」,「number of rows」只是將畫面上的 Array 拉大拉小,
純綷是視覺上的改變,Array 本身資料型態並沒有受到影響。

你看看有沒有辦法用別的方式來完成你要的功能。

話雖說如此,之前 jimmy-Chen 有提到一種控制 Block Diagram 的物件之法,
或許有幫助也不一定。

Airbolt38653.5972222222

Dear <span =bold>Airbolt
謝謝您的回覆   ,您說的jimmy-chen那篇文章我有參考過,不過因為它有提到一些注意事項(安全性…等等),使我沒有用它,…     因為我的資料庫資料型態均設定為文字  ,所以使用「number of columns」,「number of rows」祇是要透過人機介面顯示空格出來而已  所以我使用這兩個屬性         …  不曉得除了使用case方法外    還可以使用何種方式呢??

不錯、不錯,你有很好的觀念,會去評估情況來選用合適的設計方式。

我提供個人以前設計一個類似文字編輯器的一些設計概念給你做參考。

比方了,以學校班級來說,我要建立一份資料檔,來儲放相關資料,並且可以方便更改。

同樣一個顯示元件 (可能是用 Table 元件)上,以文字資料來看,一般會是二維呈現方式,就是 XY 軸的方式,
而有一個Row Header、Column Header 可以協助我們將 學生名字、學生資料,比方說住址、電話、
父母名字、、、等,全部歸類好。

可是從上面來看,當我們遇到了很多班級時,想用班級來分類時,把所有學生資料放在同一區塊 (元件)的話,
似乎就不是很好做法了,因為對我們來說,沒有分類(分班級),資料就會顯得零亂。

所以可以再加上第二個顯示元件,來讓資料呈現有如 三維 的方式,這樣一來你的資料就可以很豐富了,
而且有歸劃性。

 

我的案例情況是,我有一個下拉式選單 (Menu Ring)來做 類別,還有一個 Table 來做資料呈現,
而 Table 裡頭只有兩組資料,一個是項目名稱,一個是項目內容 。

因為我的介面所佔畫面面積不大,大約 1024x768 的像素,只有巴掌大而已,
而我的 類別、項目名稱、項目內容,事前也不知道是有多少的資料量及個數,
但是我只需要這些東西,就可以動態載入、顯示出所有我想要去顯示、修改的項目了,

所以看你的需求,大約只需要一個 Table 呈現資料,加上幾個幫助你做 分類 的元件,
再搭配上你怎麼去歸劃資料分類,應該就可以完成你的需求了。

我試了一個程式如下

1.vi

Run了之後會出現錯誤,, 我該如何指定物件呢? 

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

![](upload://7aveBOs4mNCx3CJdU9XDunqbFWi.jpeg)

garyO38656.6334953704

請問各位大大,我改用CASE方式如下

1. 設定CLUSTER SIZE:4

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

2. 設定CLUSTER SIZE:3

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

 

會出現錯誤,原因是CLUSTER SIZE不匹配...

請問各位大大 該怎麼解決呢?   真是頭大....

這隻程式要的就是你目前所傳上來的這隻 vi 的路徑呀。

因為要它要利用本身的路徑,將自己的 VI reference 捉出來,
然後用這個 reference 來使用 Property 或 Method 等,完成所要的功能。

至於 斷線 的部分,是因為 Case Strucure 中不同的 case 所輸出的 cluster 資料型態不同。

Airbolt38656.688125

To Airbolt:

感謝您的回覆

您提到的第一個..  最左邊的路徑就是此程式的路徑.. 不過我後來參考了jimmy-chen大大的程式,將Array to cluster size change.llb裡頭的cluster change.vi,將之前的程式加入cluster change.vi,會出現問題 如圖

![](upload://4gH14Z9aLHT0NSrXWlPsE7mmRF0.jpeg)

好像表示此property只能在edit mode下run,那是否表示不能只利用一個程式來達成此目的,必須像jimmy-chen大大一樣分兩個程式來run呢?

note:我另外新增一vi,其內容均與cluster change.vi一樣,將之前的程式加入此新的vi,其結果會不同 如圖

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

真是令人不解.... 

您提到的第二點:兩個圖中框起來的左邊array,其資料型態在均為string,送入case後,其資料型態應該不變,為什麼會跟資料型態有關西呢?

garyO38656.7225462963

不好意思,看來路徑的部分我說錯了。
路徑應該是:被動態改 cluster size 的 VI 之路徑

這樣看一看,你的程式會變得有點複雜,不過對你來說應該不會是難事。
原因在於要使用動態改變 cluster 的 VI ,本身不能被載入到記憶體裡 (執行) 才行。

假設你需要動態改變 cluster size 的 VI 叫『Dyn Cluster Size.vi』,
那麼所有使用到靜態呼叫 (就是直接貼到 Block Diagram) 到這個 VI 的其它 VI 皆需要用動態呼叫
的方式來使用之。

而在動態呼叫之前,你就必需要先啟動現在所做的 用來動態改 cluster 的這個功能,
那麼動態呼叫出來的 VI 才能擁有你想要的 cluster size。

建議將「動態改變 cluster size」、「動態呼叫」兩個功能整合在一起,成為一個 subVI
(兩個功能完成後,才將 VI 的 Reference 關閉!!!)

 

注意:

1. 不保証一定成功,因為我也沒有試過。
2. 你用的是『 Array to Cluster』來完成這個功能,所以你的 cluster 裡頭的 element
    只能是同一種資料型態。
    為什麼?     因為 Array 是一個同一種資料的集合,裡頭的 element 只能是同一種
    資料型態。
3. 就是你的程式會很複雜,每個呼叫到這個動態改變 cluster size 功能的地方,都必需要用
    動態呼叫的方式。
4. 前面所提到,「動態改變 cluster size」、「動態呼叫」兩個功能整合在一起,成為一個 subVI
   ,這個 subVI 應該是不能設定為 reentrant ,否則你的程式會有問題。

Airbolt38656.7803472222

To Airbolt

謝謝您的回覆....

我想我必須先吸收一下    這應該會花許多時間

....  沒法度 功力不夠....

不好意思,用的說法有些深入,不懂的地方,再隨時發問吧。

不好意思,題外話,想知道Airbolt兄是如何學習LabVIEW的,因為你每次回答問題時都是有條有理的,可否分享一下你的學習經驗,謝謝!

[QUOTE=ancle]不好意思,題外話,想知道Airbolt兄是如何學習LabVIEW的,因為你每次回答問題時都是有條有理的,可否分享一下你的學習經驗,謝謝![/QUOTE]

這個 .... 真是尷尬。   大家就參考、參考,看看就好。

個人學習 LabVIEW 的話,最一開始就是翻閱 基礎入門 的書籍 ,把所有的習題親自做一遍,
先把一些基本功打好底子 (至少知道有哪些工具是可以協助完成工作上的需求)
(也就是 Functions 面版上,最上方的 九大功能 要摸過一些)

而自己也常請教身邊的一些同事、前輩等等,
後來有參加 LabVIEW BasicⅡ、LabVIEW Advanced 等兩個課程。
(這個參考就好,其實 LabVIEW 本身提供的資源就很多了)

 

不過比較重要的是,當我遇到一個問題時,我會去想:

1. 面對一個新的需求時,首先分析需求,並將之拆解成一個個小需求,再逐步完成小需求。
    (這樣可以將問題簡單化,也能將程式模組化,而且容易 debug)

2. 小需求可以用什麼方式去完成?   目前手邊有些工具可以協助我們?
    如果內建功能無法滿足時,就動手架構這些功能出來。

3. 面對內建功能不了解時,馬上查閱 help 檔
   (小弟覺得 LabVIEW 的 help 寫得滿容易懂的,至少比 MSDN 還容易了解)
   查完後,試著試驗這些內建功能的運作情況。

   比方說,我對『Functions -> String -> Match Pattern.vi』不太明暸,也常忘記用法,
   我建立一個小 VI,將所有接腳接出來,試著給予不同的值,看有何不同。
   而當我日後工作上有需要時,這隻小 VI 也變成我的小小實驗室,馬上測試我要的功能。

4. 參考 「Search the LabVIEW Bookshelf」(PDF 檔),裡頭有滿多重要觀念,
   比方說效率建議等等。

5. 這一點,個人覺得最最重要的,也影響我最大的。
   "把自己寫的所有程式當做是公用程式,大家都會用到的,也會去 maintain 的"

   這樣一來,就會去寫註解、會去考慮設計方式是否能夠讓別人容易明暸、程式效率、、、等,
   我是都保持著一種心情去完成自己的程式 --- 我要讓我的程式能夠隨時隨地在最短時間內就能夠完成交接!
   如果我都看不太懂自己的程式、不滿易自己的程式,那我怎能叫他人來接手我的程式呢?

   也因為這樣子的自我要求,所以讓自己學習、成長了不少。

6. 另外,你提到的回覆問題方面,也是因為 第5點 的自我要求,
    所培養出來的一種對問題的感覺,這樣子的說明是不是夠詳盡?  有什麼樣的設計是有風險性的?
    有什麼地方是大家所常會忽略的但又很重要的?

 

「去感受撰寫程式的樂趣,以之培養對程式的興趣,並做為學習的動力。」
以上僅供參考。  

Airbolt38658.3870601852

感謝分享,受益良多!