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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
步骤一:串口设置
9 s$ o1 y' Q. O/ b* S5 s( e: L上位机和下位机实现数据传输是通过串口,以下是串口设置的内容(当然了,这部分都是基于GUI界面已经画好之后的设置)其中还有一个“打开串口”按钮未作说明,“打开串口”的响应函数中可以设置调用解包函数句柄。9 Z& z% S( z! G: q+ G7 N
5 b$ O: B7 G* W& ~( F! c. ~
movegui(handles.figure1,'center');%将图窗移动到屏幕上的指定位置
+ x0 i0 @9 @: i' E. l%movegui(h,position) 将图窗 h 移到指定的屏幕位置并保持图窗的大小。( ?& d5 P) N; O1 r% e: X; H9 ]  j
set(handles.popupmenu2,'string',{'4800','9600','14400','19200','38400','57600','76800','115200'});
9 A0 J! L( _# Qset(handles.popupmenu3,'string',{'8','9'});3 S/ G# f  D$ N' @& Y2 b& {. z
set(handles.popupmenu4,'string',{'1','1.5','2'});
& e2 P, m' a; ?! V1 Yset(handles.popupmenu5,'string',{'NONE','ODD','EVEN'});6 j" p8 Q% @# ^! V
set(handles.pushbutton1,'String','打开串口');
- h2 m# O, l$ ?5 {1 XPorts = instrhwinfo('serial');
; J. X2 P  h* u# B8 }port_num = length(Ports.AvailableSerialPorts);8 h$ g2 p& N. h2 N/ |* `
ports_sum = '';1 U! m6 H" f6 U8 G( \- x0 a# `
if port_num > 0
, h: o  H# K% B. w5 W: |    for i=1:port_num
/ U5 t7 Z. O  Y  s; m        ports_sum = [ports_sum,Ports.AvailableSerialPorts(i)];
/ Z8 [' ~0 t& A1 w    end. c7 I* T8 q5 o6 D4 T
else4 K3 x' R; \7 v- O. \$ z, Y
    ports_sum ='None';
! T) D( B) m- C" K' @- U4 Nend1 ?0 b: @- U1 g; V+ l- f+ ?
set(handles.popupmenu1,'string',ports_sum);
8 }& p) f! z& m3 e  R# V2 Q3 d' E; H4 s: i  M8 U; H- j! P) s2 b
9 ]$ ^9 V9 O7 V( u
步骤二:设置解包函数) s/ z, ]  ]1 q0 u% D3 E
当数据发上来后,要及时对数据进行解包,并通过数据传输协议进行数据处理,这一步是关键,解包的思路好坏将关系到程序的执行能力和图像的呈现。因为打包解包这个函数每个工程有自己独特的方式,此处仅截图。
7 @% y! w9 Y, C0 b3 G
& Q) x8 I1 e0 [3 O& M" ` 5 M1 G9 Y+ [! z7 w

4 C7 O- B+ k9 r, C$ C步骤三:设置回调函数
8 b$ {4 p1 ^+ [7 I, t" Q回调函数的作用在于画波形,曾经我用过c#做过一个GUI,该工程波形的绘制是通过设置x轴y轴的变量,点与点之间连线实现的,matlab在这方面非常方便,用plot函数绘制波形,几乎用不到什么代码。至于timer定时器的使用方法可以去matlab官网查询。
5 G; j, h5 n: d6 z# F# Y' [0 d
( s  |8 r0 n6 dglobal timer1;%定时器1
9 d7 {& {; B* s1 w& B+ Otimer1 = timer ('TimeRFcn',{@drawNibp,handles},'Period',0.1,'ExecutionMode','fixedDelay','StartDelay',0.2);  t; @+ A- G, ~+ S. z, [$ W
9 F7 W! w9 A# v- N6 R+ N7 L

, m2 N7 T7 i) R* k3 Jfunction  drawNibp(hObject, eventdata, handles)9 I; ?& x7 |0 ?9 @( n7 O' H
global Data_NibpCP* Z$ G9 q% r* ?$ r5 u, n# T% a, R' M
global Data_NibpWA0 f9 u2 z' L' d1 Y
plot(handles.axes1,Data_NibpCP,'g');%画图袖带压; b1 ]+ S! H. [) t
plot(handles.axes2,Data_NibpWA,'g');%画图脉搏波1 ?5 S' c$ X/ e2 q# v
set(handles.axes1,'XLim',[1 912],'YLim',[500 2500],'Color',[0 0 0]);%设置坐标轴范围
7 i# ^$ V5 w! d7 T' }4 ]5 o% Z7 x2 Dset(handles.axes2,'XLim',[1 912],'YLim',[500 3000],'Color',[0 0 0]);%设置坐标轴范围( v! A7 U( G" w% ^8 {" \$ i% x. L- N
set(handles.axes1,'Color',[0 0 0]);
  n9 h$ h9 o! I5 g- S+ s7 H8 _( Uset(handles.axes2,'Color',[0 0 0]);; f4 N2 M9 h2 [% t: X% H) t
, N+ y7 l. Y" M1 d# \8 ~
0 {; C9 `  Q: k
步骤四:设置回调函数的开始命令* i' D# ~% y1 l. F; F* K
回调函数在matlab中是需要一个开始命令的,以前波形一直没画出来,就是因为没有设置回调函数的start指令,当时怎么都查不出问题出在哪里。3 r! \; |* O5 G" q* g+ D+ @

, g: P$ L/ F. P/ Jglobal config_mes5 z# u% F9 ~: K$ U! q
global timer1+ ]2 c  ^  c# A9 M0 \+ n

% n4 B0 ?% O. X2 d. Aswitch get(timer1,'Running')0 t; e) l5 x% O% E6 C
            case 'on'1 X% ], x4 z. Z$ U$ G, J9 D# z
            case 'off'
* z6 Y6 C9 F% n7 c2 M  R! N                start(timer1);: Z7 |2 p2 d) l9 _+ ?
end" L# s. Z9 w, L8 j
) N1 G9 K& J" Z5 O7 G* r

0 a# g8 Q& @  U: s步骤五下发命令$ R2 S% l  R) n6 A
下发的命令有如下顺序:先下发握手指令,当握手成功时下发模块设置指令,模块设置成功设置后启动无创血压测量命令。这里要说明的是,据个人经验和观察,matlab数据输出和写入都是以十进制数完成的。如果要转别的进制,以十六进制为例要用到如dec2hex,而转换函数是以字符串形式输出的,下位机识别不了字符串。这里以中止测量为例。`
3 K& C: I+ l7 E- Y0 \( Y) X
$ x0 R  a! Z+ a; hcom_pack_nibpStop = [00 00 00 00 00 00 00 00 00 00]; 7 r2 ^& V6 S# `1 {" B/ D

4 |  G& j  ]* \# Q: M0 F" s switch get(config_mes,'Status')
' i# m7 s$ o/ E! s7 [( n4 p        case 'open'  e" A6 E7 S# ^! i1 \

# W! s! j& i) q            fwrite(config_mes, com_pack_nibpStop, 'uint8', 'async');6 F0 }8 j6 v1 U9 s8 P9 G
5 T+ z) f  M- n& I; B) Z1 U
        case 'closed'8 [3 B: c: \8 ?* t3 V
6 _+ r# c; ]" R5 b7 K7 ]
end
) j8 O$ q) v0 \. g9 n3 Y* A  ]( ~7 Y" U0 a$ r; z1 G

4 ]2 [2 T2 a+ l% F
4 M' _+ K, d  z8 O4 j/ C

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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