我正在使用以下matlab程序通过USB串行端口通过PC发送多个串行端口数据
close all; clear all; clc;
array_1st = ones(64, 1, 'uint8');
array_1st = array_1st';
for i=1:64
array_1st(i) = array_1st(i) * i ;
end
dummy_var = zeros(1,1);
if ~isempty(instrfind)
fclose(instrfind);
delete(instrfind);
end
s=serial('COM9');
set(s,'Terminator','CR','DataBits',8,'Parity','none','StopBits',1,'baudrate', 38400);
fopen(s);
disp('fopen(s)');
fwrite(s, array_1st);
pause(0.5);
dummy_var = fread(s, 1);
dummy_var
fclose(s);
clear s
自定义硬件已连接到串行端口。我已经能够使用类似的matlab程序读取PC中自定义硬件发送的多个字节的数据(也就是说,从硬件-> PC通过使用matlab的串行端口进行的多字节传输正在工作)
我期望上面的代码在执行fwrite(s, array_1st);
函数时写入一个8位无符号整数数组。此时,自定义硬件在IDE的终端中显示在串行端口中接收到的字节,并在matlab程序中的dummy_var = fread(s, 1);
被称为
问题是matlab始终仅将array_1st
数组的第一个字节发送到串行端口硬件。我已经尝试了上述程序的各种变体,例如删除array_1st = array_1st';
行,使用char
代替uint8
,为LF
属性使用usinf terminator
在串行端口对象中,但问题始终相同:实际上,只有要发送的阵列的第一个bte通过串行端口硬件到达自定义设备。
调用fwrite(s, array_1st);
后,matlab还会显示以下警告:
警告:指定数量的数据未在 超时时间。
fopen()
之后的串行对象的属性:
Serial Port Object : Serial-COM9
Communication Settings
Port: COM9
BaudRate: 38400
Terminator: 'CR'
Communication State
Status: open
RecordStatus: off
Read/Write State
TransferStatus: idle
BytesAvailable: 0
ValuesReceived: 0
ValuesSent: 0
执行dummy_var = fread(s, 1);
行之后的属性是:
Serial Port Object : Serial-COM9
Communication Settings
Port: COM9
BaudRate: 38400
Terminator: 'CR'
Communication State
Status: open
RecordStatus: off
Read/Write State
TransferStatus: idle
BytesAvailable: 0
ValuesReceived: 0
ValuesSent: 64
ValuesSent
属性已从0更新为64,我想这表明,至少就matlab串行端口对象而言,正在发送64数据,但由于某些原因,第一个实际上是通过串行端口硬件
这可能是什么原因?是不是matlab不支持我想做的事情?如果仅1个数据通过串行端口硬件发送,为什么ValuesSent
显示64?
Matlab版本为R2009b
编辑1:-----
我使用串行/记录功能记录了串行对象数据,这是它记录的内容:
Legend:
* - An event occurred.
> - A write operation occurred.
< - A read operation occurred.
1 Recording on 29-Jul-2018 at 23:27:19.241. Binary data in little endian format.
2 > 64 uchar values.
01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10
11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20
21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30
31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 40
3 < 0 uchar values.
4 Recording off.