车载网络测试实操源码_使用CAPL脚本模拟发送符合协议要求(Counter和CRC)的CAN报文

系列文章目录

车载网络测试实操源码_使用CAPL脚本解析hex、S19、vbf文件
车载网络测试实操源码_使用CAPL脚本对CAN报文的Counter和CRC进行实时监控
车载网络测试实操源码_使用CAPL脚本模拟发送符合协议要求(Counter和CRC)的CAN报文
车载网络测试实操源码_使用CAPL脚本实现安全访问解锁
车载网络测试实操源码_使用CAPL脚本进行DTC自动化测试
车载网络测试实操源码_使用CAPL脚本进行UDS刷写及其自动化测试
车载网络测试实操源码_使用CAPL脚本进行UDS协议测试
粉丝问题解答系列文章… …
其他持续更新中… …


文章目录

  • 系列文章目录
  • 前言
  • 一、CAPL简介
  • 二、CAPL脚本示例
  • 总结


前言

在车载软件开发和测试过程中,我们经常会需要模拟发生CAN报文,特别是有些CAN报文按照协议要求是包含Counter和校验码(比如CRC、checksum等)的,这个时候如果使用普通的CAN工具发送固定不变的CAN报文,则不会被认为是有效的CAN报文。如何按照协议模拟counter递增且校验码正确的报文呢?今天我们就来讲一下如何使用CAPL脚本模拟发送符合协议要求(Counter和CRC)的CAN报文。


一、CAPL简介

CAPL(Communication Access Programming Language)是一种基于C语言开发的编程语言,专门用于CANalyzer和CANoe工具环境。CAPL语言的主要特点包括:
语法结构:CAPL具有类C语言的语法结构,支持多种数据类型,如变量、常量、函数、结构和数组。但CAPL简化了C语言,移除了复杂的指针概念和一些不常用的关键字,同时融入了一些C++的概念,如函数重载等。
特性:CAPL语言支持在对象和图像之间使用可编程语言,可以在PC上进行测试,支持脚本语言,使用可复用的模块,实时诊断和控制,以及丰富的图形和可视化效果等。这些特性使得CAPL在系统开发中更加容易、高效、可靠和安全。
编译过程:CAPL的编译过程简洁高效,因为CAPL浏览器仅对单个文件进行编译,无需进行复杂的链接操作。与C语言编程相比,CAPL的开发过程更为直接和易于上手。在编译阶段,任何语法或语义的错误都会被检测出来,并在CANalyzer和CANoe的专用“write窗口”中报告运行时错误,从而提高了调试的效率。
应用领域:CAPL特别适用于制动系统、压缩机、气体机械和其他复杂的实时控制系统应用程序。同时,由于CAPL语言的简洁和高效,它也被广泛应用于各种测试和分析任务中。
脚本执行:CAPL脚本是基于事件驱动的,没有main函数和程序入口。任何时间都有可能触发CAPL脚本的执行,如按键事件、定时器事件、执行测试等。如果没有事件发生,那么CAPL程序是“闲置的”。

二、CAPL脚本示例

模拟发送符合协议要求(Counter和CRC)的CAN报文的CAPL脚本示例如下:

/*@!Encoding:936*/
includes
{}variables
{//示例CAN报文message can1.0x123 msg_can1_123 = {dlc = 8,BRS = 0,byte(0) = 0xAA,byte(1) = 0xBB,byte(2) = 0x12,byte(3) = 0x34,byte(4) = 0x56,byte(5) = 0x78,byte(6) = 0x00,byte(7) = 0x00};/*定时器*/msTimer timer_10ms;
}/*CRC8 校验算法*/
byte crc_sae_j1850_zero(byte dataArry[] ,int length)
{byte crc;byte poly;int  i = 0;int  j = 0;crc  = 0x00;poly = 0x1D;//可根据算法需要修改多项式for(i =0 ; i < length; i++){crc = crc ^ dataArry[i];for(j =0 ; j < 8; j++){if ((crc & 0x80) != 0){crc = (crc << 1) ^ poly;}      else{crc = (crc << 1);}    }       crc &= 0xFF;}crc = crc ^ 0x00;return crc;
}/*CRC8 校验预处理*/
byte CRCChecksum_calc(message * msg,byte crc_byte_idx,byte len)
{byte dataArray[64] ;byte crc;byte i;msg.byte(crc_byte_idx) = 0;//初始化CRC为0for(i = 0; i < len; i++){dataArray[i] = msg.byte(len-1-i);//颠倒字节序(按需)}crc = crc_sae_j1850_zero(dataArray,len);return crc;
}/*填充发送counter递增、CRC正确的CAN报文*/
void sendValidMsg_InTimer(message * msg,byte counter_byte_idx,byte counter_add,byte crc_byte_idx)
{msg.Dlc = 8;msg.BRS = 0;msg.byte(counter_byte_idx) += counter_add;msg.byte(crc_byte_idx) = CRCChecksum_calc(msg,crc_byte_idx,8);output(msg);
}/*10ms周期定时器*/
on timer timer_10ms
{sendValidMsg_InTimer(msg_can1_123,6,0x10,7);//byte6为counter,每次递增0x10;byte7为CRCsetTimer(timer_10ms,10);
}/*启动发送示例*/
on key 'a'
{setTimer(timer_10ms,0);
}/*停止发送示例*/
on key 'b'
{cancelTimer(timer_10ms);
}

