Engee 文档

CAN RX

用于接收 CAN 信息。

类型: EngeeFunction

图书馆中的路径:

/Interfaces/CAN/CAN RX

说明

CAN RX 用于接收 CAN 报文。

CAN RX 块中的报文过滤器

要接收的 CAN 报文的标识符长度可以是 29 位(扩展帧格式)或 11 位(标准帧格式)。CAN 报文通过滤波器后,只有在标识符的所有位都通过滤波器时才能接收。如果报文标识符中至少有一位未通过过滤器,则报文将被丢弃。通过设置 过滤器 ID:掩码 ,可以根据接收到的 CAN 报文的各个标识符位来设置过滤器。

如果满足以下条件,报文将通过过滤器:

CAN ID & Mask == Filter ID & Mask,

其中 CAN ID 是接收到的 CAN 报文的标识符。

换句话说,过滤器的运行可以用以下规则来表示:

  • 如果 掩码 中某个位的值为零,则不对该位进行过滤。也就是说,该位不在过滤器中进行检查,而是通过过滤器。

  • 如果 掩码 中某位的值为 1,则通过该位的值对该位进行过滤:

    • 如果 CAN ID 的位和 过滤器 ID: 的位匹配,则该位通过过滤器。

    • 如果 CAN ID 的位和 过滤器 ID: 的位不同,则该位不会通过筛选。


*过滤器工作原理示例:

请定义以下 CAN 报文过滤器:

FilterID = 0b0100;
Mask     = 0b0110;

带有 CAN 标识符 0x4、0x5 和 0xC 的报文通过过滤器并被接受:

CAN_ID = [0b0100 0b0101 0b1100];
can_msg_passed = bitand(CAN_ID, Mask) == bitand(FilterID, Mask)
can_msg_passed =

  1×3 logical array

   1   1   1

CAN标识符为 "0x1"、"0x2 "和 "0x6 "的报文无法通过过滤器并被丢弃:

CAN_ID = [0b0001 0b0010 0b0110];
can_msg_passed = bitand(CAN_ID, Mask) == bitand(FilterID, Mask)
can_msg_passed =

  1×3 logical array

   0   0   0

端口

输出

# 信息数量 — 收到的信息数
标量

Details

不超过参数值 Число сообщений: .如果操作系统缓冲区中还有更多信息,它们将在下一步计算时传输到模型中。

数据类型

UInt32.

复数支持

# 信息 — 类型为 CAN_MESSAGE_BUS 的已接收报文数组
向量

Details
数据类型

Float64`。

复数支持

参数

Параметры

# 端口: — 用于接收信息的 CAN 端口

Details
默认值

"can0"

程序使用名称

m_port

可调谐

可计算

# Число сообщений: — 一个计算步骤中从操作系统缓冲区传输到模型的最大报文数

Details
默认值

1

程序使用名称

m_messages

可调谐

可计算

# 过滤器 ID: — 在操作系统层面对收到的信息进行过滤。

Details

要禁用过滤器并接收所有报文,请指定 过滤器 ID: и 掩码 为 "0"。过滤器操作的详细说明见 CAN RX 块中的报文过滤器.

默认值

0x00

程序使用名称

m_filter

可调谐

可计算

# 掩码 — 实时应用中接收 CAN 报文的计算步骤(以秒为单位

Details
默认值

0x00

程序使用名称

m_mask

可调谐

可计算