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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
步骤一:串口设置
' E7 b& i5 l" C8 M. F9 {1 y- S' k上位机和下位机实现数据传输是通过串口,以下是串口设置的内容(当然了,这部分都是基于GUI界面已经画好之后的设置)其中还有一个“打开串口”按钮未作说明,“打开串口”的响应函数中可以设置调用解包函数句柄。
$ B, s" q/ e0 n
/ Q+ p4 n" m& d$ T" s# Pmovegui(handles.figure1,'center');%将图窗移动到屏幕上的指定位置
6 D8 V( E) K+ k: a3 K; E0 A%movegui(h,position) 将图窗 h 移到指定的屏幕位置并保持图窗的大小。
9 L, ~) e; `( a2 U+ Z( Lset(handles.popupmenu2,'string',{'4800','9600','14400','19200','38400','57600','76800','115200'});. f: h0 o9 j$ L8 Q4 V  X) Q
set(handles.popupmenu3,'string',{'8','9'});
% o# t/ {6 ?6 [: u; n  nset(handles.popupmenu4,'string',{'1','1.5','2'});7 g6 n8 h5 |8 `7 F$ [7 u
set(handles.popupmenu5,'string',{'NONE','ODD','EVEN'});
! t$ ?8 j5 v  @set(handles.pushbutton1,'String','打开串口');% D) ^* T! D0 R4 T* z+ b
Ports = instrhwinfo('serial');
% m5 Y) @# J+ G3 ]* h( i5 `port_num = length(Ports.AvailableSerialPorts);
- G/ ~5 `1 y8 E% e+ e4 h( Wports_sum = '';
) ?+ u) f: H! G4 S9 v  N# J+ dif port_num > 0
4 e6 U$ l% B) w7 F1 e: ~6 \    for i=1:port_num
1 L! e+ T2 p! o        ports_sum = [ports_sum,Ports.AvailableSerialPorts(i)];
2 o+ u7 T4 Y/ D! m" @    end
. T4 ]; ^, k3 C% T/ r% _0 D2 Telse
5 h0 y9 S& t7 t( I    ports_sum ='None';4 M( b1 d3 h; D& V8 v% O: D; |
end0 w4 d! [( @) ]) V1 F; {: F
set(handles.popupmenu1,'string',ports_sum);! F. j6 k: g+ S$ s6 l

: l% M) b7 p$ s: X( }4 M8 U2 S) z% z5 o
  E6 X! t. J' H步骤二:设置解包函数
- q; c6 s9 n$ H7 [" H& t- v% ?当数据发上来后,要及时对数据进行解包,并通过数据传输协议进行数据处理,这一步是关键,解包的思路好坏将关系到程序的执行能力和图像的呈现。因为打包解包这个函数每个工程有自己独特的方式,此处仅截图。
; q! B0 Q: i4 b# A9 s7 D* H( E) ^$ N% G8 B
. y" [. Y& q! z/ ^/ Z

; r; a2 [) U+ ^5 J! n: @步骤三:设置回调函数
$ ~1 d# Y1 \5 @; {: y! o回调函数的作用在于画波形,曾经我用过c#做过一个GUI,该工程波形的绘制是通过设置x轴y轴的变量,点与点之间连线实现的,matlab在这方面非常方便,用plot函数绘制波形,几乎用不到什么代码。至于timer定时器的使用方法可以去matlab官网查询。
( l2 F" w9 v0 S6 G# n! n; r2 s) d* \5 p! T- X* D
global timer1;%定时器12 d9 i0 i) k8 D( a9 D
timer1 = timer ('TimeRFcn',{@drawNibp,handles},'Period',0.1,'ExecutionMode','fixedDelay','StartDelay',0.2);1 ?( W% l% P; E/ `
4 I! g+ S% A  g8 k, d
8 k/ n4 f+ I8 P. ?9 j4 |: V- M
function  drawNibp(hObject, eventdata, handles)
( O' e6 L) j: O' ^% ?global Data_NibpCP
+ |4 u  `8 U; kglobal Data_NibpWA0 T* ], I/ D5 T3 c' g( {% N
plot(handles.axes1,Data_NibpCP,'g');%画图袖带压
. v2 w/ J, b3 U1 F3 j+ _plot(handles.axes2,Data_NibpWA,'g');%画图脉搏波
; {# Z- k; d# Y. _# k4 fset(handles.axes1,'XLim',[1 912],'YLim',[500 2500],'Color',[0 0 0]);%设置坐标轴范围/ i/ z" }  v* M
set(handles.axes2,'XLim',[1 912],'YLim',[500 3000],'Color',[0 0 0]);%设置坐标轴范围% s5 ~; s# U% N' x( v
set(handles.axes1,'Color',[0 0 0]);+ [" J$ o6 O1 O8 s! N
set(handles.axes2,'Color',[0 0 0]);5 F" {) }  ^( b3 {8 n
) N4 n; g8 V; S% p

9 z0 A) A# e' t步骤四:设置回调函数的开始命令
. o% x/ G1 u6 C回调函数在matlab中是需要一个开始命令的,以前波形一直没画出来,就是因为没有设置回调函数的start指令,当时怎么都查不出问题出在哪里。' l! c7 F( [: w7 l5 s$ }7 l

9 f) Q2 j8 ]5 N; D) oglobal config_mes5 t5 }4 r3 s# u2 I# j8 _" s
global timer1! \5 {3 P- E. w& p

8 H3 J/ E3 L: u- X0 ]7 \0 v1 Aswitch get(timer1,'Running')
6 q: V' m6 m! l; Z8 u: P, C            case 'on'
( |5 i3 A+ j7 L$ @5 r! v            case 'off'
+ v; c" r% M; {5 n4 n, Y4 U: B                start(timer1);/ I2 q$ _' r" s9 d& f/ b8 {
end
' u7 r4 s- Y. W3 ]& K( c
% v: T4 A# E5 m; ^+ ~$ B1 h/ }
8 Q1 A" s$ l( `步骤五下发命令
! ?: `+ _5 E& S3 h, ~下发的命令有如下顺序:先下发握手指令,当握手成功时下发模块设置指令,模块设置成功设置后启动无创血压测量命令。这里要说明的是,据个人经验和观察,matlab数据输出和写入都是以十进制数完成的。如果要转别的进制,以十六进制为例要用到如dec2hex,而转换函数是以字符串形式输出的,下位机识别不了字符串。这里以中止测量为例。`
: A0 k1 I: e0 o2 }# J& \% c2 v; W+ k7 K
com_pack_nibpStop = [00 00 00 00 00 00 00 00 00 00]; ( H% H! M4 q0 H* R
3 N- O+ @2 P$ [4 y5 H) e( l  g
switch get(config_mes,'Status'): R( m* R* q: V& K5 u' ~! l
        case 'open'! `5 r- y; g7 q7 Q' G% G; d

$ W8 w: ~3 ]( |5 w# A, @  e* D9 I; n            fwrite(config_mes, com_pack_nibpStop, 'uint8', 'async');4 h! Q8 @/ `7 Z) i3 y: H0 h. f# G9 W
8 {( h2 i1 o* k/ d  v
        case 'closed'5 A6 e+ Q; x( z

* V  s( S+ g: A1 A  C& Z0 {5 `- Q' ] end  x" B4 s1 p( v. `0 Q

. \9 \& |! n" @, a/ a% \6 U; l5 i: T0 z4 [) o, _* `) P

: @  ~( m# _, Q4 F8 r2 m! l

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-25 11:31 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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