CAN网关及CAN信号转发机制


一、CAN网关

之前, 我们讲到了CAN网关,其实准确的说不能叫CAN网关, 应该叫网关或者汽车网关, 主要是为了配合本系列教程及区分于以太网网关.

网关的外形:

在这里插入图片描述

大概外形, 偶有差异, 大小如香烟烟盒, 有60,70多个PIN脚组成.

每个接线pin脚都有严格的定义, 要匹配规定好的can总线或者开关设备.

在这里插入图片描述

从以上拓扑图可以看出:

网关除了10个can接线pin脚(5条双绞线/5条CAN总线),2个电源线接线pin脚,还应包括定速巡航设备的8个接线pin脚,电源管理方面的3个接线pin脚,钥匙开关(或无钥匙启动系统)的5个接线pin脚,脚踏板的3个接线pin脚,档位开关的4个接线pin脚等等…

某些汽车厂商可能有更多新的硬件开关设备,电压电阻开关设备等也都有对应的接线pin脚, 且可能预留一些PIN脚以备用。


二、网关的功能

网关是整个CAN网络的核心, 控制着整车5条CAN总线的各类信号转发与处理.

网关的基本功能包括:

  1. 连接不同波特率(传输速度)的CAN总线/LIN总线, 以实现CAN网络的网关中继功能。
  2. 诊断报文/非诊断报文转发
  3. 诊断防火墙管理
  4. 节点在线监控
  5. 巡航控制器开关检测
  6. 脚踏板位置检测
  7. 网关休眠与唤醒管理
  8. ECU升级/网关升级
  9. 电压管理

简单点说:

网关可以接收任何CAN总线(还有LIN总线)传来的不同传输速率网络信号,
网关把这些信号按一定的标准处理后, 广播到整车网络去,
如果有ECU订阅(接收)了这个信号, 则ECU将解析信号并做响应的处理.

没理解不了, 请看下方实例 !


三、CAN信号转发机制

3.1 实例一: 仪表显示发动机转速

发动机的转速信号, 先从PT CAN的ECM(发动机引擎控制模块)节点发出, 网关收到后,
网关处理后广播以GW_开头的ECM信号到其他4条CAN总线上去.
用Vehicle Spy 3 CAN工具查看可以看到以下的信号内容:
在这里插入图片描述
Info CAN上的仪表(IPK)节点订阅(接收)了发动机转速信号, 则会将这个转速信号解析, 并显示到仪表盘去.
由于以上信号发送频率太快, 比如5ms/次, 则你就会看到仪表盘上的转速指针一直在不停地偏动.
简略发送图如下:

在这里插入图片描述

3.2 实例二: 安全带未扣紧, 仪表端报警

安全带未扣紧需要两个条件:
1. 车速大于5
2. 安全带扣未扣 ( 即无电压信号 )

车速一般是PT CAN上的ECM(发动机引擎控制模块)节点负责信号管理的。
安全带扣这个设备是Body CAN上的BCM(负责天窗, 车窗, 安全带扣, 雨刮等车身零部件设备…) 节点负责信号管理的.

即网关收到PT CAN上的ECM节点发出来的车速信号, 并收到了Body CAN上的BCM发出来的安全带扣电压值为异常值(比如0), 网关统一处理后转发并广播以GW_开头的信号帧,

Info CAN上的仪表(IPK)节点订阅(接收)了GW_开头的相关安全带未扣信号帧
则会解析报警并显示到仪表盘去.
如果安全带扣一直未扣紧, 则网关将一直发送GW_开头的相关安全带信号帧,
其信号值是安全带未扣紧
所以车主会听到一直报警.
直到安全带扣上, 网关继续发送安全带相关的信号,
只是这个时候的信号值是安全带已扣紧
报警将立马消失.

简略发送图如下:
在这里插入图片描述


四、总结

以上只是两个简易的案例, 实际上, 整车所有ECU基本是以毫秒级或者微妙级的速度在源源不断的发送并接收信号, 所以网关需要处理并转发广播的信号是非常多的且必须要很快处理完的。


五、原文链接

CAN网关及CAN信号转发机制

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个示例CAPL代码,用于实现信号的拦截和转发功能: ``` variables { message CAN1.Frame msg1; // 定义CAN1消息对象 message CAN2.Frame msg2; // 定义CAN2消息对象 } on message CAN1.Frame { if (this.ID == 0x123 && this.SIGNAL == SIGNAL_NAME) { // 拦截到CAN1上的特定信号 output(this.SIGNAL); // 输出拦截到的信号名称 output(this.SIGNAL_VALUE); // 输出拦截到的信号值 // 将拦截到的信号转发CAN2 msg2.ID = 0x456; // 设置CAN2消息的ID msg2.SIGNAL = this.SIGNAL; // 设置CAN2消息的信号名称 msg2.SIGNAL_VALUE = this.SIGNAL_VALUE; // 设置CAN2消息的信号值 output(msg2); // 输出转发CAN2消息 output(msg2.SIGNAL); // 输出转发信号名称 output(msg2.SIGNAL_VALUE); // 输出转发信号值 output("Signal forwarded to CAN2."); // 输出转发成功的提示信息 // 在此处添加其他自定义处理逻辑 // ... } } ``` 在上述示例中,我们定义了两个消息对象 `msg1` 和 `msg2`,分别对应于CAN1和CAN2的消息。在 `on message` 语句中,我们使用条件判断语句来拦截CAN1上特定的信号。 如果拦截到符合条件的信号,我们首先输出拦截到的信号名称和值。然后,我们设置CAN2消息对象的ID、信号名称和信号值,将拦截到的信号转发CAN2。最后,我们输出转发信号名称和值,并输出转发成功的提示信息。 请注意,以上示例仅供参考,具体的CAPL代码实现会根据你所使用的开发工具、通信协议和关设置而有所不同。建议参考相关文档和示例代码以确保正确实现CAPL信号拦截和转发功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值