<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

CANoe使用常見問題匯總

汽車ECU開發 ? 來源:汽車ECU開發 ? 2024-04-22 12:28 ? 次閱讀

CANoe使用問題匯總。

1.如何將CAPL文件加密

使用CAPL Browser打開需要加密的CAPL文件*.can進行編譯,編譯通過后,點擊菜單欄File -> Save as Encrypted,將*.canencr文件保存到*.can文件相同的路徑中(*.canencr文件就是*.can文件的加密文件),將*.can文件從當前路徑移除,CANoe也可以正常運行。

d7cba8fa-004f-11ef-a297-92fbcf53809c.png

對*.cin文件進行加密與上述類似,用CAPL Browser打開*.cin文件進行編譯,編譯通過后,在相同路徑下另存為*.cinencr文件,移除*.cin文件即可。

2.CAN報文中未使用位的檢測

若想要檢查某個報文未使用位的值是否滿足要求,可用ChkStart_PayloadGapsObservation函數。若想要檢查某個節點中所有TX報文或者RX報文未使用位的值是否滿足要求,可使用ChkStart_PayloadGapsObservationTx/ChkStart_PayloadGapsObservationRx函數。關于函數的具體介紹請參考CANoe Help文檔。文檔以示例工程Demo_Check_Unused_Bit為例,通過調用函數ChkStart_PayloadGapsObservation來檢測CAN報文未使用位的值是否為0,若為0則測試通過,否則測試失敗。測試代碼(CAPL_Tester節點)示例如圖二所示:

includes
{
}
variables
{
  dword checkId;
}
void MainTest ()
{
  BGCheck_UnusedBits();
}


testcase BGCheck_UnusedBits()   // 報文的未使用位檢測
{
  checkId = ChkStart_PayloadGapsObservation(message_1,0); // 檢查報文的未使用位值是否為0,函數的第一個參數為需檢查報文的名稱,第二個參數為未使用位期望的數值
  TestAddCondition(checkId); // 添加檢測條件,若報文未使用位的數值不滿足要求,則會在報告中記錄下來
  TestWaitForTimeout(10000);  // 持續檢測10s
  TestRemoveCondition(checkId);// 移除檢測條件
}

運行CAPL_Tester測試模塊,在測試時間內通過按鍵‘a’發送一幀名為message_1(ID為0x123)的報文,該報文中未使用位bit15的值為0,未使用位值滿足要求,測試通過(報告如圖二所示)。

d7e4af6c-004f-11ef-a297-92fbcf53809c.png

3.如何安裝和使用CANoe MATLAB插件

首先需要檢查CANoe、插件MATLAB的版本兼容性,以及MATLAB與編譯器的版本兼容性,檢查方法可在CANoe的User Assistance找到:

搜索打開MATLAB Integration Package,之后點擊MATLAB Integration Package Version History查看。

同樣在MATLAB Integration Package頁面,點擊打開Compiler Configuration查看。

檢查完兼容性后,就是插件安裝了,在CANoe的安裝目錄下,Vector CANoe 17Installer Additional ComponentsMatlab,右擊使用管理員權限安裝。當在Simulink Library Browser看到Vector CANoe分類時,安裝已成功。

d7febcf4-004f-11ef-a297-92fbcf53809c.png

d81ced8c-004f-11ef-a297-92fbcf53809c.png

插件的使用可以查詢CANoe自帶的使用說明文檔,Using_MATLAB_with_CANoe.pdf。

4.使用CANoe比較兩個記錄文件的信號

關于如何使用Graphics窗口直觀地比較兩個不同的CAN記錄文件中的相同信號??梢园凑障旅嫣岬降乃膫€步驟進行:

1.打開CANoe:使用兩個CAN通道的模板來創建一個新的CANoe工程(CAN 500 kBaud 2ch)。

2.配置為Offline模式:在Measurement Setup窗口中右鍵單擊離線文件列表,打開Offline Mode Configuration對話框。跳轉到Channel mapping 并添加一個新的設置。配置Bus Type為CAN,Source Channel設置為1(或任何一個有所需信號的通道)以及Destination Channel設置為2(或其他除Source Channel以外的數字),然后點擊OK。

