零程式碼搭建一個溫度感測器數據採集與顯示軟體
1 概述
感測器(英文名稱:transducer/sensor)是一種檢測裝置,能感受到被測量的資訊,並能將感受到的資訊,按一定規律變換成為電訊號或其他所需形式的資訊輸出,以滿足資訊的傳輸、處理、存儲、顯示、記錄和控制等要求。
感測器按用途可以分為力敏感測器、位置感測器、液位感測器、能耗感測器、速度感測器、加速度感測器、射線輻射感測器、熱敏感測器等。
隨著集成度的不斷提高,多種感測器集成到一個模組,已經非常普遍。模組的生產廠商,對外提供一組通訊協議,供模組使用者和模組進行通訊,從而方便的獲取感測器的測量數值。
本文通過一個實際的例子,介紹如何通過上位機軟體,對一個多軸感測器模組的溫度數據進行採集並用曲線圖表顯示溫度數據。本例子的硬體架構如下圖所示。 
感測器模組數據輸出: 溫度、加速度、角速度、磁場等
感測器模組數據介面: 串口,波特率9600(默認)
感測器模組串口上位機連接:使用USB-TLL串口模組連接,VCC接VCC,TX接RX,RX接TX,GND接GND。
本例子上位機使用格西測控大師編寫,最終效果如下圖所示。

2 通訊協議
數據採集系統和設備通訊有兩種方式,一種是DirectIO方式,也就是直接通過設備通訊協議進行訪問,這種方式需要了解設備的通訊協議;另外一種是間接調用動態庫的方式,這種方式只需要了解動態庫的介面函數即可。
本文的實驗例子是通過DirectIO方式進行通訊。下面我們來介紹一下所用到的採集通訊命令,通訊命令幀結構如下圖所示。感測器模組持續的向串口發送通訊命令幀。
3 創建項目、設備介面和變數
3.1 第1步 新建項目
啟動格西測控大師,在左上角菜單中選擇「新建項目」,然後在彈出的「新建項目」對話框中,填寫項目名稱「溫度採集與顯示項目」,然後點擊「瀏覽…」按鈕,選擇保存路徑和填寫項目文件名「溫度採集與顯示項目」,最後點擊「確定」按鈕。
3.2 第2步 添加串口設備
在項目管理器中選擇「設備與介面」節點,然後點擊滑鼠右鍵,在彈出菜單中選擇「新建設備…」。
彈出新建設備對話框中,選擇「串口」,點擊「確定」。

彈出設備屬性對話框,填寫「設備名」和其他設備參數,最後點擊「確定」按鈕。其中,「設備名」是設備的標識,可以是任意字元串,引用設備必須使用設備名。
3.3 第3步 添加變數
本例子用到變數容器、表達式變數和TXT文件變數。

TXT文件類型變數:當其所有子變數都改變過後,形成一條記錄,保存到文件中。本例子中的溫度數據,每次採集完畢,通過腳本把採集時間和溫度值分別賦給「時間」和「溫度值」變數,即可生成一條記錄。
表達式變數:保存採集時間和溫度值,採集時間使用系統當前時間,溫度值通過採集到的數據經過表達式運算得到。

其中,Frequency表示變數數據每秒鐘的觸發次數, 每次觸發,根據表達式計算產生變數的值;如果 Frequency<=0,則不能定時觸發表達式計算,只有對 Value 屬性賦值,才可以觸發表達式計算進而產生新的變數值。
4 編寫採集序列
本例子用到的步驟類型: While和Message。
其中Message步驟是報文步驟,可以通過自定義報文結構來編寫通訊協議,可以自定義任意結構的通訊協議,非常方便和設備進行通訊。

運行測試的時候,我們可以打開序列數據面板查看通訊的過程數據。

5 設計用戶介面
本例子用到的控制項:LineChart(曲線圖)、TableGrid(數據表)。
控制項關鍵配置:
LineChart:
ChartSeries屬性(格式為「<系列名稱 1>,<X變數名>,<Y變數名>;<系列名稱 2>,<X變數名>,<Y變數名>;…「 ;本例子設置為:溫度曲線,時間,溫度值)
DataProvider屬性:綁定「採集變數表/溫度數據」變數容器
TableGrid:
DataSeries屬性(格式為「<變數1名>,<列1名稱1>; <變數2名>,<列2名稱>;…「 ;本例子設置為:時間,時間;溫度值,溫度值 )
DataSource屬性:綁定「採集變數表/溫度數據」變數容器

6 編寫模擬序列進行調試
實際開發中,我們經常使用模擬的方式進行軟體調試,使得開發進程更加可控。下面,我們從這個例子出發,探討一下如何編寫模擬序列。
本例子的感測器模組是串口通訊的,故在模擬時我們選擇用虛擬串口軟體(VSPD虛擬串口軟體)虛擬一對串口來實現模擬程式和實際程式的對發。

按以下步驟創建模擬序列:
1、創建串口「串口-模擬器」,保證和「串口」是虛擬軟體創建的一對交叉互聯的串口。
2、創建循環發送的序列,其中一個Message類型步驟用於發送模擬的幀到「串口-模擬器」。
3、編寫「發送溫度幀」步驟的腳本,生成隨機溫度值。


