基于CCP協議利用CANape進行電控單元標定
目前基于can(controller area network)總線的分布式系統在汽車電子領域得到廣泛應用,電子控制單元的標定已成為汽車電子控制裝置開發的一個重要環節。ccp(can
calibration protocol)是一種基于can總線的ecu(electronic control unit)標定協議[1],已經在許多歐美汽車廠商得到應用,采用ccp協議可以快速而有效地實現對汽車電控單元的標定。
然而基于ccp協議的標定,需要在ecu內部實現支持ccp協議的驅動程序(ccp driver)。目前大多數應用都采用vector提供的free
ccp driver[2]。考慮到ecu底層程序與can驅動程序的實現各不相同,將ccp驅動程序結合到ecu中[3]并不是一件一蹴而就的事,這需要對ccp協議本身、標定工具及標定工具與ecu之間的通信有詳細和深入的了解。在整個標定系統的開發過程中,大量時間被耗費在前期ccp驅動程序與ecu結合上。本文在簡單介紹ccp協議的基礎上,提供了一個通用的ecu與ccp驅動程序結合的實例,以幫助縮短整個標定開發周期。
canape[4]是一款ecu標定和測試工具。與ccp協議相結合,不僅能完成對ecu的標定,同時還能在ecu運行期間直接訪問內存并進行操作。這使得canape不僅是一款功能強大的標定工具,也是一款電控單元開發的得力助手。然而在使用方面,canape的前期配置比較繁瑣,目前國內的相關資料較少。本文將介紹canape,并著眼于如何基于ccp協議使用canape完成ecu的標定。
1 ccp協議及工作原理
ccp協議是asap(arbeitskreis zur standardisierung von applikationssystemen)標志的有機組成部分。asap作為一個應用系統標準化工作小組,其目的在于提供通用軟、硬件接口標準,以解決由于不同制造商提供的控制器存在的接口不匹配問題。
1.1 ccp通信方式
基于ccp協議的ecu標定采用主-從通信方式,如圖1。主設備通過can總線與多個從設備相連,其中主設備是測量標定系統mcs(measurement
calibration system),從設備是需要標定的ecu,在汽車電子中即為車載控制器。

根據ccp協議,主設備首先與其中一個從設備建立邏輯鏈接,然后通過主設備向從設備發送命令來起始兩者間的數據通信。當主設備要訪問另一個從設備時,首先斷開與當前從設備的邏輯連接,與下一個從設備建立新的邏輯連接后再開始通信。
1.2 ccp協議的工作模式
ccp定義了兩種工作模式:polling(查詢)模式及daq(data acquisition command)模式。查詢模式下,主設備與從設備間的每一次通信都由主設備發送命令來起始,從設備收到主設備的命令后,執行相應的操作并反饋一幀報文。這種工作模式由于需要主機與從機之間進行“一問一答”的信息交互,工作效率不高,但實現簡單,而且占用ecu內存資源較小。
daq模式使從設備可以脫離主設備的命令控制按一定周期自動向主設備上傳數據。daq模式下,主設備首先發送一條請求daq的命令,從設備收到后,按命令中的參數自行配置并組織需要上傳的數據,然后按一定周期自主向主設備上傳數據。這種模式由于不需要主機通過命令逐步控制,工作效率高,但實現較復雜,如果需要上傳的數據量很大,會占用大量ecu內存空間。
1.3 ccp報文幀結構
基于ccp協議的標定只占用兩幀can報文,分別是命令接收對象cro(command receive object)和數據傳輸對象dto(data
transmission object),如圖2所示。cro由主設備發給從設備,dto是從設備反饋的報文。兩者分別通過一個自己的id標識符進行標識(cro_id與dto_id)。

