找回密码
 注册
关于网站域名变更的通知
查看: 419|回复: 1
打印 上一主题 下一主题

MATLAB,GUI 上位机接收到下位机数据,解包后输出波形(以脉搏波和袖带压为例)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-6-18 15:42 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
步骤一:串口设置0 O, e9 D+ F) R, d! V# E" n
上位机和下位机实现数据传输是通过串口,以下是串口设置的内容(当然了,这部分都是基于GUI界面已经画好之后的设置)其中还有一个“打开串口”按钮未作说明,“打开串口”的响应函数中可以设置调用解包函数句柄。
8 z# O! a: o: x9 i; a7 Y9 Z$ y. {* ?% x7 t+ F, [; T. m5 p3 m+ H8 P
movegui(handles.figure1,'center');%将图窗移动到屏幕上的指定位置! N7 F0 \! [+ M. P1 U+ J7 R
%movegui(h,position) 将图窗 h 移到指定的屏幕位置并保持图窗的大小。
/ a2 p4 e4 V2 `5 x" m6 r1 I/ [set(handles.popupmenu2,'string',{'4800','9600','14400','19200','38400','57600','76800','115200'});
' ~9 n" ^7 d, g+ G, rset(handles.popupmenu3,'string',{'8','9'});
: P0 ^9 H+ N" N' B$ Mset(handles.popupmenu4,'string',{'1','1.5','2'});
+ w, n. x* |! }6 h; @  f, R& v. aset(handles.popupmenu5,'string',{'NONE','ODD','EVEN'});" `" y+ _" T" T9 E
set(handles.pushbutton1,'String','打开串口');
& r* w4 b2 S/ A- pPorts = instrhwinfo('serial');
& A# E9 G3 I, bport_num = length(Ports.AvailableSerialPorts);
; k& ~3 Q% n0 K0 ~. {6 G, Cports_sum = '';" N- M; \8 V8 Z# r" H* E
if port_num > 0' L  i& y; G5 I7 ~8 ?) [
    for i=1:port_num  F  t5 N1 \- ]4 k$ S
        ports_sum = [ports_sum,Ports.AvailableSerialPorts(i)];
( g* U; ^% D# m9 x6 Y# @    end
) c/ H% Y' {0 N  d/ L; selse3 }9 x3 v& ^2 }, k) ?; C1 Y3 d/ R
    ports_sum ='None';
  k" }0 ^! w5 o) Gend. X! G6 F  {: D
set(handles.popupmenu1,'string',ports_sum);4 @5 K/ n$ v# V" h% X0 Q# k& b3 e

( m5 g. l8 c1 e2 Z" S1 F
( O) K0 w0 P* T, D" `* [: @步骤二:设置解包函数
) X- g9 A$ A4 H! _( M& c# Z) f当数据发上来后,要及时对数据进行解包,并通过数据传输协议进行数据处理,这一步是关键,解包的思路好坏将关系到程序的执行能力和图像的呈现。因为打包解包这个函数每个工程有自己独特的方式,此处仅截图。
9 j- i9 `! r0 K1 Y3 ]' t- S3 r3 `8 u; f5 S

& x* U3 M. ^$ W# o$ a3 Q( d% J/ `
" G7 C, C4 f+ x, b步骤三:设置回调函数
4 T; u& L5 x% F# f- K回调函数的作用在于画波形,曾经我用过c#做过一个GUI,该工程波形的绘制是通过设置x轴y轴的变量,点与点之间连线实现的,matlab在这方面非常方便,用plot函数绘制波形,几乎用不到什么代码。至于timer定时器的使用方法可以去matlab官网查询。2 g% n& a2 J# u# G
7 `/ w% t  @! U& i5 U
global timer1;%定时器1) ~: x/ j$ u3 s
timer1 = timer ('TimeRFcn',{@drawNibp,handles},'Period',0.1,'ExecutionMode','fixedDelay','StartDelay',0.2);; D! m' }: Z6 g# R2 W, V/ B' |
' o! }$ U3 O) G& V8 T9 |6 k
+ L3 A7 T& q3 S- n4 q" R' G  E
function  drawNibp(hObject, eventdata, handles)
* o: [/ z6 b( nglobal Data_NibpCP3 v. T  g4 B% W' ]/ R
global Data_NibpWA
$ H2 V3 x  i& N( n$ m, T- Y# ^plot(handles.axes1,Data_NibpCP,'g');%画图袖带压7 P" X. @6 t: z0 g8 o! C2 h
plot(handles.axes2,Data_NibpWA,'g');%画图脉搏波
/ m" g. C# P# oset(handles.axes1,'XLim',[1 912],'YLim',[500 2500],'Color',[0 0 0]);%设置坐标轴范围8 U4 T( @0 i% L0 b9 o/ W" _
set(handles.axes2,'XLim',[1 912],'YLim',[500 3000],'Color',[0 0 0]);%设置坐标轴范围
4 p& M# f3 G& `" |: |1 ?set(handles.axes1,'Color',[0 0 0]);0 B+ o9 ^4 V) l( J, z
set(handles.axes2,'Color',[0 0 0]);' Z0 n: q2 u7 t7 R

6 l& z; D  k2 V# ?. G5 k
7 z% B  w4 U. P% s" s步骤四:设置回调函数的开始命令
- |3 ~4 e& |/ M4 M  _# m% W回调函数在matlab中是需要一个开始命令的,以前波形一直没画出来,就是因为没有设置回调函数的start指令,当时怎么都查不出问题出在哪里。
" ?# X" q0 r  h. j
% M1 F$ b' }4 jglobal config_mes9 B) P6 [& \6 a8 R- N. V( |# Y" j; Q
global timer1" c9 ^6 X4 o- q3 C

. N$ u  z. x; Jswitch get(timer1,'Running')# r& K7 j; i$ v9 |
            case 'on'
- E/ R' g% J/ F. Z            case 'off'$ h& N. f" J& ^0 g- l" o
                start(timer1);8 z1 V4 C. q- q5 t
end4 j; p( _6 ~5 `  l) }3 K# C
1 G) H3 C4 a. S2 t& o  T  ]
1 v8 x9 z1 m1 d5 x& L/ q. E
步骤五下发命令
9 k2 \# p* B; q( d下发的命令有如下顺序:先下发握手指令,当握手成功时下发模块设置指令,模块设置成功设置后启动无创血压测量命令。这里要说明的是,据个人经验和观察,matlab数据输出和写入都是以十进制数完成的。如果要转别的进制,以十六进制为例要用到如dec2hex,而转换函数是以字符串形式输出的,下位机识别不了字符串。这里以中止测量为例。`# N9 y! [! h+ |$ p) X7 \
3 M! O! A6 D! g3 w/ `& E$ `9 m
com_pack_nibpStop = [00 00 00 00 00 00 00 00 00 00]; % R; C% s' J- C; f

" w7 C. A& q  E: v switch get(config_mes,'Status')
' X5 D. T3 ~5 `5 Q! s$ e) R        case 'open'
9 j( i" v! ?/ H" b3 I1 n8 j$ n; g; @& b5 A3 i8 O- ?
            fwrite(config_mes, com_pack_nibpStop, 'uint8', 'async');9 N( d; J2 ]0 t+ U) e/ e( x
5 ?! c& l- b& w& `( y0 j
        case 'closed'
: T/ P8 u, m' I2 Z7 h. I& C% V( i$ ~. |3 A4 S5 N  {6 G8 j) x/ w
end8 k0 _4 ]5 ^6 @/ ~/ v

" Y- H& }% ~0 ?1 T& X- x! s3 K8 s) O* X& d3 c5 H9 N

9 z: M: \  X+ z4 x

该用户从未签到

2#
发表于 2020-6-18 16:33 | 只看该作者
脉搏波和袖带压
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-23 17:34 , Processed in 0.125000 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表