Canoe E2E校验自定义Checksum算法

文章目录

  • 一、添加 DBC文件
  • 二、导入要仿真的ECU节点
  • 三、编写 CAPL脚本
    • 1. 创建 .can 文件
    • 2. 设置counter递增
    • 3. 设置 CRC 算法,以profile01 8-bit SAE J1850 CRC校验为例
  • 四、开始仿真
  • 五、运行结果
  • CRC在线校验

当E2E的 CRC算法非常规算法,则需要自己编写代码计算,可参考如下:

一、添加 DBC文件

在这里插入图片描述

在这里插入图片描述
导入DBC时, AddImport Wizaid 的区别

当已经通过 Add 添加DBC后,也可以选择导入 ECU Node
在这里插入图片描述

二、导入要仿真的ECU节点

将需要的仿真节点添加进来
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、编写 CAPL脚本

1. 创建 .can 文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 设置counter递增

/*@!Encoding:936*/
includes
{}variables
{byte VCU_To_Veh_Info_counter = 0;byte VCU_Charging_Info_counter = 0;
}// Calculation of a checksum and a message counter 示例:
dword applILTxPending (long aId, dword aDlc, byte data[]) // 在CANoe交互层(CANoe IL)向总线发送消息之前,调用此回调。
{dword i;if(aId == 0x15D)  // 方法一:直接写 message ID{// she counter 0-14VCU_To_Veh_Info_counter++;VCU_To_Veh_Info_counter %= 15;    if(VCU_To_Veh_Info_counter == 15) {data[1] = (data[1] & 0xF0) | (0x00 & 0x0f);  // data[1]的低半字节表示counter} else {data[1] = (data[1] & 0xF0) | (VCU_To_Veh_Info_counter & 0x0f);  // data[1]的低半字节表示counter}// set the new checksum}if(aId == VCU_Charging_Info.id) // 方法二:message名.id{// she counter 0-14VCU_Charging_Info_counter++;VCU_Charging_Info_counter %= 15;    if(VCU_Charging_Info_counter == 15) {data[1] = (data[1] & 0xF0) | (0x00 & 0x0f);  // data[1]的低半字节表示counter} else {data[1] = (data[1] & 0xF0) | (VCU_Charging_Info_counter & 0x0f);  data[1]的低半字节表示counter}// set the new checksum} return 1; // don't prevent sending of the message
}

3. 设置 CRC 算法,以profile01 8-bit SAE J1850 CRC校验为例

通过 data 修改待发送的数据,如果通过 $信号 可能存在未知问题,导致实际发送的值不是预期的值
需要注意的是,自定义函数定义的变量 不是局部变量

/*@!Encoding:936*/
includes
{}variables
{byte VCU_To_Veh_Info_counter = 0;
}// Calculation of a checksum and a message counter 示例:
dword applILTxPending (long aId, dword aDlc, byte data[]) // 在CANoe交互层(CANoe IL)向总线发送消息之前,调用此回调。
{dword i;byte data_Rec[64];byte result_crc;if(aId == 0x15D)  // 方法一:直接写 message ID{// she counter 0-14VCU_To_Veh_Info_counter++;VCU_To_Veh_Info_counter %= 15;    if(VCU_To_Veh_Info_counter == 15) {data[1] = (data[1] & 0xF0) | (0x00 & 0x0f);  // data[1]的低半字节表示counter} else {data[1] = (data[1] & 0xF0) | (VCU_To_Veh_Info_counter & 0x0f);  // data[1]的低半字节表示counter}// set the new checksumdata_Rec[0] = (aId & 0xff); // 将CANID 添加进待校验的数组  data_Rec[1] = (aId & 0xff00) >> 8;for(i = 1; i < 8; i++) {data_Rec[i + 1] = data[i];  // 将前7个Byte添加进待校验的数组 }data[0]  = CRC8_SAEJ1850_CAL(data_Rec, aDlc+1);  // 要校验的数据为 DataID + CRC外的7个Byte    }return 1; // don't prevent sending of the message
}// 自定义 checksum 算法
byte CRC8_SAEJ1850_CAL(byte buf[], byte len)
{byte CRC_POLY = 0x1D; byte crc = 0xFF; /* 计算的初始crc值: 0 - 输入值, 1 - 输入翻转 */ byte i,j,load_crc;load_crc = crc;for(i = 0; i < len; i++) {load_crc ^= buf[i];  /* 每次先与需要计算的数据异或,计算完指向下一数据 */  for (j=8; j>0; --j)   /* 下面这段计算过程与计算一个字节crc一样 */  { if (load_crc & 0x80)load_crc = (load_crc << 1) ^ CRC_POLY;elseload_crc = (load_crc << 1);}}return (load_crc ^ 0xFF);
}