cro與dto的id標識符由通信協議自行定義,ccp協議只對cro及dto的數據場做了詳細定義。按照ccp協議,cro數據場的第1個字節為命令代碼cmd(command
code),ccp協議共規定了28條命令[1]。從設備通過cmd代碼判斷主設備請求的是哪條命令。數據場的第2個字節是命令計數器ctr(command
counter)。剩余6個字節均為命令參數,每條命令有各自對應的命令參數。
從設備反饋的報文稱為dto。按ccp協議,dto又細分為三類:
·命令返回消息crm(command return message):由從設備發送,針對cro的反饋報文。
·事件消息(event message):當從設備檢測到內部發生錯誤機制時,由從設備自行向主設備發送,報告其當前的運行狀態,并請求主設備暫停當前工作進程以處理發生的錯誤。
·daq-dto(data acquisition-dto):用在daq模式中,由從設備組織,定期向主設備發送。
dto報文的第1個字節pid(packet id)定義了dto的類型,255代表crm, 254代表事件消息。第2個字節為命令返回/錯誤代碼err(command
return-/error code)。對于crm,主設備由該字節獲知命令的執行情況;對于事件消息,主設備由該位獲知從設備內部發生了哪種錯誤。第3字節ctr是命令計數器,該位數值與其對應的cro的ctr值相對應。剩余5個字節是數據場,存放主設備請求的數據或信息。
2 基于ccp協議的接口程序實現
基于ccp協議進行標定,需要mcs與ecu的應用程序都能夠支持ccp協議,這部分應用程序稱為ccp driver。本文采用vector提供的free
ccp driver[2]。由于ccp協議基于can總線,因此ccp driver與ecu的結合主要分為與can driver及與其他應用程序兩方面。
ccp driver與can driver的結合如圖3,主要分為以下兩方面:

·發送端:dto通過can driver的發送子函數以can報文的格式上傳給mcs。
·接收端:主設備發送的命令以can報文的格式首先進入can driver的接收子函數,由其判斷為cro后,進一步交給命令處理器處理。
命令處理器作為ccp driver的一個主要組成部分,負責將接收到的cro,通過其crm代碼進行命令解釋,執行相應操作,組織反饋數據并調用can發送子函數。daq處理器支持daq工作模式,當命令處理器判斷收到的命令為daq請求后,進一步將數據傳給daq處理器,由daq處理器組織數據并直接調用can
發送子函數,以daq-dto的形式定期向主設備上傳。
基于ccp協議的基本can通信流程如圖4所示。ecu接收到報文后,轉入can接收子函數,在常規接收流程后,對報文的id標識符進行判斷,如為cro_id,則將ccp標志位(ccp_indicator)置位。由于采用中斷方式接收報文,為了避免占用過多中斷時間而影響其他函數或中斷級別較低的程序運行,在對id標識符進行判斷后,并不直接在函數中調用ccp
driver的命令處理器。命令處理器的調用會在主函數中進行。

主函數通過判斷標志位的狀態,調用ccp driver的ccpcommand()子函數。該函數是命令處理器的主要組成部分,也是命令處理器與can
driver的接口函數,它負責解釋并執行收到的cro命令,調用ccp driver中的其他函數,進行數據處理并組織需要反饋的數據。
ccpcommand()通過調用can driver中的ccp發送子函數ccpsend()發送一幀dto。ccpsend()須在can
driver中實現,由ccp driver調用。按實際情況,將can發送子函數直接以ccpsend()的形式實現,或在保留原有發送子函數的基礎上添加一個ccpsend()子函數,在其中調用can發送子函數,以完成dto的發送。
ccp協議為確保主設備與ecu之間正常通信,每次發送后,程序必須通過調用ccp driver中的ccpsendcallback()子函數檢查剛才的dto是否已經發送,否則不能發送下一幀報文。針對不同的can
driver實現,該函數調用的位置不同。最后主函數將ccp標志位清空,等待下一條cro命令。
一個完整的ccp driver 接口還包括與ecu其他應用程序的接口。每次單片機初始化后,主函數調用一次ccp driver的ccp初始化子函數ccpinit(),將上次標定殘留在ecu內存中的數據清空,為下次標定與測量做準備。
ccp協議共定義了28條命令,每條命令在ccp driver中都對應一組相應的子函數,代表不同的功能,如eeprom標定、daq工作模式等。用戶可根據實際需要,選擇實現其中部分或全部功能。每增加一個新的功能,必須在底層程序中添加開放該項功能的程序接口[3]。如對eeprom標定,首先ecu應用程序中應包含eeprom模塊子函數,同時還需實現命令處理器與eeprom模塊之間的調用接口。
3 利用canape實現基于ccp的標定
canape[4]是德國vector公司出品的一款基于asap標準的ecu測試和標定工具。它通過一個控制器硬件接口與ecu相連,兩者之間常用的物理連接是基于ccp協議的can總線。只有控制器的底層程序中有支持ccp協議的程序接口,
canape才能與控制器通信。
canape提供了多種功能:在線數據評估、離線評估、數據管理、flash編程、參數標定及asap2數據編輯器等。此外,測試過程中由can總線上傳的數據還可以通過canape在計算機顯示和保存,以進行離線標定和數據評估。
3.1 asap2控制器描述文件及asap2編輯器
canape與控制器間的通信需要一個描述文件支持,這個文件稱為asap2控制器描述文件[4]。canape對控制器的參數標定和數據測量都是基于這個文件,該文件記錄了控制器中各參數的詳細信息,如標定參數和測量變量在控制器中的存儲地址、存儲結構、數據類型和轉換公式等。在canape中,每個標定參數和測量數據都會有一個變量名,如發動機溫度、冷卻水溫度。當canape需要訪問某個變量,就在asap2描述文件中根據變量名,找到該變量在控制器中的存儲地址、數據長度等信息,然后進行操作,如圖5。

