1

matlab でリアルタイムのシリアル値をプロットしようとしていますが、どのデモでも成功しませんでした。私の組み込みシステムは、シリアル端末によってチェックされるデータをすでに送信しています。それらをmatlabで取得しようとすると、次のようなエラーが発生します:

Warning: Matching failure in format. 
???  In an assignment  A(I) = B, the number of
elements in B and
 I must be the same.

Error in ==> real_time_data_plot at 81 voltage(count) = fscanf(serialObject,'%f');  %#ok<SAGROW>

matlab のシリアルとして、私はこのファイルを使用しています: http://www.mathworks.com/matlabcentral/fileexchange/25519-collect-and-plot-data-from-an-instrument-in-real-time 組み込み側で、エラーケースの確率を減らすために100の固定値を送信しているだけです

sprintf(str,"%d\n",100);
USART_puts(USART2,str); 

コードはいくつかのサンプルをプロットできますが、少し後に上記のエラー通知でクラッシュします。何か提案はありますか?ありがとう

4

1 に答える 1

1

エラーメッセージ:

代入 A(I) = B では、B と I の要素数は同じでなければなりません。

fscanf(serialObject,'%f')ベクトルがcountと同じ長さではないことを意味します。そのようなインスタンスの 1 つでfscanf(serialObject,'%f')の出力を調べることができれば、これが事実であることがわかります。count が整数であると仮定すると、serialObject に複数の要素が含まれている可能性が最も高くなります。

これを回避する簡単な方法は次のとおりです。

temp = fscanf(serialObject,'%f');voltage(count) = temp(1);

目的の値が終了値である場合は、temp(end) を使用できます。

私は「USART_puts()」に精通していませんが、バックログが形成されているので、serialObject に複数の更新を時々送信していると思います。size(temp) が 0 x 0 になる空のベクターを送信している可能性もあり、エラー メッセージが表示されます。

于 2013-05-24T01:32:30.977 に答える