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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
步骤一:串口设置2 j; H/ U% y8 T; d) t* }
上位机和下位机实现数据传输是通过串口,以下是串口设置的内容(当然了,这部分都是基于GUI界面已经画好之后的设置)其中还有一个“打开串口”按钮未作说明,“打开串口”的响应函数中可以设置调用解包函数句柄。
4 P3 l: Y  V; a( b
% A, N4 A8 `! ^6 U/ M1 Omovegui(handles.figure1,'center');%将图窗移动到屏幕上的指定位置$ x, w+ @  O! S9 C% R
%movegui(h,position) 将图窗 h 移到指定的屏幕位置并保持图窗的大小。
" d& }( f2 e, }( q+ n1 u9 iset(handles.popupmenu2,'string',{'4800','9600','14400','19200','38400','57600','76800','115200'});  l5 q) {2 R. q# Q7 d2 H) C
set(handles.popupmenu3,'string',{'8','9'});
( i' A. w3 e- f6 R  Z8 ~set(handles.popupmenu4,'string',{'1','1.5','2'});
1 S" K, _9 d$ H8 ]! B% lset(handles.popupmenu5,'string',{'NONE','ODD','EVEN'});8 _5 [; |4 u9 i; u
set(handles.pushbutton1,'String','打开串口');# a, T; k4 U+ [
Ports = instrhwinfo('serial');
' [, m$ A" T/ r4 j; |port_num = length(Ports.AvailableSerialPorts);
) T6 \- t9 x4 R9 S$ W4 k) J+ mports_sum = '';
  _' [3 W9 y' _; b8 Yif port_num > 0
5 W/ F- G* h2 F" M: `& x5 G    for i=1:port_num
+ q! b# z1 h: ^        ports_sum = [ports_sum,Ports.AvailableSerialPorts(i)];; g! P5 X/ H3 n5 B" S
    end
$ M' q) w, C# L* z1 @" Helse6 e$ ~+ }/ s, b  ~
    ports_sum ='None';
8 Z  ?8 G. f' n6 T8 ~1 r- ~: xend
# P8 a: d6 {) @set(handles.popupmenu1,'string',ports_sum);
5 u% D# r0 w- A- d. j7 T( W+ f; m7 U* D9 i! f
" v, [( M/ M- A0 [
步骤二:设置解包函数
+ l" g! x2 ~( i- l3 b当数据发上来后,要及时对数据进行解包,并通过数据传输协议进行数据处理,这一步是关键,解包的思路好坏将关系到程序的执行能力和图像的呈现。因为打包解包这个函数每个工程有自己独特的方式,此处仅截图。9 a4 W1 q# N# Q8 |

' @4 n! @# T4 N
/ \7 c& y! Z' k! w6 p% c: Y3 g, L
步骤三:设置回调函数! T0 M/ J" z1 j6 [+ M- W8 D" {
回调函数的作用在于画波形,曾经我用过c#做过一个GUI,该工程波形的绘制是通过设置x轴y轴的变量,点与点之间连线实现的,matlab在这方面非常方便,用plot函数绘制波形,几乎用不到什么代码。至于timer定时器的使用方法可以去matlab官网查询。, Z5 V4 x% E& g1 Z
# l6 n/ l0 ?8 w6 U  A0 C1 w
global timer1;%定时器1
5 ?, W% V$ |  @4 Btimer1 = timer ('TimeRFcn',{@drawNibp,handles},'Period',0.1,'ExecutionMode','fixedDelay','StartDelay',0.2);" v2 m, {$ K$ z0 v! \

2 `5 s4 m# R1 m! S7 Y, c' Y5 F
' j; J, W1 A4 a6 cfunction  drawNibp(hObject, eventdata, handles)- e' g& P8 o# ]( \) B2 D
global Data_NibpCP
, \0 G) v: N; j" B. B- W$ p) \global Data_NibpWA
6 Z3 @2 Y9 l0 fplot(handles.axes1,Data_NibpCP,'g');%画图袖带压( x$ N1 a& ?4 W6 e/ k" I7 V8 [5 |
plot(handles.axes2,Data_NibpWA,'g');%画图脉搏波3 o# D9 ^) [; X
set(handles.axes1,'XLim',[1 912],'YLim',[500 2500],'Color',[0 0 0]);%设置坐标轴范围
" ^! }. M/ j1 ~3 _6 B) Bset(handles.axes2,'XLim',[1 912],'YLim',[500 3000],'Color',[0 0 0]);%设置坐标轴范围3 Q  k8 }; z! M4 x# B( `: Q
set(handles.axes1,'Color',[0 0 0]);7 W* K9 z8 D5 ^  u8 b$ M) @
set(handles.axes2,'Color',[0 0 0]);
5 ?  D! Q0 Y0 r- \. |! t* z
4 f+ b/ h$ G! U+ w4 _4 _
+ u+ y$ j/ u$ q% s+ q2 i步骤四:设置回调函数的开始命令# f* K6 y! m( Y0 T7 W9 o
回调函数在matlab中是需要一个开始命令的,以前波形一直没画出来,就是因为没有设置回调函数的start指令,当时怎么都查不出问题出在哪里。
0 [- U3 ]/ s; A* Z* h- ~+ {1 Y4 @0 C2 f8 r5 ^- Y. L+ Y' d
global config_mes
  n- }3 ]3 K" L/ S# Hglobal timer1
. E+ N& i, r( v2 t6 L3 l8 |! n2 Q: i: W" R
switch get(timer1,'Running'); \$ i+ V2 F6 Z8 z+ h; a! K
            case 'on'
5 |1 Q, K5 ^7 g5 T3 a1 ?% E0 l            case 'off'% `4 c. _' a* R* E, W% x* i
                start(timer1);' z$ r" L; q: T& X; y8 F
end- u6 U, p3 s! m/ `7 X
4 q  ^8 K9 T+ ?. R1 U- L
3 p3 m7 y; D! K6 _- b
步骤五下发命令
8 u8 L2 O7 g: B0 `- \5 X& f下发的命令有如下顺序:先下发握手指令,当握手成功时下发模块设置指令,模块设置成功设置后启动无创血压测量命令。这里要说明的是,据个人经验和观察,matlab数据输出和写入都是以十进制数完成的。如果要转别的进制,以十六进制为例要用到如dec2hex,而转换函数是以字符串形式输出的,下位机识别不了字符串。这里以中止测量为例。`6 S7 c: C" R6 Z7 M

" r9 D( q3 V6 S: ?com_pack_nibpStop = [00 00 00 00 00 00 00 00 00 00]; * I4 u4 ^. V. w0 ?& b! B" Y

( t# K" [. K7 o3 Q# n switch get(config_mes,'Status')( ^5 O/ n2 ?6 U1 S( e: p+ g/ z
        case 'open'
  v8 h* G7 t" e4 U! ]3 B
3 v7 c+ G& f! |0 E            fwrite(config_mes, com_pack_nibpStop, 'uint8', 'async');
3 I/ T- l% @3 j' |5 L4 t" ]& z3 i" E
        case 'closed'! ^3 J% f( h  w/ `  I. r
, v9 \: f2 i* w6 v
end, K0 F0 T1 ~7 D! f" }

1 b4 \& A8 A$ h( L5 ^* p) j  F/ m3 T5 `
# _5 a6 J6 ~4 G+ V' o

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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