實驗二 Simulink串口與匿名上位機通信實驗


一、實驗目的

  1. 熟悉匿名上位機通信協議;
  2. 使用Simulink仿真串口發送可變數據;
  3. 觀察仿真波形,瞭解控制系統參數的調節。

二、實驗環境

Win10 PC機;Matlab16a;ANO_TC匿名上位機V65;Keil5;兩個串口

三、實驗原理

1. 匿名上位機通信協議V6.00

▲SUM等於從該數據幀第一字節開始,也就是幀頭開始,至該幀數據的最後一字節所有字節的和,只保留低八位,高位捨去。

▲協議中長度字節LEN表示該數據幀內包含數據的字節總長度,不包括幀頭、功能字、長度字節和最後的校驗位,只是數據的字節長度和。比如該幀數據內容爲3個int16型數據,那麼LEN等於6。

▲發送設備和目標設備的S_ADDR、D_ADDR字節,請查詢設備定義表確定,比如拓空者發送至上位機,則S_ADDR=0x05,D_ADDR=0xAF。

▲協議分爲3大部分,顯示用數據幀、命令及參數數據幀、用戶自定義數據幀。

▲顯示用數據幀:本部分爲飛控或者其他下位機發送顯示用數據給上位機用,單向通信,下位機只需要按格式發送數據即可。

▲命令及參數數據幀:本部分爲各種校準命令、參數讀寫命令等,因數據重要,故涉及雙向驗證。

  • 0xE0命令幀:上位機發送以0xE0爲功能字的命令幀,下位機收到命令幀後,需要按照收到的命令數據,原樣返回上位機進行驗證,上位機收到並驗證通過後表示本命令發送成功。
  • 0xE1參數幀:上位機發送以0xE1爲功能字的參數幀,下位機收到參數幀後,需要按照收到的參數數據,將該參數返回上位機,上位機收到並驗證通過後表示本參數設置成功。

在這裏插入圖片描述

圖1 數據格式要求

在這裏插入圖片描述

圖2 數據幀格式

2. Matlab simulink Serial port 模塊

(1)matlab simulink模塊在 Instrument Control Toolbox裏

在這裏插入圖片描述

圖3 Instrument Control Toolbox

SerialPort 相關模塊的詳細說明:
https://cn.mathworks.com/help/instrument/direct-interface-communication-in-simulink.html
https://cn.mathworks.com/help/instrument/serialreceive.html

(2)最簡單的simulink 串口發數據的例子:這個例子往串口3上發數據,[1 2 3 4]四個字節,串口3設置波特率爲9600。

在這裏插入圖片描述

圖4 串口設置

需要注意的是Serial Send模塊默認的輸入類型爲uint8型的一維數組,所以要設置 Constant模塊的類型:

在這裏插入圖片描述

圖 5

還要注意設置Constant 的Sample time:

在這裏插入圖片描述

圖 7

(3)最簡單的接收串口數據的例子:接收來自串口2的數據。值得注意的是Serial Receive模塊可以設置爲block(堵塞)模式和非block模式,block模式下程序會一直卡住等待接收來自串口的數據,非block模式則不然。下面是例子是block模式下的例子。

在這裏插入圖片描述

圖8 串口接收

(本部分來源:CSDN作者:少安的磚廠
原文:https://blog.csdn.net/qq_28093585/article/details/77441546

四、實驗內容

本實驗以2位可變數據爲例,做simulink數據與匿名上位機的仿真實驗。具體地, simulink模擬串口com3,與匿名上位機進行串口通信,將可變數據的仿真結果可視化。在上位機端改變數據,利用仿真結果圖可以更好地調整控制系統的參數(PID參數),以提高效率、改善調參複雜的工作。

1. 建立Simulink Model

根據數據幀格式在simulink中建立一個simulink mode,創建過程請參看實驗一步驟。建立一個Constant,數據幀格式設置如下圖所示。
在這裏插入圖片描述

圖9 整體結構圖

Block的具體插入路徑如下:
1)Simulink Library Browser –> HDL Verifier –> Instrument Control Toolbox
2)Simulink Library Browser –> Commonly Used Blocks –> Constant
3)Simulink Library Browser –> HDL Coder -> Commonly Used Blocks –> In1
4)Simulink Library Browser –> HDL Coder -> Math Operations –> Vector Concatenate / Add
5)Simulink Library Browser –> Serial Configuration
6)Simulink Library Browser –> sinks -> Display

根據匿名上位機協議,對整個數據字節求和,作爲校驗和。

在這裏插入圖片描述

圖10 ADD:累加和SUM

創建離散時間信號作爲可變數據,Period設置爲2。爲了加以區分,兩個離散信號加一個常數擡高信號幅度,能夠在匿名上位機上看到可變的仿真波形。
在這裏插入圖片描述

圖11 ADD IN1、2

根據協議要求,數據類型需要轉爲uint8,在這裏也可以直接將in2端輸出數據的格式設置爲uint8類型。
在這裏插入圖片描述

圖12 IN1、2 數據類型轉換

2. 與匿名上位機通信,觀察仿真波形。

COM3串口波特率:115200,8爲數據位,無校驗位,1爲停止位。

在這裏插入圖片描述

圖13 串口參數設置

在這裏插入圖片描述

圖14 仿真波形

說明:

  1. 本實驗使用到的串口爲COM3,大家在仿真時設置相應的串口號;
  2. 本實驗仿真信號爲離散時間信號,根據離散採樣理論,週期性進行時間採樣,作爲可變數據發送;而使用連續信號達不到本實驗的效果。
  3. 使用simulink仿真時,時間參數尤爲重要,現就本實驗中使用到的時間參數做詳細說明。
  • Sample time(Constant):
    塊的採樣時間是一個參數,指示在模擬期間塊生成輸出的時間以及在適當時更新其內部狀態。內部狀態包括但不限於記錄的連續和離散狀態。

    通常,Simulink允許您在塊對話框或命令行中指定顯式SampleTime參數,從而提供此功能。沒有SampleTime參數的塊具有隱式採樣時間。您無法指定隱式採樣時間。 Simulink根據系統中塊的上下文確定它們。 Integrator塊是具有隱式採樣時間的塊的示例。 Simulink自動將其採樣時間設置爲0。
    採樣時間可以基於端口或基於塊。對於基於塊的採樣時間,塊的所有輸入和輸出以相同的速率運行。對於基於端口的採樣時間,輸入和輸出端口可以以不同的速率運行。

  • Period:
    Simulink中,信號源的產生有兩種方式,一種是time-based,另一種是 sample based。以time-based爲例,打開sine wave模塊的設置頁面,在sine type中選擇 Time based。
    Sample time中輸入採樣時間ts。在使用system generator配置時,注意在clocking選項下面,FPGA clock period 和 simulink system period的選擇。把siimulink system period設置爲ts,也可以設置成1,前面的那些信號源,最好就用sample based了。

參考鏈接:
https://ww2.mathworks.cn/help/simulink/ug/brrdmmw-2.html;jsessionid=af199d9164261ab19aa8907e6470

附件: (點擊鏈接可直接下載,沒積分私信我免費獲取)

  1. 匿名上位機V6.5使用配置.pdf
  2. Simulink仿真文件 demo.slx
  3. 實驗二 Simulink串口與匿名上位機通信實驗.docx
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章