matlab中instr,MATLAB 串口通信

matlab 串口编程

由于项目需要,用matlab 做了一个串口通信工具,也碰到不少坑。这里总结一下。

读取串口数据

matlab 支持串口通信,因此直接调用串口的结构体serial就可以,在调用之前,需要对串口属性进行设置。

delete(instrfindall) %%关闭没用的,这句很重要

s=serial('COM5');%创建串口

set(s,'BauRate',115200); %设置波特率

set(s,'inputBufferSize',1024000) %设置输入缓冲区域为1M

%串口事件回调设置

set(s,'BytesAvailabelFcnMode','bytes');%设置中断响应函数对象

set(s,'BytesAvailabelFcnCount',10);%设置终端触发方式

s.BytesAvailabelFcn=@ReceiveCallback;%ReceiveCallback是中断的触发函数,这里我是自定义的。系统的回调函数为instrcallback;

fopen(s);%打开串口

%data=fread(s)%读取二进制字节 fwrite二进制写入 相应文本用fscanf 和fpintf

%data %进行数据处理

%fclose(s);

%delete(s);

%clear s;

以上的代码是MATLAB 串口读取的基本函数,对串口操作的整个过程可以概括为:“设置串口参数”->"打开串口“->"读取串口数据”->“关闭串口”。

串口通信方式选择

serial 中断方式参数为BytesAvailabelFcnMode,它的方式有Terminator 和bytes 两种。Terminator 为查询方式中断方式。其值有“LR(换行符)” 和“CR(回车符)” 两种。

查询方式中断

查询方式中断方式为Terminator,值有CR和LF两个。查询中断的含义是在缓存区读取数据,当读取到存在CR和LF之后,触发中断,调用回调函数。查询中断简单但不适用。具体例子可以看http://blog.sina.com.cn/s/blog_6163bdeb0102e8qc.html

set(s,'BytesAvailabelFcnMode','Termiator');% 查询中断

set(s,'Terminator','CR');%设置中断方式

基于matlab 方式实时串行通信编程

matlab更多的采用的事事件驱动方法中断。中断参数为"bytes"。即按字节中断。如设定缓存区域达到10个字节,就触发中断,调用回调函数,进行处理。

set(s,'BytesAvailabelFcnMode','bytes');%设置中断响应函数对象

set(s,'BytesAvailabelFcnCount',10);%设置终端触发方式

s.BytesAvailabelFcn=@ReceiveCallback;

我们可以对系统的instrcallback 函数进行修改调用系统的回调函数,但是系统的回调函数matlab 安装包下,可以右键打开,或者直接用which 命令查找它的位置,另外我们也可以自己写相应的回掉函数。比如我这里自己定义回调函数ReceiceCallback。

function ReceiveCallback( obj,event) %创建中断响应函数

global s a fid;

str = fread(s);%读取数据

% hex=dec2hex(str)

a=[];IMU_data = [];Motion_data=[];

sign_head1=hex2dec('A5');sign_head2 = hex2dec('5A');

sign_finish=hex2dec('AA');sign_IMU=hex2dec('A1');sign_Motion=hex2dec('A2');

a= [a;str];

j=1;

while (~isempty(a))

if j>size(a,1)

break;

end

if a(j)==sign_head1 && a(j+1) == sign_head2

if (j+a(j+2)+1) > size(a,1)

break;

end

index_start = j+2;

index_finish= index_start + a(j+2)-1;

pack = a(index_start:index_finish);

if ~isempty(pack) &&pack(pack(1))== sign_finish

if pack(2) == sign_IMU

IMU_data(1,:) = Get_IMU(pack);

j = index_finish;

continue;

end

if pack(2) ==sign_Motion

Motion_data(1,:) = Get_Motion(pack);

j = index_finish;

end

if ~isempty(IMU_data) && ~isempty(Motion_data)

act_data = [IMU_data,Motion_data]

