<< 点击显示目录 >> 主页 贝加莱CAN通讯使用例程说明 > 通过编程实现CAN通讯 > 功能块与函数说明 > ArCan > ArCanReceive() |
以提供的ID和帧格式对接收的CAN帧进行注册。可以接收多种帧格式。
IDMask中的位控制输入参数ID的哪些位与接收到的帧的CAN ID的位进行比较。 如果输入参数 IDMask 等于arCAN_RECEIVE_SINGLE_ID(即掩码中的所有位都被定义) ,则输入参数 ID 与每个接收的帧进行位 比较。 如果IDMask等于arCAN_RECEIVE_ALL(即掩码中没有定义任何位),则输入参数ID被忽略,所有具有配置的帧格式的帧都被接收。如果IDMask中只定义了一些位,那么只有定义的位会与输入参数 ID 和接收的帧 进行比较 。
如果该功能块被启用,就会创建一个FIFO队列来存储收到的CAN帧。如果FIFO队列满了,并且收到了另一个帧,那么最旧的帧就会被删除,输出的LostFrames就会被递增。每次调用ArCanReceive时,都会从队列中取出一帧(如果有的话),并在输出端ReceivedFrame提供。 NewDataValid 等于 TRUE 表示所提供的帧存在于输出端ReceivedFrame上。
如果输入参数Enable从FALSE变为TRUE(即边缘控制),所有输入参数都被读取一次。
如果输入参数 Enable 从 FALSE 变为 TRUE,则初始化被异步执行,这样输出 Busy 等于 TRUE ,输出 Active 等于 FALSE。
循环执行是同步的,在一个周期内可以多次调用该功能块。输出 Busy 为 TRUE,输出 Active==TRUE。
如果输入参数 Enable 从 TRUE 变为 FALSE,非初始化将以异步方式执行。这意味着输出 Busy 是 TRUE ,输出 Active 是 FALSE。
一旦去初始化完成,输出 Busy 为 FALSE ,输出 Active 为 FALSE。然后,该功能块可以再次被启用。
这个功能块只能 在某些情况下用于 冗余
适用的限制将在以下章节中描述。
关于冗余的更多信息,请看 冗余部分 。
输入/输出 |
参数 |
数据类型 |
说明 |
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. |