在Matlab中串口读/写的问题

时间:2013-10-28 17:04:54

标签: matlab serial-port

我有一个通过串口连接到Matlab的Cyber​​Glove。我正在尝试编写一个请求数据样本的命令,然后再读取样本。

我已使用以下代码成功连接手套:

s = serial('/dev/ttyS0')
set(s,'BaudRate',115200)
fopen(s)

然后我可以写/读取二进制或ascii中的传感器信息。

在二进制文件中我正在做:

fwrite(s,'G')
fread(s)

fread总是超时,然后吐出一个看似随机长度(1-100 +)的列向量,其中包含无意义的整数。

使用ASCII,命令为:

fprintf(s,'g')
fscanf(s)

这会给出一个空字符串作为读出值。我知道手套正在增加并至少在某种程度上处理命令,因为如果我给它一个无效的命令,我会收到错误消息e?

这部分确实令我感到困惑:我偶然发现了一种从手套中获得正确读数的方法。

fread(s)(超时并给出看似随机的输出)

fprintf(s,'g')

fscanf(s)

然后我得到字符串输出'g 1 76 93 113 89 42 20 77 98 106 117 81 62 23 52 60 34 68 57 254 92 26',这是正确的。

我的问题是:

(1)为什么最后一部分会产生正确的答案?

(2)如何从二进制命令中读取数据?这就是我真正想要获得的。

1 个答案:

答案 0 :(得分:1)

找出问题所在: 发生超时是因为它没有获得与预期一样多的字节,并且它期望错误的数字。默认情况下,get(s, 'InputBufferSize')返回512,而实际数据为24字节。在调用fopen(s)之前,我刚刚运行set(s, 'InputBufferSize', 24);并从我期望的二进制读/写中获得了正确的24位8位整数,没有超时。