Matlab使用串口进行数据通信
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进制命令的时候每个字节间需要有空格进行隔开,若没有间隔下位机只能接受最后一个字节的数据(我的下位机以中断模式进行接受))如上图所示,点击连接便可以与对应的串口建立通信,然后可以对
发送区域
的数据类型以及数据形式进行设置,例如我实验过程中发送的数据是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;%串口接收中断回调函数
tryfopen(scom);
catch'串口打开失败';
End
fwrite(scom,[hex2dec('01') hex2dec('FD'); %写入数据
data1 = fread(scom,10,'uint8'); %读取数据
Fclose(obj);%关闭串口设备对象
Delete(obj);%删除内存中的串口设备对象
总结
本文对使用matlab进行串口通信进行了一个简要的介绍,具体的细节的了解可以去查看Matlab的帮助文档和以下参考文献:
Matlab上位机开发(五)Matlab串口通信
MATLAB串口通信
Matlab使用串口进行数据通信相关推荐
- 【STM32F429的DSP教程】第9章 Matlab的串口通信实现
完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547 第9章 Matlab的串口通信实现 本章节主要为大家讲解 ...
- MATLAB利用串口接收数据,并实时显示图形
matlab读取串口资源总结: 一.matlab读取串口数据,并显示实时图形:点击这里打开 二.使用matlab进行串口调试的2中方法:点这里打开 三.matlab读取单片机串口数据并显示出来(m语言 ...
- matlab检测串口数据帧头,MATLAB 串口读取姿态数据及GUI实时动态显示设计
上一篇实现了Matlab 对串口数据的读取,数据可以读取并且保存到本地.本文主要设计GUI并且动态的显示曲线.可以更直观的观察实时的姿态数据和传感器数据. GUI设计效果: 姿态GUi.png 分别设 ...
- MATLAB实现串口通讯的详细步骤
由于MATLAB中提供了仪表仪器通信的功能,所以MATLAB可以用来实现串口通信. 1.要实现串口通信,第一步必须要创建一个串口对象,MATLAB中提供了serial函数来创建一个串口对象.具体用法为 ...
- Matlab显示串口收发的中文数据
最近用Matlab通过串口与STM32单片机通讯.在收发中文时,Matlab打印输出发生译码错误,显示的是扩展ASCII字符,而不是中文.在本文中讨论了Matlab串口通讯时,中文变乱码的原因,并实现 ...
- Matlab使用串口通讯
(1)Matlab 串口通讯官网资料,里面很详尽的介绍了MATLAB中串口相关函数 https://cn.mathworks.com/help/instrument/serial-port-inter ...
- MATLAB输出串口发送所需十六进制数据
MATLAB输出串口发送所需十六进制数据 在FPGA设计过程中,有时需要与MATLAB进行联合调试,需要从MATLAB导出数据,再从PC端通过串口发送给FPGA,对数据进行处理后再返回PC端.串口 ...
- Matlab通过串口与下位机通讯
最近用Matlab通过串口与STM32单片机通讯.Matlab在2019b版本以后,要用serialport串口函数集替换掉原有的serial串口函数集.Matlab的serialport串口工具说明 ...
- MATLAB处理串口采集数据
MATLAB处理串口采集数据 加速度计反馈X/Y/Z轴数据,并通过串口输出,其中第2,3,4字节为X轴数据高位,中位,低位数据,第5,6,7字节为Y轴数据高位,中位,低位,第8,9,10字节为Z轴数据 ...
最新文章
- 智源深度 | NLP 面临的三大真实挑战(含视频)
- Thymeleaf一些标签的传字符串/message/消息
- apache下php无法连接mysql问题的解决
- java tessdata训练_Tesseract For Java为可执行jar设置Tessdata_Prefix
- 记忆化搜索 codevs 2241 排序二叉树
- 记录——《C Primer Plus (第五版)》第十一章编程练习第5-12题
- Linux Shell 文件描述符 及 stdin stdout stderr 重定向
- 【学习笔记】白盒及黑盒测试方法简介
- 一种传统发酵彝药有效抑制新冠病毒的复制体外研究
- 自适应滤波器(二)NLMS自适应滤波器
- 单片微型计算机频率测量实验,毕业论文:频率计系统设计
- 纯前端JS导出Word包含图片
- dijkstra标号法表格_Dijkstra算法详细讲解
- pictures for my GitHub -- Convenient Pic's URL offering
- ambari部署hadoop
- JAVA MemCache 史无前例的详细讲解!看完包精通MEMCACHE!
- Java的socket简单语法实例以及多线程
- memcached与redis技术的对比试验
- 前端DEF部署和BUC接入的“跨域”坑
- 上海2345Android岗面经