ArCanReceive()

<< 点击显示目录 >>

主页  贝加莱CAN通讯使用例程说明 > 通过编程实现CAN通讯 > 功能块与函数说明 > ArCan >

ArCanReceive()

以提供的ID和帧格式对接收的CAN帧进行注册。可以接收多种帧格式。

CAN ID过滤器

IDMask中的位控制输入参数ID的哪些位与接收到的帧的CAN ID的位进行比较。  如果输入参数 IDMask 等于arCAN_RECEIVE_SINGLE_ID(即掩码中的所有位都被定义) ,则输入参数 ID 与每个接收的帧进行位 比较。 如果IDMask等于arCAN_RECEIVE_ALL(即掩码中没有定义任何位),则输入参数ID被忽略,所有具有配置的帧格式的帧都被接收。如果IDMask中只定义了一些位,那么只有定义的位会与输入参数 ID 和接收的帧 进行比较  。

FIFO队列

如果该功能块被启用,就会创建一个FIFO队列来存储收到的CAN帧。如果FIFO队列满了,并且收到了另一个帧,那么最旧的帧就会被删除,输出的LostFrames就会被递增。每次调用ArCanReceive时,都会从队列中取出一帧(如果有的话),并在输出端ReceivedFrame提供。 NewDataValid 等于 TRUE 表示所提供的帧存在于输出端ReceivedFrame上。

如果输入参数Enable从FALSE变为TRUE(即边缘控制),所有输入参数都被读取一次。

 

如果输入参数 EnableFALSE 变为 TRUE,则初始化被异步执行,这样输出 Busy 等于 TRUE ,输出 Active 等于 FALSE

循环执行是同步的,在一个周期内可以多次调用该功能块。输出 BusyTRUE,输出 Active==TRUE

如果输入参数 EnableTRUE 变为 FALSE,非初始化将以异步方式执行。这意味着输出 BusyTRUE ,输出 ActiveFALSE

一旦去初始化完成,输出 BusyFALSE ,输出 ActiveFALSE。然后,该功能块可以再次被启用。

 

 

这个功能块只能  在某些情况下用于 冗余

适用的限制将在以下章节中描述。

 

通信

异步执行

 

关于冗余的更多信息,请看 冗余部分

clip0050

输入/输出

参数

数据类型

说明

IN

Execute

BOOL

只要这个输入被设置,功能块就会被激活。

IN

DeviceName

STRING[127]

CAN接口的名称,例如:SS1.IF1

IN

ID

UDINT

接收具有相应ID的帧。

IN

IDMask

UDINT

使用arCAN_RECEIVE_ALL、arCAN_RECEIVE_SINGLE_ID或单个掩码。接收所有具有ReceivedId和CanIdMask等于CanID和CanIDMask的CAN-ID。

IN

Format

UDINT

arCAN_11BIT或arCAN_29BIT

IN

QueueSize

UDINT

接收队列的长度。当FIFO队列满时,旧帧被覆盖,输出参数NumberOfLostFrames开始计数。

OUT

Busy

BOOL

该功能块处于活动状态,必须继续调用。

OUT

Active

BOOL

功能块处于活动状态。

OUT

Error

BOOL

在执行功能块时发生错误。

OUT

StatusID

DINT

错误数

OUT

ReceivedFrame

ArCanFrameType

接收到的CAN帧。

OUT

Timestamp

ArCanTimestampType

接收CAN帧的时间。

OUT

NewDataValid

BOOL

如果自上一个功能块调用以来收到了新的数据,则为TRUE。

OUT

NumberOfLostFrames

UDINT

自输入 "Enable "变为 "TRUE "后损失的帧的数量。

 

这些错误号码可以被返回:

名称

描述

arCAN_ERR_INVALID_PARAMETER

-1070584147

Check the parameters.

arCAN_ERR_DEVICE_NAME

-1070584148

Check the device name.