以上是模拟发送符合协议要求(Counter和CRC)的CAN报文的CAPL脚本示例,可根据需要修改CRC校验算法,或者改为checksum校验和算法等。按下按键’a’后启动发送CAN报文,按下按键’b’后停止发送CAN报文,效果如下:
在这里插入图片描述


总结

本文简单介绍了如何使用CANoe+CAPL脚本模拟发送符合协议要求(Counter和CRC)的CAN报文,希望对大家有所帮助。各位可根据本文的示例,结合自己的需求,进行完善和二次开发。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/14347.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用神经网络学习语言(四)——深度循环神经网络

相关说明 这篇文章的大部分内容参考自我的新书《解构大语言模型&#xff1a;从线性回归到通用人工智能》&#xff0c;欢迎有兴趣的读者多多支持。 本文涉及到的代码链接如下&#xff1a;regression2chatgpt/ch10_rnn/char_rnn_batch.ipynb 《循环神经网络&#xff08;RNN&…

【移花接木】OpenCV4.8 For Java 深度学习 实时人脸检测

学习《OpenCV应用开发&#xff1a;入门、进阶与工程化实践》一书&#xff0c;学会本文所有技能就这么简单&#xff01; 做真正的OpenCV开发者&#xff0c;从入门到入职&#xff0c;一步到位&#xff01; 前言 我写这篇文章之前&#xff0c;我搜索整个网络文章跟问各种语言大模…

速卖通测评揭秘:如何选择安全的渠道操作

许多商家对测评存在误解&#xff0c;认为只需进行几次测评就能迅速打造爆款。实际上&#xff0c;测评是一个需要计划和持久性的过程&#xff0c;以便让平台检测到产品的受众程度并提高产品的曝光和权重。 在进行测评时&#xff0c;安全是首要考虑的问题。平台可以通过设备、网…

黑马点评1——短信篇(基于session)

&#x1f308;hello&#xff0c;你好鸭&#xff0c;我是Ethan&#xff0c;一名不断学习的码农&#xff0c;很高兴你能来阅读。 ✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。 &#x1f3c3;人生之义&#xff0c;在于追求&#xff0c;不在成败&#xff0c;勤通…

如何使用多种算法解决LeetCode第135题——分发糖果问题

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容&#xff0c;和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣&#xff01; 推荐&#xff1a;数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航&#xff1a; LeetCode解锁100…

Ubuntu中 petalinux 安装 移植linux --tftp/tftp-hpa服务的方法

Xilinx 文档 PetaLinux 指南&#xff1a;如何创建 PetaLinux 环境 &#xff08;2019.1&#xff09; PetaLinux工具参考指南 PetaLinux安装详解(Xilinx , linux, zynq, zynqMP) petalinux 2020.1安装教程 一、PetaLinux工具和库安装 PetaLinux 工具要求主机系统 /bin/sh 为“b…

笔记 | 《css权威指南》

网络安全色 URL text-indent line-height & vertical-align 字体 font-weight 400 normal 700 bold background-attachment

【调试笔记-20240516-Windows-使用VS2019编译edk2(上)】

调试笔记-系列文章目录 调试笔记-20240516-Windows-使用VS2019编译edk2&#xff08;上&#xff09; 文章目录 调试笔记-系列文章目录调试笔记-20240516-Windows-使用VS2019编译edk2&#xff08;上&#xff09; 前言一、安装开发工具1. 安装 VS20192. 安装 Python 3.103. 安装 …

pdf加水印怎么加?3种添加水印方法分享