四、开始仿真

点击闪电按钮(Start)会弹出让我们选择所用硬件通道,如有硬件,选择与产品相连的CAN通道即可,没有硬件的话也可以使用虚拟通道(Virtual CAN BUS):
在这里插入图片描述

选择完成之后点击OK即可启动工程。

考虑到不是每个读者都有硬件,以下暂时以无硬件仿真进行讲解。

在home目录下,点击Real Bus旁边的小箭头,切换到SimulationBus模式进行离线仿真
在这里插入图片描述

五、运行结果

counter:
在这里插入图片描述
在这里插入图片描述
再使用在线网页验证:
在这里插入图片描述

CRC在线校验

  • https://www.23bei.com/tool/233.html
  • http://www.ip33.com/crc.html
  • 返回 CANoe 专栏目录

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

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

相关文章

穷举vs暴搜vs深搜vs回溯vs剪枝系列一>找出所有子集的异或总和再求和

题目&#xff1a; 解析&#xff1a; 代码&#xff1a; private int ret;//返回周结果private int path;//枚举一个元素就异或进去public int subsetXORSum(int[] nums) {dfs(nums, 0);return ret;} private void dfs(int[] nums, int pos){ret path;for(int i pos; i <…

洛谷【贪心算法】P1803 学习笔记

2024-12-20 - 第 41 篇 洛谷贪心算法题单 - 贪心算法 - 学习笔记 作者(Author): 郑龙浩 / 仟濹(CSND账号名) P1803 凌乱的yyy / 线段覆盖 题目背景 快 noip 了&#xff0c;yyy 很紧张&#xff01; 题目描述 现在各大 oj 上有 n n n 个比赛&#xff0c;每个比赛的开始、结…

python使用Flask框架创建一个简单的动态日历

0. 运行效果 运行代码&#xff0c;然后在浏览器中访问 http://127.0.0.1:5000/&#xff0c;将看到一个动态日历&#xff0c;能够通过点击按钮切换月份。 1. 安装 Flask 首先&#xff0c;确保你已经安装了Flask。如果没有&#xff0c;可以使用以下命令安装&#xff1a; pip i…

Python字典使用练习-----实现查找电话号

不记得字典语法知识的可以翻我主页^V^ 【要求】 定义一个电话簿&#xff0c;字典里头设置以下联系人&#xff1a; mayun:13309283335, zhaolong:18989227822, zhangmin:13382398921, Gorge:19833824743, Jordan:18807317878, Curry:15093488129, Wade:19282937665 现在输入…

windows openssl编译x64版libssl.lib,编译x64版本libcurl.lib,支持https,vs2015编译器

不要纠结&#xff0c;直接选择用perl编译&#xff01; 告诫想要用弄成vs编译版的&#xff0c;暂时先别给自己增加麻烦 告诫&#xff0c;以下执行的每一步&#xff0c;都不要纠结 先安装环境 nasm 64位版本 https://www.nasm.us/pub/nasm/releasebuilds/2.16.01/win64/nasm-…

dev类似于excel的数据编辑

其实这个不是我最后的结果&#xff0c;只是中间demo&#xff0c;因为我的场景数据量很大&#xff0c;2w左右&#xff0c;有数据合并&#xff0c;我更倾向于el-table是实现&#xff0c;但不想el-input一直显示&#xff0c;想用if-else 去做隐藏&#xff0c;但是用typetextarea发…

uniapp对接unipush 1.0 ios/android

简介 实现方法 是uniapp官网推荐的 unipush-v1 文档配置具体看 uni-app官网 配置好了之后 代码实现 前端代码 前端的主要任务是监听 监听到title content 创建消息推送 安卓 可以收到在线消息并且自动弹出消息 IOS 可以监听到在线消息但是需要手动推送 以下代码app初始…

【WRF-Urban】输入空间分布人为热排放数据的WRF运行全过程总结

目录 数据准备检查新增变量配置(如果有)WPS预处理修改namelist.wpsStep1: geogridStep2: ungribStep3: metgridWRF运行修改namelist.input调试namelist.input运行./real.exe运行./wrf.exe参考WRF模型的基本流程如下: 数据准备 空间分布热排放数据下载及制备可参见另一博客…

JavaSE——绘图入门

一、Java绘图坐标体系 下图说明了Java坐标系&#xff0c;坐标原地位于左上角&#xff0c;以像素为单位。在Java坐标系中&#xff0c;第一个是x坐标&#xff0c;表示当前位置为水平方向&#xff0c;距离坐标原点x个像素&#xff1b;第二个是y坐标&#xff0c;表示当前位置为垂直…

初学stm32 --- 系统时钟配置

