<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 測試測量 > 設計應用 > 標定和測量應用的焦點XCP

          標定和測量應用的焦點XCP

          作者: 時間:2017-02-06 來源:網(wǎng)絡 收藏


          使用XCP的一個顯著優(yōu)勢就在于這樣一個單一標準協(xié)議滿足了所有這些應用需求。如果沒有XCP,就需要為每個通信通道定義一個專用的驅
          動,然而在同時使用多種驅動時需要考慮性能損失,此外還會增加出現(xiàn)不受歡迎的相互影響的風險和不穩(wěn)定性。

          通用、可擴展并節(jié)約資源

          一個,并且是同一個XCP驅動代碼可以應用于所有的通信過程。它可以用于從低端控制器和接口發(fā)送僅僅幾個字節(jié)的數(shù)據(jù),比如集成了串行接口的8位處理器。同樣的代碼也可用于通過高速的網(wǎng)絡(比如以太網(wǎng))使用32位處理器發(fā)送兆字節(jié)量級的數(shù)據(jù)。XCP驅動是由強制功能和可選功能組成的,驅動的大小可以根據(jù)可用的ROM/Flash的大小進行調(diào)整。在ECU中,通過是否具有高數(shù)據(jù)吞吐量或低處理器負載和RAM尺寸來表征資源用量。

          對于總線負載,主要考慮傳輸信號的數(shù)目相比總線帶寬。總之,XCP驅動容易實現(xiàn),而且僅需要很少的幾個變量。

          事件驅動的周期性數(shù)據(jù)采集

          ECU在離散的時間間隔上運行??梢詫⑦@樣的一個時間間隔長度固定(比如10ms),或者定義其依賴于某種事件(比如發(fā)動機轉一圈)。在固定時間間隔的情況下,時間片的結束是以定時器的溢出來標記的。從廣義上講,這種定時器溢出也是一個事件。ECU的任務是在一個特定的時間片內(nèi)完成所有的計算和控制任務。為了從XCP從設備中獲取相關的數(shù)據(jù)信息,使用了XCP協(xié)議中的DAQ機制。在該機制中,在測量開始前XCP主設備會先通知XCP從設備:特定的事件發(fā)生時需要測量哪些信號。如果現(xiàn)在事件發(fā)生了(如10ms定時器溢出),XCP從設備就從內(nèi)存中讀取這些先前定義的數(shù)據(jù),并且將他們拷貝到受保護的RAM區(qū),然后通過消息的方式發(fā)送給XCP主設備。這保證了數(shù)據(jù)值來自同一事件循環(huán)并且是相關的。

          XCP主設備接收帶有時戳的數(shù)據(jù)并且將其保存在相應的測量文件中。時戳要么通過XCP從設備作為數(shù)據(jù)發(fā)送,要么分配到消息中通過硬件接口(比如CANcardXL)發(fā)送。在測量文件中,所有數(shù)據(jù)參考XCP主設備的時間基準進行同步,然后被進一步處理,例如在一個統(tǒng)一的時間軸上對測量數(shù)據(jù)進行可視化顯示(圖5)。這就允許在一張圖中一致地顯示不同XCP從設備的多個數(shù)據(jù)通道。



          圖5 在同一個時間軸上顯示不同信號源的各種信號

          除了前面已經(jīng)提到的XCP相對于CCP的優(yōu)點,XCP還支持所謂的冷啟動測量和用于循環(huán)數(shù)據(jù)采集的任務的內(nèi)部ECU時戳。在冷啟動測量中,可以配置ECU讓它在被激活后就立即周期性地發(fā)送數(shù)據(jù),而XCP主設備不需要明確地初始化該功能。如果使用了內(nèi)部ECU時戳,該時戳就不是在測量和標定系統(tǒng)中與后期評估相關的數(shù)據(jù)接收時間了,而是在XCP從設備中數(shù)據(jù)被創(chuàng)建的時刻。這樣就消除了由于傳輸延遲而引起的不確定性(比如在總線帶寬不足或者高負載情況下都會產(chǎn)生)。

          優(yōu)化特性曲線和特性圖

          除了基于數(shù)學模型的控制算法,ECU還要使用由離散插值點組成的特性曲線和特性圖。為了達到預期的系統(tǒng)行為,通常通過試驗方法(比如臺架試驗)建立和優(yōu)化這些特性值表。A2L文件是用來描述測量變量和標定參數(shù)的。描述的選項覆蓋了從簡單標量參數(shù)到復雜數(shù)值表的范圍。其中,描述內(nèi)容包含了數(shù)據(jù)類型、原始值和物理值間的轉換規(guī)則、特性map圖的存儲方案以及更多的功能。Vector Informatik公司提供的CANape及類似的高性能標定工具可以在屏幕上通過圖形圖表或數(shù)值表格的方式清晰地顯示特性曲線和map圖。

          使用CANape和XCP進行快速原型

          在ECU開發(fā)過程中,經(jīng)常會頻繁地將重要功能導出到外部仿真系統(tǒng),這樣可以花最小的代價來計算這些功能。直到仿真模型中的算法達到一定的成熟度,開發(fā)者才會從這些算法生成代碼,這些代碼可與其它ECU代碼一起編譯并燒寫到ECU中。然而,在此之前,可以使用一種被稱作“旁通”的技術(該技術耦合了真實ECU及其模型),通過旁通可以在開發(fā)初期不依賴硬件進行測試和優(yōu)化工作。

          在使用XCP的旁通技術中,XCP主設備使用DAQ從ECU中讀取數(shù)據(jù),將這些數(shù)據(jù)作為輸入值發(fā)給模型并且使用STIM將模型返回的結果發(fā)送回ECU。值得注意的是,使用運行MCD工具CANape的普通PC機平臺就足以滿足旁通和建模的要求。這是個好消息,因為基于特殊實時硬件的解決方案可能會貴好多倍,而且在開發(fā)部門中這類設備也可能為數(shù)不多。CANape作為一個高度優(yōu)化的XCP主設備,可以同時處理與真實ECU的通信和與在PC上運行的模型之間的通信(圖6)。ECU參數(shù)和模型參數(shù)都可通過CANape和XCP進行標定。

          通過XCP進行flash編程

          XCP同樣為進行ECU編程的用戶提供了便利。ECU flash內(nèi)存中的數(shù)據(jù)只能使用特殊的預定的flash程序進行改寫,這些預定的程序也必須駐留在ECU中。原則上,可使用兩種方法:第一種方案,flash程序被永久存儲在flash中;首先,這樣會浪費內(nèi)存,其次會遇到交付車輛的安全問題。第二種方案,在需要重新編程的時候,僅使用PC工具通過XCP將flash內(nèi)核下載到微控制器的RAM中。除了包含用于擦除flash內(nèi)存和重寫數(shù)據(jù)的flash程序外,flash內(nèi)核也包含自己的總線和SCP驅動,它們用于通過總線接口與PC工具進行通信。

          總結

          XCP是一種標準而通用的有很多合理化潛力的應用協(xié)議。它不僅用于ECU開發(fā)、標定和編程;也用于在原型開發(fā)中集成需要的測量設備、功能開發(fā)中的旁通以及在測試臺上進行的SIL和HIL過程。對于通過微控制器調(diào)試接口(例如NEXUS等)快速訪問內(nèi)部數(shù)據(jù),通信是在專用硬件上進行的,不會出現(xiàn)故障。該硬件完成NEXUS到XCP-on-Ethernet的通信轉換。這樣帶給用戶的好處是不依賴于專用解決方案的工具生產(chǎn)商,并且可以重用組件。

          Vector Informatik公司為用戶提供了免費的驅動用于建立XCP從設備,該驅動可以從其公司的網(wǎng)頁上下載。從1996年就作為ECU標定工具出現(xiàn)的MCD工具CANape,一直以來都作為XCP主設備并按照最新的XCP標準進行不斷地升級,這也得益于Vector積極參與ASAM工作委員會。CANape是市場上第一個具有XCP-on-FlexRay接口的工具。在第一輛FlexRay量產(chǎn)車BMW X5的開發(fā)過程中,這成為讓BMW工程師決定在標定減震器控制系統(tǒng)時放心使用Vector的XCP協(xié)議棧和CANape的一個重要因素。

          上一頁 1 2 下一頁

          關鍵詞: XCP標定測量應

          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();