【付费专栏】CAPL编程:从入门到精通
文章平均质量分 78
本专栏介绍汽车仿真与开发工具CANoe的编程语言CAPL
1. 介绍CAPL的基本语法
2. 注意CAPL语言使用中的注意点
3. 结合具体功能介绍实现思路
4. 实际使用中经常忽略和容易出错的地方
优惠券已抵扣
余额抵扣
还需支付
¥299.90
¥399.90
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
汽车通信技术
汽车通信技术专家。专注于车载网络诊断以太网测试与网络架构需求开发。涉足:汽车,网络,诊断,以太网,CANoe,SOMEIP,DoIP,TSN,SOA,Python,测试等。独立开发课程《CAPL编程语言系统性课程》《车载以太网通信测试》。
展开
-
CANoe编写CAPL测试脚本的几点思考
有的控制器需要E2E校验,有的不需要;这样做的好处是当你在配置参数文件中新增参数,CAPL代码中只需要在ReadIniFile_EthComTest()函数中调用ReadParameter(),传入正确的参数即可。尤其考虑到整车厂,编写的测试脚本不能只是一锤子买卖,只能用来测试一个控制器,换一个件就出现各种奇怪的问题,这肯定是不行的!在测试脚本开发过程中,需要考虑到如何构建代码,尤其是在一个大型的测试脚本中,实现功能众多,逻辑复杂,如果没有清晰的代码架构,不仅会增加大量的冗余代码,还会造成调试的难度变大。原创 2024-07-26 22:58:41 · 140 阅读 · 0 评论 -
CAPL定义系统变量的方式
我们知道CANoe里有一个模块叫做系统变量,它可以定义命名空间,命名空间下可以定义不同数据类型的变量。这些变量可以设置初始值、最小值、最大值、使用范围、数值含义等等参数。系统变量本质上就是变量,那为什么不直接在CAPL中定义变量,而要使用系统变量呢?原创 2024-07-25 17:49:23 · 409 阅读 · 0 评论 -
IP_Endpoint类型在CAPL中的使用
在使用TCP/IP协议栈通信时,创建Socket套接字调用接口函数实现通信的整个过程成为一种主流且便捷的方式。在CAPL中,Client需要创建TCP或UDP套接字,绑定自己的IP地址和一个端口号,作为自己的通信端点。原创 2024-06-12 16:20:16 · 789 阅读 · 0 评论 -
CAPL学习之路-TLS函数
The Transport Layer Security (TLS) Protocol,传输层安全协议。通常是基于TCP传输协议基础上的安全认证协议,不用在UDP上。原创 2024-04-24 13:33:47 · 220 阅读 · 0 评论 -
TCP Socket通信CAPL代码演示
TCP通信过程分为三个部分:建立连接:三次握手数据传输关闭连接:四次挥手这些都可以通过socket套接字接口来实现。原创 2024-04-03 14:10:48 · 299 阅读 · 0 评论 -
CAPL实现关闭TCP连接的几种方式以及它们的区别
在讲正文前,我们有必要复习下关闭TCP连接的过程:四次挥手。假设A和B建立TCP连接并进行数据传输,当A的数据发送完后,需要主动发起断开连接的请求:A发送FIN报文,发起断开连接的请求B收到FIN报文后,首先回复ACK确认报文B把自己的数据发送完,发送FIN报文,发起断开连接的请求A收到FIN报文后,回复ACK,等待2MSL时间后,释放socket占用的所有连接资源B收到ACK后,释放socket占用的所有连接资源原创 2024-03-29 17:45:14 · 241 阅读 · 0 评论 -
CAPL如何实现TCP Packet的option字段
在TCP协议中,主机可以根据自身的需要决定TCP通信时是否携带option字段,来扩展TCP功能。option字段属于TCP首部的扩展部分,且是可选项,TCP根据首部中的offset字段值确定TCP报文是否携带option字段。原创 2024-03-20 14:32:04 · 448 阅读 · 0 评论 -
on ethernetPacket事件函数的深度解析
假设我先在Ecu1上发送一条报文,源MAC为02:00:00:00:00:02,让交换机把这个MAC地址和Ecu1连接的端口号缓存到MAC地址表中,此时IG节点再发送目的MAC为02:00:00:00:00:02的报文时,交换机应该单播只转发给Ecu1,不转发给Ecu2。在CANoe的以太网网络中,模拟节点连接着交换机的端口名称是此节点所在的以太网通道和此节点节点名称的组合,真实ECU连接的交换机的端口名称是以太网通道和它连接着的物理端口的名称的组成。如此一来,Eth2上发送的报文将不会触发此事件函数。原创 2023-12-15 17:47:42 · 280 阅读 · 0 评论 -
CAPL如何对以太网报文的长度字段和校验和字段设置错误值
当我们使用CAPL中的关键字ethernetPacket组装一条以太网报文并发送时,除了一些必要的字段(ip地址、mac地址、payload数据)需要单独设置外,其他字段会根据你初始化的协议使用默认值。比如你初始化一条icmpv4 echo request报文,那么icmpv4协议中的type字段默认值是8,code值是0,这个值用来表示协议,属于固定值。还有一些字段使用的默认值,属于可变值,你可以设置也可以不用设置,对报文类型不会有什么影响,比如icmpv4协议中的identifier和sequence原创 2023-11-17 19:12:56 · 725 阅读 · 0 评论 -
CAPL如何实现27服务解锁
在文章《CANoe-如何实现27服务解锁》里,我们介绍了诊断控制台中如何实现27解锁,如果我想在CANoe中使用CAPL程序解锁的话,又要如何实现呢?原创 2023-10-18 10:30:08 · 1721 阅读 · 0 评论 -
CAPL定时器的使用:如何实现多重循环
假设现在有这样一个需求: 500ms内发送一条报文0x28d四次,然后隔5000ms,再在500ms内把这条报文发四次,这样一直循环。要怎么实现?当我们拿到一个需求,需要对其进行分解和整合。500ms内发送can报文0x28d四次,那么是在500ms的哪个时间点发送没有确定。这里我们假设250ms时发送,发送完还需要等待剩下的250ms,250ms后再等待5000ms,进入下一次循环。原创 2023-08-22 11:09:27 · 1377 阅读 · 0 评论 -
CAPL中有符号和无符号数据类型的若干问题
我们知道CAPL中的整数类型分为:无符号(unsigned)和有符号(signed)。原创 2023-07-27 11:53:24 · 954 阅读 · 0 评论 -
on ethernetPacket回调函数中根据ipv4地址判断接收报文时引起的错误
我们以一个测试用例为例子: 需求:编写一个测试用例,发送一条icmpv4 echo request报文给DUT,identifier字段设置为10。判断DUT能够回复icmpv4 echo reply报文,且identifier字段值为10。原创 2023-07-21 16:51:35 · 357 阅读 · 0 评论 -
一种把16进制字符串形式的数表示成数字的方法
所以上面的函数char_to_hex的实现思路是:根据0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F这16个字符在ASCII表中的位置,由于0、1、2、3、4、5、6、7、8、9是连续的,A、B、C、D、E、F是连续的,a、b、c、d、e、f是连续的,就可以以0,、A、a为基准字符,判断字符和它们的相对位置,再加上一个基准字符的值。首先"C5"由两个字符组成:‘C’和’5’。比如一个数字,16进制表示为0xC5,10进制的大小为197,16进制字符串形式表示为"C5"。原创 2023-07-04 12:25:26 · 1568 阅读 · 0 评论 -
如何模拟一个具有网络管理功能的被测件的一些思路
不知道大家有没有遇到过这个问题?当我们在学习如何测试网络管理时,难题不在于如何编写测试脚本,而是编写完测试脚本后,没有真实被测件来让我们执行测试脚本,进而调试脚本。这也是我在给大家讲CANoe工具和CAPL编程语言时,很多人会问我的问题:他们没有CANoe硬件,又或者他们没有测试环境,也就是被测件。也就无法确定自己辛辛苦苦敲出的代码,是不是能够顺利运行?没有CANoe硬件不会成为你学习CANoe工具的障碍,没有真实被测件也不会是你练习CAPL代码的拦路虎。原创 2023-05-15 14:24:20 · 1732 阅读 · 0 评论 -
诊断DTC故障码两种形式的转换:数字转符号
我们在文章《诊断DTC故障码两种形式的转换:符号转数字》中详细地阐述了什么是DTC code的两种表现形式,以及如何使用CAPL代码把符号形式转成数字形式。今天这篇文章是它的逆操作:如何使用CAPL代码把数字形式转成符号形式,使用的代码处理逻辑都差不多,这里我们直接上代码:原创 2023-04-23 15:50:41 · 733 阅读 · 0 评论 -
诊断DTC故障码两种形式的转换:符号转数字
诊断DTC code数据由3个字节组成:HighByte + MiddleByte + LowByte。有两种表现形式:数字:三个字节值用16进制表示,比如0xC07304符号:这种形式更直观地用字符描述该DTC故障所属的系统,故障类型等信息我们重点讲一下符号的形式:字符形式的DTC故障码,由7个字符组成,代表的含义分别是:原创 2023-04-21 18:39:20 · 2461 阅读 · 0 评论 -
CAPL函数在实现AES加密算法时遇到的各种问题(c++中&符号的含义,AES算法中padding的问题等)
本来打算把AES算法的代码移植到CAPL中的,文章:https://blog.csdn.net/qq_28205153/article/details/55798628?spm=1001.2014.3001.5506里有非常详细的代码。但是一来太麻烦,二来没必要,因为CAPL提供了Security安全相关的函数:原创 2023-04-18 10:52:46 · 1305 阅读 · 3 评论 -
CAPL学习之路-通信对象函数(Part1)
通信对象函数,用于canoe的新型通信模式中,在应用层对soa面向服务的通信对象进行操作原创 2023-03-15 17:05:56 · 695 阅读 · 0 评论 -
多路总线上的网络节点或测试节点的总线上下文
CANoe里的网络节点或测试节点,可以配置多个可用的总线。比如网关,它就是具有多个总线连接的一个网络节点,负责接收各总线上的报文,并根据路由表转发到指定的总线上原创 2023-03-02 11:58:48 · 479 阅读 · 0 评论 -
CAPL学习之路-CAN TP层函数介绍
如果想使用CAN TP层函数,首先需要在网络节点或测试节点配置页面的Componets组件一栏添加osek_tp.dll文件。路径为:C:\Program Files\Vector CANoe 15\Exec32至于节点的CAPL程序内需不需要引用这个dll文件,无所谓,可写可不写。但是如果是其他dll,必须在CAPL程序中引用。为什么osek_tp.dll可以添加到节点配置页面,而不必在CAPL中引用?原创 2023-02-22 15:06:09 · 3415 阅读 · 0 评论 -
CAPL编程中的思想:if...else...判断语句还能这么玩
CAPL中的[if...else...]语句,和其他语言的没有什么区别,用来判断给定条件是否满足。我们先简单复习一下它的用法:根据给定条件的多少,有三种用法:原创 2023-01-17 18:34:20 · 1828 阅读 · 0 评论 -
CANoe 15版本中CAPL代码自动补全功能的小Bug
最近在使用CANoe 15版本的软件编写CAPL脚本时,遇到了一些小的困扰,记录下来分享给大家!原创 2023-01-17 10:54:30 · 784 阅读 · 0 评论 -
CAPL学习之路-测试功能集函数(最终篇,其他的一些函数介绍)
一般我们在测试用例中通过testStepFail和testStepPass函数确认多个期望结果,这些结果除了写入测试报告中,还会影响整条测试用例的判定结果。这个函数能够让测试用例直接判定为fail,不需要管testStepFail和testStepPass函数的执行情况。但是测试用例如果执行了这个函数,并不会因为它判定fail而停止后面的代码的运行,还是会继续运行的。只有所有的测试用例都pass,test module才会pass。这个函数如果用在测试用例里,就是获取当前测试用例的判定结果。原创 2023-01-06 18:10:48 · 1354 阅读 · 1 评论 -
CAPL学习之路-测试功能集函数(面向信号测试)
如果没有可用的初始值,则环境变量设置为 0 或“”检查信号值或环境变量值或系统变量值是否为指定值,结果自动写入测试报告中。将指定命名空间(和所有子命名空间)的所有系统变量重置为其初始值。根据条件检查信号值或环境变量值或系统变量值在范围内。根据条件检查信号值或环境变量值或系统变量值在范围内。根据条件检查信号值或环境变量值或系统变量值在范围外。检查信号值或环境变量值或系统变量值是否为指定值。将给定的回调注册为信号的“信号驱动程序”将节点的所有tx信号重置为其初始值。获取信号值变为当前值的时间点。原创 2023-01-03 17:52:11 · 1370 阅读 · 0 评论 -
CAPL学习之路-测试功能集函数(故障注入函数)
此函数影响分配CANoe交互层或CANopen仿真的仿真节点。在使用TestSetMsgCycleTime() 更改后,将消息的循环时间重置为数据库循环时间。在使用TestDisableMsgAllTx禁用节点后,重新启用节点的所有tx消息的发送。如果网络处于活动状态,则将传输的消息直接发送到总线,而不管发送节点关于这条消息的故障注入。禁止发送节点的所有tx消息,除了使用testSetMsgEvent发送。在使用TestDisableMsg禁用消息后重新启用消息发送。设置分配给节点的消息的内部属性。原创 2022-12-30 17:21:51 · 4099 阅读 · 2 评论 -
CAPL学习之路-测试功能集函数(诊断测试)
"Door"是ECU qualifier,"Sessions"是诊断类的qualifier,此处表示诊断会话。"Sessions"诊断大类下的诊断请求有10 01/10 02/10 03,全部都要发出去,并将它们的响应写入测试报告中。这个函数是为了判断tester发送的诊断请求是否已经发送完毕,所以在使用这个函数前,需要发送诊断请求的动作。向诊断目标的诊断类下的所有诊断服务发送诊断请求,并将诊断响应写入测试报告中。判断指定诊断请求的响应是否已开始到达,比如诊断响应的首帧。判断指定诊断请求的响应是否到达。原创 2022-12-29 17:13:31 · 1994 阅读 · 1 评论 -
CAPL学习之路-测试功能集函数(测试报告部分)
测试功能集函数用于测试用例的实现,主要使用场景在test module和test unit模块的capl中 。所以千万不要在网络节点的CAPL脚本中使用,不然会报错。比如TestWaitForTimeout()函数,等待指定的时间原创 2022-12-26 17:22:07 · 2490 阅读 · 0 评论 -
CAPL语言编译的那些事
CAPL是类似于C语言的面向过程语言,这是众所周知的。C或C++代码在执行前需要编译成机器语言,也就是二进制语言,如此能够更快速运行。CAPL程序也是一样的,需要编译后执行原创 2022-11-17 10:26:16 · 3666 阅读 · 1 评论 -
什么是CAPL编程语言
CAPL语言类似于C语言,C语言是过程语言,所以CAPL也是面向过程,而不是面向对象。CAPL内函数体的执行,由事件触发,比如按下按键’a’时触发on key 'a’的函数体的执行。CAPL程序在专用的编辑器"CAPL Browser"中开发和编译,所以可以直接访问各种类型的数据库里的对象和变量,比如消息、信号、系统变量和soa接口函数等CAPL最初用在工具CANalyzer上,起初只是简单的刺激功能,后扩展到可以用来模拟更复杂的总线节点。CANoe工具也支持CAPL语言。原创 2022-11-16 11:08:26 · 4491 阅读 · 0 评论 -
CAPL学习之路-SOME/IP相关函数
如果要使用SOME/IP函数,必须导入SomeIP_IL.dll。原创 2022-10-31 17:14:22 · 2744 阅读 · 0 评论 -
CAPL学习之路-DoIP相关函数
DoIP CAPL接口配置DoIP.dll文件使用,可以在CANoe中模拟DoIP节点或DoIP网关,使其具有DoIP协议功能,可以与Tester(诊断仪)进行DoIP通信。原创 2022-09-15 16:41:44 · 2702 阅读 · 0 评论 -
CAPL如何组装自定义报文
虽然capl对通用协议(ip/tcp/udp/icmp/someip)提供了接口和函数,用来组装报文,但是对于应用层上的协议,或一些客户自定义的协议,并没有现成的接口和方法来组装它们,所以学会如何自定义组装报文,就显得很重要用capl自带的方法组装一条ICMPv4报文capl提供了一系列的方法来组装和发送报文代码如下:void InternalSendIcmpv4EchoRequest(char senderMacAddress[], .原创 2022-05-08 15:29:49 · 1160 阅读 · 0 评论 -
CAPL学习之路-诊断函数
检索参数在诊断服务原始数据中的位置比如说诊断请求:2E F1 B1 03 04,写入ecu的part number号,03 04是part number,在cdd中用一个参数名称“partnumber”表示如果我想知道这个参数在这个诊断请求原始数据中的位置,就可以通过上面的函数,传入诊断服务和参数名称,检索到它在原始数据中的位置所以partnumber检索的位置应该是3。原创 2022-09-08 16:41:11 · 2211 阅读 · 0 评论 -
CAPL学习之路-以太网函数
可以定义多种以太网相关的对象类型,和定义数据类型一样- 属性创建ethernetPacket对象,设置属性里的字段,调用函数,可以组装自己想要的以太网报文示例:以太网数据包对象有大量的属性和调用方法这里不是用关键字Eth定义,直接用Eth加通道数来命名可以获取链路的link状态、带宽、发送报文数量、接收报文数量、发送错误帧数量、接收错误帧数量、服务质量等等。感觉和网卡信息统计类似示例:看到没,直接用Eth1表示以太网链路1,然后调用相关属性,获取这个链路的状态或统计信息如何创建的呢可以定义IPv4原创 2022-06-21 17:09:33 · 2684 阅读 · 2 评论 -
如何定位CAPL脚本中的非语法错误的问题
最近在执行CAPL脚本时,经常会导致CANoe崩溃(自动停止运行)。它不是那种CAPL脚本语法或逻辑上的错误,因为编译时是通过的。它是那种测试用例Pass时不崩溃,Fail时就会崩溃。报错的提示信息如下:在Write窗口中有两条很明显的信息,看起来有用:Locate with CAPL browser or vTESTstudio option: Find runtime error - error number -> 368Error: buffer too small由此可知:原创 2022-05-09 18:30:42 · 3696 阅读 · 3 评论 -
CAPL-如何调用外部的可执行程序
今天来学习下如何在capl中调用外部的可执行程序,用到的方法是testWaitForSyscall()。当然,还有另一个capl函数也可以调用可执行程序,猜猜是哪个,以及这两个函数分别用在什么场景下?这里的可执行程序,指的是windows系统中的exe程序,所以capl调用的就是exe文件TestWaitForSyscall先来看一下这个函数的语法long TestWaitForSyscall(char aCommandline[], long aExitcode, dword aTimeout.原创 2022-05-04 00:08:19 · 1498 阅读 · 0 评论 -
CAPL中关于声明变量并赋值的问题
今天同事在运行capl脚本时遇到一个问题,由于脚本内容太多,我把问题点写成了demo,大概是这样脚本如下void func1(){ int i = 3; write("i value: %d", i); i++;}on key 'y'{ func1(); func1(); func1();}当我在CANoe上点击按键y调用三次func1()函数时,在write窗口打印的结果如下你会发现当我第一次调用func1()时,i的值为3,第二次调用值为4,第三次调用值为原创 2021-06-24 11:26:12 · 4023 阅读 · 2 评论 -
如何在CAPL中使用不同的编码
最近修改一个CAPL脚本,编译时遇到了一个问题,出现大量的warning,如下图所示这句话翻译过来函数无法处理不同的字符串编码,如果使用非ASCII字符,请以本地编码保存源文件虽然capl文件编译时出现的警告,并不会影响脚本的执行,但是对于我这种喜欢扣细节的人来说,无法忍受,所以我就想一探究竟首先试着理解这句警告标语,发现没有头绪好了,放弃吧-----不可能的接着看一下脚本中到底是哪些代码报警了发现都是EthGetMacAddressAsNumber和ipGetAddressAsNum原创 2021-11-18 19:42:36 · 1738 阅读 · 0 评论 -
CAPL学习之路-TCP/IP接口函数
TCP/IP API提供访问TCP/IP网络功能的接口函数。它是在Windows操作系统的本机Winsock 2 API之上实现的。API分为以下几类:IP APIIP API包括用于网络信息检索的通用功能,例如查询已安装的网络接口卡(NIC)、IP地址、地址转换功能、错误处理等。此外,IP API还具有一些用于套接字操作的特殊功能,例如设置套接字选项或绑定IpAddAdapterAddress将地址添加到具有给定索引的网络接口传入的网络接口卡索引参数以1为开始,不是0capl中调用函数.原创 2022-05-02 06:25:35 · 4691 阅读 · 0 评论