色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

什么是CAPL編程?

jf_EksNQtU6 ? 來源:車端 ? 2023-06-18 10:13 ? 次閱讀

與Vspy的"C Code Interface"一樣;在CANoe的使用中,一樣提供了我們進行二次編程開發的工具——”CAPL Browser”。通過CAPL的編程,我們可以在節點上完成更為復雜的功能需求。操作如下:在CANoe工程的”Simulation Setup”界面下的左側的網絡節點中,點擊鉛筆形狀的圖標,進入CAPL編輯界面(若當前節點還沒有創建對應的CAPL程序,則此時會先提示輸入CAPL程序名,并保存為.can后綴的文件)

0fca8074-0cf8-11ee-962d-dac502259ad0.png

1.1、CAPL語言特性

CAPL(Communication Access Programming Laguage)語言是類C語言,語法其實與C語言很相似,但同時又包含了一些C++的特性,如this指針、事件等; 應用于Vector CAN工具節點的編程,是基于事件建模的語言; 可以使用write()函數進行調試,用于將調試信息輸出到CANoe的write窗口上; 通過output()函數進行指定報文的發送; 通常是通過環境變量事件與CANoe面板進行關聯,實現交互; 提供調用dll文件的方法(操作見"關于CAPL中對dll的調用操作"一文);這樣保證了對由其他語言封裝好的程序模塊的調用;

1.2、CAPL的程序結構

如下,一個完整的CAPL程序的結構包含了頭文件、全局變量、事件函數、自定義函數;當然不是每個因素都要有,視具體程序功能確定。

0fe12c3e-0cf8-11ee-962d-dac502259ad0.png

1.3、CAPL的數據類型

0fea8914-0cf8-11ee-962d-dac502259ad0.png

1.4、CAPL事件類型概述

CAPL是基于事件建模的語言,從1.2小節對CAPL的程序結構的介紹也可以看出,關于CAPL的運用主要就是在于熟悉其事件的使用;其常用的事件如下:

101765c4-0cf8-11ee-962d-dac502259ad0.png

接下來,我們對CAPL的幾種事件類型進行進一步的介紹

02

CAPL事件類型

2.1、系統事件

在CAPL的系統事件中,有preStart、start、preStop、stopMeasurement這4種。我們可以根據需要在相應的系統事件函數接口中定義想要進行的操作;當工程運行時,下述系統事件的發生順序依次是

preStart-->start-->preStop-->stopMeasurement

關于系統事件的定義格式如下:

