Canoe E2E校验自定义Checksum算法
文章目录
- 一、添加 DBC文件
- 二、导入要仿真的ECU节点
- 三、编写 CAPL脚本
- 1. 创建 .can 文件
- 2. 设置counter递增
- 3. 设置 CRC 算法,以profile01 8-bit SAE J1850 CRC校验为例
- 四、开始仿真
- 五、运行结果
- CRC在线校验
当E2E的 CRC算法非常规算法,则需要自己编写代码计算,可参考如下:
一、添加 DBC文件


导入DBC时, Add 和 Import 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 专栏目录
相关文章:
Canoe E2E校验自定义Checksum算法
文章目录 一、添加 DBC文件二、导入要仿真的ECU节点三、编写 CAPL脚本1. 创建 .can 文件2. 设置counter递增3. 设置 CRC 算法,以profile01 8-bit SAE J1850 CRC校验为例 四、开始仿真五、运行结果CRC在线校验 当E2E的 CRC算法非常规算法,则需要自己编写代…...
[HNCTF 2022 Week1]你想学密码吗?
下载附件用记事本打开 把这些代码放在pytho中 # encode utf-8 # python3 # pycryptodemo 3.12.0import Crypto.PublicKey as pk from hashlib import md5 from functools import reducea sum([len(str(i)) for i in pk.__dict__]) funcs list(pk.__dict__.keys()) b reduc…...
端到端自动驾驶大模型:视觉-语言-动作模型 VLA
模型框架定义、模型快速迭代能力是考查智驾团队出活能力的两个核心指标。在展开讨论Vision-Language-Action Models(VLA)之前,咱们先来讨论端到端自动驾驶大模型设计。 目录 1. 端到端自动驾驶大模型设计 1.1 模型输入设计 1.2 模型输出设计 1.3 实现难点分析 …...
druid与pgsql结合踩坑记
最近项目里面突然出现一个怪问题,数据库是pgsql,jdbc连接池是alibaba开源的druid,idea里面直接启动没问题,打完包放在centos上和windows上cmd窗口都能直接用java -jar命令启动,但是放到国产信创系统上就是报错…...
【xxl-job】XXL-Job源码深度剖析:分布式任务调度的艺术与实践
XXL-Job源码深度剖析 核心概念1、调度中心2、执行器3、任务 来个Demo1、搭建调度中心2、执行器和任务添加3、创建执行器和任务 从执行器启动说起1、初始化JobHandler2、创建一个Http服务器3、注册到调度中心 任务触发原理⭐⭐⭐1、任务如何触发?调度线程scheduleThr…...
图漾相机-ROS1_SDK_ubuntu版本编译(新版本)
文章目录 官网编译文档链接官网SDK下载链接1、下载 Camport ROS1 SDK1.下载git2、下载链接 2、准备编译工作1、安装 catkin2、配置环境变量3. 将Camport3中的linux库文件拷贝到 user/lib目录下4、修改lunch文件制定相机(可以放在最后可以参考在线文档)**…...
项目二十三:电阻测量(需要简单的外围检测电路,将电阻转换为电压)测量100,1k,4.7k,10k,20k的电阻阻值,由数码管显示。要求测试误差 <10%
资料查找: 01 方案选择 使用单片机测量电阻有多种方法,以下是一些常见的方法及其原理: 串联分压法(ADC) 原理:根据串联电路的分压原理,通过测量已知电阻和待测电阻上的电压,计算出…...
【NLP 17、NLP的基础——分词】
我始终相信,世间所有的安排都有它的道理;失之东隅,收之桑榆 —— 24.12.20 一、中文分词的介绍 1.为什么讲分词? ① 分词是一个被长期研究的任务,通过了解分词算法的发展,可以看到NLP的研究历程 ② 分词…...
uniapp blob格式转换为video .mp4文件使用ffmpeg工具
前言 介绍一下这三种对象使用场景 您前端一旦涉及到文件或图片上传Q到服务器,就势必离不了 Blob/File /base64 三种主流的类型它们之间 互转 也成了常态 Blob - FileBlob -Base64Base64 - BlobFile-Base64Base64 _ File uniapp 上传文件 现在已获取到了blob格式的…...
【无标题】 [蓝桥杯 2024 省 B] 好数
[蓝桥杯 2024 省 B] 好数 好数 一个整数如果按从低位到高位的顺序,奇数位(个位、百位、万位……)上的数字是奇数,偶数位(十位、千位、十万位……)上的数字是偶数,我们就称之为“好数”。 给定一…...
Leecode刷题C语言之同位字符串连接的最小长度
执行结果:通过 执行用时和内存消耗如下: bool check(char *s, int m) {int n strlen(s), count0[26] {0};for (int j 0; j < n; j m) {int count1[26] {0};for (int k j; k < j m; k) {count1[s[k] - a];}if (j > 0 && memcmp(count0, cou…...
Pytorch | 利用BIM/I-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击
Pytorch | 利用BIM/I-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击 CIFAR数据集BIM介绍基本原理算法流程特点应用场景 BIM代码实现BIM算法实现攻击效果 代码汇总bim.pytrain.pyadvtest.py 之前已经针对CIFAR10训练了多种分类器: Pytorch | 从零构建AlexNet对CIFAR1…...
音频进阶学习八——傅里叶变换的介绍
文章目录 前言一、傅里叶变换1.傅里叶变换的发展2.常见的傅里叶变换3.频域 二、欧拉公式1.实数、虚数、复数2.对虚数和复数的理解3.复平面4.复数和三角函数5.复数的运算6.欧拉公式 三、积分运算1.定积分2.不定积分3.基本的积分公式4.积分规则线性替换法分部积分法 5.定积分计算…...
将4G太阳能无线监控的视频接入电子监控大屏,要考虑哪些方面?
随着科技的飞速发展,4G太阳能无线监控系统以其独特的优势在远程监控领域脱颖而出。这种系统结合了太阳能供电的环保特性和4G无线传输的便捷性,为各种环境尤其是无电或电网不稳定的地区提供了一种高效、可靠的视频监控解决方案。将这些视频流接入大屏显示…...
使用docker拉取镜像很慢或者总是超时的问题
在拉取镜像的时候比如说mysql镜像,在拉取 时总是失败: 像这种就是网络的原因,因为你是连接到了外网去进行下载的,这个时候可以添加你的访问镜像源。也就是daemon.json文件,如果你没有这个文件可以输入 vim /etc/dock…...
Redis数据库笔记
Spring cache 缓存的介绍 在springboot中如何使用redis的缓存 1、使用Cacheable的例子【一般都是在查询的方法上】 /*** 移动端的套餐查询* value 就是缓存的名称* key 就是缓存id ,就是一个缓存名称下有多个缓存,根据id来区分* 这个id一般就是多个查询…...
U盘出现USBC乱码文件的全面解析与恢复指南
一、乱码现象初探:USBC乱码文件的神秘面纱 在数字时代,U盘已成为我们日常生活中不可或缺的数据存储工具。然而,当U盘中的文件突然变成乱码,且文件名前缀显示为“USBC”时,这无疑给用户带来了极大的困扰。这些乱码文件…...
多线程 - 自旋锁
个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 多线程 - 自旋锁 收录于专栏[Linux学习] 本专栏旨在分享学习Linux的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 概述 原理 优点与…...
vue2 - Day02 -计算属性(computed)、侦听器(watch)和方法(methods)
在 Vue.js 中,计算属性(computed)、侦听器(watch)和方法(methods)都是响应式的数据处理方式 文章目录 1. 方法(Methods)1.1. 是什么1.2. 怎么用示例: 1.3. 特…...
Linux C 程序 【05】异步写文件
1.开发背景 Linux 系统提供了各种外设的控制方式,其中包括文件的读写,存储文件的介质可以是 SSD 固态硬盘或者是 EMMC 等。 其中常用的写文件方式是同步写操作,但是如果是写大文件会对 CPU 造成比较大的负荷,采用异步写的方式比较…...
告别环境变量噩梦:一键批处理脚本详解,让QGIS在Windows下的编译配置自动化
告别环境变量噩梦:一键批处理脚本详解,让QGIS在Windows下的编译配置自动化 在GIS开发领域,QGIS作为开源地理信息系统的代表,其灵活性和可扩展性吸引了大量开发者。然而,每次从源码编译QGIS都像是一场与环境变量的搏斗—…...
量化模型实测:百川2-13B-4bits在OpenClaw复杂任务中的精度损失
量化模型实测:百川2-13B-4bits在OpenClaw复杂任务中的精度损失 1. 测试背景与实验设计 去年在部署本地AI助手时,我遇到一个现实矛盾:大模型的能力与硬件成本难以兼得。当尝试用OpenClaw实现自动化办公流程时,发现13B参数的百川原…...
从理论到代码:手把手实现Newmark-Beta方法的结构动力学模拟
从理论到代码:手把手实现Newmark-Beta方法的结构动力学模拟 结构动力学模拟是现代工程设计与分析中不可或缺的工具,从桥梁抗震到航天器振动分析,都需要精确预测结构在动态载荷下的响应。而Newmark-Beta方法作为这一领域的经典算法,…...
如何快速配置安卓虚拟摄像头VCAM:专业使用技巧完整指南
如何快速配置安卓虚拟摄像头VCAM:专业使用技巧完整指南 【免费下载链接】com.example.vcam 虚拟摄像头 virtual camera 项目地址: https://gitcode.com/gh_mirrors/co/com.example.vcam 安卓虚拟摄像头VCAM是一款基于Xposed框架的创新工具,能够将…...
告别答辩夜战!Paperxie AI PPT:10 分钟把论文变「导师满分」学术演示稿
paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AIPPThttps://www.paperxie.cn/ppt/createhttps://www.paperxie.cn/ppt/create 又到毕业季,当实验室的灯光熬到凌晨,当电脑里的论文终稿定格在最后一页,无数毕业生却陷入…...
3步掌控数字记忆:WeChatMsg工具让你的聊天记录不再流浪
3步掌控数字记忆:WeChatMsg工具让你的聊天记录不再流浪 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeCh…...
为什么92%的Spring Cloud Function项目仍在忍受秒级冷启动?这4个被忽视的Classloader陷阱必须立即修复
第一章:冷启动问题的云原生本质与量化归因冷启动并非单纯的应用延迟现象,而是云原生架构中资源按需供给、隔离边界强化与运行时环境动态构建三者耦合引发的系统性效应。其本质在于容器编排层(如 Kubernetes)与函数计算平台&#x…...
Ollama GUI架构解析:现代本地LLM交互界面的技术实现与隐私优先设计
Ollama GUI架构解析:现代本地LLM交互界面的技术实现与隐私优先设计 【免费下载链接】ollama-gui 项目地址: https://gitcode.com/gh_mirrors/ol/ollama-gui 在人工智能技术快速发展的今天,本地化部署的大语言模型(LLM)成为…...
ESP8266 AT指令实战:用NodeMCU连接WiFi并发送HTTP请求(2023最新版)
ESP8266 AT指令实战:用NodeMCU连接WiFi并发送HTTP请求(2023最新版) 当你拿起一块NodeMCU开发板时,它可能看起来只是块普通的电路板,但内置的ESP8266芯片让它成为了物联网开发的瑞士军刀。不同于Arduino需要额外WiFi模块…...
Wan2.2-I2V-A14B生产环境部署:Nginx反向代理与Docker Compose编排
Wan2.2-I2V-A14B生产环境部署:Nginx反向代理与Docker Compose编排 1. 部署目标与前置准备 在开始之前,我们先明确这次部署要实现的目标:通过Docker Compose编排Wan2.2-I2V-A14B模型服务及其依赖组件,使用Nginx作为反向代理&…...
