//Logo Image
作者:李哲熙(2009-02-17);推薦:徐業良(2009-07-06)

Visual Basic 2005擷取泰博TD-3250B資料

TD-3250B為泰博科技所開發的二合一血壓血糖計,經由搭配的傳輸線以及應用程式,可將量測的血壓血糖資料傳送至個人電腦顯示與儲存。本文將敘述如何撰寫Visual Basic 2005程式擷取TD-3250B的血壓血糖資料,為後續以Visual Basic建立分散式遠距居家照護系統之基礎工程。

1.     TD-3250B通訊協定

Visual Basic 2005訊號的擷取採用序列埠元件(SerialPort),常見的設定屬性包含通訊埠(PortName)、鮑率(Baud rate)、資料位元長度(DataBits)、同位檢查(Parity)、結束位元(StopBits)進行設定。表1TD-3250BRS232通訊規範,代表傳輸鮑率為19200Bps、資料長度為8位元、無同位檢查、以及開始停止皆為高電位。在此將序列埠元件命名為TD,並以此通訊規格進行設定序列埠的屬性(如圖1)。

1. TD-3250B通訊規範

Baud rate

19200

Data bit

8

Parity

No

Start bit

1

Stop bit

1

1. TD序列埠的屬性設定

2TD-3250B的通訊協定,指令的傳送需包含Start HexCMD/ACKData_0Data_1Data_2Data3Stop hex以及Chksum8個位元組資訊,其中Start Hex51。黃色部份代表由電腦端下達至TD-3250B的指令,而綠色為TD-3250B回應至電腦端的資料。生理訊號的擷取上,由上而下需應用讀取生理資料時間(Read the storage data with Index, part 1. (time))、讀取生理資料(Read the storage data with Index, part 2. (result))、讀取資料量的筆數(Read storage number of stored readings)、校正血壓計時間(Write system clock time)以及清除記憶體中資料(Clear/Delete all memory storages in slave device EEPROM)等五項指令。

2. TD-3250B通訊協定

大多數資訊以一位元組加以表達,然而Data_0Data_1位元組的結合有時用於代表不同的資訊,如時間(Day+Month+Year)、血糖資料(Glucose value)、收縮壓資料(Systolic)以及儲存的資料(Storage number),需要將兩位元組資訊進行剖析。表3為上述三項資訊的位元組資料,收縮壓以及血糖數據較為簡易,可由Data_0Data_1區分為bit0~bit15分別代表之;日期表示較為複雜,16位元資訊中可代表年、月、日等三項資訊,需先將Data_0Data_1進行二進位轉換後進而求得每一分項資訊。

3. Data_0Data_1位元組資訊

Data_0

Data_1

Year(7-bit)

Month(4-bit)

Day(5-bit)

6

5

4

3

2

1

0

3

2

1

0

4

3

2

1

0

Glucose value

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

Systolic

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

Storage number

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

2.     TD-3250B資料擷取流程

3為生理訊號擷取程式操作介面,當使用者按下讀取數據鍵後開始執行生理資料的擷取,流程依序為(1)開啟序列埠、(2)讀取資料量的筆數、(3)依序讀取每一筆的時間與數據、(4)清除記憶體中資料、(5)校正血壓計時間、(6)關閉序列埠、(7)儲存生理資料共7個步驟(如圖4),完成一次生理資料的讀取。執行流程的程式均於按鍵事件中(Button_Click)撰寫,將依序於下文程式中加以介紹。

3. 生理訊號擷取

4. TD-3250B血壓血糖資料擷取流程

2.1 序列埠的開啟與資料量筆數的讀取

5程式碼包含序列埠的開啟以及資料量筆數的讀取兩部份,當序列埠開啟後即可開始與TD-3250B進行溝通。{&H51, &H2B, &H0, &H0, &H0, &H0, &HA3, &1F}8位元組矩陣為讀取資料量的筆數指令,透過寫入(write)屬性即可將該8位元組依序傳送至TD-3250B中,完畢後TD-3250B立即回傳資料量筆數至電腦端,透過序列埠DataReceived屬性程式的撰寫即可加以接收。

5. 開啟序列埠與讀取TD-3250B資料量的筆數

