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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
步骤一:串口设置" n6 T9 T* `0 t6 D
上位机和下位机实现数据传输是通过串口,以下是串口设置的内容(当然了,这部分都是基于GUI界面已经画好之后的设置)其中还有一个“打开串口”按钮未作说明,“打开串口”的响应函数中可以设置调用解包函数句柄。
6 l( C1 I  z3 x9 j+ Q/ M
) P- p# j# M: ^6 t% k/ ^movegui(handles.figure1,'center');%将图窗移动到屏幕上的指定位置
7 r* L, r* f9 f5 O3 v%movegui(h,position) 将图窗 h 移到指定的屏幕位置并保持图窗的大小。
6 p) g. K% S. K4 oset(handles.popupmenu2,'string',{'4800','9600','14400','19200','38400','57600','76800','115200'});
6 e3 j1 o, m+ q( Cset(handles.popupmenu3,'string',{'8','9'});
2 j% A  \0 U, A% N. \set(handles.popupmenu4,'string',{'1','1.5','2'});+ Z- L; V% P+ h* y2 A) Y
set(handles.popupmenu5,'string',{'NONE','ODD','EVEN'});
6 T1 Y7 |4 `: M: j2 e5 wset(handles.pushbutton1,'String','打开串口');
" ]/ s* p0 t8 VPorts = instrhwinfo('serial');
5 E) K# t0 R0 [, S% zport_num = length(Ports.AvailableSerialPorts);3 T- {9 \; t( S6 {  F5 _! j, a0 r3 F
ports_sum = '';% P1 p, o9 N( T# k8 t. h: @
if port_num > 0( S% @# m$ I( f' N& b$ m
    for i=1:port_num
; @& j9 _: G. a# C) U! |        ports_sum = [ports_sum,Ports.AvailableSerialPorts(i)];$ ~" s6 W2 d  b
    end
: I) N3 E, h) ]7 p8 P% i6 velse
8 x- @6 Y5 ^; p8 S) C' f( Y2 o    ports_sum ='None';
( K* P$ M" i( L3 O+ V" `! }end
  C2 \; T3 u* q  Yset(handles.popupmenu1,'string',ports_sum);" `4 {. e1 G0 C* @, M0 Z

) D; r! H& F9 B" D+ S9 s8 c, _2 `
! J  B1 J2 |! X( v步骤二:设置解包函数' d* E; _  u. z! m
当数据发上来后,要及时对数据进行解包,并通过数据传输协议进行数据处理,这一步是关键,解包的思路好坏将关系到程序的执行能力和图像的呈现。因为打包解包这个函数每个工程有自己独特的方式,此处仅截图。5 J+ t4 g5 _" {' B0 r3 ?
/ b3 e; @6 u: y) M6 X
0 z4 q) T0 J4 V+ k
8 e: u0 ^' g  W! N7 f- @' ^1 R
步骤三:设置回调函数3 y( J& e! B1 p- B2 O! i
回调函数的作用在于画波形,曾经我用过c#做过一个GUI,该工程波形的绘制是通过设置x轴y轴的变量,点与点之间连线实现的,matlab在这方面非常方便,用plot函数绘制波形,几乎用不到什么代码。至于timer定时器的使用方法可以去matlab官网查询。1 ~' j$ x# u& p- n; {3 l" O7 f

$ k% _) R6 _  uglobal timer1;%定时器1- V" a. g% L% e7 Q% A6 X0 ?( k
timer1 = timer ('TimeRFcn',{@drawNibp,handles},'Period',0.1,'ExecutionMode','fixedDelay','StartDelay',0.2);
' j$ w- U; e% M8 V& ~0 z9 H: c6 X- N6 P; m
& }# d% W% F: L
function  drawNibp(hObject, eventdata, handles)
: j$ @0 F2 j- _" n. Gglobal Data_NibpCP
" c  U  }2 W, G. V* m9 S  hglobal Data_NibpWA
: f4 g- h; i  ~5 S( \plot(handles.axes1,Data_NibpCP,'g');%画图袖带压
5 S/ A$ W) |: m2 J* aplot(handles.axes2,Data_NibpWA,'g');%画图脉搏波
# g5 X1 L) k" o( Rset(handles.axes1,'XLim',[1 912],'YLim',[500 2500],'Color',[0 0 0]);%设置坐标轴范围
" i; @6 i- q& n$ }7 o+ T* uset(handles.axes2,'XLim',[1 912],'YLim',[500 3000],'Color',[0 0 0]);%设置坐标轴范围+ Z2 T- H& m; e
set(handles.axes1,'Color',[0 0 0]);
7 i% H; T: P9 L  cset(handles.axes2,'Color',[0 0 0]);
1 f& B& I. A' F( x
; @* P6 K6 R5 W6 T
; F9 |% Y. Y7 e步骤四:设置回调函数的开始命令
9 w% p3 J" q3 s& H/ _' v' A回调函数在matlab中是需要一个开始命令的,以前波形一直没画出来,就是因为没有设置回调函数的start指令,当时怎么都查不出问题出在哪里。. m3 n; g1 P6 T0 X0 x
) Z1 M% e& T! P
global config_mes/ L" v- \  i/ B/ N3 c7 }6 d/ w
global timer1
4 v. w) f; i: n' c) `1 b* L$ P. X: m  o; G
switch get(timer1,'Running')
6 y+ y+ J$ n* ^0 \2 k8 `& C            case 'on'
: X, P! K; P8 k            case 'off'
/ }1 P2 P" _. u1 U9 \                start(timer1);3 c" Y1 v5 `5 Z8 E
end4 N6 i8 K( X: [; d" [6 z
. [3 h* \, J4 S) G& J
% `  H7 x/ r4 h4 `6 y# A1 R' l- Y1 Z) ^5 M) p
步骤五下发命令2 O/ r* T) d" E, [, E
下发的命令有如下顺序:先下发握手指令,当握手成功时下发模块设置指令,模块设置成功设置后启动无创血压测量命令。这里要说明的是,据个人经验和观察,matlab数据输出和写入都是以十进制数完成的。如果要转别的进制,以十六进制为例要用到如dec2hex,而转换函数是以字符串形式输出的,下位机识别不了字符串。这里以中止测量为例。`
# y2 b6 v  ]% w, ~& m, F
5 K, i; Z' {5 h, a! N, t; q: k; Ocom_pack_nibpStop = [00 00 00 00 00 00 00 00 00 00];
+ y: @9 x: [% U7 y7 o) ?9 Y( Q- W8 s% u/ D- y9 y! t
switch get(config_mes,'Status')
; m6 o4 l- K$ q: \7 d5 I5 m0 |) E3 Z        case 'open'0 z, Z9 y9 S2 J1 [* w2 D

8 L1 V( @' N( Y4 V            fwrite(config_mes, com_pack_nibpStop, 'uint8', 'async');
: X  w# k  K5 Q/ c) J2 S: e( A0 W, n! l
        case 'closed'
4 x6 V& D! S2 G; h. k
% a2 V: I- y6 M5 F: u5 a1 h end$ o2 j. R! t; ]; ^8 A0 e
& n# _/ J5 u- a7 n+ [( _$ G0 h

; @: y& Q/ ^, j" ?6 J
. x; R/ c+ b& i" E. b% J

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-24 05:39 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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