fprintf(fid,'%8.1f%8.1f%8.1f%8.1f%8.1f%8.1f%8d%8d%8d%8d%8d%8d%8d%8d%8d\n',act_data);

Motion_data=[];IMU_data=[];

a(1:index_finish)=[];

j=1;

end

end

else

j=j+1;

end

end

end

回调函数包含两个参数,这个必须要,不能少。其中obj 是传递串口参数的。event暂时没用到。这里回调函数是从还从去读取二进制数据。然后解算出姿态传感器的姿态数据和传感器数据。并且存到txt中。姿态上报数据格式为A5 5A 开头,第三位为传递数据位(不包含A55A),第四位为A1/A2,A1。A1 表示的是姿态数据,A2表示传感器数据。数据以AA结尾。因此算法的思路是每次有姿态数据和传感器数据然后就保存到文本中。

代码已上传到我的github

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/513958.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为发布《大交通时代》:开启未来数字交通宏图

9月24日,在华为全联接2021大会期间,华为携手电子工业出版社及行业专家、共同举办了业内首部交通行业数字化转型系统性专著《大交通时代:行业数字化转型之道》(以下简称《大交通时代》)新书发布媒体沟通会。本书理论结合…

树莓派 摄像头 php,树莓派3 之 USB摄像头安装和使用

需求如果你想在树莓上拍照或者录影,你可以安装树莓派的摄像头(有点贵)。如果你不想要为摄像头模块花费额外的金钱,那有另外一个方法,就是你常见的USB 摄像头。你可能已经在PC上安装过了。我买的如图的这款本篇文章讲解的就是 在树莓派上使用U…

Gartner发布2021年低代码魔力象限,Mendix名列前位

到2025年,企业所开发的新应用中有70%将使用低代码或无代码技术,而2020年的这一比例还不到25%。低代码应用平台在其技术采用曲线上已从"早期采用者"进入到"早期多数人"阶段;而且低代码是“适合主流业务用例的强大的最佳应…

python爬虫入门心得体会,python爬虫入门和实例

爬虫不外乎是为了获取网络上的信息,要取得信息,你就得给给服务器发请求,然后服务器把信息发给你,这一步一般较为简单。服务器发给你的一般是一个html文件,拿到文件后,你可能会觉得这是什么乱七八糟的东西&a…

python的整数类型_Python int 数字整型类型 定义int()范围大小转换

本文主题是讲python数字类型python int整型使用方法及技巧。它是不可变数据类型中的一种,它的一些性质和字符串是一样的,注意是整型不是整形哦。 Python int有多种数字类型:整型int、长整型、布尔型bool、浮点数float、复数complex&#xff0…

Gartner发布2021年人工智能技术成熟度曲线

编辑 | 宋慧 供稿 | Gartner 全球信息技术研究和顾问公司Gartner 2021年人工智能技术成熟度曲线(Hype Cycle for Artificial Intelligence, 2021)中的四个趋势正在推动近期人工智能创新。这四个趋势是:负责任的人工智能、小而宽数据策略、人…

oracle中获取当前时间戳,Oracle 在SQL语句中如何获取系统当前时间并进行操作

select sysdate from dual;select to_char(sysdate,yyyy-mm-dd hh24:mi:ss) from dual;select to_char(sysdate,yyyy-mm-dd hh24:mi) from dual;select to_char(sysdate, yyyy ) from dual; --年select to_char(sysdate, MM ) from dual; --月select to_char(sysdate, dd ) fro…

oracle数据库怎么锁表,oracle数据库表锁住

1、查看数据库锁,诊断锁的来源及类型:select object_id,session_id,locked_mode from v$locked_object;或者用以下命令:select b.owner,b.object_name,l.session_id,l.locked_mode from v$locked_object l, dba_objects b where b.object_idl.object_id2…

“低代码”将干掉 70% 的软件开发工作