為了方便用戶對asap2文件進行維護和修改,canape集成了一個asap2數據庫編輯器,用以生成和修改asap2控制器描述文件。所有的信息都能通過對話框的形式進行設置和修改。該數據庫編輯器還能工作在獨立模式下,以生成一個asap2格式的控制器描述文件。
當ecu底層程序修改后,一些標定參數和測量數據的內存地址可能發生變動,canape雖然仍能進行標定,但修改的已不是原來需要標定的參數,而是程序變動后原先地址下當前存放的某個新的未知數據。為了簡化手工修改地址的繁瑣,防止因為隨意修改某個數據而破壞程序的正常運行,canape支持通過linker
map文件自動更新asap2文件里的信息。map文件是ecu底層程序在編譯時由編譯器生成的一種映射文件,通過map文件可以自動更新asap2文件。
3.2 canape使用配置
每個需要標定的ecu都要在canape中進行配置。
canape共定義了28條命令,用以實現不同的功能,在配置頁面里均有復選框與其對應。控制器的配置必須與ccp driver在ecu底層程序的具體實現相匹配,只有對某個功能的程序接口已經開放,才能在canape中選擇使用該項功能[2][5]。
3.3 canape中的參數標定
在canape中,需要標定的變量稱為標定參數,canape將標定定義為修改駐扎在ecu內存中的變量的內容。canape支持多種標定方法。這里標定方法指如何對標定參數所在的內存區域進行初始化、數據改寫及保存。根據標定參數所在不同地址空間(rom、flash或eeprom),canape規定了不同的標定方法。
當標定參數需要存放在flash或rom中時,在ecu上電初始化后,程序首先將標定參數的初始值復制到ram中,在canape中該段用來存放標定參數的ram稱為calibration
ram。標定過程中,canape修改calibration ram中的參數值。標定全部結束后,再將該段ram中的內容復制回flash或rom中。
當標定參數存放在eeprom中,有兩種標定方法。第一種與上述方法相同,首先將標定參數復制到ram中,標定結束后再將ram中的數據覆蓋到eeprom。此外,也可對eeprom中的參數直接進行改寫,實現這種方法需要對eeprom進行頻繁擦寫操作,但不占用額外的ram空間。
由于汽車電子網絡系統已開始得到廣泛的使用,基于網絡連接的電子控制單元的匹配標定和傳統的匹配標定方法已有了很大的不同,特別是基于can總線的匹配標定技術,目前已成為研究和應用的重點。
采用canape進行基于ccp的匹配標定,實現了標定工具和內容的統一。根據這種方法能夠快速有效地進行汽車電子控制單元的匹配標定,在實際開發應用中取得了良好的效果。
pid控制相關文章:pid控制原理
pid控制器相關文章:pid控制器原理
評論