on preStart             /*系統事件,初始化時執行*/
{
   resetCan();            /*CAPL接口函數,用于復位CAN控制器*/
}
on start              /*系統事件,工程開始時執行*/
{
   write(“Just A Try”);      /*write()函數將字符串信息在”write”窗口輸出*/
}
on preStop            /*系統事件,工程預備停止時執行;發生在stopMeasurement事件前面*/
{
    write("The Project Will Stop!”);
}
on stopMeasurement      /*系統事件,工程停止時執行*/
{
    write("The End!
");
}

2.2、CAN控制器事件

硬件對CAN控制器檢測到相應動作發生時執行;以BusOff事件為例,格式如下:

on busOff       /*CAN控制器事件:硬件檢測到BusOff時執行*/
  {
      write("BusOff Error!");
  }

2.3、CAN消息事件

通過”on message”定義消息事件,該事件會在指定的報文消息被接收時被調用。關于消息事件的定義格式示例如下:

on message 123             /*接收到123(10進制)這個ID的報文時執行*/
on message 0x441           /*接收到0x441(16進制)這個ID的報文時執行*/
on message BCM              /*接收到BCM(工程dbc文件中的報文名)這個報文時執行*/
on message*              /*接收到任意報文時都執行(注意*與message之間沒有空格)*/
on message 0x300-0x444     /*接收到這個范圍內的ID報文時執行*/
{
    write(“Received %x”,this.id);   /*打印接收到的報文id*/
    write(“Received Message %d in total!”,count);
}

以上是關于消息事件的定義格式,關于消息的索引及發送操作我們通過下例介紹: 假設VoiceStatus是我們工程dbc文件中定義的一個報文,該報文包括了VoiceType和VoiceOperation這兩個信號;其中,VoiceType這個變量占據第1個字節;VoiceOperation占據第2、3個字節。則關于消息的索引,通過報文的信號(msg.VoiceType這樣)去操作如下:

void TxMsg_VoiceStatus(void)
{
    message VoiceStatus msg;         /*將工程中dbc中定義的VoiceStatus這條報文取名為msg*/
    msg.VoiceType = @VoiceType;      /*對應賦值給到報文的信號,通過報文別名"msg."調出*/
    msg.VoiceOperation = @VoiceOperation;
    output(msg);                     /*通過output指令發送該報文*/
}

也可以直接通過后接數據類型(msg.byte(0)這樣)去操作,此時操作如下:

void TxMsg_VoiceStatus(void)
{
    message VoiceStatus msg;         /*將工程中dbc中定義的VoiceStatus這條報文取名為msg*/
    msg.byte(0) = @VoiceType;        /*報文第1個數據字節*/
    msg.word(1) = @VoiceOperation; ; /*報文從第1個字節開始的一個字(2個字節)*/
    output(msg);                     /*通過output指令發送該報文*/
}

2.4、鍵盤事件

通過”on key”定義鍵盤事件,該事件會在我們按下指定按鍵時執行;關于鍵盤事件的定義格式示例如下:

on key ‘a’        /*在小寫輸入法下,按下鍵盤的’A’鍵時執行*/
on key ‘A’        /*在大寫輸入法下,按下鍵盤的’A’鍵時執行*/
on key ‘ ’        /*按下鍵盤的空格鍵時執行,注意單引號中間是有空格的*/
on key 0x20       /*按下鍵盤的空格鍵時執行*/
on key F2            /*按下鍵盤的’F2’鍵時執行*/
on key CtrlF3        /*同時按下鍵盤的’Ctrl’鍵和’F3’鍵時執行*/
on key*          /*按下鍵盤的任意鍵時都會執行(注意*與key之間沒有空格) */
{
    write(“The Key Is Press”);
}

2.5、時間事件

通過”on timer”定義時間事件;該事件會在設定的時間到達時執行。關于時間事件的定義格式及使用示例如下:

variables
{
  msTimer Timer1;        /*在variables中聲明一個以ms為單位的定時器變量Timer1*/
}
on start
{
  setTimer(Timer1,100);     /*將Timer1的定時時間設定為100ms,并啟動它*/
}
on timer Timer1         /*定義的Timer1時間事件,每100ms執行一次*/
{
  setTimer(Timer1,100);     /*啟動下一個周期循環*/
}
on key ‘a‘           /*鍵盤事件,按下鍵盤’A’鍵時執行*/
{
  cancelTimer(Timer1);     /*停止Timer1這個100ms執行一次的定時器*/
}
2.6、錯誤幀事件

通過”on errorFrame ”定義錯誤幀事件;該事件會在硬件檢測到錯誤幀時執行。關于錯誤幀事件的定義格式示例如下:
on errorFrame       /*錯誤幀事件:硬件檢測到錯誤幀時執行*/
{
  write("The error has occur"); 
}
2.7、環境變量事件

通過”on envVar”定義環境變量事件;該事件會在指定的環境變量值有新的輸入時執行(環境變量常常用于關聯上一個面板控件,當我們對控件進行操作時,對應改變關聯上的環境變量值;而此時我們在CAPL中關于該環境變量的事件就會被調用;以此完成交互操作)。關于環境變量事件的定義格式示例如下:
on envVar BCM_HightBeamAlarm    /*環境變量事件:指定的環境變量值有輸入時執行*/
{
    byte num=0;
    num = getValue(this);     /*可以使用getValue(環境變量名/this關鍵字)獲取指定的環境變量的值*/
if(num == 1)
    {
      write("The envVar is %d",@BCM_HightBeamAlarm);  
    }
else
    {
      putValue(this,1);/*使用putValue(環境變量名/this關鍵字,設定的值)改變指定的環境變量的值;直接賦值的話,格式是@BCM_HightBeamAlarm = 1; */
      write("Change envVar to %d",@BCM_HightBeamAlarm);
    }
}

關于在CAPL中對環境變量的操作中,getValue()與putValue()是常用的接口函數。其函數格式如下,具體介紹及示例也可以通過神鍵"F1"召喚幫助文檔,在"CAPL"相關章節中進行學習。

102bfad4-0cf8-11ee-962d-dac502259ad0.png

104ae2e6-0cf8-11ee-962d-dac502259ad0.png

Ps:關于環境變量的定義是在dbc文件中完成的;CANoe工程導入該dbc文件即可使用其定義的環境變量了。環境變量的創建如下:

105fce0e-0cf8-11ee-962d-dac502259ad0.png

2.8、系統變量事件

通過”onsysvar”定義系統變量事件;該事件會在指定的系統變量值有新的輸入時執行,其格式及使用方法與前一小節的環境變量基本一致;差別只在于環境變量是在dbc文件中定義的;而系統變量的定義如下:

點擊工具欄的”Environment”下的”System Variables”;此時界面如下,右鍵空白處,選擇”New”進行新建;在彈出的窗口對新建的系統變量進行參數設置。

106d7e0a-0cf8-11ee-962d-dac502259ad0.png

關于系統變量事件的定義格式示例如下:

on sysvar SysVar1   /*系統變量事件:指定的系統變量值有新的輸入時執行*/
  {
      write("The SysVar1 is %d",@SysVar1);
  }

來源:車端





審核編輯:劉清

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

    關注

    57

    文章

    2744

    瀏覽量

    463627
  • CAN控制器
    +關注

    關注

    3

    文章

    74

    瀏覽量

    15031

原文標題:什么是CAPL編程?

文章出處:【微信號:談思實驗室,微信公眾號:談思實驗室】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    CAPL介紹-編程中常用的函數結構#CANoe#CAPL#函數結構

    編程
    北匯信息POLELINK
    發布于 :2023年01月01日 18:11:59

    CAPL介紹-腳本編輯和常用基本事件#CANoe#CAPL#腳本

    編程語言
    北匯信息POLELINK
    發布于 :2023年01月06日 09:06:50

    CAPL編程進階應用——Checksum算法的實現#CANoe #CAPL #Checksum

    編程
    北匯信息POLELINK
    發布于 :2023年04月21日 23:00:01

    CANoe:網絡和ECU開發、測試和分析的專業工具

    可以運用類C的CAPL編程語言編程實現仿真、分析和測試 可以創建用戶自定義界面來控制仿真和測試過程或顯示分析數據特殊功能:附加模塊可以適應OEM的具體要求和協議(傳輸協議,網絡管理,交互層,等)診斷
    發表于 10-09 17:42

    Vector-CANoe 軟件中文資料,CPAL語言,軟件使用方法等

    本帖最后由 追風逐浪 于 2019-3-12 14:29 編輯 Vector-CANoe 軟件中文資料,CPAL語言,軟件使用方法等CANoe.LIN基礎培訓 CANoe快速入門 CAPL編程
    發表于 03-12 14:20

    CAPL編程語言 官方英文原版

    之前看過的一份CAPL編程語言資料,英文原版,分享給需要的小伙伴!!!
    發表于 01-14 18:19

    如何用CAPL通過RS232遠程控制ALR3220

    CAPL通過RS232遠程控制ALR3220程控電源
    發表于 12-28 06:37

    如何使用LabVIEW實現診斷自動化

    ,ECU 內部自檢測策略,都是汽車診斷必不可少的一部分,本文主要介紹在 CANoe 軟件下通用的 CAPL 語言,運用 CAPL 語言編寫程序,然后合理的連接硬件,根據參數正確對軟件進行相應的配置,使用一些接口函數,通過 LabVIEW
    發表于 12-16 08:00 ?9次下載
    如何使用LabVIEW實現診斷自動化

    CAPL通過RS232遠程控制ALR3220程控電源

    CAPL通過RS232遠程控制ALR3220程控電源
    發表于 01-05 15:10 ?20次下載
    用<b class='flag-5'>CAPL</b>通過RS232遠程控制ALR3220程控電源

    CAPL編程語言快速入門

    CAPL是由Vector公司開發的類似于C語言的面向過程編程語言,是CANoe和CANalyzer中可用的編程語言。CAPL中程序塊的執行由事件控制,在專用的編譯器中開發和編譯,這樣可
    的頭像 發表于 09-17 16:11 ?2717次閱讀
    <b class='flag-5'>CAPL</b><b class='flag-5'>編程</b>語言快速入門

    CAPL編程的進階應用 | Checksum算法的實現

    作者:北城舊巷小編:吃不飽CRC與Checksum區別相信大家在CANMsg或者ETHPDU中經常會看到Checksum這種信號。提到Checksum,就必須要說明一下CRC校驗,很多工程師會概念混淆,認為兩者是同一個東西,實則它們有很大的區別。01兩者存放位置不同CRC校驗:循環冗余檢查(CRC)是一種數據傳輸檢錯功能,對數據進行多項式計算,并將得到的結果
    的頭像 發表于 10-11 09:29 ?1220次閱讀
    <b class='flag-5'>CAPL</b><b class='flag-5'>編程</b>的進階應用 | Checksum算法的實現

    ?CAPL在診斷中的應用,你值得了解!

    作者|胖胖磊小編|吃不飽CANoe主要用于汽車總線的開發并廣泛被汽車電子工程師們使用。它具有強大的開發、分析、仿真、診斷、測試等功能。一提到CANoe大家往往都會想到CAPL,在使用CANoe
    的頭像 發表于 09-07 08:27 ?1024次閱讀
    ?<b class='flag-5'>CAPL</b>在診斷中的應用,你值得了解!

    CAPL腳本使用介紹

    CAPL中也有類似于C語言中的回調函數的機制,如檢測報文周期和錯誤幀的函數中就可以使用,當周期超界或者總線出現錯誤幀就會自動調用回調函數執行一些操作
    的頭像 發表于 04-01 11:23 ?1918次閱讀

    PLC的編程方式及編程語言

    在工業自動化領域,PLC(Programmable Logic Controller,可編程邏輯控制器)因其強大的控制功能和靈活的編程方式而得到了廣泛應用。PLC的編程方式和編程語言是
    的頭像 發表于 06-27 14:08 ?709次閱讀

    Vector推出一套基于Visual Studio Code的免費插件

    編寫工具(如Vector的CAPL Browser)雖然功能強大,但是結合Visual Studio Code更能夠滿足多語言編程和集成現代開發工具的需求。 因此,Vector推出一套基于Visual
    的頭像 發表于 11-24 14:15 ?335次閱讀
    Vector推出一套基于Visual Studio Code的免費插件
    主站蜘蛛池模板: 久久99久久成人免费播放| 纯肉腐文高H总受男男| 日本另类z0zxhd| 国产美女裸身网站免费观看视频 | 超碰v| 无码任你躁久久久久久久| 精品久久久久久无码人妻国产馆 | 国产成人a v在线影院| 亚洲视频无码高清在线| 秘密教学26我们在做一次吧免费| 波多野结衣 无码片| 亚洲精品视频区| 嫩草视频在线观看免费| 国产精品久久欧美一区| 越南女 黑人 痛苦 大叫| 欧美free嫩交hd| 国产午夜亚洲精品不卡电影| 最新国产在线视频在线| 色尼玛亚洲| 久久婷婷五月综合色丁香花 | 日本阿v直播在线| 狠狠色香婷婷久久亚洲精品| 99久久99| 亚洲成人在线免费| 欧美精品99久久久啪啪| 国产女高清在线看免费观看| 91精品乱码一区二区三区| 吻嘴胸全身好爽床大全| 美女扒开尿口让男生添动态图| 国产成人女人视频在线观看| 中文字幕乱码一区久久麻豆樱花| 色婷婷粉嫩AV精品综合在线| 久久久久久久99精品免费观看| 日韩a在线看免费观看视频| 好男人好资源在线观看| chinese极品嫩模videos| 人人草人人草| 久久爱狠狠综合网| 富婆夜店找黑人猛男BD在线| 在线免费看a| 午夜dj影院视频观看|