6為序列埠TDDataReceived屬性中程式的撰寫,首先設定一固定長度的位元組矩陣,並將擷取的位元組資料依序填入矩陣內。當完整擷取8個位元組時,代表TD-3250B回傳資訊已傳送完畢,令變數instring_buf等於Byte0~Byte7,中間皆以*號加以區隔,以方便後續資料的處理。DataReceived與主程式隸屬不同執行緒,instring_buf資料無法直接於主程式中顯示,需經由委派函式DisplayTD方可於主程式中加以顯示。

6. 序列埠TDDataReceived屬性中程式的撰寫

7為委派函式DisplayTDcomData代表經委派後的變數instring_buf的資料。令主程式中物件getdata等於comData,即可顯示instring_buf資料,達成資料的委派顯示。完畢後物件getdata經由文字的拆解(split),取出Data_0以及Data_1資訊後即可計算出TD-3250B中資料量的筆數。

7. displayTD委派函式

2.2 時間與生理資料的擷取

得知儲存於TD-3250B中資料量的筆數後,即可依序讀取所有的生理資料。生理資料包含量測的時間以及數據兩部份,透過不同指令傳送至TD-3250加以顯示,並以READ_TD_TIME以及READ_RECORD兩副函式加以解析,擷取出正確的資訊。圖8代表讀取最新的量測資料,傳送時間指令{&H51, &H25, &H0, &H0, &H0, &H0, &HA3, &19}以及資料指令{&H51, &H26, &H0, &H0, &H0, &H0, &HA3, &1A}即可在getdata物件中讀取最新的量測時間以及資料數據(與先前所述DataReceived位元組的擷取以及資訊的委派相同,故不再贅述),並由READ_TD_TIME以及READ_RECORD副函式位元組的解析,擷取出正確的量測時間與數據。

8. 讀取最新量測的生理資料

READ_TD_TIME副函式用於擷取生理資料的時間,時間可由Data_2以及Data_3位元組直接顯示,然而Data_0Data_1位元組包含年、月、日(Year+Month+Day)等三種資訊,需先將兩位元組進行十進位轉二進位進行解析(如圖9),完畢後的將兩位元組彙整成1601的字串。根據TD-3250B通訊協定,前7個位元代表年資訊,以西元加以計算,09代表西元2009年,接續4位元代表月資訊,而最後5位元代表日資訊。經由上述位元資訊的剖析後,即可得到生理資料量測的日期與時間。

9. 日期位元組十進位轉二進位

輸入{&H51, &H26, &H0, &H0, &H0, &H0, &HA3, &1A}指令後,即可於getdata物件中讀取最近量測的生理資訊,並透過READ_RECORD副函式擷取血壓血糖資料。根據TD-3250B通訊協定中,收縮壓和脈搏資料的擷取較為簡易,可由Data_2Data_3數據中直接取得,而收縮壓亦或血糖資料,則同樣需經由十進位轉二進位方式進行剖析,再轉化成1601的字串,進而求得實際的資料。圖10READ_RECORD副函式的部份程式碼,血壓或是血糖資料以Data_2Data_3來判斷,當兩位元組均為零代表為血糖資料的量測,否則即為血壓資料的量測,並將生理資料製作成特定的格式,用於後續生理資料的儲存。

10. 血壓血糖資料的讀取

2.3 記憶體的清除與時間的校正

讀取生理資料完畢後,輸入{&H51, &H52, &H0, &H0, &H0, &H0, &HA3, &46}指令即可清除儲存於TD-3250B中的生理資料。TD-320B時間的校正較為複雜,需彙整出所需的{&H51, &H33, &HDate1, &HDate2, &HMinute, &HHour, &HA3, &HChksum}指令寫入。圖11為時間指令的擷取流程圖,MinuteHour為目前時間直接轉化為十六進位即可;與Date1Date2為日期資訊,需先將年月日等三資訊轉化為二進位方式表示,接續彙整成兩組位元組數據,再轉位為十六進位方式方可達成;Chksum為前七位元組總和,加總完畢後轉化為十六進位,擷取後兩位數值代表之。數值的十進位轉二進位程式已於先前介紹過,而十進位轉十六進位使用Hex函式即可直接轉換,故不再贅述。將整理完畢的位元組命指依序寫入,即可校正TD-3250B的系統時間。

11. 時間指令的擷取流程