首页 > 试题

一个立一个羽

更新时间:2022-12-07 07:53:25 阅读: 评论:0

半年的初中生活-1000磅


2022年12月7日发(作者:护士节祝福语10个字的)

matlab中⽰波器如何使⽤,[原创]Matlab上位机⽰波器(中)·⽴

⽻博客

在上⼀篇博⽂我们谈到了怎么使⽤MATLAB的plot与subplot函数进⾏多个图形的同窗⼝显⽰,我们的⽰波器最基本的图形界⾯框架就可以

使⽤figure、plot与subplot函数构成,因为追求使⽤,最⼤限度的放弃了GUI编程,⽽这⼏个函数也很完美的满⾜了我们整个系统的需求。

对于plot函数其实还可以在同⼀个窗⼝的同⼀张图⽚上绘制不同的曲线,只需要将n个m长度的⾏向量叠加成⼀个nxm的矩阵,plot函数将

⾃动将你的矩阵内的每⾏向量穿上不同颜⾊的⾐服再给推向屏幕。这不是本章重点,还请⼤家⾃⼰在MATLAB的命令⾏或脚本内⾃⾏编写

调试。在这⼀章中主要给⼤家介绍⼀下怎么使⽤MATLAB调⽤串⼝资源。

串⼝是上位机与下位机之间最简单的通信⽅式,⼏乎每款单⽚机都有⾃⼰单独的串⼝模块,通过单⽚机内部的控制寄存配置就可以⽆忧的调

⽤串⼝与上位机进⾏数据交互。相应的,在我们使⽤的个⼈PC上,操作系统已经将我们可能会⽤到的串⼝资源打包成了函数,我们可以通

过调⽤这些函数对PC的串⼝进⾏数据读写,串⼝调试助⼿是每个串⼝开发者必备的第⼀个⼯具,建议⼤家在调试下位机的时候,先选择串

⼝调试助⼿查看底层数据,查看数据帧格式是否正确,校验是否正确,数据数值是否正确(下位机输出固定数值或周期数值进⾏检测),再将

MATLAB与串⼝进⾏对接,这样也能提⾼你的⼯程开发效率,不⽤再从底层去查找BUG。对于MATLAB串⼝,我们需要了解的东西很简

单,MATLAB的串⼝采⽤回调函数的形式进⾏数据处理,⼤致分为三种⽅式,⼀种是根据帧结束字如”n”,当串⼝每次接收到0x0d

即”n”的ASCII码时,调⽤⼀次回调函数;⼀种是时间中断处理,每隔固定的时间调⽤⼀次回调函数;还有⼀种是字节计数,例如设定字

节计数为100,当MATLAB接收到100个串⼝数据字节(按标准串⼝通信,⼀个数据为8bit,实际通信位数为10bit,包括⼀位开始位,⼀

位停⽌位)时,触发MATLAB串⼝回调函数。在本例中,我们使⽤字节计数模式,设置下位机定时发送数据,触发回调函数。让我们先来看

看有哪些参数可以配置。

123456789BaudRate:波特率

Parity:奇偶校验类型

DataBits:数据位,⼀般为8,不⽤设置

StopBits:停⽌位,⼀般为1,不⽤设置

TimerFcn:定时回调函数

TimerPeriod:定时周期

BytesAvailableFcn:字节计数回调函数

BytesAvailableFcnCount:字节计数

BytesAvailableFcnMode:⼀般设置为字节模式,即byte

⼤家只需要对这些参数进⾏⼀些初步了解就⾏,有些参数不需要配置,保持默认就好。现在我们⼀起来分析⼀下配置代码,激动⼈⼼的时

刻,Let’sProgram!

123456789s=rial('COM4');%创建串⼝对象s,设置s为"COM4"端⼝

te=115200;%设置波特率为115200

ts=8;%设置数据位数为8位

ts=1;%设置停⽌位为1位

t(s,'Parity','none','FlowControl','none');%⽆校验位,⽆流控制

yncMode='continuous';%异步接收连续模式

vailableFcnMode='byte';%回调函数字节计数模式

vailableFcnCount=500;%每接收到500个字节触发回调函数

vailableFcn=[emailprotected]_16bit,H};%回调函数句柄,以及相应波形显⽰通道句柄

你是不是期待着输⼊这段代码,运⾏后会发⽣点什么?你真天真,我的套路可是很深的,这⼏⾏代码输进去,别的不敢保证,报⼀两个错是

⾄少的。为什么?因为你还没有定义回调函数和回调函数的传递参数~不要那么轻易相信我,我可能⽆时⽆刻不在给你下套,就算是百度到

的东西,到⼿之后你也不⼀定能马上就跑出正确的结果,要想真正学会这些东西,你得思考,得学会动⼿⾃⼰编程尝试。现在让我们⼀步⼀

步来,从配置串⼝到打开串⼝使⽤fwrite和fread函数读写数据开始。看完这⼀章之后,你⾃⼰都可以在MATLAB上写出⾃⼰的串⼝调试助

⼿(very简陋版)~现在,我们先配置⼀个最基本的串⼝~

1234567s=rial('COM4');%创建串⼝对象s,设置s为"COM4"端⼝,可以通过设备管理器查找系统给设备分配的端⼝号,并在代码中

做相应的更改

te=9600;%设置波特率为9600

ts=8;%设置数据位数

ts=1;%设置停⽌位

t(s,'Parity','none','FlowControl','none');%⽆校验位,⽆流控制

yncMode='continuous';%异步接收模式为连续

vailableFcnMode='byte';%回调函数模式为字节