pdf加水印怎么加&#xff1f;PDF加水印不仅是为了保护文档内容&#xff0c;确保信息的安全性和完整性&#xff0c;更是一种有效的版权保护措施。通过添加水印&#xff0c;您可以在文档中嵌入公司名称、日期、编号等信息&#xff0c;以明确文档的归属权和使用限制。此外&#xf…

小而美:两步完成从源码到应用的极简交付

作者&#xff1a;花三&#xff08;王俊&#xff09; Serverless 应用引擎 SAE 是阿里云推出的一款零代码改造、极简易用、自适应弹性的容器化应用托管平台&#xff0c;面市以来为几万家企业客户提供服务&#xff0c;运行稳定&#xff0c;广受好评。 SAE 的出现解决了众多企业…

运行时异常和编译时异常的区别

Java中的异常被分为两大类&#xff1a;编译时异常和运行时异常。 都是RuntimeException类及其子类异常&#xff0c;如NullPointerException、IndexOutOfBoundsException。这些异常是不检查异常&#xff0c;运行时异常的特点是Java编译器不会检查它&#xff0c;程序中可以选择捕…

纯代码如何实现WordPress搜索包含评论内容?

WordPress自带的搜索默认情况下是不包含评论内容的&#xff0c;不过有些WordPress网站评论内容比较多&#xff0c;而且也比较有用&#xff0c;所以想要让用户在搜索时也能够同时搜索到评论内容&#xff0c;那么应该怎么做呢&#xff1f; 网络上很多教程都是推荐安装SearchWP插…

Spring Web MVC介绍及详细教程

目录 1.什么是Spring Web MVC&#xff1f; 1.1 MVC定义 1.2 Spring MVC与MVC关系 2.为什么要学习Spring MVC 3.项目创建 4.Spring MVC连接 4.1 RequestMapping 4.2 PostMapping和GetMapping 5.Spring MVC参数获取 5.1 获取单个参数 5.2 获取多个参数 5.3 获取普通对…

通用代码生成器应用场景一,项目前期

通用代码生成器是一种自动化编程软件&#xff0c;是一种先进的编译系统。它具有表级抽象。把系统抽象为域对象&#xff0c;枚举&#xff0c;弹性登录模块&#xff0c;复杂版面和图形报表。使用通用代码生成器完成项目前期&#xff0c;比直接使用对应的高级语言快的多&#xff0…

element Notification 消息过多需要折叠

Notification 消息过多太长 希望能折叠 如图下效果 element-plus 可以将dom 插入到具体的元素 结合css :nth-child 来控制样式达到效果 element dom 只能插入到body中 所以无法使用:nth-child 1.Notification需要消息提示时设置class let eleNum 0 // 弹窗的序号 function…

vue+canvas实现逐字手写效果

在pc端进行逐字手写的功能。用户可以在一个 inputCanvas 上书写单个字&#xff0c;然后在特定时间后将这个字添加到 outputCanvas 上&#xff0c;形成一个逐字的手写效果。用户还可以保存整幅图像或者撤销上一个添加的字。 <template><div class"container"…

小红书-社区搜索部 (NLP、CV算法实习生) 一面面经

&#x1f604; 整个流程按如下问题展开&#xff0c;用时60min左右面试官人挺好&#xff0c;前半部分问问题&#xff0c;后半部分coding一道题。 各位有什么问题可以直接评论区留言&#xff0c;24小时内必回信息&#xff0c;放心~ 文章目录 1、自我介绍2、介绍下项目&#xff…

淄博公司商标驳回复审条件及流程

商标是人工审查的&#xff0c;所以不同的人会有不同的想法和意见&#xff0c;导致同一案件的审查结果不同。特别是商标审查周期缩短到5个月&#xff0c;全国平均每个工作日有1万多个商标提交申请&#xff0c;而全国只有一个商标审查单位——国家商标局提交申请。这种情况下&…

Java版工程行业管理系统-提升工程项目的综合管理能力

工程项目管理涉及众多环节和角色&#xff0c;如何实现高效协同和信息共享是关键。本文将介绍一个采用先进技术框架的Java版工程项目管理系统&#xff0c;该系统支持前后端分离&#xff0c;功能全面&#xff0c;可满足不同角色的需求。从项目进度图表到施工地图&#xff0c;再到…

C++_vector操作使用

文章目录 &#x1f680;1.1 vector介绍&#x1f680;1.2 vector的初始化&#x1f680;1.3 vector的常用内置函数&#x1f680;1.4 vector的遍历 &#x1f680;1.1 vector介绍 vector是表示可变大小数组的序列容器。就像数组一样&#xff0c;vector也采用的连续存储空间来存储元…