日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CAPL编程概述

發布時間:2023/12/31 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CAPL编程概述 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. CAPL概述

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程序的結構包含了頭文件、全局變量、事件函數、自定義函數;當然不是每個因素都要有,視具體程序功能確定。

1.3、CAPL的數據類型

1.4、CAPL事件類型概述

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

2. 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!\n"); }

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"相關章節中進行學習。

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

2.8、系統變量事件

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

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

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

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

總結

以上是生活随笔為你收集整理的CAPL编程概述的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91免费网站视频 | 日本黄大片在线观看 | 午夜羞羞影院 | 亚洲六月丁香色婷婷综合久久 | 一区二区三区国产精品 | 欧美性生活xxx | 无码人妻精品一区二区三应用大全 | 国产主播专区 | 久久国产精品久久久久久电车 | 久久婷五月天 | 欧美熟妇精品久久久久久 | 久久99成人| 国产日韩网站 | 成人试看120秒体验区 | 不卡av在线免费观看 | 中文字幕大全 | 亚洲爽爽网 | 日本偷拍一区 | 久久黄色网 | 国产av天堂无码一区二区三区 | 狠狠干,狠狠操 | 国内免费精品视频 | 嫩草视频在线观看视频 | 日韩精品在线观看一区二区三区 | 国产农村妇女精品一区二区 | 亚洲v国产v | 国产精品 欧美激情 | 天天天天操| 九九啪| jizzzxxxx| 神马久久春色 | 中文字幕第十一页 | www.久久久久 | 啪网址 | 亚洲a中文字幕 | 久久综合伊人77777蜜臀 | 87福利视频| 蜜桃精品一区二区 | 国产女合集 | 日日干夜夜干 | 四虎精品在线播放 | 成年人网站免费 | 男女作爱免费网站 | 亚州激情视频 | 国产乱人乱偷精品视频 | 久久久社区 | av资源新版在线天堂 | 日本高清不卡在线 | 啪啪网视频 | 一区二区在线免费 | 久久久久国产 | 亚洲免费三区 | 乱码一区二区三区 | 搡8o老女人老妇人老熟 | 农村末发育av片一区二区 | 老鸭窝一区二区 | 黄色av导航 | 欧美日韩第一区 | 久久性爱视频网站 | av剧情在线 | av久色 | 午夜剧场黄色 | 亚洲人在线播放 | 特级丰满少妇一级aaaa爱毛片 | 久久成人福利 | 在线精品视频播放 | 亚洲熟女乱色综合亚洲小说 | 国产亚洲精品久久久久久久久动漫 | 麻豆传媒网站在线观看 | 免费国偷自产拍精品视频 | 91麻豆精品一区二区三区 | 欧美视频第一页 | 亚洲婷婷综合网 | 日本精品一二三 | 熟女少妇一区二区 | 欧美第一色 | 免费在线国产精品 | 久久午夜夜伦鲁鲁片 | 国产超91 | 欧洲精品免费一区二区三区 | 男男受被啪到高潮自述 | 九色在线 | 国产高清免费av | 亚洲视频一区二区三区 | 少妇第一次交换又紧又爽 | 国产情侣呻吟对白高潮 | 91精品国产自产91精品 | a级一级片| 天堂网一区 | 亚洲AV无码乱码国产精品色欲 | 国产chinesehd精品 | 美女黄18以下禁止观看 | 久久免费视频1 | 中文字幕日韩高清 | 致命魔术电影高清在线观看 | 色又色| 欧美国产精品久久 | 亚洲国产成人精品激情在线 | 国产美女又黄又爽又色视频免费 |