//Logo Image
作者:馬鴻祥(2005-04-13);推薦:吳昌暉、徐業良(2005-04-15)

PIC_SERVER教材(12)—以VB程式讀取與呈現MMC記憶卡儲存資料

本教材將針對先前教材中敘述之PIC_SERVER數據蒐集、遠端控制、與MMC記憶卡讀寫資料等功能,以Visual Basic程式作一整合性應用,藉以實現遠端蒐集資料下載至近端電腦作後續處理。

1.     整體工作流程

本文所希望達成的功能如圖1所示。感測器訊號傳遞到PIC_SERVER上的單晶片,經單晶片A/D轉換並儲存至MMC記憶卡上。Client端的VB程式發出下載命令,並附加正確密碼,單晶片即依據client的指令以及EEPROM的動態網頁中的EGI碼,讀取MMC中特定位址的資料,取代該EGI碼後送交clientclientVB程式完成動態網頁檔的資料下載後,亦將進行後續的分割與處理。

1. 本文所希望達成的功能

達成圖1中的功能,需要遠端VB程式、動態網頁檔程式、以及PIC_SERVERC程式等三個部分,以下一一詳細介紹。

2.     VB程式遠端下載網頁文字

本文介紹之VB程式使用“Microsoft Internet Transfer Control (MSINET.OCX)”元件,此控制元件可支援FTP(File Transfer Protocol)GopherHTTP(HyperText Transfer Protocol)HTTPS(HyperText Transfer Protocol with SSL – Secure Socket Layer)4種網際網路通訊協定,以提供傳輸資料之用。

如同Microsoft Winsock Control控制元件一樣,Microsoft Internet Transfer Control並不是VB預設的控制元件,所以必須自行引用至程式專案中。如圖2所示,在VB程式專案中,選擇專案è設定使用元件è選擇Microsoft Internet Transfer Control,雙擊Microsoft Internet Transfer Control控制元件後,便會出現在工具列中。

2. 設定使用元件路徑

使用Microsoft Internet Transfer Control元件來下載網頁文字只需要一行指令

        Inet.OpenURL(IP)

此指令是傳回此IP的文字,而通常IP連結後會被指向index.htmdefault.htm。例如以此指令抓取元智大學首頁網頁文字,如圖3所示,傳回的是首頁的原始碼。

3. 下載元智大學首頁文字

3.     動態網頁檔程式

以下以「可攜式遠距健康監測系統(Portable Tele-Monitoring System, PTMS)」下的分散式資料伺服器(Distributed Data Server, DDS)MMC卡所儲存的資料為例,說明如何讀取、呈現。DDSMMC卡中儲存了每一天之長期健康監測資料,如果將MMC處理並顯示在 PIC_SERVER動態網頁檔上時,而不作特殊處理,遠端VB程式直接下載時會得到類似圖3的連續文字,下載後很難作資料處理及繪圖。因此希望PIC_SERVER動態網頁呈現的是像圖4這樣具有規律的呈現方式,每個文字皆以特徵符號“*”分隔,便利後續分離文字的處理,其中特徵符號可自行定義。

4是目前讀取PTMS下的DDS資料時所用的動態網頁,由兩個動態網頁檔組成,分別鑲於上下框架中,其中1~5行屬於上框架,第6行屬於下框架。上框架的第一行是DDSDS1302時間晶片所記錄的時間,第二行代表DDS上即時的訊號,第三行則回傳MMC狀態的代碼,第四行紀錄寫入MMC的起始日期,第五行文字僅是提供後端軟體下載檢查用;而下框架的第一行則是顯示記載於MMC上的資料。

4. 以特徵符號“*”分隔動態網頁檔上的文字

實現圖4內容的兩個動態網頁檔如圖5所示,其中所引用的EGI碼在PIC_SERVER教材(7)中已有詳細討論。fmmpic.egi中使用到“@1”碼,是索引到block_1_data[…]這個陣列。block_1_data陣列在pic_SERVER_egi.c樣版程式中預設大小為48,可傳回480~255的陣列數據,但在特別情況下預設值可能不敷使用,只要如下在C程式的開端重新定義block_1_data陣列大小即可:

        #define   BLOCK_1_DATA_LENGTH  288

如此便可使block_1_data陣列有288的長度大小,雖然可任意改矩陣大小,但也需注意不可超過PIC_SERVER單一檔案1460byte的限制。

5. 動態網頁檔內容

4.     PIC_SERVERC程式