作者| Mr.K 编辑| Emma来源| 技术领导力(ID:jishulingdaoli)根据Gartner 预测:到 2025 年,70% 的新应用将由低代码/无代码技术完成开发。也就是说,“低代码”将干掉70%的传统软件开发工作。什么是传统软件开发工作?说…

漫画:什么是 “图灵测试” ?

作者| 小灰来源| 程序员小灰艾伦麦席森图灵(1912-1954)在一间小黑屋里,有这样三个角色:一个人类评审员,两个受试者A和B。其中一个受试者是计算机的人工智能程序,另一个受试者是人类。评审员无法直接看到受试…

oracle导出超链接,Oracle Report中加入下载超链接操作方法

1、在报表页面布局相应的位置加入文本框,一般为Download右键用PL/SQL编辑器编写成超链接,加入以下内容:function B_13FormatTrigger return boolean isbeginIF upper(:P_ACTION) ! DOWNLOAD THENreturn (FALSE);ELSEsrw.set_hyperlink(EXP_FI…

云原生,智慧营销破圈新利器

如今企业数字化转型进入深水区,我们步入全域精细化营销时代,企业增长和营销需求不断变化,MarTech(营销技术)正紧跟其后。据艾瑞咨询《2021年中国MarTech市场研究发展报告》指出,2021年我国 MarTech 各子场景…

oracle10数据库链接失败,oracle 10g Enterprise Manager 无法连接到数据库实例分析

1 问题描述客户端通过IE 浏览器登陆oracle 10g em console时不能显示登陆界面,页面显示“Enterprise Manager 无法连接到数据库实例。下面列出组件状态”[more]2 处理过程1. 检查主机em进程状态,结果正常emctl status dbconsole2. 检查数据库用户&#x…

埃森哲携手阿里云共建基于云原生的消费者运营中台解决方案

简介: 作为全球领先的专业服务公司,埃森哲凭借独特的业内经验与专业技能,以及翘楚全球的卓越技术中心和智能运营中心,此次携手阿里云为零售行业客户提供专业的云原生CDPMA解决方案。 在这个充满变革与颠覆的时代,新技…

SuperEdge正式成为CNCF沙箱项目,腾讯云携手六家厂商在边缘计算领域踏入新篇章

刚刚获悉,分布式云原生边缘容器开源项目SuperEdge通过了全球顶级开源基金会云原生计算基金会(CNCF)技术监督委员会评定,正式成为CNCF 沙箱项目。这不仅意味着SuperEdge得到了云原生开源社区的认可,同时也标志着该项目与…

oracle函数分为几个大类,ORACLE常见分析函数有哪几类呢?

而ORACLE的常见分析函数有三类:1。 OVER函数分析函数的语法为:Java代码FUNCTION_NAME(,。。。)OVER()例:sum(sal) over (partition by deptno order by ename) new_aliassum就是函数名(sal)是分析函数的参数,每个函数有0~3个参数,参数可以是表达式,例如:sum(salcomm…

指数级暴增、复杂场景下,揭秘百度云原生湖仓架构等系列数据产品

9月28日,百度智能云2021“云智技术论坛”智能大数据专场在上海举办。本次会议以“云智一体,让大数据发挥大价值”为主题,百度副总裁谢广军携百度多位资深技术专家与行业伙伴出席会议,共同探讨了大数据发展新形势下,企业…

重磅官宣:Nacos2.0发布,性能提升10倍

简介: ​Nacos2.0 作为一个跨代版本,彻底解决了 Nacos1.X 的性能问题,将性能提升了 10 倍。 作者:席翁 继 Nacos 1.0 发布以来,Nacos 迅速被成千上万家企业采用,并构建起强大的生态。 但是随着用户深入使用…

oracle解决存储嗅探,DBA警示录:存储故障的处理应当谨慎

DBA警示录:存储故障的处理应当谨慎昨天有客户的存储出现问题,导致数据库崩溃,需要进行数据库恢复。客户的存储使用RAID 5划分,声称出现故障后未进行任何操作,可是当存储恢复工程师将文件恢复出来后,文件显示…