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、編寫“傳送溫度幀”步驟的指令碼,生成隨機溫度值。