NI製品ディスカッション

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

2次元配列のxlsxファイルへ書き込みについて

sin波を32チャンネルの中の1〜5チャンネルの電極で測定し、その結果を表す二次元配列があります。しかし、どの指標番号にチャンネルが対応するのか、どのチャンネルの要素がどこに含まれているのかが分かりません。

 そのため、xlsxファイルに結果を書き込みましたが、指標番号00以降はエクセルのB2から順に追っていけば良いでしょうか。実際に書き込んだファイルのスクリーンショットを以下に添付します。お手数ですが、スクリーンショットを参考にして、どの要素がどの指標番号に対応しているか教えていただけますか?

キャプチャ (1).PNG

 

0 件の賞賛
メッセージ1/16
3,276件の閲覧回数

その2次元配列はどのようなプログラムで作ったものですか?

 

ファイルの内容は書き込みを行うプログラムの作り方でどうにでもできます。ただあまり奇抜な書き方はしないはずなので、1行目にタイトル、2行目以降にデータ値が並んでいて、列方向にチャンネルが並んでいると考えるのが素直です。

A列が時間、B列がチャンネル1、C列がチャンネル2、D列がチャンネル3と続きます。

 

従って、チャンネル1の指標番号0はB2セル、指標番号1がB3セル、指標番号2がB4セル、と続きます。
同じく、チャンネル2の指標番号0はC2セル、指標番号1がC3セル、指標番号2がC4セル、と続きます。

メッセージ2/16
3,263件の閲覧回数

脳波を32個の電極で読み取りそれを表示しているActiviewという既存であるものに機能を付け足すために試行錯誤している途中なので具体的なプログラムはわからないのが現状です。すみません。

 

 

二次元配列の場合指標番号が2つあると思うのですがチャンネル1の指標番号が0の0はB2、指標番号が0の1がB3と続き、チャンネル2はチャンネル2の指標番号が1の0はC2、指標番号が1の1がC3と続くのでしょうか?

0 件の賞賛
メッセージ3/16
3,242件の閲覧回数

いいえ、指標番号0の0はA1でTimeという文字です。

チャンネル1の先頭はB2なので指標番号は1の1、チャンネル1の2個目は指標番号1の2です。

0の0をチャンネル1の先頭にしたければ、0行と0列を削除してから始めればOKです。

 

LabVIEWの指標番号は「YのX」です。言葉での説明は難しいので添付VIを見てください。

1次元配列は横方向に伸びるとイメージしてください。指標は列(X方向)の指定と考えてください。

2次元配列は1次元配列が縦に並んでいるとイメージしてください。指標は1番目が行(Y方向)、2番目が列(X方向)です。

2023-08-30 (2).png2023-08-30 (3).png


ちなみに3次元配列は2次元配列が数ページあるとイメージしてください。Excelで例えるとSheetタブが増えたのと同じです。LabVIEWの指標は1番目がページ(Z方向)、2番目が行(Y方向)、3番目が列(X方向)です。

 

配列の操作はLabVIEWのキモなので、いろいろ試して覚えてください。

 

メッセージ4/16
3,227件の閲覧回数

わかりやすい説明ありがとうございます。

私のプログラムでは二次元配列をxlsxファイルに書き込む際ダイナミックデータタイプに自動的に変換されて書き込まれているのですが、こちらの場合でも同じことが言えるでしょうか?

追加して質問なのですが、エクセルに書き込まれているTimeを計測開始時間を0sとして1s間隔でTimeを書き込んで欲しいのですがいい方法はないでしょうか?

キャプチャ (2).PNG

0 件の賞賛
メッセージ5/16
3,208件の閲覧回数

ああ、「計測ファイルに書き込む」Express VI(背景が水色の関数)を使っているのですね。
そのVIは、数値の2次元配列のように時刻情報が含まれないデータを与えると、デフォルトで現在時刻から始まる1秒間隔の時間を書き込みます。

 

VIの構成ダイアログで「ファイル詳細」の「上級」ボタンで出るダイアログで「絶対」チェックを外し「形式」に「hh:mm:ss」と入れてみてください。

 

また、この関数は2次元配列の行と列を勝手に入れ替えてしまうので、あらかじめ「2D配列転置」で転置してから与えると良いです。たぶんこのことでチャンネルと時間が入れ替わってしまい混乱されたのだと思います。

2023-08-30 (5).pngスクリーンショット 2023-08-30 221430.png

メッセージ6/16
3,202件の閲覧回数

一つ正確でない説明がありました。

2次元配列の行と列を勝手に入れ替えた犯人は、自動的に入る「ダイナミックデータへ変換」Express VIです。これの構成ダイアログで「2Dスカラ配列ー列がチャンネル」を選べば、先の「2D配列転置」は不要です。

メッセージ7/16
3,200件の閲覧回数

説明通りに変更したところ時間経過が正しく書き込まれたのですが、行と列を勝手に入れ替えないようにデータを取ると脳波から得た数値が変に書き込まれていてこれが本来のデータなのでしょうか?

 

32チャンネル中5チャンネルしかsin波を読み取っていないので1チャンネルにつき1行か1列のどちらかの書き込まれ方ででファイルに保存されているのかと考えるのですが、

キャプチャ2 (1).PNG

0 件の賞賛
メッセージ8/16
3,173件の閲覧回数

そうであれば、元の2次元配列が最大チャンネル数分のサイズを確保してすべてを-1で埋めておき、選択されたチャンネルだけ測定したデータと入れ替えたのだと思われます。

 

そのとき行方向にチャンネルを並べるようにしたのでしょう。NI-DAQmxで複数チャンネルのアナログデータを2D配列で読み取るとそうなっていますし、波形チャートに与える(チャートの「配列転置」プロパティは無しにすること)とチャンネル数分のトレースを描いてくれます。

 

一つのファイルに2D配列を追加していく場合など、時間は行方向に伸ばしていかないと面倒くさいので、転置して列をチャンネルにします。添付VIはExpress VIのファイルパスを修正してから実行してください。

メッセージ9/16
3,166件の閲覧回数

添付して説明していただきありがとうございます。
 添付されたviをもとに書き直してみたのですが、書き込みを行う前だとデフォルトの-1の値を取り、波形チャートや書き込みが正しく行われず、書き込みを開始するときれいに波形が出て書き込みもうまくいくのですが添付されたviを間違った使い方をしているのでしょうか。

 正しくプロットできている画像とそうでない画像、そしてプログラムのブロックダイアグラムの画像を添付させていただきますのでご教授していただけると幸いです。

 

波形正.PNG

波形乱れ.PNG

ブロックダイアグラム.PNG

0 件の賞賛
メッセージ10/16
3,141件の閲覧回数