0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

CANoe使用常見問題匯總

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

CANoe使用問題匯總。

1.如何將CAPL文件加密

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

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

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

2.CAN報(bào)文中未使用位的檢測

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

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


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

運(yùn)行CAPL_Tester測試模塊,在測試時(shí)間內(nèi)通過按鍵‘a(chǎn)’發(fā)送一幀名為message_1(ID為0x123)的報(bào)文,該報(bào)文中未使用位bit15的值為0,未使用位值滿足要求,測試通過(報(bào)告如圖二所示)。

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

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

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

搜索打開MATLAB Integration Package,之后點(diǎn)擊MATLAB Integration Package Version History查看。

同樣在MATLAB Integration Package頁面,點(diǎn)擊打開Compiler Configuration查看。

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

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

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

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

4.使用CANoe比較兩個(gè)記錄文件的信號(hào)

關(guān)于如何使用Graphics窗口直觀地比較兩個(gè)不同的CAN記錄文件中的相同信號(hào)。可以按照下面提到的四個(gè)步驟進(jìn)行:

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

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

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

3.查看圖形:在Measurement Setup窗口中打開Graphics窗口。添加兩個(gè)通道中的同一個(gè)信號(hào),添加時(shí)請確保分別選擇了對應(yīng)的通道。運(yùn)行工程,觀察從兩個(gè)記錄文件中得出的兩個(gè)信號(hào)圖形。

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

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

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

進(jìn)入CANoe Options并打開應(yīng)用程序數(shù)據(jù)位置:

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

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

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

6.CAN TP 如何接收超過4095字節(jié)的數(shù)據(jù)?

CAN TP中默認(rèn)的接收緩存是4095字節(jié),可以使用CAPL 函數(shù)CanTpSetMaximumReceiveLength 來增加TP層接收緩存區(qū)的大小,如下,目前CANoe 支持最大16MB的數(shù)據(jù)傳輸。

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

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

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

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

8.關(guān)于CANoe測試報(bào)告問題

1>.如何設(shè)置測試報(bào)告格式

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

2>測試報(bào)告格式轉(zhuǎn)換

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

3>Test Report Viewer format轉(zhuǎn)換為XML格式

使用工具Vector CANoe Test Report Viewer打開*.vtestreport文件,點(diǎn)擊File | Export | Export XML,可以將測試報(bào)告轉(zhuǎn)為XML格式。

9.Ethernet/CAN 網(wǎng)關(guān)

CAPL實(shí)現(xiàn)ETH轉(zhuǎn)CAN,網(wǎng)關(guān)先收到一幀UDP報(bào)文,以表示啟動(dòng)。這幀報(bào)文可以由Ethernet IG 來進(jìn)行仿真。這幀報(bào)文以兩個(gè)CAN報(bào)文的組成形式,從網(wǎng)關(guān)轉(zhuǎn)發(fā)出去。每幀CAN報(bào)文至少包含14個(gè)字節(jié),內(nèi)容包括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
  }
}
審核編輯:黃飛

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • matlab
    +關(guān)注

    關(guān)注

    185

    文章

    2980

    瀏覽量

    230738
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1640

    瀏覽量

    49200
  • CANoe
    +關(guān)注

    關(guān)注

    4

    文章

    66

    瀏覽量

    8680

原文標(biāo)題:CANoe使用問題匯總

文章出處:【微信號(hào):eng2mot,微信公眾號(hào):汽車ECU開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    PC電源常見問題匯總

    PC電源常見問題匯總,分享!
    發(fā)表于 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 系
    發(fā)表于 01-22 15:42

    C語言常見問題

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

    Window7遠(yuǎn)程桌面連接Ubuntu14.04常見問題

    Window7遠(yuǎn)程桌面連接Ubuntu14.04常見問題匯總
    發(fā)表于 11-09 08:01

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

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

    C語言常見問題合集匯總

    C語言常見問題集,學(xué)習(xí)C語言的同學(xué)可以下載。
    發(fā)表于 03-29 10:07

    Keil編譯常見問題

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

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

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

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

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

    智慧視頻監(jiān)控常見問題及解決方法匯總

    智慧視頻監(jiān)控常見問題及解決方法匯總 1、錄像機(jī)連接攝像機(jī)經(jīng)常掉線 可能有三個(gè)原因:1.攝像機(jī)供電不穩(wěn)定,比如常在夜間掉線 2.網(wǎng)絡(luò)線路問題,交換機(jī)交換性能不足 3.攝像機(jī)故障
    的頭像 發(fā)表于 05-27 11:30 ?1.5w次閱讀

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

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

    灰塵網(wǎng)絡(luò)常見問題

    灰塵網(wǎng)絡(luò)常見問題
    發(fā)表于 04-28 15:08 ?8次下載
    灰塵網(wǎng)絡(luò)<b class='flag-5'>常見問題</b>

    2.4G頻段的SI24R2E無線單發(fā)芯片技術(shù)問答,常見問題進(jìn)行匯總解答

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

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

    常見問題匯總以上幾個(gè)章節(jié)給小伙伴們介紹了TSMaster診斷功能的一些基礎(chǔ)配置問題以及操作步驟詳解,那我相信大家在使用TSMaster軟件的過程中還會(huì)遇到許許多多的問題,下面我就挑幾個(gè)熱度比較
    的頭像 發(fā)表于 07-22 14:48 ?1959次閱讀
    TSMaster診斷功能之<b class='flag-5'>常見問題</b><b class='flag-5'>匯總</b>

    OpenSSL安裝常見問題

    OpenSSL安裝常見問題
    的頭像 發(fā)表于 07-07 11:17 ?928次閱讀
    OpenSSL安裝<b class='flag-5'>常見問題</b>