- class QCanBusFrame#
QCanBusFrame
是一个表示单个CAN帧的容器类。 更多…摘要#
方法#
def
__init__()
def
error()
def
frameId()
def
frameType()
def
hasLocalEcho()
def
isValid()
def
payload()
def
setError()
def
setFrameId()
def
setFrameType()
def
setLocalEcho()
def
setPayload()
def
setTimeStamp()
def
timeStamp()
def
toString()
注意
此文档可能包含从C++自动翻译至Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译有问题,也可以通过在https:/bugreports.qt.io/projects/PYSIDE上创建工单的方式告知我们。
详细描述#
QCanBusDevice
可以使用QCanBusFrame
进行读写操作。它包含帧标识和数据有效负载。QCanBusFrame
还包含读取时的戳记。也请参阅
QCanBusFrame::FrameId
TimeStamp
payload()
- class FrameType#
此枚举描述了CAN帧的类型。
常量
描述
QCanBusFrame.UnknownFrame
帧类型是未知的。
QCanBusFrame.DataFrame
此值表示数据帧。
QCanBusFrame.ErrorFrame
此值表示错误帧。
QCanBusFrame.RemoteRequestFrame
此值表示远程请求。
QCanBusFrame.InvalidFrame
此值表示无效帧。此类型用于错误报告。
- class FrameError#
(继承自
enum.Flag
) 此枚举描述了可能的错误类型。常量
描述
QCanBusFrame.NoError
未发生任何错误。
QCanBusFrame.TransmissionTimeoutError
传输超时。
QCanBusFrame.LostArbitrationError
由于总线上丢失仲裁,帧无法发送。
QCanBusFrame.ControllerError
控制器遇到错误。
QCanBusFrame.ProtocolViolationError
发生了违反协议的情况。
QCanBusFrame.TransceiverError
发生了接收器错误。
QCanBusFrame.MissingAcknowledgmentError
传输未收到确认。
QCanBusFrame.BusOffError
CAN总线已断开。
QCanBusFrame.BusError
发生了CAN总线错误。
QCanBusFrame.ControllerRestartError
控制器已重新启动。
QCanBusFrame.UnknownError
发生了未知错误。
QCanBusFrame.AnyError
匹配其他所有错误类型。
也请参阅
- class Version#
- __init__(identifier, data)#
- 参数:
identifier – int
data –
QByteArray
使用
identifier
作为帧标识符和data
作为有效载荷构建一个CAN帧。- __init__([type=QCanBusFrame.FrameType.DataFrame])
- 参数:
type –
FrameType
构建具有指定
type
的CAN帧。也请参阅
- error()#
- 返回类型:
FrameError
的组合
返回当前错误帧的错误。如果帧不是
ErrorFrame
类型,则此函数返回NoError
。也请参阅
- frameId()#
- 返回类型:
int
返回CAN帧标识符。如果CAN帧使用扩展帧格式,则标识符最大为29位;否则为11位。
如果帧的类型为
ErrorFrame
类型,则此ID总是为0。返回帧的类型。
也请参阅
- hasBitrateSwitch()#
- 返回类型:
bool
如果CAN使用带比特率切换的灵活数据速率以转移更高数据比特率的有效载荷数据,则返回
true
。- hasErrorStateIndicator()#
- 返回类型:
bool
如果CAN使用带错误状态指示器的灵活数据速率,则返回
true
。此标志由发射器的CAN FD硬件设置,以指示发射器的错误状态。
- hasExtendedFrameFormat()#
- 返回类型:
bool
如果CAN帧使用29位标识符,则返回
true
;否则返回false
,表示使用11位标识符。- hasFlexibleDataRateFormat()#
- 返回类型:
bool
如果CAN帧使用灵活数据速率,允许多达64个数据字节,则返回
true
;否则返回false
,表示最多只有8字节数据负载。- hasLocalEcho()#
- 返回类型:
bool
如果该帧是本地回声帧(即当具有相同内容的帧成功发送到CAN总线时接收到的回声),则返回
true
。此标志也适用于由应用程序自身发送以及在同一系统上运行的其他应用程序发送的帧。必须将
ReceiveOwnKey
设置为true以接收回声帧。也请参阅
setLocalEcho()
ReceiveOwnKey
LoopbackKey
- isValid()#
- 返回类型:
bool
如果
frameType()
是InvalidFrame
,或者尽管frameId()
比比特数11长,但hasExtendedFrameFormat()
没有设置,或者当启用了 Flexible Data-Rate 模式时负载长度超过64个字节,当禁用模式时超过8个字节,则返回false
。如果frameType()
是RemoteRequestFrame
并且同时启用了 Flexible Data-Rate 模式,则也返回false
。否则,此函数返回
true
。- payload()#
- 返回类型:
返回帧的数据负载。
也请参阅
- setBitrateSwitch(bitrateSwitch)#
- 参数:
bitrateSwitch – bool
将 Flexible Data-Rate 标志 Bitrate Switch 设置为
bitrateSwitch
。带有此标志的帧数据字段在更高的数据比特率下传输。- setError(e)#
- 参数:
e –
FrameError
组合
设置帧的
error
类型。如果frameType()
不是ErrorFrame
,则此函数不起作用。也请参阅
- setErrorStateIndicator(errorStateIndicator)#
- 参数:
errorStateIndicator – bool
将灵活数据速率标志和错误状态指示器标志设置为
errorStateIndicator
。发送CAN FD帧时,此标志将由CAN FD硬件自动设置。
QCanBusFrame::setErrorStateIndicator()
应仅用于应用程序测试,例如在虚拟CAN FD总线上。- setExtendedFrameFormat(isExtended)#
- 参数:
isExtended – bool
将扩展帧格式标志设置为
isExtended
。- setFlexibleDataRateFormat(isFlexibleData)#
- 参数:
isFlexibleData – bool
将灵活数据速率标志设置为
isFlexibleData
。这些帧可以在支持控制器的更高速度下发送。此外,有效载荷长度限制提高到64字节。- setFrameId(newFrameId)#
- 参数:
newFrameId – int
将CAN帧的标识符设置为
newFrameId
。CAN帧标识符的最大尺寸为11位,通过支持CAN扩展帧格式可扩展至29位。当提供具有超过11位大小的
newFrameId
时,将自动设置CAN扩展帧格式。当格式被扩展且通过具有最多11位或更少的
newFrameId
时,不改变CAN扩展帧格式设置。将帧的类型设置为
newType
。也请参阅
- setLocalEcho(localEcho)#
- 参数:
localEcho – bool
将本地回声标志设置为
echo
。当启用带有
ReceiveOwnKey
的 CAN 总线帧发送时,所有成功发送的帧都会响应到接收队列,并标记为本地响应帧。因此,QCanBusFrame::setLocalEcho
应仅用于应用测试,例如在虚拟 CAN 总线上。也请参阅
- setPayload(data)#
- 参数:
data –
QByteArray
设置
data
作为 CAN 帧的有效载荷。有效载荷的最大大小为 8 字节,通过支持 Flexible Data-Rate 可扩展到 64 字节。如果data
包含超过 8 字节的数据,则自动设置 Flexible Data-Rate 标志。需要通过将QCanBusDevice
上的CanFdKey
设置为启用 Flexible Data-Rate。类型的帧
RemoteRequestFrame
(RTR) 没有有效载荷。但是,它们必须提供对预期响应有效载荷长度的指示。为了设置预期长度,需要设置一个与预期响应有效载荷长度相匹配的虚假有效载荷。以下是一种可能的实现方式QCanBusFrame frame(QCanBusFrame::RemoteRequestFrame); int expectedResponseLength = ...; frame.setPayload(QByteArray(expectedResponseLength, 0));
- setTimeStamp(ts)#
- 参数:
ts –
TimeStamp
将
ts
设置为 CAN 帧的时间戳。通常,此函数不需要,因为时间戳是在读取操作期间创建的,而在写入操作期间不需要。也请参阅
timeStamp()
TimeStamp
- timeStamp()#
- 返回类型:
时间戳
返回帧的时间戳。
也请参阅
TimeStamp
setTimeStamp()
- toString()#
- 返回类型:
str
以格式化的字符串返回 CAN 帧。
输出包含十六进制格式的 CAN 标识符,右对齐到 32 位,后跟数据长度(方括号内)和有效载荷(十六进制格式)。
标准标识符用空格填充,而扩展标识符用零填充。
典型输出示例
(Error) - error frame 7FF [1] 01 - data frame with standard identifier 1FFFFFFF [8] 01 23 45 67 89 AB CD EF - data frame with extended identifier 400 [10] 01 23 45 67 ... EF 01 23 - CAN FD frame 123 [5] Remote Request - remote frame with standard identifier 00000234 [0] Remote Request - remote frame with extended identifier