MATLAB串口通讯实验(三)

前言:

前面两章内容介绍了如何利用MATLAB接收串口数据或者是向串口发送数据,这一章将介绍MATLAB串口通讯的高阶用法-回调函数处理,采用回调函数进行处理的结果就是可以实现数据的实时接收更新,而不是和第一章一样只能接收固定字节的数据。

软件工具包括:串口调试助手 + 虚拟串口工具 + MATLAB,其中串口调试助手和虚拟串口驱动均在我的资源中,如有需要可以下载使用,按照博主的流程进行复现

实验步骤

1. 虚拟串口建

在这里插入图片描述
建立一对虚拟串口,博主这边是建立了串口21和22互联,其中20给串口助手配置用来模拟下位机不断地上传数据,21则给MATLAB配置用来模拟上位机不断地接收数据而不是单一的接收固定字节or固定时间的数据。

2. 串口调试助手充当传感器不停地发送数据

打开一个串口调式工具充当下位机,不断发送数据,在此次实验中,下位机不断循环发送的数据为:
0 1 2 3 4 5 6 7 8 9,这些信息根据ASCII码表可以转换为16进制分别是:30 20 31 20 32 20 33 20 34 20 35 20 36 20 37 20 38 20 39 0D 0A,对应的十进制则是:48 32 49 32 50 32 51 32 52 32 53 32 54 32 55 32 56 32 57 13 10(详细的对照关系参考通讯实验一中完整的ASCII码表)
在这里插入图片描述

3. MATLAB模拟上位机不断地接收数据

MATLAB串口通讯实验-主函数

% MATLAB串口仿真实验(二)配套代码
% 串口数据发送实验
% 本实验用于测试串口数据发送实验
% 串口函数使用serialport
% 软件工具包括:串口调试助手 + 虚拟串口工具

clc;clear all;close all;
%% 串口配置
%---- 串口常见参数 ----%
Port_List = serialportlist("available")    %显示可用的串口信息
SerialObj = serialport("COM21",115200);    %串口参数配置
SerialObj.UserData = [];                   %串口接收数据,也可以使用全局变量接收数据


%---- 回调触发机制-使用接收的字节数触发回调产生
configureCallback(SerialObj,"byte",4,@readSimulation);  %在接收到4个字节时触发回调

global Data_allread;                           %全局变量Data_read用于存放串口接收的数据
Data_allread = [];



%% 通讯终止
pause(6); 
delete(SerialObj);

MATLAB串口通讯实验-串口回调函数

function Data = readSimulation(obj,evt)
%UNTITLED 此处显示有关此函数的摘要
%   此处显示详细说明

    global Data_allread;
    num = obj.NumBytesAvailable;
    
    data_once = read(obj,num,"int8");
    
    Data_allread = horzcat(Data_allread, data_once);  % 水平拼接数据,等于Data_allread = [Data_allread, data_once]
    
    disp(dec2hex(Data_allread))
    
end

在该案例中,博主没有直接采用read函数直接读取串口的数据,而是先采用configureCallback进行串口回调函数的设置,此处设置的是基于字节数触发回调,然后在回调函数内部读取串口缓存的数据并保存至全局变量中。

在设置完回调函数后,整个串口数据接收逻辑就变成了:判断串口缓存是否达到4个字节->是的话就进入回调读取当前缓存中的数据->完全读取后退出回调函数->再次判断串口缓存是否达到4个字节…只要串口一直有数据接收到,那么该过程会一直循环,从而实现了数据的实时采集。

如果需要打断该过程,则可以参考博主的做法,执行串口删除函数,删除配置的串口从而使回调出发条件不可能执行,那么整个过程也就终止了
在这里插入图片描述

上述是博主展示代码运行后的结果,由于博主发送的数据是每两秒发送一次,博主在采集了6秒后删除了串口,因此总共接收的数据应该是3帧信号,用于每一帧信号的总长度是21,所以总和应该是63,和上述展示的全局变量长度一致。

此外,博主保存数据的数据方式是采用全局变量横向拼接保存,因此在Data_allread这个变量中,接收的每一帧信号是连续的,如上图展示那样在回车换行符后紧接着又是48 32 …

总结

