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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
步骤一:串口设置
% H) |$ E( e% y- G' A5 Y, h上位机和下位机实现数据传输是通过串口,以下是串口设置的内容(当然了,这部分都是基于GUI界面已经画好之后的设置)其中还有一个“打开串口”按钮未作说明,“打开串口”的响应函数中可以设置调用解包函数句柄。
$ B; w6 L2 z% n, C/ K; q! V
$ _8 K" e& v/ A+ qmovegui(handles.figure1,'center');%将图窗移动到屏幕上的指定位置
# a% o! x3 u5 y& N! D; X' N/ [3 R%movegui(h,position) 将图窗 h 移到指定的屏幕位置并保持图窗的大小。- K% ?. [, H) D
set(handles.popupmenu2,'string',{'4800','9600','14400','19200','38400','57600','76800','115200'});2 A/ e- q7 t6 V9 E7 {
set(handles.popupmenu3,'string',{'8','9'});
7 h5 d; M- [  R6 o/ Z5 Gset(handles.popupmenu4,'string',{'1','1.5','2'});
2 T& d7 V7 w& q. bset(handles.popupmenu5,'string',{'NONE','ODD','EVEN'});
2 p; E' n! U: rset(handles.pushbutton1,'String','打开串口');
  {1 P9 d/ x$ B) c5 Q8 OPorts = instrhwinfo('serial');0 ~8 a& c  E7 `2 f5 J3 G, N
port_num = length(Ports.AvailableSerialPorts);( S# n" i+ Q- |- F) y  r; A
ports_sum = '';: u3 j# `. q0 V
if port_num > 0# z" W% m! \+ S
    for i=1:port_num# ?: Z' s6 L7 h8 \/ g* t# l- J
        ports_sum = [ports_sum,Ports.AvailableSerialPorts(i)];
) a! r! M( }! n6 o    end+ i1 d# F0 b7 @  Q$ w/ p9 @: j
else
$ X' B+ \& w: Q2 P+ s" D6 Y/ d    ports_sum ='None';
1 z% Z, n, l1 f* L( b5 {# Tend
) {3 L/ a$ h7 P# }: Yset(handles.popupmenu1,'string',ports_sum);
! m4 p, D" F" R! d6 `+ _: ?% v* v2 `0 z2 l- I, [- w
& g- a3 M& I6 A
步骤二:设置解包函数* P: ?8 x, y7 I8 z' V, R6 M- {
当数据发上来后,要及时对数据进行解包,并通过数据传输协议进行数据处理,这一步是关键,解包的思路好坏将关系到程序的执行能力和图像的呈现。因为打包解包这个函数每个工程有自己独特的方式,此处仅截图。
& H5 ]  e/ M: s) |) `7 W5 t0 D0 i6 S9 G6 L1 R) n
8 S* ~3 v1 d# j
- e# L% M7 l% K. @
步骤三:设置回调函数
; o' U- b0 m1 J' W6 J, U3 D% T7 H回调函数的作用在于画波形,曾经我用过c#做过一个GUI,该工程波形的绘制是通过设置x轴y轴的变量,点与点之间连线实现的,matlab在这方面非常方便,用plot函数绘制波形,几乎用不到什么代码。至于timer定时器的使用方法可以去matlab官网查询。
/ j/ r6 t) k  `) {/ D- ?, e% O' d! m/ Z2 @
global timer1;%定时器16 P: ^/ E9 T. t1 G6 k- j5 _
timer1 = timer ('TimeRFcn',{@drawNibp,handles},'Period',0.1,'ExecutionMode','fixedDelay','StartDelay',0.2);
, l; p5 z' V! Q) S6 T# F) v0 Y, \- M4 X& D! N  v- @* o" l9 s

+ A5 U, w, B) `, }3 H3 M% T  rfunction  drawNibp(hObject, eventdata, handles)
) q* j0 b) j( k, ]4 Y( c+ ]9 Hglobal Data_NibpCP
; p4 B5 d9 [: P; N# f( Z9 r* yglobal Data_NibpWA
" G( l( l' }4 t4 o- @$ ~, j- Aplot(handles.axes1,Data_NibpCP,'g');%画图袖带压
0 w/ y  H" \" p' [7 ?3 Z( iplot(handles.axes2,Data_NibpWA,'g');%画图脉搏波
, {% O: w! o: |+ Pset(handles.axes1,'XLim',[1 912],'YLim',[500 2500],'Color',[0 0 0]);%设置坐标轴范围5 _& E2 T# ~6 q$ r+ D) [4 N% v  H
set(handles.axes2,'XLim',[1 912],'YLim',[500 3000],'Color',[0 0 0]);%设置坐标轴范围# s, W% }$ j- y; R* D8 T
set(handles.axes1,'Color',[0 0 0]);0 W+ _% Q8 z* a- f8 _* @+ S
set(handles.axes2,'Color',[0 0 0]);) I2 O! V8 o  f2 d0 L6 Y+ u0 G

, u0 r3 |/ ~* t5 u- ?3 a
+ a" Q! \2 C' Y& p步骤四:设置回调函数的开始命令8 Y; }; W$ K2 y* ~! Q
回调函数在matlab中是需要一个开始命令的,以前波形一直没画出来,就是因为没有设置回调函数的start指令,当时怎么都查不出问题出在哪里。& I' Q; H0 J$ h- D

' Q3 j4 V" [2 e' a4 K, U8 bglobal config_mes. I) Z, E; b. m) y5 F7 x( I
global timer1% k3 n" @$ h* G# d" v) p& f

9 \$ N: P+ Z0 ]8 Vswitch get(timer1,'Running')
1 g- [8 ]: v$ |1 t9 Y: {) F( Y            case 'on'
; m# [7 W8 m9 ~! ~; H: B            case 'off'
& h1 }, V% `7 K2 g( Q. {                start(timer1);* k3 i$ ?6 d, G8 I. S9 d( H
end3 M2 v$ v9 o' V* m& m5 }9 u+ G3 Q
7 d/ S# Y2 x; _1 f

* L: L% Z! \1 x8 q; x4 a步骤五下发命令' z; E/ \& Z) ^
下发的命令有如下顺序:先下发握手指令,当握手成功时下发模块设置指令,模块设置成功设置后启动无创血压测量命令。这里要说明的是,据个人经验和观察,matlab数据输出和写入都是以十进制数完成的。如果要转别的进制,以十六进制为例要用到如dec2hex,而转换函数是以字符串形式输出的,下位机识别不了字符串。这里以中止测量为例。`6 k* E9 y/ d/ D$ s" D

- D5 w* [+ s: s  scom_pack_nibpStop = [00 00 00 00 00 00 00 00 00 00]; ) l$ @2 D; I2 e2 R$ p0 K9 _

# T. U9 ?; d# p' h% T/ r; c switch get(config_mes,'Status')6 r- f3 z/ y' c7 h
        case 'open'
9 Y) E9 Z' O9 ^. O5 L2 `7 q$ [: ^9 i5 s, i6 z- w5 z
            fwrite(config_mes, com_pack_nibpStop, 'uint8', 'async');
* s& i4 ?7 D( e3 g% u( q) V; |
. F- r- g- O  X6 o3 I" P        case 'closed'
6 O# ^! t8 ~% Q  G( p5 h" O" ^2 U- W, I0 J1 i3 g) [
end# L$ e8 K$ H  ~" k: L

) M& @/ ]! W* d! f9 v3 O7 K& X- P! M7 k+ t

5 I2 v9 i$ J- `. b" `4 A

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-24 16:28 , Processed in 0.078125 second(s), 26 queries , Gzip On.

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

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

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