6是對應圖5動態網頁檔內容之PIC_SERVERC程式。如圖1所示,本文所希望達到的主要功能,是讓遠端使用者利用VB介面送出密碼與命令,要求PIC_SERVER下載MMC某一特定位址資料。在DDSMMC儲存資料格式,是以是以寫入資料日期來指定讀取MMC上特定“位址”,即讀取特定寫入日期的資料。如圖6所示,當PIC_SERVER收到client傳來的命令,即儲存於http.clientCmd[]中的命令碼,C程式隨即將http.clientCmd[]轉換成程式開發者所定義的日期碼(圖中455行),再將日期碼所對應的日期轉換成MMC上相對應日期的位址(圖中462行),並依序讀取(圖中464~484行)存於變數中(圖中467~482行的year[]month[]day[]hour[]min[]s1

6的程式是針對DDSMMC儲存資料格式所撰寫,不同資料格式當然可以撰寫仿照相對應的讀取程式。

6. DDS部分C程式碼

在圖4的下框架中,可見以星號分隔文字“D00015B003”,此字串所代表意義為「D+天數+B+批次」,D00015代表MMC上第15天的資料;在DDS中,一天的所有資料量需要分8次傳遞,因此也需要有批次的命令,B003亦即第3批的資料。此字串即在DDS中,VB介面所需下達的命令格式。

回到圖3VB介面,要控制網頁輸出日期,僅需在文字方塊內輸入以下字串:

140.138.40.166/to_pic?pas=I_am_superman.?cmd=D00018B003

按下「OpenURL」按鈕後,這時候PIC_SERVER應當收到命令而吐出第18天、第3批次的網頁。此處也可以撰寫更精緻的介面,將IP、密碼(I_am_superman)、和指令分開輸入。

接著同樣在文字方塊下輸入以下字串:

        140.138.40.166/fmmpic.egi

再次按下「OpenURL」按鈕,即可看到下達命令所得到動態網頁的結果。

5.     VB程式離動態網頁檔上的文字並作資料繪圖

瞭解如何讀取MMC特定位址資料,並以星號分隔的方式呈現在PIC_SERVER的動態網頁檔上之後,本節繼續討論如何以VB程式下載並分離這些動態網頁檔上的文字。

7是一個簡單的過濾文字VB程式介面,表1所列為此VB介面所需元件與屬性,圖8為其程式碼。鍵入IP並點選「OpenURL」按鈕後,觸發了Command1_Click()副程式,Text1文字方塊即出現從PIC_SERVER下載之原始文字內容,以特徵符號“*”分隔。接著按下「Split」按鈕觸發Command2_Click()副程式,分離原始文字內容顯示於Text2文字方塊,並逐一存入整數矩陣Data中。其中分離文字需要使用“split”指令,用法如下:

        Split(原始文字內容, “特徵符號”)

7. VB過濾與分離文字效果

1. 元件與屬性表

元件

屬性

設定值

Form

Name

Form1

Caption

VB_DEMO

Frame

Name

Frame1

Caption

下載文字

Frame

Name

Frame2

Caption

過濾文字

Frame

Name

Frame3

Caption

分離資料

Label

Name

Label1

Caption

IP

Text

Name

IP

Text

140.138.40.166

Text

Name

Text1

Text

Name

Text2

Text陣列

Name

Text3(0)~ Text(15)

CommandButton

Name

Command1

Caption

OpenURL

CommandButton

Name

Command2

Caption

Split

CommandButton

Name

Command3

Caption

個別資料

Inet

Name

Inet1

8. VB下載與分離文字程式碼

此樣本程式中MMC儲存資料為每18個數據一組,因此按下「個別資料」按鈕觸發Command3_Click()副程式,將Data中的資料儲存在16×18的矩陣“Collect_Data”中,以利後續繪圖處理。

若欲觀察Collect_Data矩陣某一行或某一列的數據趨勢,可利用VB的繪圖工具“MSChart”描繪出來。MSChart也不是VB預設的控制元件,必須在在VB程式專案中,選擇專案è設定使用元件中,選擇“Microsoft Chart Control 6.0(OLEDB)”

繪圖的指令僅需將矩陣資料指給MSChart的屬性ChartData即可,如圖9程式碼所示,要繪製Collect_Data中第6組數據,先以for迴圈將Collect_Data的第6行資料抽取出來存入data6矩陣,再將data6指給屬性ChartData,結果如圖10所示,按下「繪圖」按鈕後,即觸發了圖8Command3_Click()事件,此繪圖功能所需元件與屬性如表2所示。

9. 繪圖指令用法

10. data6資料描繪

2. 繪圖功能所需元件與屬性

元件

屬性

設定值

Frame

Name

Frame4

Caption

繪圖

CommandButton

Name

Command4

Caption

繪圖

MSChart

Name

MSChart1

Column

1

ChartType

VtChChartType2dLine

使用者可根據需求,將前述資料讀取、分離、繪圖等程式整合成一個介面,並可以利用Visual Basic提供的近百個模組與控制項,如下拉式選單、萬年曆等,設計讓使用者更方便、更簡單使用地統介面。