CAN通讯协议中各种参数解析

1.各种参数缩写

2.多帧传输时间参数解析

- Sender(左侧)

指的是 多帧数据的发送者,也就是:

ECU(被测系统 / 响应方)

- Receiver(右侧)

指的是 多帧数据的接收者,也就是:

诊断测试仪(如 CANoe + VN/VX 接口 / OEM 工具)

ISO 15765-2 多帧传输(分段传输)

CAN 协议本身最大只能传输 8 字节数据。当数据长度超过 8 字节时,就需要使用 ISO-TP(ISO 15765-2)协议,通过多个 CAN 帧来完成数据传输。

2.1.SF,FF,CF,FC.CTS,BS,STmin的解释

📦 关键帧类型(Event Type)解释:

Event Type含义
SF (Single Frame)单帧传输(数据 ≤ 7 字节)
FF (First Frame)多帧传输的第一帧(数据起始)
CF (Consecutive Frame)后续数据帧
FC.CTS (Flow Control: Clear To Send)流控帧,表示接收方已准备好接收后续帧

图中显示 FC.CTS 的 Dir = Tx,代表它是从 测试设备(例如 CANoe、VN/VX Interface 或 VT System)发出的流控帧,这是正确的。

也就是说:

  • 你的测试系统(CANoe)发送了一个 诊断请求(Tx)。

  • ECU 收到后回复了一个 FF(Rx)。

  • 然后你的测试系统(CANoe)根据 ISO-TP 协议,立即回应一个 FC.CTS(Tx),表示“我准备好接收接下来的 CF”。

事件发送方Dir描述
FFECURxECU 开始发送多帧
FC.CTSCANoeTx测试仪允许继续发
CFECURxECU 持续发送后续帧
  • BS (Block Size):Receiver 每收到多少个 CF 后,就需要重新发送一次 FC。

  • STmin (Separation Time Minimum):Sender 连续发送 CF 时的最小间隔时间。

这些参数都由 Receiver(CANoe) 在 FC 帧中发送给 ECU,告诉 ECU:

  • 每发几帧就停一下(BS)

  • 每帧之间最短间隔多少(STmin)

测试ECU属于server端,测试仪(CANoe)属于client

2.2各种时间参数的测试

STmin:Sender 连续发送 CF 时的最小间隔时间

按照定义测不太好测,可以直接测CANoe连续收到两帧CF之间的时间,这个时间是包含STmin的,只要这个时间小于15ms 即可,比如下图为2.79ms

BS(Block Size):接收方发送流控帧之后,发送方被允许连续发送的最大帧数目。特殊情况下,如果该值为0,则表示发送连续帧没有限制,如果值为3,表示发送方最多能连续发送3帧CF就会继续收到接收方的流控帧;

### 使用CANoe IG工具发送多条报文 #### 配置IG模块以支持批量报文传输 为了实现通过CANoe的IG模块一次性发送多个报文,需先配置好相应的参数设置。这可以通过定义一系列待发消息并设定其属性来完成[^1]。 #### 创建和编辑报文列表 当准备利用IG模块执行批量化数据包传送操作时,在软件界面内创建一个新的或选择已有的报文集合文件至关重要。此过程涉及具体指明各个独立的数据单元及其内部结构细节,包括但不限于ID、DLC以及各字节的具体数值等内容[^2]。 #### 设置循环与定时机制 对于连续性的多帧信息传递需求而言,除了单次触发外,还应考虑采用周期性重复的方式来进行。这意味着可以在设计阶段就为每一条记录关联上特定的时间间隔或者事件驱动条件,从而确保它们能够依照预定规律有序发出。 ```python # Python伪代码展示概念而非实际语法 for message in message_list: ig_module.send(message.id, message.data) time.sleep(interval) # 假设interval代表两次发送之间等待的时间长度 ``` 上述示例并非真实编程语言中的有效语句;而是用来形象化描述如何遍历一个包含所有要发送的消息对象数组,并依次调用`ig_module.send()`方法实施发送动作的同时加入适当延时的过程。 #### 应用实例:基于CAPL脚本增强功能 尽管直接借助IG组件足以满足基本应用场景下的多条目广播要求,但对于更复杂的情形,则可能需要用到CAPL(Controller Area Network Application Programming Language)编写自定义逻辑来辅助管理整个流程。例如: - 动态调整某些字段的内容; - 实现更加精细的状态监控; - 执行额外的安全验证步骤等。 以下是简化版的CAPL代码片段,展示了怎样读取来自某个传感器节点温度值后构建回应信号再将其推送出去的操作[^3]。 ```capl on message CAN1.TestMessage { float temperature = IG_GetSignal(CAN1.TestMessage, "Temperature"); write("Received Temperature:", temperature); // 构造响应消息并将修改后的温度写入其中 IG_SetSignal(CAN1.ResponseMessage, "Temperature", temperature + 1.0); output(CAN1.ResponseMessage); // 如果需要连续发送多次相同类型的信息,可在此处添加更多output()调用 } ``` 请注意,以上例子仅作为教学用途提供给读者理解原理之用,并不代表完整的解决方案。针对具体的项目环境和技术栈差异,还需要进一步定制开发才能达到最佳效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值