众所周知&#xff0c;时钟系统是 CPU 的脉搏&#xff0c;就像人的心跳一样。所以时钟系统的重要性就不言而喻了。 STM32 的时钟系统比较复杂&#xff0c;不像简单的 51 单片机一个系统时钟就可以解决一切。于是有人要问&#xff0c;采用一个系统时钟不是很简单吗&#xff1f;为…

FM-CLIP: Flexible Modal CLIP for Face Anti-Spoofing

“FM-CLIP: Flexible Modal CLIP for Face Anti-Spoofing”由澳门科技大学、中国科学院等单位的Ajian Liu、Hui Ma等人撰写。文章提出了一种名为FM-CLIP的新型灵活模态人脸反欺诈(FAS)方法,通过利用文本特征动态调整视觉特征以实现模态独立性,在多模态数据集上取得了优于现…

进网许可认证、交换路由设备检测项目更新25年1月起

实施时间 2025年1月1日起实施 涉及设备范围 核心路由器、边缘路由器、以太网交换机、三层交换机、宽带网络接入服务器&#xff08;BNAS&#xff09; 新增检测依据 GBT41266-2022网络关键设备安全检测方法交换机设备 GBT41267-2022网络关键设备安全技术要求交换机设备 GB/…

lshw学习——简单介绍

文章目录 简介核心结构扫描设备原理scan_abiscan_burnerscan_cdromscan_cpufreqscan_cpuidscan_cpuinfoscan_device_treescan_diskscan_displayscan_dmiscan_fatscan_fbscan_graphicsscan_idescan_ideraidscan_inputscan_isapnpscan_lvmscan_memoryscan_mmcscan_mountsscan_net…

k8s总结

1、k8s是部署、拓展、管理容器的容器编排引擎。可根据负载的变化动态增加或缩减节点保证系统的高可用。 2、ks8s核心组件&#xff1a;node是节点&#xff08;可以是物理机也可以是虚拟机&#xff09;、pod最小的调度单位&#xff0c;是容器的抽象&#xff0c;有svc管理容器网络…

白嫖内网穿透之神卓互联Linux安装教程(树莓派)

最近家里有一个树莓派&#xff0c;捣鼓来去不知道干嘛&#xff0c;于是打算作为内网穿透盒子用&#xff0c;于是百度了一下&#xff0c;发现神卓互联还不错&#xff0c;可以让外网请求通过各种复杂的路由和防火墙访问到内网的服务。 以下是在Linux树莓派系统上安装神卓互联客户…

【测试面试篇1】测试开发与开发|selenium实现自动化测试|设计测试用例|常见的测试方法|开发不认可提测试的bug该怎么办

目录 1.选择走测试为什么还要学这么多的开发知识&#xff1f; 2.为什么选择软件测试开发岗位而不是软件开发岗位&#xff1f; 3.个人的职业规划是什么&#xff1f; 4.测试中遇到的问题如何进行解决&#xff1f; 5.对自己的项目做过哪些测试工作&#xff1f; 6.描述selenium…

Ansible 批量管理华为 CE 交换机

注&#xff1a;本文为 “Ansible 管理华为 CE 交换机” 相关文章合辑。 使用 CloudEngine - Ansible 批量管理华为 CE 交换机 wsf535 IP 属地&#xff1a;贵州 2018.02.05 15:26:05 总体介绍 Ansible 是一个开源的自动化运维工具&#xff0c;AnsibleWorks 成立于 2012 年&a…

防火墙(RHCE)

1、什么是防火墙 防火墙&#xff1a;防火墙是位于内部网和外部网之间的屏障&#xff0c;它按照系统管理员预先定义好的规则来控制数据包 的进出。 防火墙又可以分为硬件防火墙与软件防火墙。硬件防火墙是由厂商设计好的主机硬件&#xff0c;这台硬件防火墙 的操作系统主要以提…

线性代数基础与应用:基底 (Basis) 与现金流及单期贷款模型(中英双语)

具体请参考&#xff1a;https://web.stanford.edu/~boyd/vmls/ 下面的例子来源于这本书。 线性代数基础与应用&#xff1a;基底 (Basis) 与现金流及单期贷款模型 在线性代数中&#xff0c;基底&#xff08;Basis&#xff09;是一个重要的概念&#xff0c;广泛应用于信号处理、…

【安当产品应用案例100集】032-重塑企业SaaS平台的PostgreSQL凭据管理体系

一、案例背景 在本次案例分享中&#xff0c;一家为旅行社提供SaaS服务的技术服务商&#xff0c;其依赖PostgreSQL作为其核心数据存储解决方案&#xff0c;并且在阿里云和内网环境中均部署了相关服务与数据库实例。随着业务的发展和技术团队规模的扩大&#xff0c;当前的数据库…