3.添加所需文件:在兩個通道上添加相同的DBC文件。在Measurement Setup窗口的離線文件列表中添加兩個記錄文件。對于其中一個記錄文件,選擇步驟2中創建的通道匹配設置。

3.查看圖形:在Measurement Setup窗口中打開Graphics窗口。添加兩個通道中的同一個信號,添加時請確保分別選擇了對應的通道。運行工程,觀察從兩個記錄文件中得出的兩個信號圖形。

d834e856-004f-11ef-a297-92fbcf53809c.png

5.如何為DoIP Tester定義特定TCP源端口

要為DoIP Tester發送的數據包定義特定的TCP源端口,請按照以下步驟操作:

進入CANoe Options并打開應用程序數據位置:

d846dd40-004f-11ef-a297-92fbcf53809c.png

然后關閉CANoe。應用程序數據文件夾包含一個名為DoIP.ini的文件。用文本編輯器打開該文件。在文件末尾添加以下部分,以設置特定的TCP端口:[Connection] ForceTesterTCPSendPort=[Port],然后保存。

d85f0ea6-004f-11ef-a297-92fbcf53809c.png

6.CAN TP 如何接收超過4095字節的數據?

CAN TP中默認的接收緩存是4095字節,可以使用CAPL 函數CanTpSetMaximumReceiveLength 來增加TP層接收緩存區的大小,如下,目前CANoe 支持最大16MB的數據傳輸。

on start
{
  dword maxLength =8000;
  CanTpSetMaximumReceiveLength(gRxHandle,maxLength); // gRxHandle: 用于建立CAN TP層連接的句柄
}
7.如何在CAPL中訪問信號和系統變量的Value Table條目

信號和系統變量可以具有描述特定值的Value Table。這些Value Description也可以在CAPL中訪問,以獲得更好的可讀性/對實際CAPL代碼的解釋。引用Value Description(而不是實際值)和查找特定值的Value Description都是可行的。

在Switch/Case中引用Value Description(而不是實際值)的示例:

