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/38
99件の閲覧回数

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

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

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

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

 

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

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/38
80件の閲覧回数

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

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

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

 

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

表示確認3.png

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

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

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

 

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

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

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

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

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

 

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

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

リトレースのデータ:

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

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

 

 

トレース保存:

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

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

 

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

 

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

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

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

くらいでしょうか。

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

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

 

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

保存データを見比べたら、反転していました。ありがとうございます。

私の認識が正しいか確認させていただきたいので、一連の流れを図示しました。

(添付:一連の流れ.pdf  トレース・リトレースの動きを色で分けています。)

保存したデータは「ファイルを確認」を押して「保存」表示器で確認すると、1行に256データが表示されています。1行目でトレース分の256データが表示され、2行目でリトレース分の256データが表示されています。トレース・リトレース関係なく左からデータを入れているという認識でよろしいでしょうか。

また、そこから、トレース・リトレースに分けるときに、トレースは左、リトレースは右からデータを埋めているという認識でよろしいでしょうか(リトレースのセルのインデックスが(0,0)のところは、取得したデータの256データ目(トレースも合わせれば512データ目)になる?)。

 

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

トレース保存のコードをファイル確認ケースの中に入れたところ、表示と同時に保存できました。ありがとうございます。この描写した画像は、トレースであれば(0,0)ピクセル目から、リトレースであれば(255,0)ピクセル目からデータは配置されているのでしょうか。

 

また先日、256×512のデータを取得して256×256のトレース・リトレースの画像をそれぞれ作るとお話ししたと思います。

今までは、x軸方向に、(0,0)(1.0)(2,0)...(254,0)(255,0)(255,1)(254,1)...(0,1)...のような走査をしていますがx軸方向に、(0,0)(1.0)(2,0)...(254,0)(255,0)(254,0)(253,0)...(0,0)(0,1)(1,1)のような1往復してからy軸を+1する走査に変えようと考えています。トレースの最後のデータとリトレースの最初のデータ(255,0地点)は同じものを使いたいです。

現在のプログラム(添付:資料2,fpga_test5.vi)を改良するとなると、どこを変えればよいかアドバイスいただけたら幸いです。Connector0/AO0はx軸、Connector0/AO1はy軸の走査のために信号を送っています。Connector0/AI0からトンネル電流データが流れてきて、x,yのデータと合わさってFIFOに書き込んでいます。

 

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

すべてをダウンロード
0 件の賞賛
メッセージ37/38
33件の閲覧回数

>> 私の認識が正しいか確認させていただきたいので、一連の流れを図示しました。

図は中段までは合っていますが、画像化の絵が違います。ここは「トレース」「リトレース」を左(反時計)回りに90度傾けたイメージになります。

矢印から察するに、測定は左下が(0,0)で右上が(255,512)ですね。強度グラフでピクセル位置を合わせるには「トレース」「リトレース」データを「2D配列転置」に通してから強度グラフに渡してください。


1つ目と2つ目の質問中のデータの埋まり方に関する認識は合っています。

以前添付した「バイナリファイルの説明.vi」の「データ1」と「データ3」表示器の値を見比べてください。測定順に並んだ「データ1」を2次元に並べ直すと「データ3」になります。


>> 1往復してからy軸を+1する走査に変えようと考えています。
できますが、最初の走査で(0,0)を2回通ります。hostのほうで(0,0)を先頭と判定しているので誤動作します。また測定データは行・列の規則が崩れるので、振り分けの際にXY値を使わないといけません。

0 件の賞賛
メッセージ38/38
10件の閲覧回数