Matlab串口通信
文章目录
- Matlab串口通信
- 前言
- 问题
- 解决方案
-
- 方法一:Instrument Control Toolbox
- 方法二.编写通信脚本
- 总结
前言
在电机运行过程中,需要通过串口将电机要通过串口传输到PC端,然后在Matlab进行姿态解算,快速直观地获取井角、方位角、工具面角等参数信息。
问题
-
如何使用Matlab串口通信?
-
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进制,数据格式为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串口通信