capl基础语法

143 阅读3分钟

第一个.can文件

  • helloworld.can
variables { 
  int i=0;
} 
on start { //程序启动入口.cfg工程启东时运行
  write("开始程序"); //打印函数
} 

on key 语法

variables { 
  int i=0;
} 
on start { //程序启动入口.cfg工程启东时运行
  write("开始程序"); //打印函数
} 

on key 'a' { //键盘监听事件,检测键盘按键按下执行,需要使用单引号
  write("a执行了"); 
} 

export void function_name(){}自定义函数

简单函数

variables { 
  int i=0;
} 
on start { //程序启动入口.cfg工程启东时运行
  write("开始程序"); //打印函数
} 

export void function_name(){// 
    write("function_name函数执行了");
}

函数参数和返回值

variables { 
  int i=0;
} 
on start { //程序启动入口.cfg工程启东时运行
  write("开始程序"); //打印函数
} 

export int function_name(int j, char k){// int定义了函数返回值的数据类型,函数参数j和参数k
    write("function_name函数执行了j=d%,k=s%");
    return j*j;  //函数返回值
}

设置信号值

variables { 
  int i=0;
} 
on start { //程序启动入口.cfg工程启东时运行
  write("开始程序"); //打印函数
} 

export void SetSignalValue(){
    setSignal(sys_var_demo::speed, 0);//信号名称,信号值,需要在相关总线的仿真节点上设置(dbc文件在这个文件上加载)
    write("SetSignalValue成功");
}

on key 'a' {
    setSignal(sys_var_demo::speed, 0);//信号名称,信号值,需要在相关总线的仿真节点上设置(dbc文件在这个文件上加载)
    write("SetSignalValue成功");
}

发送CAN报文

单帧

variables { 
  int i=0;
} 
on start { //程序启动入口.cfg工程启东时运行
  write("开始程序"); //打印函数
  SetSignalValue();//函数调用
} 
export void SetSignalValue (){ 
    message * Msg; // 新建一帧CAN报文对象
    Msg.id = 0x111; //CAN id
    Msg.dlc= 15; //数据长度
    Msg.DataLength = 64; 
    Msg.FDF = 1; //是否是FD帧
    Msg.BRS = 1; 
    Msg.byte(0) = 1;//设置byte0 = 1,不设置默认byte位数值=0
    Msg.byte(1) = 2; 
    Msg.byte(2) = 3; 
    output(Msg); //通过output发出去
}

周期发送

variables { 
  msTimer msTime100;
} 
on start { //程序启动入口.cfg工程启东时运行
  write("开始程序"); //打印函数
  setTimer(msTime100,100); //定时器调用
} 
export void SetSignalValue (){ 
    message * Msg; // 新建一帧CAN报文对象
    Msg.id = 0x111; //CAN id
    Msg.dlc= 15; //数据长度
    Msg.DataLength = 64; 
    Msg.FDF = 1; //是否是FD帧
    Msg.BRS = 1; 
    Msg.byte(0) = 1;//设置byte0 = 1,不设置默认byte位数值=0
    Msg.byte(1) = 2; 
    Msg.byte(2) = 3; 
    output(Msg); //通过output发出去
}

on timer msTime100 { // 使用定时器周期发CAN报文,也可以使用环境变量来修改发送内容,实现crc校验算法
    SetSignalValue(); 
    setTimer(msTime100,100); 
}

on key 'a' { 
    setTimer(msTime100,100); //启动定时器 
} 
on key 'b' { 
    cancelTimer(msTime100); //关闭定时器 
}

停止周期发送

on key 'b' { 
    cancelTimer(msTime100); //关闭定时器 
}

使用capl编写测试用例

testcase CASE1(){
    testStepPass("Step_1","步骤一执行成功);
    testStepPass("Step_2","步骤二执行成功);
    testStepPass("Step_3","步骤三执行成功);
    testStepPass("Step_4","步骤四执行成功);
}
testcase CASE2(){
    testStepPass("Step_1","步骤一执行成功);
    testStepPass("Step_2","步骤二执行成功);
    testStepPass("Step_3","步骤三执行成功);
    testWaitForTimeout(500);
    testStepFail("Step_4","步骤四执行成功);
}