Vector - CAPL - 诊断模块函数(流控制帧)

Vector - CAPL - 诊断模块函数(流控制帧)_第1张图片

目录

CanTpIsUseFlowControlBlockSize & CanTpUseFlowControlBlockSize

代码示例

CanTpGetOneFlowControlValue & CanTpSetOneFlowControlValue

代码示例

CanTpGetAckMode & CanTpSetAckMode & CanTpGetAckResult & CanTpSetAckResult

代码示例


CanTpIsUseFlowControlBlockSize & CanTpUseFlowControlBlockSize

Vector - CAPL - 诊断模块函数(流控制帧)_第2张图片

功能:

CanTpIsUseFlowControlBlockSize:检查连接传输数据时是否使用流量控制帧中的块大小值。

CanTpUseFlowControlBlockSize:配置在连接传输数据时是否使用流量控制帧中的块大小值。

Flag:

        0:不评估接收到的流量控制帧,而是使用通过 CanTpSetBlockSize 设置的固定块大小值。

        1:评估第一个接收到的流量控制帧并将其块大小值用于整个数据传输。

        2:默认值; 评估每个接收到的流量控制帧并调整所使用的块大小。

代码示例

连接不应使用接收方请求的块大小值,而应使用固定值 8。


CanTpSetBlockSize( handle, 8);
CanTpUseFlowControlBlockSize( handle, 0);

CanTpGetOneFlowControlValue & CanTpSetOneFlowControlValue

功能:获取或设置块大小值 (0—255),这意味着后面不再有流量控制帧。 按照标准的定义,默认值为 0。 另一个典型值是 255。

代码示例

连接使用块大小值 255 来指示接收方将不再发送流量控制帧。

CanTpSetOneFlowControlValue( handle, 255);

CanTpGetAckMode & CanTpSetAckMode & CanTpGetAckResult & CanTpSetAckResult

Vector - CAPL - 诊断模块函数(流控制帧)_第3张图片

功能:

        CanTpGetAckMode:返回确认流控制发送的状态。

        CanTpSetAckMode:获取确认流控制结果字节值。

        CanTpGetAckResult:取消/激活确认流控制帧的发送。

        CanTpSetAckResult:设置确认流控制结果字节值。

说明:

        ISO TP 指定无确认的数据传输,即发送方无法得到接收方已正确接收所有数据的任何确认。 可以使用这些功能激活此标准行为的扩展 - 请注意,所有通信合作伙伴都必须实现此扩展!

        接收器在正确接收到预期的最后一个数据帧(单帧或连续帧)后,将向发送器发送确认流控制帧(FC.Ack,新类型)。 如果发生错误,接收器将不会发送该帧,即发送器将遇到流量控制超时。

        发送节点在发送完最后一个数据帧后等待 FC.Ack。 如果在 N_Bs 超时内未收到此类帧,则会通过调用 CAPL 函数 CanTp_ErrorInd(2) 来报告传输错误。

Format of FC.Ack:

        PCI byte #1: 流量状态 0xF
        PCI byte #2: AckRes 0(默认,可覆盖)
        PCI byte #3 etc.:(保留)0

代码示例

        按键,激活数据库连接的确认传输并将数据发送到接收器。 打印接收方返回的结果以表示成功的数据传输,或者如果未收到确认则报告错误。

On key ' ' {
  BYTE data[20];
  CanTpSetAckMode( CanTpGetDBConnection(), 1);
  CanTpSendData(CanTpGetDBConnection(), data, elcount(data));
}

CanTp_SendCon( long handle, dword count) {
  write( "Successful transfer of %d byte on connection %d: %d"
  , count, handle, CanTpGetAckResult( handle));
}

CanTp_ErrorInd( long handle, long error) {
  if(CanTpGetAckMode( handle) == 1 && error == 2)
    write( "No ACK for data on connection %d!"
    , handle);
}

        带确认的单帧传输(正常寻址)。

Id Data bytes
441 [05] 53 68 6f 72 74 00 00 // Single Frame, 5 byte
442 [3f 00 00] 00 00 00 00 00 // FlowControl.Ack, AckRes = 0

你可能感兴趣的:(CAPL入门到入坑,网络,CAPL,vTESTstudio,CANoe)