锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

Matlab使用串口进行数据通信

时间:2022-09-09 10:00:00 016lf连接器

Matlab串口通信

文章目录

  • Matlab串口通信
  • 前言
  • 问题
  • 解决方案
    • 方法一:Instrument Control Toolbox
    • 方法二.编写通信脚本
  • 总结


前言

在电机运行过程中,需要通过串口将电机要通过串口传输到PC端,然后在Matlab进行姿态解算,快速直观地获取井角、方位角、工具面角等参数信息。

问题

  1. 如何使用Matlab串口通信?

  2. Matlab串口通信中的注意事项。

解决方案

Matlab不具备直接访问硬件的能力,但通过调用支持面向对象技术Instrument Control Toolbox中的serial类函数创建串口对象,串口对象操作是串口操作,使用非常方便。Matlab支持包装串口对象串口异步读写操作,使计算机在读写串口时同时进行其他处理工作,从而大大提高了计算机的执行效率。Matlab这种异步操作采用多线程技术实现。通过异步读写设置,计算机可以在执行读写串口函数时立即返回,无需等待串口传输数据。当指定的数据传输结束时,会触发事件并执行事件回调函数。可以在事件回调函数中编程成等待串口传输数据造成的时间浪费。本次主要从Instrument Control Toolbox用户自行编程记录使用过程中的一些问题有两个方面。

方法一:Instrument Control Toolbox

MATLAB的Instrument Control Toolbox提供了 MATLAB与仪器通信的功能 ,它支持 GPIB 通用接口总线 、VISA、TCP/ IP、UDP、RS2232等多个协议 ,具有同步和异步读写功能以及事件处理和回调操作功能,可读写和记录二进制和ASCII文本数据。

  • 在APP搜索应用下Instrument Control ,如下图所示:打开后:
    在这里插入图片描述
    进入界面后,我们按照上图的顺序选择串口(Serial), 点击浏览(Scan)查看可用的串口,最后在第三处列出可用的串口号(比如我的串口号是COM5)。

  • 双击Serial下的COM5得到如下视图界面:

    这里需要注意的是,在应用程序下发送一系列16进制命令时,每个字节之间需要一个空间。如果没有间隔,下位机只能接受最后一个字节的数据(我的下位机以中断模式接受)

  • 如上图所示,点击连接与相应的串口建立通信,然后对应发送区域设置数据类型和形式。例如,我在实验过程中发送的数据为16进制,数据格式为8位,接收数据的格式与发送一致。设置如下图所示:

  • 点击发送(Write)发送成功后,发送的消息将显示在窗口的下半部分,点击阅读(Read),存储接收到的数据data里面,点击Export数据可以导入工作空间查看。

方法二.编写通信脚本

每次使用上述串口应用程序,我们都需要手动发送命令和接收数据。在实时调试过程中,我们需要不断发送命令和获取数据。上述方法无法反映优势。因此,我们可以通过编写代码来实现上述软件应用的不足,同时,我们可以使用它Instrument Control Toolbox里面的Session Log窗口下的代码将使用我们的过程matlab通过语言记录,我们可以帮助我们编写串口通信代码。实验过程中的端口配置如下。
代码如下(示例):

scom = serial('COM5');    %建立串口对象函数(需要手动匹配自己电脑的端口) fclose(scom);               %关闭串口设备对象 scom.InputBufferSize =512;%输入缓冲区 scom.OutputBufferSize =512;%输出缓冲区 scom.ReadAsyncMode = 'continuous';%在异同通信模式下,连续接收数据读取串口数据,下位机返回数据自动存入输入缓冲区。 scom.BaudRate  = 9600;%设置波特率 scom.Parity = 'none';%无校验位 scom.StopBits  = 1;%1个停止位 scom.DataBits  = 8;%8个数据位 scom.Terminator = 'LF';%设置终止符(CR为回车符,LF为换行符)
scom.FlowControl  = 'none';%流控
scom.timeout  = 1.0;%一次操作超时时间
scom.BytesAvailableFcnMode =  'byte';%数据读入格式
scom.BytesAvailableFcnCount  = 1024;%触发中断的数据数量
scom.BytesAvailableFcn  = @callback;%串口接收中断回调函数 
try
 fopen(scom);
catch
 '串口打开失败';
End
fwrite(scom,[hex2dec('01') hex2dec('FD'); %写入数据
data1 = fread(scom,10,'uint8'); %读取数据
Fclose(obj);%关闭串口设备对象
Delete(obj);%删除内存中的串口设备对象

总结

本文对使用matlab进行串口通信进行了一个简要的介绍,具体的细节的了解可以去查看Matlab的帮助文档和以下参考文献:
Matlab上位机开发(五)Matlab串口通信
MATLAB串口通信

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章