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不同。如果您可以在一个这样的实例中检查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 回答