车载网络测试实操源码_使用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为0
  for(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为CRC
  
  setTimer(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报文,希望对大家有所帮助。各位可根据本文的示例,结合自己的需求,进行完善和二次开发。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Go语言实现人脸检测(Go的OpenCV绑定库)

文章目录 OpenCVGithub官网安装环境变量 Go的OpenCV绑定库Github文档安装搜索视频设备ID显示视频检测人脸 OpenCV Github https://github.com/opencv/opencv/ 官网 https://opencv.org/ 安装 brew install opencv brew upgrade opencv安装目录 cd /usr/local/opt/opencv…

做OZON怎么选择物流,OZON物流Xingyuan

随着跨境电商的蓬勃发展&#xff0c;OZON作为俄罗斯领先的电商平台&#xff0c;吸引了大量中国卖家入驻。然而&#xff0c;物流作为跨境电商的关键环节&#xff0c;其选择对于卖家来说至关重要。本文将围绕“做OZON怎么选择物流”这一问题&#xff0c;深度解析OZON物流Xingyuan…

我爱我家:租赁下位替代买房,能行吗?

我爱我家&#xff0c;凭什么五天四板&#xff1f; 上周五的楼市组合拳出台后&#xff0c;地产板块迎来高潮。 这其中最火的不是我们常说的“招宝万金”&#xff0c;而是——我爱我家。 五天四板&#xff0c;一个月不到&#xff0c;股价轻松翻翻。 公司有什么变化吗&#xff1…

Android ART 虚拟机简析

源码基于&#xff1a;Android U 1. prop 名称选项名称heap 变量名称功能 dalvik.vm.heapstartsize MemoryInitialSize initial_heap_size_ 虚拟机在启动时&#xff0c;向系统申请的起始内存 dalvik.vm.heapgrowthlimit HeapGrowthLimit growth_limit_ 应用可使用的 max…

3dmax安装不完整Revit Interoperability

3dmax安装不完整Revit Interoperability 1.错误如图 2.在Autoremove界面中&#xff0c;点击扩展选项。 3.在扩展选项中&#xff0c;寻找并点击"1402 1406修复"。 4.根据软件指引&#xff0c;执行修复操作。Autoremove将自动修复无法打开注册表的问题。 如图 修…

[智能AI摄像头]使用docker搭建RV1126开发环境

创建ubuntu docker 创建dockerfile # 设置基础镜像为Ubuntu 18.04FROM ubuntu:20.04# 设置作者信息MAINTAINER warren "2016426377qq.com"# 设置环境变量&#xff0c;用于非交互式安装ENV DEBIAN_FRONTENDnoninteractive# 备份源列表文件RUN cp -a /etc/apt/source…

基于SSM的大学生兼职管理系统

基于SSM的大学生兼职管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringSpringMVCMyBatis工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 登录界面 企业界面 前台学生界面 管理员界面 摘要 随着大学生兼职市场的日益繁…

LeetCode674:最长连续递增序列

题目描述 给定一个未经排序的整数数组&#xff0c;找到最长且 连续递增的子序列&#xff0c;并返回该序列的长度。 连续递增的子序列 可以由两个下标 l 和 r&#xff08;l < r&#xff09;确定&#xff0c;如果对于每个 l < i < r&#xff0c;都有 nums[i] < nums…

必应bing国内广告开户首充和开户费是多少?

微软必应Bing作为国内领先的搜索引擎之一&#xff0c;其广告平台凭借其精准的投放、高效的数据分析和广泛的用户覆盖&#xff0c;已成为众多企业的首选。 根据最新政策&#xff0c;2024年必应Bing国内广告开户预充值金额设定为1万元人民币起。这一调整旨在确保广告主在账户初始…

智研未来,直击 AI DevOps,阿里云用户交流日杭州站来啦!

在这个技术日新月异的时代&#xff0c;云上智能化 DevOps 正以前所未有的速度推动企业创新边界&#xff0c;重塑软件开发的效率与品质。 为深入探索这一变革之路&#xff0c;诚邀您参与我们的专属闭门技术沙龙&#xff0c;携手开启一场关于云上智能化 DevOps 的挑战、实践与未…

Vue学习笔记2——创建一个Vue项目

Vue项目 1、创建一个Vue项目2、Vue项目的目录结构3、模版语法4、属性绑定5、条件渲染 1、创建一个Vue项目 vue官方文档&#xff1a; https://cn.vuejs.org/打开命令行界面&#xff08; “winR"再输入"cmd”&#xff09;&#xff0c;切换位置到指定的位置创建vue项目…

通胀担忧仍存,美联储降息预期或又推迟

KlipC报道&#xff1a;周三&#xff0c;美联储公布4月30日至5月1日政策会议纪要&#xff0c;会议纪要显示美联储对通胀仍感到担忧&#xff0c;将更长时间维持利率不变&#xff0c;必要时进一步收紧政策。 尽管在前不久公布的4月CPI数据显示通胀有所缓解&#xff0c;但是被认为…

高刚性滚柱直线导轨有哪些优势?

滚柱导轨是机械传动系统中用于支持和引导滑块或导轨的装置&#xff0c;承载能力较高、刚性强及高精度等特点。特别适用于大负载和高刚性的工业设备&#xff0c;如机床、数控机床等设备&#xff0c;这些优势使其在工业生产和机械设备中得到了广泛的应用。 1、高精度&#xff1a;…

如何用java做一个模拟登录画面

要求&#xff1a; 实现registerAction方法中的注册逻辑。实现login方法中的登录逻辑&#xff0c;确保只有当用户名和密码都正确时才返回true。实现好友管理功能&#xff0c;包括添加好友、删除好友、查看好友列表。确保所有的文件操作&#xff08;如读取和写入credentials.txt…

Jenkins安装 :AWS EC2 Linux

1 JDK11 install # 用的yum安装 # 压缩包安装&#xff0c;下载的jdk-11.0.22_linux-x64_bin.tar.gz在EC2解压&#xff0c;配置环境变量&#xff0c;运行jenkins的时候会报错$ yum -y list java-11* Available Packages java-11-amazon-corretto-devel.x86_64 …

NLP(16)--生成式任务

前言 仅记录学习过程&#xff0c;有问题欢迎讨论 输入输出均为不定长序列&#xff08;seq2seq&#xff09;自回归语言模型&#xff1a; x 为 str[start : end ]; y为 [start1 : end 1] 同时训练多个字&#xff0c;逐字计算交叉熵 encode-decode结构&#xff1a; Encoder将输…

设计模式——概述

1.设计模式定义 ​ 设计模式是软件设计中常见问题的典型解决方案,可用于解决代码中反复出现的设计问题。设计模式的出现可以让我们站在前人的肩膀上&#xff0c;通过一些成熟的设计方案来指导新项目的开发和设计&#xff0c;以便于我们开发出具有更好的灵活性和可扩展性&#…

如何在window中快速建立多个文件夹?

时隔多年&#xff0c;再次开始撰写文章&#xff0c;但是这次却是以设计师的身份 1. 几个基础快捷键先记一下&#xff0c;要不更高级的玩儿不转&#xff08;1&#xff09;快速打开资源管理器&#xff08;2&#xff09;快速建立新文件夹&#xff08;3&#xff09;快速修改文件文件…

【openlayers系统学习】1.1渲染GeoJSON,添加link交互

一、渲染GeoJSON 在进入编辑之前&#xff0c;我们将看一下使用矢量源和图层进行基本要素渲染。Workshop在 data​ 目录中包含一个 countries.json​ GeoJSON文件。我们首先加载该数据并将其渲染在地图上。 首先&#xff0c;编辑 index.html​ 以便向地图添加深色背景&#xf…

树洞陪聊系统源码/陪聊/陪玩/树洞/陪陪/公众号开发/源码交付/树洞系统源码

独立版本源码交付&#xff0c;自研UI和前后端代码 平台自带店员&#xff0c;无需自主招募&#xff0c;搭建直接运营 支持三方登录&#xff0c;官方支付、虎皮椒、易支付/码支付 支持首单体验、盲盒订单、指定下单等多个模式 支持钱包预充值、店员收藏、订单评价等功能 支持…