NI製品ディスカッション

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

バイナリデータ保存の際のエラー

お返事ありがとうございます。

「バイナリファイルの説明.vi」で勉強させていただきます。

 

>>Z値だけの256×512配列から1行ずつ取り出して処理するのはForループが良いでしょう。

ひとまず保存ポイント数を65536(256×256)にして実行してみました。

また、Forループでトレース・リトレースに分ける前に、ファイルの中身を確認するために、「保存」の表示器を置きました。

私としては、「保存」表示器には、65536のデータ数、「トレース」「リトレース」表示器にそれぞれ32768データ数表示されると考えていました。

実際確認した結果、「保存」表示器には、59976のデータ数、「トレース」「リトレース」表示器にそれぞれ27720データ数表示されました。

指定したデータ数より少なくなってしまった原因はわかりますでしょうか。

 

保存データ数1.png保存データ数2.png

 

また、Z値が一列に65536データ表示されると考えていたのですが、238×252=59976のように表示されていました。そのように指定している箇所は見当たらなかったので、原因がわかっておりません。Z値を一列に、または256×256で表示するにはどうすればよいでしょうか。

保存バイト数に関しても、131096と表示されていますが、今回の場合は238×252×2バイト=116928になるのではないでしょうか。

 

よろしくお願いいたします。

0 件の賞賛
メッセージ31/36
61件の閲覧回数

結果は正しいです。配列表示器の見方を勘違いしています。

配列制御器の指標表示は左上セルのインデックスを示します。従って「保存」表示器では左上の1が(238,252)です。セルは18行4列表示されているので、全体では256行×256列のデータが表示されています(右下のセルのインデックスは(255,255))。
同じく、「トレース」と「リトレース」表示器はともに128行×256列のデータを表示しています。

0 件の賞賛
メッセージ32/36
48件の閲覧回数

お返事ありがとうございます。

 

配列表示器の見方を勘違いしておりました。

65536(256×256)のデータを取得した際の表示器を添付します。

表示確認.png

右下セルのデータのインデックスを確認したところ、(255,255)になっていました。

また、トレース・リトレースも(127,255)であることを確認しました。

 

次に131072(256×256×2)のデータ数を保存してみました(トレース・リトレースで256×256の画像をそれぞれ作るため)。以下がその添付画像です。

表示確認2.png

こちらも右下のインデックスが(511,255)であることを確認し、トレース・リトレースも(255,255)であることを確認しました。

 

トレース・リトレースの保存したファイルのデータを用いて、画像を描画するにはどうすればよいのでしょうか。(データ取得した時系列順でピクセルに(x,y)=(0,0),(1,0),(2,0)...(254,0),(255,0),(0,1),(1,1),(2,1)...(254,1),(255,1),(0,2),(1,2)...(254,2),(255,2)のように配置したい)

 

よろしくお願いいたします。

0 件の賞賛
メッセージ33/36
42件の閲覧回数

トレースとリトレースのデータをそのまま強度グラフに渡してみてください。元のVIにある「原子像」は強度グラフです。

0 件の賞賛
メッセージ34/36
34件の閲覧回数

お世話になっております。

 

グラフ化できました。ありがとうございます。

表示確認3.png

トレース・リトレースの振り分けのところで質問させてください。

上記の添付画像の「保存」の偶数行目がトレース、奇数行目がリトレースに振り分けられると認識しています。トレースの方はしっかり振り分けられていますが、リトレースは奇数行が振り分けられていないように見えます。

原因は何なのでしょうか。

 

また、トレース・リトレースのグラフをバイナリデータに保存しようと考えています。

バイナリデータ保存.pngリトレースフォルダ.png

上記のようにプログラムを組んだのですが、トレース・リトレースともに8バイトのファイルが複数できてしましました。私の考えでは、256×256×2バイト=131072のファイルがトレース・リトレースのファイルそれぞれで、1つずつ保存されるはずでした。

トレース・リトレースグラフ化のケースストラクチャからデータが出る際のトンネルの設定に問題があると考えていますが、具体的な対処方法がわかりません。

改善方法を教えていただけたら幸いです。

 

よろしくお願いいたします。

0 件の賞賛
メッセージ35/36
24件の閲覧回数

リトレースのデータ:

振り分けのときリトレース側のインデックスを反転しているせいです。

振り分けをしているForループ中の「1D配列反転」を削除すると直りますが、リトレースはXスキャン方向が逆なので画像が左右反転しませんか?

 

 

トレース保存:

LabVIEWのデータフロープログラミングが理解できていないことによる勘違いです。

データを読み込むケースストラクチャは「ファイル確認」ボタンがOFFのときにFALSEケースを実行しています。そのときトレースデータを出力するトンネルからは空の配列が出ているので、「トレース保存」時には空の配列を保存することになります。

 

「バイナリファイルに書き込む」関数の「配列または文字列サイズを先頭に追加? (T)」入力は、何も接続しないとTRUEなので、2次元配列の行と列のサイズを32ビット整数で書き込みます。32ビット×2個で8バイトです。(ちなみにサブVIの入力端子のラベルには、デフォルト値をカッコで囲って付けておくのがマナーです。)

 

解決方法としては(このプログラム構造の場合)

・ トレース保存の際「トレース」と「リトレース」表示器のローカル変数から読んで保存する。

・ トレース保存のコードをファイル確認ケースの中に入れてしまう。

くらいでしょうか。

0 件の賞賛
メッセージ36/36
19件の閲覧回数