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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
步骤一:串口设置* a% v$ U; e. h; Q) V
上位机和下位机实现数据传输是通过串口,以下是串口设置的内容(当然了,这部分都是基于GUI界面已经画好之后的设置)其中还有一个“打开串口”按钮未作说明,“打开串口”的响应函数中可以设置调用解包函数句柄。: b! [) I  F6 L# N7 ]/ q# g. {( J+ J5 _
& |2 [( P: H9 d3 F
movegui(handles.figure1,'center');%将图窗移动到屏幕上的指定位置
; e1 [5 n$ l7 h1 ?7 y%movegui(h,position) 将图窗 h 移到指定的屏幕位置并保持图窗的大小。
1 |1 N9 A3 k: f; H7 Gset(handles.popupmenu2,'string',{'4800','9600','14400','19200','38400','57600','76800','115200'});
, a, I5 j: x$ g/ `0 Lset(handles.popupmenu3,'string',{'8','9'});# ?0 W" s9 [# a0 l  n
set(handles.popupmenu4,'string',{'1','1.5','2'});
$ V* [9 ~: v; T; ?9 V$ ?set(handles.popupmenu5,'string',{'NONE','ODD','EVEN'});
5 X! R. s2 R3 T3 N( N# t1 Uset(handles.pushbutton1,'String','打开串口');
+ T, y, h' a/ i- Q; b9 r7 F) KPorts = instrhwinfo('serial');
4 X4 Q9 [6 f/ w9 S" hport_num = length(Ports.AvailableSerialPorts);
! j2 b; o: `% m( _- _9 G; Y& Aports_sum = '';: ^# G( @, f5 K! [; X" S
if port_num > 0% C0 K3 W9 i7 g, q5 g' D
    for i=1:port_num
5 u/ ~$ X0 [- T, q( ~4 K( z- P        ports_sum = [ports_sum,Ports.AvailableSerialPorts(i)];
* x  [+ x' t- D! a' p( U    end
3 \  A7 x1 m+ P8 N; O. pelse
6 ^' B# P" h: |: i$ G" c, C: X    ports_sum ='None';
4 o, [4 i8 B8 j& B9 s/ iend
# e% p" _( ]) L9 x* d  i' kset(handles.popupmenu1,'string',ports_sum);" o( p4 `  l$ C4 [% y
- j' M& N3 }/ @

* q$ V1 N; z4 Q. Z步骤二:设置解包函数; x2 ~6 i$ g' M& T% h
当数据发上来后,要及时对数据进行解包,并通过数据传输协议进行数据处理,这一步是关键,解包的思路好坏将关系到程序的执行能力和图像的呈现。因为打包解包这个函数每个工程有自己独特的方式,此处仅截图。/ Q% @  E+ `7 M' T9 x
5 f- X" ]- q! W8 s! v; l, P

! o, b+ A2 {( G, l; s" ^
; v2 [4 c: [- X  ^9 x, D8 K2 H6 N步骤三:设置回调函数, J/ b' L+ ~" u3 c; @
回调函数的作用在于画波形,曾经我用过c#做过一个GUI,该工程波形的绘制是通过设置x轴y轴的变量,点与点之间连线实现的,matlab在这方面非常方便,用plot函数绘制波形,几乎用不到什么代码。至于timer定时器的使用方法可以去matlab官网查询。; z0 [8 H& ^/ w; V1 J

# D6 y1 @+ Y2 s, b1 Q2 Y6 ?global timer1;%定时器1
* R0 Q1 M3 J# }timer1 = timer ('TimeRFcn',{@drawNibp,handles},'Period',0.1,'ExecutionMode','fixedDelay','StartDelay',0.2);
0 r3 V; Z. l5 L) @% [7 J" `) g- z2 ~. J' C
% U1 F! W: m+ [) i0 a3 n' x% ^0 h" p" W( I8 _% Q2 x' h) K2 r
function  drawNibp(hObject, eventdata, handles)
! z) n# Q# L7 k3 dglobal Data_NibpCP
9 M) V2 H. T1 H* B- o% U" Zglobal Data_NibpWA# c6 @( Y+ n- g3 o0 d
plot(handles.axes1,Data_NibpCP,'g');%画图袖带压( L, K5 X! `8 [- V7 a- X
plot(handles.axes2,Data_NibpWA,'g');%画图脉搏波3 P& Q0 v. J  I6 [+ r( ^3 U7 }" P
set(handles.axes1,'XLim',[1 912],'YLim',[500 2500],'Color',[0 0 0]);%设置坐标轴范围( f. t  N" @4 T$ Y' @1 w
set(handles.axes2,'XLim',[1 912],'YLim',[500 3000],'Color',[0 0 0]);%设置坐标轴范围7 n# p: N' _4 Z
set(handles.axes1,'Color',[0 0 0]);- P* m0 Q( }0 k. I
set(handles.axes2,'Color',[0 0 0]);
% \4 u9 R' b. J7 t9 _% g9 {, @6 _  |2 x& ^* a5 o8 G; k1 @) P. T! e4 D! o
! x; U7 ?. E+ L' Y2 i5 P* P# @, C
步骤四:设置回调函数的开始命令
1 w4 B/ f" C- C. y# {$ X  Q- J, R回调函数在matlab中是需要一个开始命令的,以前波形一直没画出来,就是因为没有设置回调函数的start指令,当时怎么都查不出问题出在哪里。3 U; c  _* T( Q+ D4 w* T9 `
6 p+ x$ J# A2 z! C% [# ?
global config_mes
; t7 Q7 h; h7 O) Qglobal timer1
: l$ g' o% [- V8 d, U. ]- B8 _2 \. m/ r' h
switch get(timer1,'Running'); l4 w, D' n% F2 h4 H
            case 'on'  A2 ?" b; @; V$ \
            case 'off'8 A5 j/ Q( F5 m( O# D9 u# U  t# b
                start(timer1);
1 l  h2 t& i! N& k' M' v5 @ end" ~; u% ?* R0 j

; @2 o# e9 }- k8 ?; |+ m: K, R2 }2 z$ V3 }0 S) X! k- a) x' m
步骤五下发命令
) f; L  n3 X6 e4 R" o下发的命令有如下顺序:先下发握手指令,当握手成功时下发模块设置指令,模块设置成功设置后启动无创血压测量命令。这里要说明的是,据个人经验和观察,matlab数据输出和写入都是以十进制数完成的。如果要转别的进制,以十六进制为例要用到如dec2hex,而转换函数是以字符串形式输出的,下位机识别不了字符串。这里以中止测量为例。`
  X0 m2 _! S7 Y5 F% f7 ]1 l) N& C1 D: \. _
com_pack_nibpStop = [00 00 00 00 00 00 00 00 00 00];
: B- U& @5 G: c9 _3 S  ~- ~4 G& d" P% E; {# v# |2 ]  S" r
switch get(config_mes,'Status')0 ]- K% Q3 L6 D% q$ u
        case 'open'5 F" _" S" h& g$ x+ O" x1 P

) B3 L2 Z2 a& u' Z            fwrite(config_mes, com_pack_nibpStop, 'uint8', 'async');4 j" z' u# q# }
9 {  y2 J3 [0 @) {; P
        case 'closed'" c4 }. c5 C' n, N+ b/ P% M7 V; }& T
% \2 A7 N6 L* F; S2 U
end
/ S, ^  Y, z- t- ^0 Y7 w/ Q. @; h- t2 {  h) O, Q

* A$ b7 H' S+ ^1 w9 e" U3 r" t7 z$ k7 Q3 t

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 12:51 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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