[訊息論壇] ICE Messaging Forum 塗能宇
<實作篇> 嵌入式裝置的遠端監控程式開發 ── 在
Pocket PC、Excel、C# 上開發 iPush® Embedded 客戶端
收到「即時」資料後,該怎麼辦呢?所謂的「即時」資料,都只會出現在某一個「瞬間」。也就是說若不進行處裡,您只要眼睛眨一眨,資料就 bye bye 了。所以如何將收到的資料,盡量做「不同」
的有效應用,就變得非常重要,否則再多的即時「資料」,也很難變成足以幫助判斷與決策的「資訊」。
如果讀者不健忘,上一期我們提到早先為了蒐集資料要跋山涉水,或是使用數據機也要提心吊膽的故事。但事情當然不是這樣就完了,通常資料蒐集完後還有一堆事情要做。例如用
Excel 進行分析啦、放到資料庫啦,還有經常需要彙整後,傳送給其他單位做研究或是參考。
嵌入式裝置能正常工作雖然重要,但資料的紀錄及進階分析工作也不可少。這時候,負責儀器的人,就開始資料的層層移交程序。這一些動作說起來只有兩三句話,但是實際做起來常常少則幾小時,多則可能需要好幾個工作天。
資料只不過是一堆數字,如果沒把它整理分析,或是套進數值模式跟歷史資料比對一下,看看與預測的誤差或是迴歸分析結果是不是差太多。
否則到底要如何找出是儀器需要重新調整,還是真的只是因為老天爺心情不好的緣故而導致。
所以,最理想的狀況,就是不同的應用程式或是使用者都能「隨時」、「同時」得到自己所需的資料,然後根據個別的需要進行資料的處理。例如:警示、
資料分析、即時預測、備分到資料庫等,這一些可能對傳統嵌入式裝置很難做到,但是對於裝有本來就提供即時、多點服務的 iPush®
Embedded 的 PC-based PLC Controller 來說,做起來真是輕鬆愉快。
對傳統嵌入式裝置來說,通常同時僅能容許一個連線。也就是說,當某一個人正在監看控制器資料的時候,可能其他人就連不進來了。對於比較新式的 PC-based 控制器來說,上面
雖然可能有 Web 伺服器,解決了資料監看的問題,但是卻隱藏著安全性問題。此外,連線數一高,服務效能也會隨之降低。
iPush®
Embedded 本來就是為了服務多客戶端所設計的,所以做起多類型客戶端的服務,完全沒有這些困擾。
在上一期我們已經實作了一個 iPush® Embedded 的 VB 客戶端範例,本期我們將延伸上期的內容,並將重心移到不同
種類客戶端 ── Pocket PC、Excel、C# 的資料展現方式上。
由於內容較多,我們僅提示重點過程,詳細實作內容,讀者可以利用本文最後之連結下載範例程式自行研究。若還有進一步的問題,歡迎利用本電子報的討論功能來進行心得交流。
電腦的硬體製造技術在這幾十年,可以說是獲得了長足的發展。教科書中,以前一間房子大小的硬體功能,還不如現在一手可以掌握的 PDA,甚至是行動電話中的功能。PDA
跟古老的機器比,能力當然強很多,要是跟現在的桌上型電腦比,在特定用途上,若只是看看文件或電子書、寫寫電子郵件,其實也是綽綽有餘的。
現在看起來理所當然的事,以前可是花大把銀子也不見得做得到。像是利用掌上型電腦收集遠端裝置的資料,常需要依賴系統廠商提供專屬的「整體」軟硬體搭配,才能夠達到要求。現在只要利用
iPush® Embedded 提供的 Windows CE ActiveX 元件
(API),加上 eVB (eMbedded Visual Basic),馬上就讓到處買得到的
Pocket PC
搖身一變,成為既省錢,又方便的隨身資料接收器。
接下來,我們簡要示範如何利用在 Pocket PC 上開發 iPush® Embedded
應用程式。在這邊,筆者將以手邊的
iPAQ 3870 為例,用 eVB
寫一個與上一期範例程式擁有相同外觀及功能的客戶端程式。
eVB
是微軟提供的免費開發工具,您可以在微軟的網站 http://www.microsoft.com/downloads/,找到 evt2002web_min.exe,下載並進行安裝。
同時,筆者也已經為
iPAQ 3870 安裝好適合其使用的 Windows CE / StrongARMv4 iPush®
ActiveX Control 元件 (iPushXCE.ocx)。在此我們且略過 ActiveX
Control 的佈署程序。
首先,我們先啟動 eMbedded Visual Basic 3.0,然後開始實作相關的程式內容:
|
圖一、eMbedded Visual Basic 3.0,看起來和 Visual Basic
幾乎一樣的嵌入式軟體開發環境 |
接下來就是引用 iPushXCE.ocx 與 iceHMsg.ocx 這兩個 API
函式庫。不過因為開發與測試環境還是在 PC
上,所以我們在這邊引用的會是 x86 版本的元件:
|
圖二、引用 iPush®
API for Windows CE,因開發環境所致,所以用的是在 PC 上執行的
x86 版本 |
接下來,我們進入表單設計的部分。我們將 iPushXCE.ocx 與 iceHMsg.ocx
這兩個iPush®
元件加入表單中,然後沿用上一期範例的命名方式,將它們分別命名為 iPushX1 及 iceHmsg,以簡化修改相關程式碼。
接下來,就是移植程式碼的程序了,這一個步驟一點都不麻煩,只消使用 "複製" 和 "貼上"
就可以完成大部分的工作。
請將上一期的程式碼複製到如下的
eVB 表單中:
由於 eVB 並不支援一些原有的 VB
函式,所以程式必須要在兩個地方稍做修改:
|
圖五、將 VB 使用的 Str() 函式修改為 CStr() |
在完成引用元件、設計表單、複製程式碼、修改使用函式後,程式幾乎就已經完成了。接下來就是將程式編譯成可在 Pocket PC 上執行的 .vb
檔。請選擇 [File] 功能表上的「Make iPushCE_Weekly_CE.vb」命令:
|
圖六、編譯成可在 Pocket PC 上執行的 vb 格式檔案 |
最後用微軟提供的資料同步工具 ActiveSync 將編譯好的程式,複製到 Pocket PC
的資料夾中:
|
圖七、利用 ActiveSync
將程式部署到 Pocket PC 中
(其實只需要複製 iPushCE_Weekly_CE.vb 檔即可) |
最後,我們就可以直接在 Pocket PC
上,點按執行,看到除了 Size
縮小,但幾乎和上一期功能一模一樣的 iPush®
客戶端程式,不同的是它的「重量」只有幾百公克。我們就這樣把原來拿來看電子書、記行事曆的
PDA,變成一個可以隨身帶著走的 iPush®
Embedded 資料收集器了:
|
圖八、在
iPAQ 上實機執行的 iPushCE_Weekly_CE.vb,來自 iPush®
Embedded 的即時資訊可以走到哪收到哪 |
對很多使用者來說,數字永遠比不上會動的圖表,或是五顏六色的圖形變化來得容易了解或是具有說服力。圖表除了好看之外,其實也是拿來比較歷史資料或是預測趨勢的好工具,尤其是連續或周期性的資料,把即時資料拿來跟歷史資料一比較,馬上就可以看到預估與實際的誤差,然後可以做進一步的分析修正。當然,這也有可能是嵌入式裝置出問題前,你所能知道的最後警告。
Excel 有非常強大的資料分析能力,也搭配了不錯的圖表功能。加上它的 VBA (Visual Basic for Application)
功能,提供了一個類似 Visual Basic 的開發環境。對於程式開發人員來說,除了顯示的畫面由 Visual Basic 的表單,變成
Excel 一格格的資料表外,其他的幾乎和 Visual Basic 一樣,所以設計起來非常方便。
在下面的例子中,我們將示範如何在 Excel 中,接收來自 iPush®
Embedded 的資料,並將顯示在圖表中。
在開啟 Excel 後,我們第一步還是先進行表單的設計及將 iPush®
ActiveX Control元件加入到 Excel 工作表中。
請選擇 [檢視] 功能表中的 [工具列] / [控制工具箱],然後按下
[其他控制項] 鈕,將
iPushX 及 IceHMsg
這兩個控制項加入表單中。然後,將控制項分別命名為 iPushX1
(來自 iPushX)、iceHMsgIn (來自 IceHMsg)、iceHMsgOut (來自
IceHMsg):
|
圖九、選擇
[工具列] 中的 [控制工具箱] |
|
圖十、將 iPushX 及
IceHMsg 控制項加入表單中 |
|
圖十一、將控制項加入表單中。請注意必須在設計模式,才能看到這些控制項的顯示 |
在 Excel 中,我們省去了在 Visual Basic中,畫文字方塊及標籤的步驟,直接用 Excel
工作表中的儲存格,來做即時資料接收顯示與資料輸入的工具。
在這裡,我們使用:
-
IP 位址輸入 (IP):Sheet1.Cells(3, 5)
-
連記埠號 (Port):Sheet1.Cells(4, 5)
-
使用者名稱 (User Name):Sheet1.Cells(5, 5)
-
密碼 (Password):Sheet1.Cells(6, 5)
-
類比輸出:Sheet1.Cells(4, 2)
-
類比輸入:Sheet1.Cells(6, 2)
-
連線資訊顯示:Sheet1.Cells(1, 2)
-
系統資訊顯示:Sheet1.Cells(2, 2)
而命令按鈕的控制項名稱,也請套用與上一期 VB 範例相同的名稱,這樣可以減少修改程式碼的負擔。
請選擇 [工具] 功能表中的 [巨集] / [Visual Basic 編輯器],進入 Excel 的 VBA
編輯環境。將上一期程式碼有關輸入資訊的部分,以及資料顯示的部分,由文字方塊換成試算表中的儲存格,如下圖所示:
|
圖十二、將連線資訊換成用
Sheet1.Cells 的資訊輸入 |
|
圖十三、輸出的資料換成由
Sheet1.Cells (6,2) 來輸出 |
| 表單修改完成後,我們還要套用 Excel
的圖表功能。請點按執行 [一般] 工具列中的 [圖表精靈],在圖表類型中選擇「直條圖」,然後按
[下一步] 鈕,設定資料範圍: |
|
圖十四、在
[圖表精靈] 中選擇直條圖 |
|
圖十五、將資料範圍設定為 " =iPush_Embedded_Excel_Sample!$B$4:$B$6 "
後,按 [下一步] 鈕 |
最後按「完成」鈕,調整版面的配置,即可看到類似下圖的結果:
|
圖十六、可隨即時資料接收變化的動態展示 Excel 畫面 |
由於圖表的內容是與收到的即時資料相關,所以可以看到動態的資料展現效果。當然若有迴歸分析的需要,可以先將即時資料內容與歷史資料運算後,再輸出到圖表中。
雖然說傳統工業控制或是遠端資料擷取用到 C# 或是 Java
等新式語言的機會相對沒有那麼高,但是若您有興趣,我們也準備好了一個
C# 的範例,裡面的語法與程式設計邏輯和 Visual Basic 其實都差不多。
若您安裝了 Visual Studio .NET 或是 Borland 的 C# Builder,可以參考我們提供的程式內容 (副檔名為
.cs 的檔案)。
最後,我們來總結看看本期與上期完成的四個範例執行畫面:
|
圖十七、上一期的 Visual Basic 範例畫面 (左上)、C# 範例畫面 (右上)
、Excel 範例畫面 (下) |
|
圖十八、本期前面的
Pocket PC 範例 |
這些範例,都是用來示範 iPush®
Embedded
對於遠距、多點、不同監控程式執行平台、即時資料擷取的強大能力。若是您有興趣,歡迎在電子報討論區提出您的意見,與我們交流您的想法,或是到
ICE Developer Center,取得關於 iPush®
的技術文件與應用指南。
|