首页 > 编程语言 >车载测试系列:CAPL编程语言

车载测试系列:CAPL编程语言

时间:2022-12-02 13:48:39浏览次数:45  
标签:定时器 编程语言 EngineStatus 报文 车载 CAPL msTimer EngineStat message

CAPL是类似C语言的语法,案例如下:

/*@!Encoding:936*/
includes
{

}

variables
{
  //The following three messages are defined for transmission
  message EngineStatus EngineStat; //定义一个在DBC中message name为EngineStatus的报文变量EngineStat
  message LockingRq LkCtrlRq;
  message WindowRq WindowCtrl;
  //The following timer is for simulating the cyclic message transmission   
  msTimer msTimer_EngineStatus;   //定义一个ms定时器msTimer_EngineStatus

}

on start
{
  setTimerCyclic(msTimer_EngineStatus,100);
}

on timer msTimer_EngineStatus{       //响应定时器事件msTimer_EngineStatus,将报文发送到总线
  EngineStat.Velocity = @sysvar::testNS::Velocity; //获取面板中变量输入的值
  EngineStat.IgnitionStatus = @sysvar::testNS::IgnitionStart;
  output(EngineStat);  //将报文发送到总线中
}
  • 程序结构

先从宏观的角度来看,这个CAPL程序的结构包含了头文件、全局变量、事件函数,没有自定义函数。

includes{ }头文件是对其他文件及dll文件的包含说明,variables{ }是对全局变量的声明定义,on start{ },on timer{ }是工程中用到的各类事件。

  • 全局变量

1、message 报文变量

CAPL提供了各种网络对应的报文类。本文以CAN message为例,报文变量定义格式:message + message ID/message name + variable

使用message关键字来声明一个报文变量,message后是message ID或CANoe工程导入DBC后的message name,然后是在CAPL程序中要使用的报文变量名。

message EngineStatus EngineStat;

如上,定义一个在DBC中message name为EngineStatus的报文变量EngineStat,此外还定义了报文LockingRq和报文WindowRq。

2、msTimer 定时器变量

CAPL提供两种定时器变量:timer:基于秒(s)的定时器 、msTimer:基于毫秒(ms)的定时器。

msTimer msTimer_EngineStatus;
  • 事件函数

CAPL是一种面向过程、由事件驱动的类C语言。

事件驱动针对于顺序执行,其区别如下:

顺序执行:顺序执行流程中,子例程或过程函数按照代码编写顺序逐句执行。

事件驱动:CAPL程序由事件驱动,工程运行过程中发生指定的事件时才会运行相应的事件处理函数。

 

事件起始关键字 on

on后加某种事件,工程运行时条件触发,则执行函数体内的语句。

关键字this

系统变量、环境变量或CAN报文事件中,可以用this关键字访问其指代的数据内容。

on start
{
  setTimerCyclic(msTimer_EngineStatus,100);
}

如上,on start{ }函数在工程开始时调用,setTimerCyclic(msTimer_EngineStatus,100) 设置定时器msTimer_EngineStatus为一个100ms为周期的循环定时器;

on timer msTimer_EngineStatus{       //响应定时器事件msTimer_EngineStatus,将报文发送到总线
  EngineStat.Velocity = @sysvar::testNS::Velocity; //获取面板中变量输入的值
  EngineStat.IgnitionStatus = @sysvar::testNS::IgnitionStart;
  output(EngineStat);  //将报文发送到总线中
}

如上,定义了一个响应定时器事件,函数中EngineStat.Velocity = @sysvar::testNS::Velocity;表示面板panel中的系统变量Velocity变化后,将其赋值给EngineStat报文的Velocity 信号。最后的output()函数将报文发送到总线中。

整段engine.can的代码,实现了周期(100ms)循环执行msTimer_EngineStatus事件,将EngineStatus报文每100ms发送到总线中。如果面板panel中报文的两个信号有变化的话,会实时更新。

标签:定时器,编程语言,EngineStatus,报文,车载,CAPL,msTimer,EngineStat,message
From: https://www.cnblogs.com/laoluoits/p/16944200.html

相关文章

  • 车载测试系列:CAPL脚本语法
    在车载控制器测试中,CAPL是常用的总线测试脚本之一,测试工程师需要掌握相关用法。1.定时器首先肯定是定时器了,在编写CAPL脚本中,使用的频率很高,比如我们需要周期性的发送CAN......
  • 车载测试系列:蓝牙协议栈
    蓝牙协议栈由主机+HCI(可选)+控制器三大块组成,其中对于单芯片方案是没用HCI的。主机(Host):主机部分由核心协议层(L2CAP、SDP、SMP、ATT)和核心规范(GAP、GATT)构成;......
  • 车载测试系列:蓝牙协议概述
    蓝牙(英语:Bluetooth),一种无线通讯技术标准,用来让固定与移动设备,在短距离间交换资料,以形成个人局域网(PAN)。其使用短波特高频(UHF)无线电波,经由2.4至2.485GHz的ISM频段来进行通......
  • 车载测试系列:车载蓝牙测试(一)
    车载蓝牙的概念蓝牙,是一种支持设备短距离通讯的无线电技术,一般通讯距离在10米内,工作频段为全球统一开放的2.4GHz工业、科学和医学频段。由于蓝牙具备体积小、功率低、成本......
  • 车载测试系列:CAN总线渗透测试
    随着汽车智能化、网联化的高速发展,对于汽车通讯网络的安全威胁越来越多,而CAN总线是目前汽车使用最广泛的总线之一,因此对汽车CAN总线网络安全威胁进行渗透测试、挖掘潜在漏......
  • 车载测试系列:车载蓝牙测试(三)
     HFP测试内容与测试方法2.3接听来电:测试手机来电时,能否从车载蓝牙设备和手机侧正常接听】拒接、通话是否正常。1、预置条件:待测手机与车载车载设备处于连接状态2、......
  • 车载测试系列:车载蓝牙测试(二)
    车载蓝牙测试内容 HFP测试内容与测试方法2.1连接与释放:针对HFP的连接管理功能1、预置条件:待测手机开启蓝牙功能,车载蓝牙设备与待测手机相距10m以内2、测试步骤:1)测......
  • 车载测试系列:车载常见面试题
    自我介绍项目介绍项目具体是怎么测试的?CANoe是怎么使用的?台架是怎么搭建的?台架怎么测试的?诊断服务是怎么测试的?功能寻址和物理寻找的区别10服务有什么会话?11服务......
  • 车载测试系列:CAN总线错误及故障处理
    CAN五种错误检测机制一、基于信息流级别的错误检测1、CRC校验错误15位的CRC通过发送端根据发送信息的内容计算产生接收端根据接收内容重新计算CRC并于发送端发送过来......
  • 车载测试系列:SOA架构设计
    汽车传统架构很难满足新增信号、新增节点、变更功能等问题: 新增信号流怎么办?修改通信矩阵?突然增加一个节点,怎么办?修改路由表?变更功能如何从其他节点获取所需信息?......