Switch(@SystemVariable)
{
case (sysvar:
// do whatever you want to do"
}

8.關于CANoe測試報告問題

1>.如何設置測試報告格式

在CANoe Options | General | Test Feature Set | Reporting File Format處選擇測試報告格式。

2>測試報告格式轉換

Test Report Viewer format轉換為PDF格式使用工具Vector CANoe Test Report Viewer打開*.vtestreport文件,點擊File | Export | Export PDF,可以將測試報告轉為PDF格式

3>Test Report Viewer format轉換為XML格式

使用工具Vector CANoe Test Report Viewer打開*.vtestreport文件,點擊File | Export | Export XML,可以將測試報告轉為XML格式。

9.Ethernet/CAN 網關

CAPL實現ETH轉CAN,網關先收到一幀UDP報文,以表示啟動。這幀報文可以由Ethernet IG 來進行仿真。這幀報文以兩個CAN報文的組成形式,從網關轉發出去。每幀CAN報文至少包含14個字節,內容包括CAN-Id, -dlc, -rtr 以及data bytes。

variables
{
  //
  // Constants
  //


  const WORD kPort         = 23; // UDP port number for instance
  const WORD kRxBufferSize = 1500;
  const WORD kTxBufferSize = 1500;


  //
  // Structure of UDP payload
  //


  _align(1) struct CANData
  {
    BYTE  dlc;
    BYTE  flags; // Bit 7 - Frame type (0 = standard, 1 = extended)
                 // Bit 6 - RTR bit ('1' = RTR bit is set)
    DWORD canId;
    BYTE  canData[8];
  };


  //
  // Global variables
  //


  UdpSocket gSocket;
  CHAR      gRxBuffer[kRxBufferSize];
  CHAR      gTxBuffer[kTxBufferSize];
  DWORD     gOwnAddress;
  DWORD     gModuleAddress= 0xFFFFFFFF; // default is the broadcast address 255.255.255.255  and the TCP/IP stack will build the Network broadcast address
}


//
// Measurement start handler
//


on start
{
  DWORD addresses[1];


  // get own IP address of the Windows TCP/IP stack
  IpGetAdapterAddress( 1, addresses, elcount(addresses) );
  gOwnAddress = addresses[0];


  // open UDP socket
  gSocket = UdpSocket::Open( 0, kPort ); 


  if (gSocket.GetLastSocketError() != 0)
  {
    write( "<%BASE_FILE_NAME%> Open UDP socket failed, result %d. Measurement stopped!", gSocket.GetLastSocketError() );
    stop();
    return;
  }


  if (gSocket.ReceiveFrom( gRxBuffer, elcount(gRxBuffer) ) != 0)
  {
    if (gSocket.GetLastSocketError() != 997) // ignore pending IO operation
    {
      write( "<%BASE_FILE_NAME%> UDPReceive failed, result %d. Measurement stopped!", gSocket.GetLastSocketError() );
      stop();
      return;
    }
  }


}


//
// On receive UDP data handler using CAPL Callback 
//


void OnUdpReceiveFrom( dword socket, long result, dword address, dword port, char buffer[], dword size)
{
  DWORD          dataOffset;
  struct CANData canData;
  message *      canMsg;


  if (address == gOwnAddress) return; // ignore own broadcasts


  //
  // Store IP address of module to reach
  //


  if (gModuleAddress == 0)
  {
    gModuleAddress = address;
  }


  //
  // Handle received data
  //


  dataOffset = 0;
  while (dataOffset + __size_of(struct CANData) <= size)
  {
    memcpy( canData, buffer, dataOffset );


    canMsg.id      = (canData.canId & 0x1FFFFFFF) | ((canData.flags & 0x80) ? 0x80000000 : 0);
    canMsg.dlc     = canData.dlc & 0x0f;
    canMsg.rtr     = ((canData.flags & 0x40) ? 1 : 0);
    canMsg.byte(0) = canData.canData[0];
    canMsg.byte(1) = canData.canData[1];
    canMsg.byte(2) = canData.canData[2];
    canMsg.byte(3) = canData.canData[3];
    canMsg.byte(4) = canData.canData[4];
    canMsg.byte(5) = canData.canData[5];
    canMsg.byte(6) = canData.canData[6];
    canMsg.byte(7) = canData.canData[7];


    output( canMsg );


    dataOffset += __size_of(struct CANData);
  }




  //
  // Receive more data
  //
  if (gSocket.ReceiveFrom( gRxBuffer, elcount(gRxBuffer) ) != 0)
  {
    if (gSocket.GetLastSocketError() != 997) // ignore pending IO operation
    {
      write( "<%BASE_FILE_NAME%> UDPReceive failed, result %d. Measurement stopped!", gSocket.GetLastSocketError() );
      stop();
      return;
    }
  }
}


//
// Handler for CAN messages
//


on message *
{
  int i;
  struct CANData canData;


  if ((this.dir == RX) && (gModuleAddress != 0))
  {
    canData.canId = this.id & 0x1FFFFFFF;
    canData.flags = ((this.id & 0x80000000) ? 0x80 : 0x00) | ((this.rtr == 1) ? 0x40 : 0x00);
    canData.dlc   = this.dlc;


    for( i = 0; i < 8; i++ )
    {
      canData.canData[i] = (i < this.dlc) ? this.byte(i) : 0;
    }


    memcpy( gTxBuffer, canData );


    gSocket.SendTo( gModuleAddress, kPort, gTxBuffer, __size_of(struct CANData) );
  }
  else if (gModuleAddress == 0)
  {
    write( "<%BASE_FILE_NAME%> Tx not possible. Module to reach must send packets first." ); //Server simulation
  }
}
審核編輯:黃飛

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • matlab
    +關注

    關注

    177

    文章

    2928

    瀏覽量

    228795
  • 編譯器
    +關注

    關注

    1

    文章

    1585

    瀏覽量

    48739
  • CANoe
    +關注

    關注

    3

    文章

    59

    瀏覽量

    8485

原文標題:CANoe使用問題匯總

文章出處:【微信號:eng2mot,微信公眾號:汽車ECU開發】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    PC電源常見問題匯總

    PC電源常見問題匯總,分享!
    發表于 04-29 16:03

    飛思卡爾 KL 系列常見問題和解答匯總

    KL 系列常見問題和解答匯總篇KL 系列 FAQ (十)KL 系列 FAQ (九)KL 系列 FAQ (八)KL 系列 FAQ (七)KL 系列 FAQ (六)KL 系列 FAQ (五)KL 系列 FAQ (四)KL 系列 FAQ (三)KL 系列 FAQ (二)KL 系
    發表于 01-22 15:42

    C語言常見問題

    C語言常見問題匯總大集合
    發表于 05-10 21:37

    Window7遠程桌面連接Ubuntu14.04常見問題?

    Window7遠程桌面連接Ubuntu14.04常見問題匯總
    發表于 11-09 08:01

    STM32常見問題有哪些?怎么解決這些問題?

    STM32常見問題有哪些?如何解決STM32單片機常見問題?
    發表于 04-19 06:39

    三菱PLC之間的N:N無線通訊的常見問題匯總

    三菱PLC之間的N:N無線通訊的常見問題匯總如下:【需求描述①:佛山陳工】 我有三個FX3U,一個主站,兩個從站。要實現無線N:N通訊,應該怎么下單,也就是說要買幾個發射器,幾個接受器,可以告訴我型號嗎? 【達泰技術:無線PLC】 選擇三菱PLC專用無線數據終端DTD43
    發表于 07-02 07:08

    C語言常見問題合集匯總

    C語言常見問題集,學習C語言的同學可以下載。
    發表于 03-29 10:07

    電鍍銅的常見問題

    電鍍銅的常見問題集 PCB電鍍中的酸銅電鍍常見問題,主要有以下幾個:電鍍粗糙;電鍍(板面)銅
    發表于 04-07 22:29 ?3264次閱讀

    Keil編譯常見問題

    吳鑒鷹總結的Keil 編譯常見問題,吳鑒鷹總結的Keil 編譯常見問題。
    發表于 07-22 15:31 ?10次下載

    SIM900A常見問題匯總,奉上解決方案

    SIM900A常見問題匯總,奉上SIM900A問題的解決辦法。
    發表于 11-06 10:46 ?9946次閱讀

    固德威逆變器wifi設置_方法步驟教程_常見問題匯總

    本文主要介紹的是固德威逆變器wifi設置的步驟教程以及常見問題問題匯總,具體的跟隨小編一起來了解下。
    的頭像 發表于 05-15 16:03 ?5.2w次閱讀
    固德威逆變器wifi設置_方法步驟教程_<b class='flag-5'>常見問題</b><b class='flag-5'>匯總</b>

    MES軟件的作用及常見問題匯總

    本文主要介紹了MES軟件的作用及常見問題匯總。
    發表于 06-04 08:00 ?4次下載

    網優工程師面試常見問題匯總資料下載

    電子發燒友網為你提供網優工程師面試常見問題匯總資料下載的電子資料下載,更有其他相關的電路圖、源代碼、課件教程、中文資料、英文資料、參考設計、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發表于 03-29 16:50 ?106次下載
    網優工程師面試<b class='flag-5'>常見問題</b><b class='flag-5'>匯總</b>資料下載

    2.4G頻段的SI24R2E無線單發芯片技術問答,常見問題進行匯總解答

    針對2.4G頻段的無線單發芯片——SI24R2E,在開發過程中會遇到的常見問題進行匯總解答。
    的頭像 發表于 10-27 14:06 ?680次閱讀

    TSMaster診斷功能之常見問題匯總

    常見問題匯總以上幾個章節給小伙伴們介紹了TSMaster診斷功能的一些基礎配置問題以及操作步驟詳解,那我相信大家在使用TSMaster軟件的過程中還會遇到許許多多的問題,下面我就挑幾個熱度比較
    的頭像 發表于 07-22 14:48 ?1346次閱讀
    TSMaster診斷功能之<b class='flag-5'>常見問題</b><b class='flag-5'>匯總</b>
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>