目录
CanTpIsUseFlowControlBlockSize & CanTpUseFlowControlBlockSize
代码示例
CanTpGetOneFlowControlValue & CanTpSetOneFlowControlValue
代码示例
CanTpGetAckMode & CanTpSetAckMode & CanTpGetAckResult & CanTpSetAckResult
代码示例
CanTpIsUseFlowControlBlockSize & CanTpUseFlowControlBlockSize
功能:
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
功能:
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
代码示例
按<Space>键,激活数据库连接的确认传输并将数据发送到接收器。 打印接收方返回的结果以表示成功的数据传输,或者如果未收到确认则报告错误。
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