【独立帧、首帧、连续帧、流控桢】4种CAN报文类型分析

1. Can帧种类

        根据ISO-TP中的描述,Can帧主要分四类:单帧(Singal frame, SF),首帧(First frame, FF), 连续帧(Consecutive frame, CF), 流控帧(Flow control frame, FC);

单帧:值为0,其长度可为8个字节(value值占1个字节 + 7个表示正常地址字节,一般我们遇到主要就是类型的)或7个字节(value值占1个字节 + 6个扩展地址字节);

        首帧:其值为1, 用于长的、已被分割的多帧消息包中。首帧包括整个包的数据长度,以及数据初始值;

        连续帧:其值为2&#x

CAPL(CAN Access Programming Language)是一种专门用于Vector工具(如CANoe、CANalyzer等)中的编程语言,主要用于编写测试脚本以及处理CAN/LIN网络相关的任务。当涉及到“**连续帧**”的概念时,通常是指通过CAN消息传输的数据超过单所能承载的最大长度(8字节),因此需要将数据分段,并利用多进行发送和接收。 以下是关于如何在CAPL中处理连续帧的关键点: ### CAPL 中处理连续帧的基本思路 1. **协议约定** - 连续帧的处理依赖于双方预先定义好的通信协议。 - 比如第一包含总包数及序列信息;后续按照顺序依次传输剩余部分直到完成所有数据块的传递。 2. **状态管理** - 使用全局变量保存当前收发的状态,例如已收到/发出多少、每对应的位置索引等重要标记位。 - 需要注意的是,在实际项目里还需要考虑超时机制以防止单边失效引发死锁等问题。 3. **示例代码框架** ```capl variables { message contFrame; int totalPackets = 0; // 总共需要分成几包 int currentPacketIndex = 0;// 当前正在处理第几个包 } on key 's' { if (totalPackets == 0) { write("请输入总的数目:"); scanf("%d", &totalPackets); } } // 发送函数模板 function sendContFrames() { for(int i=0;i<totalPackets;i++) { currentPacketIndex=i+1; // 填充每个frame的具体内容并设置标识字段区分头尾中间 output(contFrame); } } ``` 4. 接收端则相反操作,解析出各片段组合还原完整大数据集。 5. 错误校验:建议加入CRC检查等方式保证完整性准确无误地恢复原始数据。 6. 时间同步制:如果存在实时约束的话,则需额外留意时间戳应用避免冲突延迟等情况发生影响整体性能表现。 --- ####
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值