EDN China > 设计实例 > 医疗电子 > 视频诊断与监控 > 正文
? 2016博客大赛-不限主题,寻找电子导师,大奖升级??

利用BB-Black设计的远程医疗监测智能硬件

柏雪峰?? 杨斌?? 刘博?? 西南交通大学?? 单片机与嵌入式系统应用?? 2015年07月28日 ?? 收藏1

2. 远程监控功能实现

系统以BB-black为平台,提供用户远程登录访问嵌入式Web服务器Boa,查看该服务器上的被监护人近期生理数据功能;为了实现数据存放功能,作者针对嵌入式设备,采用开销小、可移植性强、便使用且高效的嵌入式SQLite数据库。而CGI(Common Gateway Interface)通用网关接口,则是Web服务器和SQLite数据库之间的桥梁,作为客户端与Web服务器交互的标准接口,可按照该标准编写应用程序实现静态HTML网页无法实现的数据库访问和搜索功能,实现客户端与服务器的交互操作。其工作原理如下图5所示。

图5 远程监控模块软件构成与工作原理
图5 远程监控模块软件构成与工作原理

首先,由客户端通过浏览器向服务器发起请求,嵌入式Web服务器端收到请求后触发指定的脚本程序对请求进行解析,并执行相应的CGI应用程序。

其次,CGI应用程序根据请求信息调用相应的SQLite数据库操作程序,并把数据库操作程序的执行结果以HTML文档形式传递给Web服务器;嵌入式Web服务器分析、处理HTML文档信息,并将最终数据内容传送给客户端浏览器。

最后,由客户端浏览器对数据内容进行解析,并以网页形式显示给客户。

2.1 嵌入式Web服务器Boa

2.1.1 嵌入式服务器Boa的选用

ARM Linux开发环境下支持httpd、thttpd和Boa三种嵌入式Web服务器。作者选用的是可执行文件小、运行过程中需要的资源小的嵌入式Web服务器Boa。

Boa作为一种单任务的HTTP服务器,通过建立HTTP请求列表来处理多路HTTP连接请求,同时在处理请求过程只为CGI程序创建新进程,在最大程度上节省了系统资源,对嵌入式系统来说至关重要。同时它还具有自动解压文件、生成目录等功能。

2.1.2 Boa功能实现

设计中Boa服务器需实现接收客户端请求、分析请求、响应请求和向客户端返回请求结果等任务。其工作流程如下图5所示。

图6 Boa服务器工作流程
图6 Boa服务器工作流程

Boa服务器初始化工作代码实现:

Boa服务器初始化工作代码实现

上述代码首先创建一个无阻塞的流式套接字描述符socktfd,提供面向连接的可靠传输。然后利用bind()函数将指定端口与套接字描述符关联,最后利用listen()函数在指定端口监听,等待Request请求。

当监听到连接请求,服务器调用get_request()函数获取请求信息,利用accept()函数建立连接,接收请求、分析信息,进行HTTP认证确认,处理请求信息,并将结果发送、显示到Web浏览器;当有CGI请求时,创建CGI处理进程,并将处理结果发送、显示到Web浏览器。

2.1.3 Boa在ARM上的移植

首先,针对BB-Black和实际应用场景对Boa服务器源代码作以下修改:(1)根据监护人数量指定HTTP请求列表限制参数;将服务器的输入输出缓存空间设为最大值,以加快生理数据传输速度;(2)通过编写实现一些简单函数,来精简Linux操作系统库函数,节约资源。

其次,利用arm-linux-gcc交叉编译环境,配置生成大小为175.8KB的boa可执行程序。通过bin.arm-linux-strip boa指令剥去附带的编译信息,得到仅59.4KB的ARM平台可执行文件。

最后,通过修改Web服务器的配置文件boa.conf:监听端口为80,注释掉绑定IP地址设置栏,KeepAliveMax值为50,KeepAliveTimeout值为10,服务器名字为www. RemoteMedicalMonitoringSystem.com;以及CGI路径,访问日志和错误日志的存放路径等运行参数;将该配置文件和可执行文件boa放到BB-Block平台的/home/www目录下;执行genromfs-f romfs.img-d romdisk命令生成一个含有Boa服务器的根文件系统,通过bootloader烧写到存储器。完成Boa到ARM平台的移植。

2.2 CGI与SQLite数据库移植

BB-Black开发板在运行CGI和SQLite程序前,需要将相应的库移植到开发板。设计通过交叉编译之后将CGI的libcgic.a和capture拷贝到BB-black开发板的/home/www/cgi-bin目录下,完成移植工作(可通过网页访问该目录,若在网页上显示cgic test的字样,则表明cgi库移植成功);将SQLite的sqlite3和libsqlite3.so.0.8.6分别下载到BB-black开发板的/usr/bin和/usr/lib目录中并通过ln –s /usr/lib/libsqlite3.so.0.8.6 /usr/lib/libsqlite3.so.0命令,建立软连接(因为可执行程序sqlite3在运行的时候搜寻libsqlite3.so.0动态库),完成移植工作。

2.3 远程监控功能实现

2.3.1 HTML设计

远程医疗监控界面主要有监护人登录界面和被监护人生理数据监测界面。其中脉搏和心跳监测HTML页面首行代码

用action="pluse_heart_monitor.cgi"将表单指向pluse_heart_monitor.cgi处理程序,method="get"指定获取环境变量的方式为get;程序的最后几行用type="submit"或type="reset"指定点击这两个按钮时提交表单;其他生理数据监测页面与此相似。

2.3.2 CGI和SQLite数据库互动设计

CGI与SQLite数据的互动主要包括CGI程序在SQLite数据库上建立生理数据表,插入生理数据;CGI按照表单提交内容对数据表进行增删改查询操作;其主要的控制函数代码如下:

CGI和SQLite数据库互动设计

其中getcgidata()实现GET和POST两种方式从网页获取字符串函数;若为””“GET”方式,则通过getenv("QUERY_STRING")函数获取字符串函数;若为“POST”方式,首先用atoi(getenv("CONTENT_LENGTH"))函数获取字符串长度,再利用(char)fgetc(stdin)函数依次获取单个字符。

通过getcgidata()函数从网页获取的字符串中各数据项由‘&’符号隔开,getstringdata()函数则是去掉‘&’符号,提取有效信息,为select_pluse_spo2()函数对SQLite数据库执行查询操作提供参数。

select_pluse_spo2()函数以getstringdata()函数得到的有效信息为参数,执行打开数据库、查询数据、向网页打印数据操作。部分功能实现代码:

CGI和SQLite数据库互动设计

【分页导航】


?? ?? ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
?? ??

智能硬件? BB-Black?

相关文章

我来评论
美国的游客
美国的游客 ??? (您将以游客身份发表,请登录 | 注册)
?
有问题请反馈