CANOE入門(二)

轉自:https://www.cnblogs.com/fengliu-/p/7844080.html

CANOE入門(二)

CAPL就是Communication Application Programming Laguage的縮寫,CAPL類似於C語言的語法,因此所有的語法請參考C語言教程,這裏不在這裏進行詳述,關於C語言,毫無疑問的,首先推薦大家看譚浩強老師的書,經典中的經典,看完這本C語言應該沒問題了。CAPL在CANoe中起到重要的作用,他將所有的部分聯繫起來(請看下圖)現在我們給予上一節的基礎上,來着重介紹CAPL編程。

tmp95

CAPL語法是C語言的,又有一些C++的特性,this指針,事件等,對於事件的理解可以學習任意一種面對對象語言,首推C#.NET,可以參考我的博客學習,當然這個似乎比CAPL本身更加難,事件也更加多,但這並不妨礙對事件的理解,其中的事件類型如下圖:

tmp9B

下面來幾個小例子幫助理解

來個CANoe版本的hello world!來興奮一小下吧。開整~

在打開CANoe,新建個工程,在Simulation Setup中加個Network node ,點鉛筆,忘了嗎,上一節剛講過,右鍵Start->New,鍵入如下代碼

tmpA6

編譯後,關閉CAPL Brower。運行CANoe工程,結果如下,哇塞成功咯,好有成就感啊。

tmpA7

這個例子似乎跟CAN通訊沒啥太大關係啊,好,我們接下來再做一個例子

tmpAB

 

運行結果如下,按鍵盤b鍵,將發送一個CAN消息,連dlc是啥都不知道的同學,推薦先學習一下CAN基礎知識,推薦瑞薩公司的《CAN入門書》,講的非常的好。

tmpAD

運行剛剛的那個例子你會發現,按一下b,只發送一條消息,但在實際應用中CAN消息都是循環連續發送的,我們要對剛剛的程序進行一些修改。完成這樣的功能。程序如下:

variables
{
message 0x400 msgA = {dlc=1};
mstimer timerA;
int conditionA = 0;
}

on key 'a'
{
conditionA = !conditionA;
if(conditionA ==1)
{
setTimer(timerA,200);
}
}

on timer timerA
{
if(conditionA==1)
{
setTimer(timerA,200);
}
msgA.byte(0) = msgA.byte(0)-1;
output(msgA);
}

運行結果如下:按A鍵,Timer啓動,發送消息

 

tmp12

接下來我們一起來看總結一下CAPL編程的要點:

tmp1B5

tmp1B6

tmp1B7

 

 

tmp1B9

tmp1BA

tmp1BB

tmp1BC

tmp1BD

tmp1BE

tmp1C0

tmp1C1

tmp1C2

tmp1C3

tmp1C4

tmp1C5

tmp1C6

tmp1C7

tmp1C8

CAPL編程的學習,需要通過不斷在實踐中的積累,此外別無他法。以上真真兒的只是入門,如果你真心看過,不如你真心寫過。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章