006 上位機開發及簡單通訊

2021-08-18 21:22:55 字數 2741 閱讀 3546

常見的上位機定義為一台可以發出特定操控命令的計算機,通過操作預先設定好的命令,將命令傳遞給下位機,通過下位機來控制裝置完成各項操作。此定義著重於強調控制指令的傳送,實際上除了傳送控制命令,上位機還能提供許多額外的功能:

a. 視覺化功能

上位機位於mcu與使用者之間,在mcu軟體開發過程中,通常直接處理控制資料,優先考慮處理的實時性與能耗,對於資料的易於理解性及視覺化程度不作考慮。mcu處理的資料雖然能夠通過串列埠或者其他方式輸出,但是直接輸出的資料可讀性較差,不利於直觀的理解。上位機能夠首先對mcu的輸出資料進行處理,將其轉化為易於理解的方式在顯示屏上展現。

b. 資料高速處理能力

大多數mcu實時性好,但計算能力較弱。上位機具有較強的計算能力,但實時性較弱。因此,利用mcu採集資料並傳送至上位機處理能夠充分發揮雙方優勢。

c. 演算法**能力

在進行嵌入式開發時,我們需要搭建平台,每次的軟體修改都需要使用專門的工具進行燒寫與除錯,相比pc端軟體開發更為繁瑣,不利於除錯。因此,可以將mcu採集到的資料傳送至上位機,在pc端進行演算法的驗證,直到滿足需求後再在mcu上進行測試,可以縮短開發周期,降低開發成本。

在基於stm32標準庫的imu9250資料讀取和基於stm32標準庫imu9250資料讀取(二)文中,我們基於stm32f429xxmcu成功讀取了加速度計、陀螺儀、磁力計的原始資料,這裡我們希望上位機能夠實現以下功能:

對於上位機開發有許多開發環境可選,例如:mfc、qt、matlab、c#等。每種開發環境適用場合不同,例如mfc在windows平台具有較強的通用性,在較老的計算機中也能夠執行。qt支援跨平台,能夠在windows、linux等多個平台上執行。matlab開發簡單方便,適合矩陣向量的計算。這裡我們選用qt作為開發環境,同時使用qcustomplot來實現加速度計、陀螺儀、磁力計資料的動態繪製,使用qextserialport作為串列埠通訊的api。

上位機與下位機常見的通訊方式有:串列埠通訊、spi通訊、乙太網通訊等。串列埠通訊速率較低,裝置便宜,易於開發。乙太網通訊速率高,開發難度較高。spi通訊速率高於串列埠通訊,但通常需要usb轉spi裝置。這裡選用串列埠作為上位機與下位機之間的通訊方式。

設定簡單的協議是為了讓上位機能夠準確、及時、高效地獲取mcu採集的資料,這裡我們採用的簡單協議如圖1所示。

圖1 簡單通訊協議

在此協議中,0xff 0xff為上位機的資料頭,com為控制指令用於實現請求資料(0x01)等任務。mcu在收到請求資料指令後,將會計算當前採集的資料個數(或組數),然後傳送資料至上位機。在此過程中0xff 0xfe為下位機資料頭,n為當前採集的資料個數(或組數)。

為了實現資料的先入先出,我們需要實現佇列結構,一共需要三個佇列:乙個用於儲存mcu的採集資料,乙個用於儲存上位機收到的資料,還有乙個用於儲存mcu收到上位機發來的控制指令。這裡我們採用環形佇列,它是在寫程式時候一種佇列的特殊表達方式,把佇列資料組中的最後乙個元素和第乙個元素相連構成環,所以稱為環形佇列。環形佇列在c/c++程式設計中首元素出隊後不需要把佇列所有元素向前移動,而取代把把隊首指標向後移動,由於其環形結構,在插入元素後隊尾指標會迴圈到隊首原來的位置。相對普通佇列的出隊操作減少了大量的運算量。程式如下:

uint8_t rawdataqueuebuffer[queue_size];

uint16_t queuehead, queuetail, queuelength;

void rawdataqueuebuffer_init()

uint8_t pushqueue(uint8_t val)

return 0;

}uint8_t popqueue(uint8_t *val)

else

}

mcu

採用中斷的方式將上位機資料存至對應的佇列並將指令校驗標誌置一,同樣採用中斷的方式將進行

imu資料採集。採用輪詢的方式檢測相應標誌是否為一,若為一則進行相應操作並清零該標誌位,對應過程如圖

2所示。

圖2 mcu簡單協議處理流程

對應**如下:

uint8_t mpu6050_task()

if (taskflag_checkdata == 1)

taskflag_checkdata = 0;

} }return 0;

}uint8_t check_command(uint8_t *buffer)

else }

int main(void)

中斷服務程式**:

extern uint8_t taskflag_getdata;

extern uint8_t taskflag_checkdata;

void usart2_irqhandler(void)

}uint16_t cnt;

void exti15_10_irqhandler(void)

}}

3.4上位機效果

最終上位機初步效果如圖3所示,包含基本的串列埠引數設定及資料顯示,將mcu採集的imu資料經過處理後分別以文字、曲線、影象的方式形象展示。

圖3 上位機初步效果

聯絡作者

上位機開發介紹

上位機是指可以直接發出操控命令的計算機,一般是pc,通常用於螢幕上顯示各種訊號變化 液壓,水位,溫度等 並將這些資料儲存下來,供分析。下位機是直接控制裝置,獲取裝置狀況的計算機,一般是plc programmable logic controller 微控制器 考慮一塊板子上微控制器與感測器的關係 ...

C 上位機簡單使用

寫的比較簡單 破解時間限制的補丁 提取碼1123 如下 示例 opcserver objserver opcgroups objgroups opcgroup objgroup opcitems objitems array stritemids array lclienthandles array...

c 上位機開發3

從.net framework 2.0開始,c 提供了serialport類用於實現串列埠控制。命名空間 system.io.ports。其中詳細成員介紹參看msdn文件。下面介紹其常用的字段 方法和事件。1.常用字段 名稱說明 portname 獲取或設定通訊埠 baudrate 獲取或設定序列波...