前言:
TSMaster目前有兩種讀取報文的模式:回調函數模式和fifo模式。fifo函數是TSMaster近期新增的函數,本文將重點介紹fifo模塊。關于回調函數的使用方法可以參考幫助模塊的《快速入門》手冊。
1.
技術背景
TSMaster的小程序模塊中提供了接收事件、發送事件以及預發送事件等回調事件,如圖 1。相比于回調函數,fifo函數使用起來比較靈活方便,可以在任意一個模塊使用,不再局限于接收、發送等回調事件。相關的fifo函數可以在【設計】-【C小程序】-【函數】中找到,如圖2。

圖 1:小程序的回調模塊

圖 2:小程序的fifo函數模塊
2.
fifo函數概述
fifo是一種數據結構或緩沖機制,它遵循先入先出的原則。在數據接收過程中,最早進入 fifo的數據會被最先處理或讀取。fifo 有一個輸入端口和一個輸出端口。數據從輸入端口依次進入 fifo緩沖區,然后按照進入的順序在緩沖區中排隊等待。當需要讀取數據時,從輸出端口按照先入先出的順序將數據取出。這樣可以確保數據的接收和處理順序與它們到達的順序一致,避免數據混亂或丟失。fifo的優點是用戶可以在自己的任務或者線程中根據需要從驅動中讀取數據,延時等可以自己控制。缺點是異步的方式,是在報文已經收發完成之后才會將數據取出進行處理。
典型應用:
在汽車發動機、變速器等動力總成系統中,多個傳感器和執行器通過 CAN 總線進行通信。fifo用于接收來自各個傳感器(如節氣門位置傳感器、曲軸位置傳感器)的 CAN 報文。這些報文包含了發動機運行狀態、轉速、負荷等關鍵信息。fifo 按照報文到達的先后順序存儲,發動機控制單元(ECU)從 fifo 中依次讀取報文,進行數據分析和處理,進而調整噴油時間、點火提前角等參數,確保發動機在不同工況下都能高效、穩定運行。
3.
fifo函數讀取報文功能實現
3.1 功能實現
3.1.1 讀取CAN報文
使用fifo讀取緩存報文之前,需要先調用com.tsfifo_enable_receive_fifo()函數。本小節將提供一個簡單示例,可參考以下步驟。
【步驟1】新建程序啟動事件,將使能fifo的函數添加到該事件函數里。如圖 3。

圖 3: 程序啟動事件
【步驟2】新建按鍵事件,將讀取fifo的函數添加到該事件函數里。如圖 4。

圖 4: 按鍵事件
【步驟3】新建程序停止事件,將取消使能fifo的函數添加到該事件函數里。如圖 5。

圖 5: 程序停止事件
【源碼如下】

3.1.2 讀取LIN報文
使用fifo讀取緩存報文之前,需要先調用com.tsfifo_enable_receive_fifo()函數。可參考3.1.1讀取CAN報文小節。
【源碼如下】

3.1.3 讀取FlexRay報文
使用fifo讀取緩存報文之前,需要先調用com.tsfifo_enable_receive_fifo()函數。可參考3.1.1讀取CAN報文小節。
【源碼如下】

3.2 實現效果
啟動小程序,發送報文,打印的消息可在【分析】-【系統消息】處查看,如圖 6。

圖 6: 實現效果
4.
TSMaster fifo函數說明
4.1 fifo函數說明
4.1.1 com.tsfifo_enable_receive_fifo
4.1.2 com.tsfifo_disable_receive_fifo
4.1.3 com.tsfifo_enable_receive_error_frames
4.1.4 com.tsfifo_disable_receive_error_frames
4.1.5 com.tsfifo_add_can_canfd_pass_filter
4.1.6 com.tsfifo_delete_can_canfd_pass_filter
4.1.7 com.tsfifo_add_lin_pass_filter
4.1.8 com.tsfifo_delete_lin_pass_filter
4.1.9 com.tsfifo_clear_can_receive_buffers
4.1.10 com.tsfifo_clear_canfd_receive_buffers
4.1.11 com.tsfifo_clear_lin_receive_buffers
4.1.12 com.tsfifo_clear_flexray_receive_buffers
4.1.13 com.tsfifo_read_can_buffer_frame_count
4.1.14 com.tsfifo_read_can_rx_buffer_frame_count
4.1.15 com.tsfifo_read_can_tx_buffer_frame_count
4.1.16 com.tsfifo_read_canfd_buffer_frame_count
4.1.17com.tsfifo_read_canfd_rx_buffer_frame_count
4.1.18 com.tsfifo_read_can_tx_buffer_frame_count
4.1.19 com.tsfifo_read_lin_buffer_frame_count
4.1.20 com.tsfifo_read_lin_rx_buffer_frame_count
4.1.21 com.tsfifo_read_lin_tx_buffer_frame_count
4.1.22 com.tsfifo_read_flexray_buffer_frame_count
4.1.23 com.tsfifo_read_flexray_rx_buffer_frame_count
4.1.24 com.tsfifo_receive_can_msgs
4.1.25 com.tsfifo_receive_canfd_msgs
4.1.26 com.tsfifo_receive_lin_msgs
4.1.27 com.tsfifo_receive_flexray_msgs
5.
縮寫
BLF | Binary Logging Format |
CAN | Controller Area Network |
CAN FD | CAN with Flexible Data-Rate |
ID | Identifier |
LIN | Local Interconnect Network |
-
fifo
+關注
關注
3文章
400瀏覽量
44737 -
函數
+關注
關注
3文章
4378瀏覽量
64591
發布評論請先 登錄
TSMaster 中不同總線報文消息過濾的操作方式

MPU6050 dmp讀取數據FIFO溢出
MPU6050不講武德,FIFO溢出始終無法解決,提高或降低讀取速度都不得行

新功能發布 | TSMaster診斷功能的典型應用

應用筆記 | TSMaster如何代碼自動發送LIN報文

應用筆記 | TSMaster快速入門篇(2)-報文回放

干貨分享 | TSMaster的記錄功能需求與實踐

干貨分享 | TSMaster小功能之如何在圖形中監控某一條DBC報文發送周期?

TSMaster報文發送的信號生成器操作說明

TSMaster VLAN配置方法

詳解TSMaster CAN 與 CANFD 的 CRC E2E 校驗方法

軟件更新 | TSMaster 202504 版本已上線!三大功能讓車載測試更智能

評論