小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

CAPL腳本基本語法

 Kuai2012 2022-10-08 發(fā)布于北京

在車載控制器測試中,CAPL是常用的總線測試腳本之一,今天來簡單梳理一下常用的一些語法。

1.定時(shí)器

首先肯定是定時(shí)器了,在編寫CAPL腳本中,使用的頻率很高,比如我們需要周期性的發(fā)送CAN報(bào)文,或者周期性的檢測某個(gè)系統(tǒng)變量的變化時(shí)就需要用到定時(shí)器。

使用定時(shí)器的第一步就是申明定時(shí)器,如下。

msTimer  msTimer50;  //聲明了一個(gè)ms定時(shí)器;timer    sTimer1;  //聲明了一個(gè)為s定時(shí)器;

申明完后,就需要設(shè)置定時(shí)器。

setTimer(msTimer50,50);//設(shè)置定時(shí)器msTimer50的時(shí)間為50ms;setTimerCyclic(sTimer1,1);//設(shè)置定時(shí)器sTimer1為1s為周期的循環(huán)定時(shí)器;

在這些都做完之后,可以設(shè)計(jì)定時(shí)器到時(shí)之后,需要執(zhí)行的操作了,以msTimer50為例。

on timer msTimer50{   .......}

2.信息的發(fā)送操作

CAN報(bào)文操作,是我們常用的之一,下面就以CAN報(bào)文的發(fā)送操作為示例。這里如果在CANOE工程中添加了dbc文件,則可以直接通過dbc來定義message。

message Msg;//聲明一個(gè)message;Msg.dlc=8;//設(shè)置其DLC=8;Msg.id=0x100;//設(shè)置CAN ID=0x100;Msg.byte(0)=A5;//設(shè)置數(shù)據(jù)場的第一個(gè)字節(jié)為A5output(Msg);//發(fā)送Msg

3.CAN錯(cuò)誤幀檢查

進(jìn)行CAN總線測試時(shí),檢查錯(cuò)誤幀是很常見的,用CAPL腳本實(shí)現(xiàn)自動檢測錯(cuò)誤幀也不困難,CAPL中有現(xiàn)成的函數(shù)接口ChkStart_ErrorFrameOccured()。

該函數(shù)一旦被調(diào)用,CANoe就會從此函數(shù)被調(diào)用時(shí)開始持續(xù)檢測總線上有沒有出現(xiàn)錯(cuò)誤幀。

dword chechId;dword numCheckEvents;
checkId=ChkStart_ErrorFrameOccured();//開始檢測錯(cuò)誤幀TestAddCondition(checkId);//添加檢測條件,如果出現(xiàn)了錯(cuò)誤幀,則輸出報(bào)告中會記錄下來TestWaitForTimeout(10000);//持續(xù)檢測10scheckControl_Stop(checkId);//停止檢測錯(cuò)誤幀numCheckEvents=ChkQuery_NumEvents(checkId);//對5s內(nèi)的檢測情況進(jìn)行獲取,若函數(shù)返回0則沒有出現(xiàn)錯(cuò)誤幀
if(numCheckEvents>0)     TestStepFail("Error Frames Occured");

4.添加事件信號

一般使用是某個(gè)事件發(fā)生,然后需要執(zhí)行一些動作,比如打印出錯(cuò)誤信息等。

具體做法是:在一個(gè)位置添加需要等待的事件,程序中的其他地方,如果某個(gè)事件發(fā)生了(如周期超界、錯(cuò)誤幀出現(xiàn)等),提供該事件的供應(yīng),則等待的程序段獲得了該事件,繼續(xù)執(zhí)行下面的操作。幾個(gè)核心的函數(shù)接口如下所示。

//供應(yīng)text事件,主要用于關(guān)聯(lián)事件的觸發(fā)源,以及特定的textlong TestSupplyTextEvent( char aText[] );//添加text事件long TestJoinTextEvent(char[]aText);//等待text事件,有一個(gè)出現(xiàn)則程序執(zhí)行下一步long TestWaitForAnyJoinedEvent(dword aTimeout);//等待text事件,所有等待事件都出現(xiàn)則程序執(zhí)行下一步long TestWaitForAllJoinedEvents(dword aTimeout);

5.回調(diào)函數(shù)

CAPL中也有類似于C語言中的回調(diào)函數(shù)的機(jī)制,如檢測報(bào)錯(cuò)誤幀的函數(shù)中就可以使用,當(dāng)總線出現(xiàn)錯(cuò)誤幀就會自動調(diào)用回調(diào)函數(shù)執(zhí)行一些操作。

ErrChkId=ChkStart_ErrorFramesOccured("Callback_ErrorFrameOccured");//檢查錯(cuò)誤幀,如果發(fā)現(xiàn)錯(cuò)誤幀就調(diào)用回調(diào)函數(shù)回調(diào)函數(shù)設(shè)計(jì)如下:void Callback_errorFrameOccured(dword chk_id){  float t;  t=timeNow()/100000.0;//記錄出現(xiàn)錯(cuò)誤幀的時(shí)間  testStep("ErrorFrame_TimeStamp","%.7f s",t);//打印事件戳  TestSupplyTextEvent("ErrorFrameOccured");//設(shè)置前面提到的事件}

6.總線節(jié)點(diǎn)檢測

監(jiān)控總線上有沒有出現(xiàn)通訊異常的情況。需要使用函數(shù)接口ChkStart_NodeBabbling( ),例如檢測一段時(shí)間內(nèi)總線有沒有出現(xiàn)停止通訊的情況。

CheckId=ChkStart_NodeBabbling(CAN::ACAN,0);//立即開始檢查總線狀態(tài)testWaitForTimeout(5000);//延時(shí)5sChkControl_Stop(CheckId);//停止檢測NumberEvents=ChkQuery_NumEvents(CheckId);//如果在2s內(nèi)總線停止通訊,則NumberEvents!=0

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多