Embedded 一封邮件能否有两个可靠的收件人?

Embedded 一封邮件能否有两个可靠的收件人?,embedded,can-bus,Embedded,Can Bus,在我的情况下,多个模块通过CAN总线向中央处理器报告它们的状态,中央处理器响应并驱动它们。还有一个监控处理器,它在CAN总线上监听并分析来自模块的传入消息,以应对严重危险情况(两个不同的模块报告激活输出,绝对禁止同时激活) 只要CAN总线无噪音,这些都可以正常工作 CAN总线保证接收者接收消息;如果没有收件人确认收到该邮件,则将重新发送该邮件。如果有多个收件人,并且所有收件人都必须接收邮件,那么问题就开始了。 如果线路是干净的,双方都收到它,确认它,一切都好。 如果邮件严重损坏,双方都不会收到,

在我的情况下,多个模块通过CAN总线向中央处理器报告它们的状态,中央处理器响应并驱动它们。还有一个监控处理器,它在CAN总线上监听并分析来自模块的传入消息,以应对严重危险情况(两个不同的模块报告激活输出,绝对禁止同时激活)

只要CAN总线无噪音,这些都可以正常工作

CAN总线保证接收者接收消息;如果没有收件人确认收到该邮件,则将重新发送该邮件。如果有多个收件人,并且所有收件人都必须接收邮件,那么问题就开始了。 如果线路是干净的,双方都收到它,确认它,一切都好。 如果邮件严重损坏,双方都不会收到,并且会重新发送。没关系。 但是如果线路上的噪音“就在边缘”,其中一个会收到并确认,而另一个则无法收到(总线末端的噪音稍微差一点),并且由于发送者得到了确认,消息不会被重新发送

有没有可靠的方法确保两个不同的消息接收者都能收到它。。。除了发送两条带有两个地址的消息,特别是?(重要的是,监控CPU听到的消息与主CPU相同,而不仅仅是类似的消息)

显然不是。
即使在一个接收器关闭的简单情况下也会失败。
主机不可能检测到这一点(对于这一个数据包)

您需要一个高级CAN,具有更多的确认插槽,每个收件人一个插槽

但您可以要求每个接收者必须使用唯一的响应消息确认消息。

因此,您的主机可以通过超时检测到并非所有的接收端都收到了消息。

can层无法检测多个模块的接收。如果这是绝对关键的,您需要将消息添加到通信协议中以确认接收。如前所述,您可以让每个模块接收相同的消息并发送唯一的回复

一些总体想法:

1) 重要信息是否定期广播?如果是这样,接收者可以测试消息的周期是否正确,如果违反了周期,则可以安全地失败


2) CAN是一个非常健壮的网络。在我多年的工作中,我从未见过像您所描述的那样,噪声影响单个节点,除非该节点位于非常长(且不合理)的导线末端。您担心这种情况并将消息格式和系统设计为对所有CAN故障都具有鲁棒性是正确的。通常,当安全性或可靠性至关重要时,我们会有多条CAN总线与多条交叉检查消息一起传输信息,以验证不仅路径完好,而且另一端的设备也在智能运行。我们的一般假设是,如果交叉检查消息进行了跳闸,那么我们的操作消息也成功地进行了跳闸。

您能详细介绍一下advanced Can吗?我找不到有关该主题的任何内容。抱歉,
高级CAN
不存在。但是如果你想保证你的答案,你需要它,我会等着接受你的答案——也许有人知道一些晦涩的把戏或一个创造性地扩展协议的芯片,但感谢迄今为止的信息。正如我研究的更多:只要我们有一个假设(或验证,比如通过“保持活力”消息)如果总线上存在所有侦听器,CAN协议有一个内置机制来验证所有接收到的帧是否正常:在帧的末尾有一点确认;任何接收者在收到帧并检查校验和后,都可以断言该位(拉下总线),该位将计为“请求重发”。这也是为什么消息不应该包含Delta,而应该包含绝对值,因为消息在重发后可以出现两次。我在社区中读到,CAN总线中没有主/从,但您在帖子中提到了主。你能详细说明你的观点吗