//Logo Image
作者:巫佳哲(2010-07-20);推薦:徐業良(2010-07-20)
附註:本文為九十九學年度元智大學機械工程研究所巫佳哲碩士論文「多元化糖尿病照護管理系統開發」第四章。

第四章 系統專用機設計與開發

本章敘述多元化糖尿病管理照護系統中,在專用機上運作的系統軟體設計與開發。專用機的功能與第三章所敘述的軟體版功能相同,僅在介面上有稍微簡化,因此本章不再敘述系統功能定義與功能流程,主要介紹如何建置專用機系統。

4.1    硬體簡介

本研究採用Friendly ARM公司(http://www.arm9.net)所生產的Mini2440作為專用機的開發平台。Mini2440採用Samsung所生產的S3C2440處理器,其PCB採用四層板設計,詳細規格如表1,其外觀如圖4-1。在作業系統支援上有WindowsCE.NET 6.0(R3)Linux2.6.32.2兩種,本研究中選用Linux2.6.32.2Mini2440的作業系統,並搭配QT(http://qt.nokia.com/)介面開發工具來開發使用者的操作介面。

4-1. Mini2440規格表

項目

規格

處理器(CPU)

三星S3C2440ARM920T core with MMC,最高主頻可達532MHz

內存(SDRAM)

64Mbyte

Flash

1G Nand Flash + 2M Nor Flash(已經安裝了BIOS

液晶屏支持(LCD Support)

7吋液晶屏,800×480LED背光

USB端口(USB Port)

1個主USB界面,1個從USB界面

音頻(Audio)

1路身歷聲音頻輸出界面(標準3.5mm界面),1路麥克風界面

網路(LAN)

1100M乙太網RJ-45口(採用DM9000網卡)

SD/MMC

1SD/MMC卡存儲界面

攝像頭(Cemera)

引出CPU內部全部攝像頭訊號引腳

串口(UART)

3個串行口,COM0RS232 DB9界面(亦引出TTL界面),COM2COM32.0mm間距

Jtag

標轉JTAG界面(2.0mm間距)

按鍵(buttons)

6個用戶按鍵

LEDs

4個用戶指示燈

I2C器件(I2C bus)

AT24C08

AD輸入(AD input)

可調電阻AD輸入實驗

PWM控制蜂鳴器

PWM控制蜂鳴器

實時時鐘(RTC)

板載實時時鐘,帶有備份鋰電池

擴展界面(Expansion)

134pin 2.0mmGPIO界面,140pin 2.0mm系統匯流排界面

電源輸入(Power Supply)

5V電源輸入

尺寸(Dimensions)

100×100mm

4-1. Mini2440(http://www.arm9.net)

4.2    系統架構

專用機的系統架構與第三章所敘述的軟體版本不同,軟體版只由一支Microsoft Visual Studio 2008所開發的應用程式所建構而成,可以達成第二章所敘述的所有功能,並是以微軟Windows作業系統為執行環境。專用機的執行環境為Linux2.6.32.2,並使用arm-linux-gcc 4.3.2交叉編譯器,系統架構是由VitalSignsDDS_Webwgethttpd等四支不同的應用程式所建構,其中wgethttpd應用程式為自由軟體(GNU, http://www.gnu.org/),常用於Linux系統中。

4-2所示為專用機的系統架構圖,主要分為近端裝置資料處理與遠端網路請求處理兩部分,前者是由VitalSigns應用程式和wget應用程式負責處理,後者則是由DDS_Web應用程式和httpd應用程式負責處理。近端裝置資料處理的部分主要是由VitalSigns負責與血糖機通訊,並且處理擷取到的資料與存入專用機的SD記憶卡中,若有警示的需求,則會啟動wget來發送訊息給應用伺服器,再藉由應用伺服器轉發EmailSMS等訊息給遠端使用者;遠端網路請求部分處理的部分主要是由httpd接收由遠端管理程式(瀏覽器、VB程式)所發送出來的請求,再啟動DDS_Web來判斷請求的內容並讀取相對應的請求資料,最後透過httpd回覆遠端請求的資料。

4-2. 應用程式關係圖

本章依序介紹VitalSignsDDS_Web兩支應用程式的程式架構與流程,以及wgethttpd網頁伺服器的操作方式。

4.3    VitalSigns應用程式

VitalSignsQT的應用程式。QT是一個跨平台的介面開發工具,使用C++程式語言,因為QT擁有完整的C++圖形函式庫,所以適合使用者圖形介面的設計。本研究使用QT 2.3.12的版本作為QT的開發環境,並搭配arm-linux-gcc 4.3.2交叉編譯器,圖4-3QT介面設計軟體畫面。VitalSigns主要在達成讀取與設定血糖機、血糖資料處理、待辦事項檢視、貼心留言檢視和使用者操作介面等五大功能。接下來依序介紹專用機的介面設計與流程,

4-3. QT介面設計軟體畫面

4.3.1        介面流程與介面設計

專用機的設計概念是提供一個簡易的操作環境,所以本研究在專用機的介面設計上,去除了一些複雜的操作介面,例如報表列印、使用者設定與進階檢視,讓使用者可以簡易的上傳血糖機資料與檢視最近量測資料。但為了功能的完整性,使用者還是可以藉由遠端照護程式來進行前述功能。圖4-4至圖4-8分別為專用機首頁、資料匯入、資料檢視、待辦事項、貼心留言等分頁設計畫面。

4-4. 專用機首頁分頁

4-5. 專用機資料匯入分頁

4-6. 專用機資料檢視分頁

4-7. 專用機待辦事項分頁

4-8. 專用機貼心留言分頁

4.3.2        程式撰寫

在程式的撰寫上與第三章的軟體版本的撰寫方式相同,將程式依照功能的類型分開撰寫,以達成模組化的目的,方便日後系統維護或者式加入其他模組。目前此應用程是分為序列埠模組、裝置通訊模組、血糖資料模組、使用者資料模組、留言模組、待辦事件模組和其他模組等功能模組,分別敘述如下

(1)   序列埠通訊模組

目前的血糖機裝置設備,不論是透過USBRS232或藍牙等傳輸介面,當接上Mini2440時,皆會被換為序列埠(COM Port)通訊,所以在系統上,只需要透過序列埠通訊,就可以接收到血糖機資料。目前Mini2440內建三組RS232序列埠,除了第一組以預設給標準輸出使用,其餘的皆可以自由使用。另外也可以藉由USB232的方式再擴充出一組序列埠來使用,因為Linux以內建相關USB232(pl2302)的驅動程式,所以不需要考慮前端驅動程式的處理。在撰寫程式時,必須先查詢相關的序列埠代號,圖4-9Mini2440序列埠代號(紅框)。序列埠通訊模組的功能就是開關序列埠以供其他模組使用,函式表如表4-2

4-9. Mini2440序列埠代號(紅框裡)

4-2. 語言模組的函式表

函式名稱

函式功能

ComPort_Open

開啟序列埠

ComPort_Close

關閉序列埠

(2)   裝置通訊模組

裝置通訊模組主要是透過序列埠來與血糖機通訊,函式表如表4-3。血糖機通訊指令可能會依照血糖機型號不同而有所不同,但函式主要目的皆相同,當要支援不同型號的血糖機時,只要預先把血糖機通訊指令存儲到程式碼中,系統就可以支援該血糖機。以華廣瑞特GM550血糖機為例,當使用者啟動匯入血糖機資料事件時,系統會執行DeviceGMXXX_Read函式,再依照函式程序,依序執行讀取型號(DeviceGMXXX_Get_Model)、讀取時間(DeviceGMXXX_TimeUnitSetLoad)、校正時間(DeviceGMXXX_Correct_Time)、讀取筆數(DeviceGMXXX_Get_Date_Number)、讀取裝置資料(DeviceGMXXX_Get_Data)、刪除裝置資料(DeviceGMXXX_EEPROM_Erase_EnableDeviceGMXXX_EEPROM_Erase_All),當程序完成後,就完成了裝置讀取的事件,系統取得血糖機上最新血糖資料,並校正血糖機時間(DeviceGMXXX_Correct_Time)

4-3. 裝置通訊模組的函式表

函式名稱

函式功能

DeviceGMXXX_Read

裝置讀取程序

DeviceGMXXX_Get_Model

讀取裝置型號

DeviceGMXXX_TimeUnitSetLoad

讀取/設定裝置時間

DeviceGMXXX_Correct_Time

校正裝置時間

DeviceGMXXX_Get_Date_Number

讀取裝置內資料筆數

DeviceGMXXX_Get_Data

讀取裝置中的某一筆資料

DeviceGMXXX_EEPROM_Erase_Enable

啟動刪除血糖機資料模式

DeviceGMXXX_EEPROM_Erase_All

刪除血糖機資料

(3)   資料存取模組

資料存取模組的功能在執行資料的儲存、讀取和檢查,資料內容包含血糖資料、使用者資料和系統設定資料等,函式表如表4-4。圖4-10為使用者資料檔案內容,其中包含了血糖單位設定、使用者名稱、性別、作息時間等資訊。

4-4. 資料存取模組的函式表

函式名稱

函式功能

Data_Check_File

檢查檔案是否存在

Data_Check_Dir

檢查資料夾是否存在

Data_Make_Dir

建立資料夾

Data_GoIn_Dir

進入資料夾

BGData_Read_From_To

讀取時間內的血糖資料

BGData_Read_last_True

讀取血糖資料(最後筆數)

BGData_Read_True_Data

讀取血糖資料

BGData_Read

讀取血糖資料

BGData_Save

儲存血糖資料

BGData_Unit_Change

血糖單位換算

Configure_ini_Read

讀取系統設定資料

User_Infor_Read

讀取使用者設定資料

Configure_ini_Save

儲存系統定資料

User_Infor_Save

儲存使用者設定資料

4-1120105月份的血糖資料檔案,血糖資料存檔方式為以月為單位形成一個檔案,檔案內容格式為“時間(yyyy/MM/dd HH:mm:ss)<Tab>BG血糖類型<Tab>是否加入分析<Tab>標註<Tab>飯前\飯後\<Tab>備註內容<Tab>單位<換行>”。例如圖4-11中的第四筆資料內容解讀為:在2010516160秒所量測,血糖值為605mg/dl,不加入分析,標註內容為“Hi!”,為飯前量測,備註內容為“<Hi!>超過儀器可測量最高值.”,單位為“mg/dL”。

4-10. 使用者資料檔

4-11. 20102月分的血糖資料檔案

(4)   留言模組

留言模組主要是處理留言功能,包含新增、刪除、讀取、儲存留言等函式,函式表如表4-5。留言資料存檔方式為以月為單位形成一個檔案,檔案內容格式為“時間(yyyy/MM/dd HH:mm:ss)<Tab>Message<Tab>留言內容<Tab>編號<Tab>是否未讀取<換行>”。例如圖4-12中的第一筆資料內容解讀為:在2010714日下午21847秒所留言,留言內容為“留言測試”,留言編號“20100714141847JVAB”,已讀取留言。

4-5. 留言模組的函式表

函式名稱

函式功能

Message_Data_Add

新增留言資料

Message_Data_Delete

刪除留言資料

Message_Data_Read

讀取系統的留言資料

Message_Data_Save

儲存留言資料到系統

Message_Data_Read_last_True

讀取系統最後留言

4-12. 20102月份留言儲存檔案內容

(5)   待辦事件模組

待辦事件模組主要是處理待辦事件功能,包含新增、刪除、讀取、儲存待辦事件等函式和設定提醒方式,函式表如表4-6。待辦事件存檔方式為以月為單位形成一個檔案,檔案內容格式為“時間(yyyy/MM/dd HH:mm:ss)<Tab>Event<Tab>待辦事項類別代號<Tab>待辦事項內容<Tab>編號<換行>”。例如圖4-13中的第一筆資料內容解讀為:在20100714日下午41900秒所設定,待辦事件內容為“骨科回診”,為“回診提醒”類別,待辦事項編號“20100714141941XIJG”。

4-6. 待辦事件模組的函式表

函式名稱

函式功能

Event_Data_Add

新增待辦事件

Event_Data_Delete

刪除待辦事件

Event_Data_Read

讀取系統的待辦事件

Event_Data_Save

儲存待辦事件道系統

4-13. 20107月份待辦事件儲存檔案內容

4-7. 待辦事件類別代號表

類別代號

類別

A

回診通知

B

吃藥通知

C

量測通知

D

約會通知

E

其他通知

(6)   其他模組

此模組內,主要式放置一些小函數,例如BMI計算式、延遲函式清除暫存空間函式等,函式表如表4-8

4-8. 資料存取模組的函式表

函式名稱

函式功能

Calculate_BMI

計算BMI

TimeDelay

延遲

Bzero_Analyze_buf

清空分析資料暫存空間

CreateRandomID

建立隨機編號,編號格式:yyyyMMddHHmmss+四個亂碼(0~9A~Z)

4.4    wget應用程式

wget是一支自由軟體,本名為「World Wide Web」和「Get」的結合,主要可以透過網路抓取網頁與檔案的功能,並且支援HttpHttpsFTP三種常見的網路協定,但只有終端機介面,沒有圖形介面。

目前在mini2440上所內建的wget是簡易版本,常用於嵌入式系統中,簡化的大部分的功能,但主要抓取網頁的功能還在,所以在本研究中,利用此功能來傳送http指令給應用伺服器或其他伺服器,達成網路資料傳輸的功能。其用法如圖4-14所示,利用指令“wget http://grc.yzu.edu.tw/index.htm”來抓取http://grc.yzu.edu.tw/index.htm網頁,詳細用法或參數,可藉由在終端機上輸入指令“wget -h”來顯示其說明檔,如圖4-15

4-14. wget用法

4-15. wget的說明檔

4.5    httpd應用程式

httpd也是一支自由軟體,為Mini2440內建程式,主要功能是提供一個簡易的網頁伺服器,並且支援CGI(Common Gateway Interface)動態網頁功能,本研究使用httpd作為專用機截取網路請求與顯示網頁資料的媒介。在建置系統前,必須將httpd的參數設定正確,這樣專用機的系統網頁功能才可以正常運作。下面依序介紹參數設定方式與本系統如何使用httpd應用程式擷取網路指令與網頁顯示。

4.5.1 參數設定

httpd的參數都記錄在/etc/boa/boa.conf這個檔案內,如圖4-17。首先必須決定系統網路連結的通訊埠portport的設定在其檔案的第1行;為了讓CGI動態網頁有足夠的權限可以啟動DDS_Web應用程式,所以必須賦予足夠的權限,權限設定在其檔案的第23行,不過注意若是權限設定root身份要小心安全性問題;接著要指定網頁放置的目錄,在其檔案的第7行,必須將網頁放置在此目錄下才可以正常顯示;最後因為本系統規劃的網路指令中,動態網頁的副檔名皆使用egi,為了使專用機能正常接收網路指令,所以必須將egi的附檔名加入此檔案中,如設定檔的第15行,httpd應用程式也可以接收附檔名為egi的網頁請求。

4-16. /etc/boa/boa.conf內容

4.5.2 擷取網路指令與網頁顯示

在專用機系統裡目前的網頁規劃除了首頁index.html(圖4-17)為靜態網頁之外,其餘的網頁皆是CGI動態網頁型態,如表4-9為專用機系統的所有網頁名稱與說明。在CGI動態網頁的撰寫上,使用的語言為shell語言,其指令很類似於在終端機輸入時所使用的指令。CGI有提供許多的環境變數可以使用,其中專用機系統使用到QUERY_STRING環境變數,QUERY_STRING等於動態網頁名稱問候後面的字串,舉例來說網路請求指令為

http://140.138.40.180:13101/to_pic.egi?pas=I_am_superman.?cmd=test?user=squid_wu?userpas=DDS

此時QUERY_STRING等於

“pas=I_am_superman.?cmd=test?user=squid_wu?userpas=DDS”

本專用機系統便是利用此特性來接收網路指令。

4-17main.egi動態網頁的程式碼,一開始使用“cd”指令進入tmp目錄內,接著第5“main.egi”字串存入eginame檔案內,第8行再將QUERY_STRING環境變數寫入query檔案,第13行啟動DDS_Web應用程式來判斷指令並列印相對應的文字,最後CGI則會將以上程序所列印出來的文字回覆到遠端的瀏覽器顯示。其他DDS的動態網頁程式碼除了第5行內的名稱有更動外,其餘部分皆與main.egi動態網頁相同。

4-17. index.html網頁內容

4-9. 專用機系統的所有網頁名稱與說明

名稱

說明

index.html

首頁

main.egi

首頁內容

config.egi

修改DDS的網路位址

hostip.egi

修改Application ServerIPPort

time.egi

修改UDP Time Server網路位址和DDSRouter SubMask

rpserver.egi

修改Centralized ServerIPPort

vital.egi

生理訊號或日誌顯示

infor.egi

用戶資料顯示

state.egi

帳號狀態顯示

to_pic.egi

控制指令指向網頁

4-18. main.egi網頁內容

4.6    DDS_Web應用程式

DDS_Web是一支由C語言所建構的Linux應用程式,屬於一支被動的應用程式,必須藉由其他應用程式來啟動,主要功能是用來判斷網路的請求,並且依據請求內容回覆相對映的資料。DDS_Web主要是由以下3C程式碼檔案及基本函式庫所組成,各檔案內的所有函式說明如表4-10

4-10. 各檔案所包含的函數介紹

檔案名稱

函式

說明

main.c

read_egi_name

讀取eginame檔案

read_query

讀取query檔案

mian

主程式

ARMDDSNet.c

Net_Check_Http_Cmd

判斷網路指令

ARMDDSEgi.c

put_egi

回覆內容

4-16為其程式流程,當DDS_Web被啟動後,首先會藉由兩個函式read_egi_name()read_query()分別讀取eginamequery兩個檔案,再藉由Net_Check_Http_Cmd()判斷網路指令,最後透過put_egi()回覆請求的內容。其中put_egi()函式中,會先讀取預先放置在MMC中的原始網頁內容,再將其內容傳送給httpd,若當讀取到@符號開頭的代碼時,DDS_Web會將其轉換為@代碼所包含的內容,表4-11@代碼說明。透過網頁伺服器的轉換,遠端的瀏覽器就會顯示相關的網頁內容。

4-16. DDS_Web程式流程

4-11. @代碼說明

名稱

@代碼

說明

main.egi

@v, @t, @s, @r, @o, @S

PIC IP AddressRouter GatewayHttp PortApplication Server IP AddressApplication Server PortDDS Time

config.egi

@v, @t, @s,

PIC IP AddressRouter GatewayHttp Port

hostip.egi

@r, @o

Application Server IP AddressApplication Server Port

time.egi

@m, @u, @n

UDP Time Server IPSubnet MaskLocal TCP Server Port

rpserver.egi

@p, @q

Centralized Server IP AddressCentralized Server Port

vital.egi

@z

data

infor.egi

@y

Personal information

state.egi

@V

Login state(0:fail, 1: OK)

@U

Renew account, 0: fail, 1:OK

to_pic.egi

@Z

網路指令