• 751查看
  • 0回复

[测试标定] CAPL编程的进阶应用 | Checksum算法的实现

[复制链接]

  • TA的每日心情

    1435747603
  • 签到天数: 1 天

    发表于 29-8-2023 08:34:40 | 显示全部楼层 |阅读模式

    汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


    CAPL编程的进阶应用 | Checksum算法的实现w1.jpg

    CRC与Checksum区别

    相信大家在CAN Msg或者ETH PDU中经常会看到Checksum这种信号。提到Checksum,就必须要说明一下CRC校验,很多工程师会概念混淆,认为两者是同一个东西,实则它们有很大的区别。

    01

    两者存放位置不同

    CRC校验:循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。
    通过CRC概念可以得知,CRC存放在CRC场,而Checksum存放在数据场之中,一般在数据场的第一个字节或者最后一个字节。

    CAPL编程的进阶应用 | Checksum算法的实现w2.jpg
    图1 标准数据帧格式

    02

    两者应用场景不同

    在CAN报文帧中,CRC校验是发送器根据发送的bit进行多项式计算校验,结果放在15bit长度的CRC位。接收器也是用相同的多项式计算总线上的数据,与接收到的校验值进行比较,相同则表示帧正确接收,并在ACK时隙中发送显性状态,覆盖发送器的隐性位;如果不同接收节点在ACK界定符之后发送错误帧。

    CAPL编程的进阶应用 | Checksum算法的实现w3.jpg
    图2 CRC校验原理
    CRC校验是为了保证数据从一个CAN收发器发送到另外一个收发器的信号完整性,而数据场中Checksum校验算法是为了校验数据被正确的打包与解包,并且Checksum算法是可以自行制定的,计算规则的灵活度高。

    Checksum的应用场景

    对于Checksum而言,它的应用场景有以下三点:

    01

    确保数据正确打包

    有些ECU内部的变量在传递到CAN收发器之前就有可能发生错误,这种类型的错误CAN收发器是无法检测到的。报文中的信号和Checksum校验是在应用层完成的,将报文中的各个字节进行校验,报文和Checksum一起发送,并且在接收节点进行解析,从而确保数据链路完整和数据正确打包。

    01

    实现数据加密

    CAN网络是开放性的,CAN节点可以随时加入到总线当中,为了保证通信的安全性,ECU传输的关键控制信号需要进行加密,报文的发送方和接收方使用相同的Checksum算法作为数据加密的密钥。接收方对比秘钥,如果不同,此条报文的数据不被使用,从而避免被其他节点的数据影响。Checksum算法不在DBC等数据库文件中说明,可以单独保密,从而确保了数据的加密。

    03

    提高数据的可信度

    一帧报文在多个字节中可能出现位错误,一般情况下CRC8校验的错误率为1/256,crc16校验的错误率为1/65536,crc32校验的错误率为1/(65536*65536)。通过Checksum校验可以提高数据的可信度。
    由于Checksum的作用,其也常应用在车载以太网当中。

    在CAPL中Checksum信号实现

    通常情况下,Checksum和LiveCounter信号是成对出现的。在CANoe中使用仿真节点与真实控制器交互,需要将LiveCounter和Checksum信号仿真,这样才能成功通信。LiveCounter长度为4bit,它是用于报文发送计数的生命信号,每发送一帧报文后就对该LiveCounter位加1,会在0~15之间循环增加。在报文其他信号没有改变时,LiveCounter实时更新使得Checksum信号跟着更新,提高校验的准确性。那么LiveCounter信号该如何仿真呢?下面以CAN总线DBC为例,介绍在CAPL中实现LiveCounter和Checksum校验仿真。

    CAPL是CANoe和CANalyzer中可用的类C的编程语言。CAPL中程序块的执行由事件控制,在专用的编译器中开发和编译,这样可以访问数据库中的所有对象以及系统变量,被汽车电子工程师们广泛使用。

    下图为LiveCounter计算的代码,为了保证数据的准确性,进行一次Checksum计算,这样就可以实现LiveCounter信号的仿真。

    CAPL编程的进阶应用 | Checksum算法的实现w4.jpg
    图3 LiveCounter计算代码
    下图为示例报文中各个信号位置排布关系,在此报文中,Checksum校验方式为前七个字节异或运算,将运算结果存放到最后一个字节。排布图中共有8个信号,它们的格式为Motorola格式,也就是俗称的大端模式。

    CAPL编程的进阶应用 | Checksum算法的实现w5.jpg
    图4 报文中信号排布

    CAPL只能访问到报文中的信号,无法访问到报文中的每个字节,要进行Checksum计算,需要根据信号排布把前七个字节的真实值重新组合存放在一个byte类型的数组当中,然后对这个数组异或运算获取的结果为该报文中Checksum信号值。

    对于不同长度的信号,需要声明不同类型的数组来存放不同的信号。byte类型长度为1字节,声明两个byte *[8]类型的数组(*为省略的数组名称)分别存放长度小于一字节的信号和重组后每个字节的真实值;int类型长度为2字节,声明int *[8]类型的数组存放长度为1-2字节的信号;long类型长度为4字节,声明long *[8]类型的数组存放长度为2-4字节的信号。下图为Checksum中信号长度小于1字节的字节重组示例代码。

    CAPL编程的进阶应用 | Checksum算法的实现w6.jpg
    图5 Checksum字节重组示例代码
    另外,参与Checksum计算的是信号的真实值而不是物理值,如果信号中有偏移量和比例因子,在赋值时需要将信号加上偏移量,并除以比例因子以获得真实值。

    CAPL编程的进阶应用 | Checksum算法的实现w7.jpg
    图6 信号描述
    为了保证和真实控制器通信正常,Checksum数据必须准确,Checksum计算步骤一般写成无返回值函数(void),在LiveCounter信号改变或者其他信号改变时调用计算。
    正确计算的LiveCounter和Checksum信号曲线如下图所示。

    CAPL编程的进阶应用 | Checksum算法的实现w8.jpg
    图7 LiveCounter和Checksum信号曲线

    总结

    本文重点描述了CRC和Checksum信号的区别以及Checksum信号在CAPL中实现的方法。CAPL编程作为CANoe的灵魂,使CANoe满足仿真、分析、测试和诊断的各种复杂的要求,同时使CANoe的功能得以不断扩展。
    北汇信息作为Vector中国的合作伙伴,致力于为中国汽车客户提供优质的工具支持、解决方案以及测试服务。
    注:图片来自于Vector。


    
  • TA的每日心情
    无聊
    1-7-2015 18:46
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 18-3-2025 10:18:00 | 显示全部楼层
    主题回复:关于CAPL编程中Checksum算法进阶应用和CRC校验解析:

    首先,对于CAPL编程中Checksum算法的进阶应用,它是确保CAN网络中数据完整性和正确性的重要手段。在实际应用中,我们需要对算法进行优化和改进,以适应不同的应用需求和环境。而关于CRC与Checksum的区别,重点在于其应用位置和机制的不同。CRC存放于特定字段内(CRC场),执行多项式计算确保数据传输的正确性;而Checksum存放在数据场内,是对数据内容的简单累加和校验。两者虽然都用于错误检测,但机制不同。深入理解其原理和差异,对于提升我们的工程应用能力至关重要。对于CRC的具体实现方式和其与Checksum的更深入的对比,需要进一步探讨和分享经验。
    回复 支持 反对

    使用道具 举报

    

    该用户从未签到

    发表于 18-3-2025 10:18:00 | 显示全部楼层
    主题回复:关于CAPL编程中Checksum算法的实现及CRC与Checksum的区别

    针对CAPL编程中的Checksum算法实现,其核心在于确保数据的完整性和正确性。具体而言,需要对数据帧进行多项式计算,将结果作为Checksum值附加在数据帧中。接收端同样进行类似计算以验证数据的准确性。关于CRC与Checksum的区别,它们虽然都用于数据校验,但存放位置及工作方式不同。CRC通常用于更高级别的数据传输完整性检查,存放在特定的CRC字段中;而Checksum通常用于简单的数据完整性校验,存放在数据字段中。了解这些差异对于正确使用和实现这些算法至关重要。在汽车工程中,正确使用这些校验机制能显著提高通信的可靠性和稳定性。
    回复 支持 反对

    使用道具 举报

    快速发帖

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

    GMT+8, 19-8-2025 04:03 , Processed in 0.409004 second(s), 36 queries .

    Powered by Discuz! X3.5

    © 2001-2013 Comsenz Inc.