以上是关于串口回调函数的基本用法,通过该技巧的使用可以实现串口数据的实时接收,如果再辅以数据处理及绘制等相关的代码即可完成数据的实时接收及展示功能。希望能给大家带来帮助!

  • 26
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MATLAB串口通讯程序用于在MATLAB中与串口设备进行通信。在使用串口通讯之前需要先确定好串口设备的连接和参数设置。下面是一个简单的MATLAB串口通讯程序示例: ```matlab % 创建串口对象 s = serial('COM1'); % 设置串口参数 set(s, 'BaudRate', 9600); set(s, 'DataBits', 8); set(s, 'StopBits', 1); set(s, 'Parity', 'none'); % 打开串口 fopen(s); % 发送数据 dataToSend = 'Hello'; fwrite(s, dataToSend); % 接收数据 dataReceived = fread(s, s.BytesAvailable); % 关闭串口 fclose(s); delete(s); clear s; ``` 以上示例中,首先创建了一个串口对象,并设置了串口参数,如波特率、数据位、停止位和校验位等。然后使用`fopen`函数打开串口连接。接着可以使用`fwrite`函数向串口发送数据,也可以使用`fread`函数接收从串口接收到的数据。最后使用`fclose`函数关闭串口连接,并删除并清除掉使用的串口对象。 需要注意的是,在实际使用中,可能需要根据具体的串口设备和通信协议进行一定的定制化操作,如添加数据处理、错误检查和超时处理等。此外,还可以使用MATLAB的工具箱和函数扩展串口通讯的能力,如通过`MATLAB Instrument Control Toolbox`中的函数来进行更高级的串口通讯操作。 总之,MATLAB串口通讯程序可以方便地实现与串口设备的数据交互,提供了简单而灵活的API,可以满足各种串口通讯需求。 ### 回答2: MATLAB串口通讯程序是用来与外部设备进行数据交互的程序。在MATLAB中,我们可以通过串口通讯实现与硬件设备(如传感器、执行器等)的数据读取和发送。 下面是一个简单的MATLAB串口通讯程序示例: 1. 首先,我们需要创建一个与外部设备进行通信的串口对象。可以使用以下代码: ```matlab s = serial('COM1'); % 创建串口对象,COM1代表串口号 ``` 2. 接下来,我们可以设置串口的参数,如波特率、数据位数、停止位等。以下是一个设置波特率为9600、数据位数为8位、停止位为1位的示例代码: ```matlab set(s, 'BaudRate', 9600); set(s, 'DataBits', 8); set(s, 'StopBits', 1); ``` 3. 现在,我们可以打开串口并建立与设备的连接: ```matlab fopen(s); % 打开串口 ``` 4. 数据的读取和发送是串口通讯的核心功能之一。可以使用以下代码来读取从设备发送的数据: ```matlab data = fread(s, n); % 读取n个字节的数据 ``` 其中n代表读取的字节数。同样,我们也可以使用以下代码将数据发送给设备: ```matlab fwrite(s, data); % 发送数据给设备 ``` 5. 最后,当通讯结束时,我们需要关闭串口并释放资源: ```matlab fclose(s); % 关闭串口 delete(s); % 删除串口对象 clear s; % 清除串口对象 ``` 以上就是一个简单的MATLAB串口通讯程序示例。在实际应用中,我们可以根据具体的需求进行数据处理和控制操作,实现与外部设备的可靠通讯。 ### 回答3: MATLAB是一个强大的数值计算和科学仿真软件,也提供了与外部设备进行串口通信的功能。在MATLAB中,我们可以使用Serial对象来建立与串口设备的通信连接,并通过串口发送和接收数据。 首先,我们需要使用MATLAB的serial函数创建一个Serial对象。在创建Serial对象时,我们需要指定串口号、波特率、数据位数等参数。例如,下面的代码创建了一个与COM1串口的连接,波特率为9600,数据位数为8位的Serial对象: s = serial('COM1','BaudRate',9600,'DataBits',8); 接下来,我们可以使用fopen函数将Serial对象与串口设备建立连接: fopen(s); 连接建立后,我们可以使用fread函数从串口接收数据,使用fwrite函数向串口发送数据。这两个函数的语法分别为: data = fread(s,num_bytes); fwrite(s, data); 其中,s是Serial对象的名称,num_bytes是要接收的字节数,data是要发送的数据。 在进行串口通信时,我们可能还需要设置串口的其他参数,例如校验位、停止位等。可以使用set函数来设置Serial对象的属性,如: set(s,'Parity','none'); set(s,'StopBits',1); 最后,当我们不再需要与串口设备通信时,可以使用fclose函数关闭串口连接: fclose(s); 这是一个简单的示例,说明如何使用MATLAB进行串口通信。根据具体的应用需求,我们可以根据Serial对象的各种方法和属性来实现更复杂的串口通信功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值