在运⾏上⾯的代码后,你会⽣成⼀个配置好的串⼝对象s,不知道什么叫对象的先去找个⼥(男)朋友吧~你要真的想知道的话就去百度⾯向对

象的编程,总之你可以认为s是⼀个整体,这个整体有很多的属性,⽐如⼈的头发的颜⾊,就是这个⼈的⼀种属性,对象也有⼀些函数,⽐

如我要你⾛到某个地⽅做20个俯卧撑然后做50个仰卧起坐然后站起来⼤声喊“我真帅!”,这⼀系列的动作类似对使⽤对象的函数,简单

明了吧,不过如果你真的找到对象了,那还是得恭喜你了,据⽹⽂说,两个⼈相互喜欢彼此⼏乎是⼀种奇迹。好了,闲话少絮,我们还只是

创建和配置了s这样⼀个对象,并没有将s与系统的硬件联系起来,也就是说我们还没有使⽤MATLAB打开串⼝,⽽只是⽣成了打开这个串

⼝的配置信息,那么如何打开这样⼀个串⼝呢?我们会使⽤到以下代码~

11try

fopen(s);%打开串⼝

catcherr

fclo(s);

delete(s);

clears

clearall;

cloall;

clc;

fprintf('串⼝打开失败。n');

end

再来解释⼀下,这⾥我们使⽤到了try结构打开串⼝,是因为我们每次打开串⼝的时候未必是⼀帆风顺的,该串⼝可能不存在,也可能被其

他程序占⽤了,这个时候打开串⼝就会报错,⽽对于错误情况我们就要有⼀个应对错误的机制,就是销毁赃物!我们⾸先调⽤fopen函数试

图打开串⼝,然⽽尝试未果后,我们就果断的关闭这个串⼝s(fclo(s)),然后删掉它(delete(s)),把它扔到垃圾桶(clears),再清空犯案

现场(clearall),再关闭犯案现场,仿佛我们没有来过(cloall),最后再清空我们来过的痕迹(clc:清空命令⾏),最后向上级汇报任务失败

(fprintf(‘…’))。⼀切的⼀切如同⾏云流⽔般⾃然(不要想跑偏了)。串⼝打开失败可能是你忘记插上下位机了,或者你打开了⼀个不存在

的串⼝,也有可能你的下位机⼼⾥已经有了别的⼈(被其他进程占⽤),当然,还有⼀个最坑的情况,就像⼩姨⼦⼀样被黄鹤⽼板给拐跑了!

这是MATLAB内部运⾏机制的问题,因为你之前可能打开串⼝后发⽣了⼀些错误,清空了s变量⽽没有关闭串⼝s,也就是本例

的“COM4”,这个时候你要么把黄鹤⽼板抓回来——⽤相同的配置定义⼀次s,然后使⽤fclo关掉;要么直接果断点,抄了黄鹤⽼板的

家(关闭MATLAB),把他原⼚1000的2000的⽪鞋统统只卖20块,全给充公(释放所有权)。嗯,⼤致是这个意思,我⼀般都是直接重启

MATLAB,⽽且这种情况很常见,在新⼿操作的时候出现次数尤为可观。那么串⼝打开了,我们是不是需要给下位机写点什么,这⾥我给

⼤家介绍两个函数~请看⼤屏幕

12fwrite(s,inst,'uint8');

d=fread(s,[115],'uint8');

使⽤fwrite函数可将你想对下位机说的话全部说出来,⾸先第⼀个参数,你想对谁说,这⾥我们当然是想对我们亲爱的下位机兄弟畅谈了,

果断写s,第⼆个参数,你想对你的下位机说什么,inst是⼀个我之前⽣成的⾏向量,⾥⾯有n个数据,我就想对我的亲爱的下位机兄弟说这

些话,第三个参数,你说话的语⾔,你想⽤国语和下位机交流还是⽤英语和下位机交流,就取决于这个参数了,⼤家可以去查查第三个参数的

类型,可以看看有哪些类型可选,我在这就絮叨了(其实我也忘了)。只需要配置好这三个参数,我们就可以给下位机说点什么了。这⾥不着

急演⽰,我们先看看第⼆⾏,d=fread(……),通过这个函数,我们可以倾听我们的下位机兄弟说了什么,第⼀个参数,还是对象,第⼆

个参数,选择你想听⼏句话,第三个参数,还是通信的格式标准。现在我可以为⼤家演⽰⼀下!

欢迎⼤家来看我们的演⽰环境,⼀块价值5RMB的CH340⼟豪⾦串⼝模块!实在抱歉⼿头没有闲钱买开发板了,不过⽬前的演⽰使⽤这个

模块,将它的RXD和TXD相接也能继续我们的演⽰,⾄于下⼀篇搭建⽰波器,没有开发板好像做不了,到时候我再想办法吧~~~~~~~~~~好

的,照例让我们来看看演⽰代码和演⽰结果,在看结果之前先想想会得到⼀个什么样的结果,为什么?

12345inst=[12345];

fwrite(s,inst,'uint8');

pau(0.02);%让串⼝数据再飞⼀会

d=fread(s,[15],'uint8');

disp(d);%将d变量输出到屏幕上

为了让⼤家觉得我是真的做了,我给⼤家截个脚本框的图。⼤家猜好了么,我要公布答案了!往下看!

怎么样,你猜对了么?好了,这期博⽂就到这⾥,希望你能找到你想要的答案,我们下期再见!

本文发布于:2022-12-07 07:53:25,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/88/58310.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:核心家庭
下一篇:四组词
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图