手机版

MATLAB串口通讯

发布时间:2021-06-07   来源:未知    
字号:

三、Matlab串行通信

在Matlab环境下,读取串口数据的方式可以分为两种:查询法和事件驱动法。以查询的方式进行串行通信时,如下位有大量的数据分时分批传送给PC机,上位机就需要不停查询串行口的缓冲区,有数据就读取;虽然编程容易,但这样无法实现对数据进行实时处理和图形显示,系统实时性不高,而且会极大地占用系统的资源和出现丢帧现象。以事件驱动的方式对串口进行控制实现串行通信,就可以实时处理下位机传送的数据;但编程相对复杂一些,需要采用Matlab的事件和回调函数机制。

1.查询法

MATLAB使用查询法对进行串行通讯的程序如下:

g =serial('com1'); %创建串口对象

g.baudrate=115200; %设置波特率,缺省9600bit/s

g.parity='none'; %设置校验位无奇偶校验

g.stopbits=1; %设置停止位

g.inputbuffersize=256; %设置输入缓冲区为256b,缺省值为512b

g.Terminator='LF'; %设置输入缓冲区为256b,缺省值

recbuf=zeros(1,40); %清接收缓冲区(40)

framelen=23; %帧长度(每帧23byte)

framenum=0; %清接收帧数

rectr=0; %接收计数器清零

xctr=0; %输入接收的数据帧数

recnum= input('请输入要接收的数据帧数:\n');

%打开串口设备

fopen(g); %打开串口设备对象g

fwrite(g,255) ; %以二进制的方式发送握手信号0xFF

%进入接收循环

while framenum<recnum

recdta=fread(g,1,'uint8'); %以二进制的方式读入数据

if recdta==255 %找帧头

rectr=rectr+1; %接收计数器加1

recbuf(rectr)=recdta; %送入接收缓冲区

elseif recdta==framelen&rcbuf(1)==255 %验证接收长度和帧头

framelen=recdta; %取帧长度

rectr=rectr+1; %接收计数器加1

recbuf(rectr)=recdta; %送入接收缓冲区

elseif rectr>1&rectr<framelen %接收数据

rectr=rectr+1; %接收计数器加1

recbuf(rectr)=recdta; %送入接收缓冲区

if rectr==framelen %如果接收完进行处理

rectr=0; %清接收计数器

framenum=framenum+1; %帧数累加

%根据具体通讯协议提取数据



%接收滤波后的数据

….

plot(…) %输出显示

end

else rectr=0; %未找到帧头清计数器

end %接收结束

end %主循环结束

%程序结束关闭串口类

fclose(g); %关闭串口


delete(g); %删除串口对象

clear g ; %清除变量

注意:串口的读写操作有文本方式和二进制方式两种。在文本方式

MATLAB串口通讯.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
×
二维码
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)