CCP協議之DAQ模式下的數據通信
CCP通信模式
CCP協議中MCD(主設備)與ECU(從設備)的通信可具體分爲兩種,一種polling模式,另外一種DAQ模式。
- polling模式:
通俗可以理解爲一問一答模式,主設備先問,從設備回答,兩者之間不斷交互來實現主從設備的通信和數據交換,這種模式下,當主設備和從設備建立邏輯連接後,主設備與從設備的每一次通信都是從主設備發送一個命令請求開始的,請求從設備執行某項操作,或請求從設備的內部數據。從設備收到命令後,執行相應的操作,通過返回一幀消息,提供主設備請求的數據及命令執行情況代碼,這種通信方式實現起來比較簡單,佔用ECU內存資源較少,但是效率很低。 - DAQ模式:
這個可以理解爲一問多答模式,這種模式下,當主設備和從設備建立邏輯連接後,主設備首先發送一條DAQ請求,從設備收到命令後,按命令中的參數自行配置並組織上傳數據,然後從設備可以脫離主設備的控制,按照一定週期向主設備自動上傳數據。這種模式不需要主機通過命令逐步控制,所以工作效率比較高,實現比較複雜,如果需要上傳的數據量比較大的時候,會佔用大量的ECU的內存資源(RAM空間)。
DAQ數據通信
- 在我們平時使用中,更多的會用到DAQ模式,所以就來談談DAQ模式下的數據通信。關於DAQ需要知道下面這些點:
- DAQ通信的實現需要藉助DAQ列表、OTD列表以及DAQ~DTO;
- 按照不同的週期,ECU內部需要實現多個DAQ列表;
- DAQ列表個數是由上傳週期決定的(比如:有三個信號,他們的上傳週期分別爲10ms,20ms,100ms,那麼就需要3個DAQ);
- 同一週期的數據變量歸在一個DAQ列表裏面;
- 一個DAQ列表可包含多個ODT列表;
- 每個ODT最大元素數目爲7,每個元素都是單字節,所以一個ODT最多能存放7個字節;
- ODT列表個數取決於相同週期下上傳數據個數和長度(比如:有兩個四字節的變量,那麼2*4 = 8,8>7,所以至少要兩個ODT列表);
- ODT列表存放的要上傳變量的數據信息,包括變量的存放地址、數據長度以及偏移量;
- ODT列表需要轉換爲DAQ~DTO的形式才能向主設備發送;
- 每個ODT都有唯一的絕對編號來對應一個DAQ~DTO;
- 每個ODT都有一個相對編號來對應一個在DAQ列表中的位置;
- 一個DAQ列表中,總的ODT不能超過254。
- 同一個DAQ列表的不同ODT享有同一個事件通道和預分頻值;
- 不同DAQ理論上有不同的事件通道和預分頻值,但是預分頻值的作用是將數據的上傳週期成倍擴大,所以當兩個DAQ上傳週期成整數倍關係時,可以共用一個事件通道。
- 下面就來舉例理解這些上面這些概念
場景:假如我們要依次上傳五個數據,如下:
數據變量名 | 字節數(byte) | 上傳週期 |
---|---|---|
byte0 | 1 | 10ms |
word1 | 2 | 10ms |
long2 | 4 | 10ms |
long3 | 4 | 20ms |
long4 | 4 | 20ms |
- 根據數據上傳週期確定DAQ的個數:10ms、20ms兩個週期,所以DAQ一共有2個;
- 根據數據個數和長度確定ODT的個數:總長度 = 1+2+(3*4) = 15,15/7 = 2…1,所以最少要3個ODT;
- 根據上傳週期確定DAQ事件通道和預分頻值:因爲10和20成倍數關係所以可以用一個事件頻道,10ms預分頻值爲1,20ms預分頻值爲2.
- 啓動DAQ模式後,數據採集的過程如下圖:
- 當啓動數據採集後,ECU就按照所規定的的週期自行上傳DAQ~ DTO消息。DAQ~ DTO消息的數據場由8字節構成,第一個字節就是PID,標識了這幀消息所對應的ODT,而後7字節即對應該ODT七個元素規定地址上的一個字節的數據內容,從而就完成數據內容的上傳。