QCanBusDevice Class

QCanBusDevice 클래스는 CAN 버스용 인터페이스 클래스입니다. 더 보기...

Header: #include <QCanBusDevice>
CMake: find_package(Qt6 REQUIRED COMPONENTS SerialBus)
target_link_libraries(mytarget PRIVATE Qt6::SerialBus)
qmake: QT += serialbus
상속합니다: QObject

공용 타입

struct Filter
enum CanBusDeviceState { UnconnectedState, ConnectingState, ConnectedState, ClosingState }
enum CanBusError { NoError, ReadError, WriteError, ConnectionError, ConfigurationError, …, TimeoutError }
enum class CanBusStatus { Unknown, Good, Warning, Error, BusOff }
enum ConfigurationKey { RawFilterKey, ErrorFilterKey, LoopbackKey, ReceiveOwnKey, BitRateKey, …, UserKey }
enum Direction { Input, Output, AllDirections }
flags Directions

공용 함수

QCanBusDevice(QObject *parent = nullptr)
virtual QCanBusDevice::CanBusStatus busStatus()
void clear(QCanBusDevice::Directions direction = Direction::AllDirections)
QList<QCanBusDevice::ConfigurationKey> configurationKeys() const
QVariant configurationParameter(QCanBusDevice::ConfigurationKey key) const
bool connectDevice()
(since 6.2) virtual QCanBusDeviceInfo deviceInfo() const
void disconnectDevice()
QCanBusDevice::CanBusError error() const
QString errorString() const
qint64 framesAvailable() const
qint64 framesToWrite() const
virtual bool hasBusStatus() const
virtual QString interpretErrorFrame(const QCanBusFrame &frame) = 0
QList<QCanBusFrame> readAllFrames()
QCanBusFrame readFrame()
virtual void resetController()
virtual void setConfigurationParameter(QCanBusDevice::ConfigurationKey key, const QVariant &value)
QCanBusDevice::CanBusDeviceState state() const
virtual bool waitForFramesReceived(int msecs)
virtual bool waitForFramesWritten(int msecs)
virtual bool writeFrame(const QCanBusFrame &frame) = 0

시그널

void errorOccurred(QCanBusDevice::CanBusError)
void framesReceived()
void framesWritten(qint64 framesCount)
void stateChanged(QCanBusDevice::CanBusDeviceState state)

보호된 함수

void clearError()
virtual void close() = 0
QCanBusFrame dequeueOutgoingFrame()
void enqueueOutgoingFrame(const QCanBusFrame &newFrame)
void enqueueReceivedFrames(const QList<QCanBusFrame> &newFrames)
bool hasOutgoingFrames() const
virtual bool open() = 0
void setError(const QString &errorText, QCanBusDevice::CanBusError errorId)
void setState(QCanBusDevice::CanBusDeviceState newState)

상세 설명

QCanBusDevice는 사용자에게 편리한 API를 제공하는 CAN 플러그인과 통신합니다. CAN 플러그인은 객체 생성 시 지정해야 합니다.

멤버 유형 문서

enum QCanBusDevice::CanBusDeviceState

이 열거형은 가능한 모든 장치 상태를 설명합니다.

상수설명
QCanBusDevice::UnconnectedState0장치가 연결이 끊어졌습니다.
QCanBusDevice::ConnectingState1장치가 연결 중입니다.
QCanBusDevice::ConnectedState2장치가 CAN 버스에 연결되었습니다.
QCanBusDevice::ClosingState3장치가 닫히는 중입니다.

enum QCanBusDevice::CanBusError

이 열거형은 가능한 모든 오류 조건을 설명합니다.

Constant설명
QCanBusDevice::NoError0오류가 발생하지 않았습니다.
QCanBusDevice::ReadError1읽기 작업 중에 오류가 발생했습니다.
QCanBusDevice::WriteError2쓰기 작업 중에 오류가 발생했습니다.
QCanBusDevice::ConnectionError3플러그인을 열려고 하는 동안 오류가 발생했습니다.
QCanBusDevice::ConfigurationError4구성 매개변수를 설정하는 동안 오류가 발생했습니다.
QCanBusDevice::UnknownError5알 수 없는 오류가 발생했습니다.
QCanBusDevice::OperationError6장치가 허용되지 않는 상태인 동안 작업을 시도했습니다. 이 열거형은 Qt 5.14에 도입되었습니다.
QCanBusDevice::TimeoutError7쓰거나 받은 프레임을 기다리는 동안 시간 초과가 발생했습니다. 이 열거형은 Qt 5.14에 도입되었습니다.

enum class QCanBusDevice::CanBusStatus

이 열거형은 가능한 CAN 버스 상태 값을 설명합니다.

Constant설명
QCanBusDevice::CanBusStatus::Unknown0CAN 버스 상태를 알 수 없습니다(예: CAN 플러그인에서 지원하지 않음).
QCanBusDevice::CanBusStatus::Good1CAN 컨트롤러가 완전히 작동 중입니다.
QCanBusDevice::CanBusStatus::Warning2CAN 컨트롤러가 경고 상태입니다.
QCanBusDevice::CanBusStatus::Error3CAN 컨트롤러가 오류 상태(더 이상 CAN 프레임을 전송하지 않음)입니다.
QCanBusDevice::CanBusStatus::BusOff4CAN 컨트롤러가 버스 오프 상태(CAN 버스에서 연결이 끊김)입니다.

enum QCanBusDevice::ConfigurationKey

이 열거형은 CAN 버스 연결에 사용할 수 있는 구성 옵션을 설명합니다.

Constant설명
QCanBusDevice::RawFilterKey0이 구성은 현재 장치가 허용하는 CAN 버스 프레임의 유형을 결정합니다. 예상 값은 QList<QCanBusDevice::Filter> 입니다. 빈 목록을 전달하면 기본 필터를 포함하여 이전에 설정한 모든 필터가 지워집니다. 자세한 내용은 QCanBusDevice::Filter 을 참조하세요.
QCanBusDevice::ErrorFilterKey1이 키는 현재 연결을 통해 전달해야 하는 오류 유형을 정의합니다. 관련 값은 QCanBusFrame::FrameErrors 유형이어야 합니다.
QCanBusDevice::LoopbackKey2이 키는 CAN 버스 장치가 루프백 모드로 작동해야 하는지 여부를 정의합니다. 루프백이란 CAN 버스에서 CAN 프레임이 전송될 때마다 이 프레임의 로컬 에코가 이 CAN 장치에 연결된 모든 애플리케이션에 전송되는 것을 의미합니다. 이 키의 예상 값은 bool 입니다.
QCanBusDevice::ReceiveOwnKey3이 키는 이 CAN 디바이스가 자체 전송 프레임을 수신할지 여부를 정의합니다. 이 키는 전송이 성공했는지 확인하는 데 사용할 수 있습니다. 이 키의 예상 값은 bool 입니다.
QCanBusDevice::BitRateKey4이 키는 CAN 비트 전송률을 초당 비트로 정의합니다. CAN FD를 사용하면 QCanBusFrame::hasBitrateSwitch()를 설정하면 페이로드가 더 높은 데이터 비트 전송률로 전송될 수 있습니다. 이 경우 QCanBusDevice::BitRateKey 은 CAN ID 중재 단계에만 사용됩니다. 참고 항목 QCanBusDevice::DataBitRateKey
QCanBusDevice::CanFdKey5이 키는 CAN FD 프레임의 송수신 활성화 여부를 정의합니다. 이 키의 예상 값은 bool 입니다.
QCanBusDevice::DataBitRateKey6이 키는 CAN FD 페이로드 비트 전송률을 초당 비트로 정의합니다. CAN FD는 공칭 비트 전송률의 중재 단계가 완료된 후 QCanBusFrame::hasBitrateSwitch() 플래그가 있는 프레임의 페이로드를 더 높은 데이터 비트 전송률로 전송할 수 있도록 합니다. 이 열거형 값은 Qt 5.9에서 도입되었습니다. 참고 QCanBusDevice::BitRateKey
QCanBusDevice::ProtocolKey7이 키를 사용하면 다른 프로토콜을 지정할 수 있습니다. 현재 이 매개변수는 SocketCAN 플러그인에서만 설정하고 사용할 수 있습니다. 이 열거형 값은 Qt 5.14에 도입되었습니다.
QCanBusDevice::UserKey30이 키는 사용자 정의 키가 시작되는 범위를 정의합니다. 가장 일반적인 목적은 플랫폼별 구성 옵션을 허용하는 것입니다.

configurationParameter()도 참조하십시오 .

열거형 QCanBusDevice::방향
플래그 QCanBusDevice::방향

이 열거형은 가능한 데이터 전송 방향을 설명합니다.

상수설명
QCanBusDevice::Input1입력 방향.
QCanBusDevice::Output2출력 방향.
QCanBusDevice::AllDirectionsInput | Output입력과 출력 양쪽 방향.

방향 유형은 QFlags<방향>에 대한 타입 정의입니다. 방향 값의 OR 조합을 저장합니다.

멤버 함수 문서

[explicit] QCanBusDevice::QCanBusDevice(QObject *parent = nullptr)

지정된 parent 으로 직렬 버스 장치를 구축합니다.

[virtual] QCanBusDevice::CanBusStatus QCanBusDevice::busStatus()

현재 CAN 버스 상태를 반환합니다. 상태를 요청할 수 없는 경우 QCanBusDevice::UnknownStatus가 반환됩니다.

참고: 이 함수는 모든 CAN 플러그인에서 구현되지 않을 수 있습니다. 자세한 내용은 플러그인 도움말 페이지를 참조하세요. hasBusStatus () 함수는 런타임에 사용 중인 CAN 플러그인이 CAN 버스 상태 요청을 지원하는지 확인하는 데 사용할 수 있습니다.

hasBusStatus() 및 resetController()도 참조하세요 .

void QCanBusDevice::clear(QCanBusDevice::Directions direction = Direction::AllDirections)

direction 에 따라 장치 입력 또는 출력 버퍼를 지웁니다.

이 함수는 QCanBusDevice 버퍼에서만 작동합니다. 이미 CAN 드라이버 또는 CAN 하드웨어 계층에 기록되었거나 이러한 계층에서 아직 읽지 않은 프레임은 이 기능으로 지워지지 않습니다.

참고: 출력 버퍼를 지우는 것은 버퍼가 있는 장치에서만 가능합니다.

framesAvailable(), readFrame(), framesToWrite() 및 writeFrame()도 참조하세요 .

[protected] void QCanBusDevice::clearError()

마지막 장치 오류에 대한 오류 ID와 사람이 읽을 수 있는 설명을 지웁니다.

CAN 버스 구현은 이 함수를 사용하여 장치의 오류 상태를 업데이트해야 합니다.

error(), errorOccurred() 및 setError()도 참조하세요 .

[pure virtual protected] void QCanBusDevice::close()

이 함수는 CAN 버스 연결을 닫는 역할을 합니다. 구현 시 인스턴스의 state()가 QCanBusDevice::UnconnectedState 으로 설정되어 있는지 확인해야 합니다.

이 함수의 가장 중요한 작업은 CAN 장치에 대한 소켓을 닫고 QCanBusDevice::setState()를 호출하는 것입니다.

disconnectDevice()도 참조하세요 .

QList<QCanBusDevice::ConfigurationKey> QCanBusDevice::configurationKeys() const

CAN 버스 연결에 사용되는 키 목록을 반환합니다.

키의 의미는 ConfigurationKey 와 동일합니다. 키가 명시적으로 언급되지 않은 경우 해당 키에 대한 플랫폼의 기본 설정이 사용됩니다.

QVariant QCanBusDevice::configurationParameter(QCanBusDevice::ConfigurationKey key) const

ConfigurationKey key 에 할당된 현재 값을 반환하고, 그렇지 않으면 잘못된 QVariant 을 반환합니다.

setConfigurationParameter() 및 configurationKeys()도 참조하세요 .

bool QCanBusDevice::connectDevice()

장치를 CAN 버스에 연결합니다. 성공하면 true, 그렇지 않으면 false 을 반환합니다.

이 함수는 구현의 일부로 open()를 호출합니다.

disconnectDevice()도 참조하세요 .

[protected] QCanBusFrame QCanBusDevice::dequeueOutgoingFrame()

발신 프레임의 내부 목록에서 다음 QCanBusFrame 을 반환하고, 그렇지 않으면 잘못된 QCanBusFrame 을 반환합니다. 반환된 프레임은 내부 목록에서 제거됩니다.

[virtual, since 6.2] QCanBusDeviceInfo QCanBusDevice::deviceInfo() const

현재 QCanBusDevice 에 대한 QCanBusDeviceInfo 을 반환합니다. 이 함수가 QCanBusDevice 의 서브클래스에 의해 구현되지 않으면 기본 생성된 객체가 반환됩니다.

이 함수는 Qt 6.2에 도입되었습니다.

void QCanBusDevice::disconnectDevice()

장치를 CAN 버스에서 분리합니다.

이 함수는 구현의 일부로 close()를 호출합니다.

참고: 이 함수는 connectDevice()가 true 을 반환하는 경우에만 호출해야 합니다.

connectDevice()도 참조하세요 .

[protected] void QCanBusDevice::enqueueOutgoingFrame(const QCanBusFrame &newFrame)

writeFrame()로 액세스할 수 있는 발신 프레임의 내부 목록에 newFrame 을 추가합니다.

서브클래스는 새 프레임을 작성할 때 이 함수를 호출해야 합니다.

[protected] void QCanBusDevice::enqueueReceivedFrames(const QList<QCanBusFrame> &newFrames)

readFrame()을 사용하여 액세스할 수 있는 내부 프레임 목록에 newFrames 을 추가하고 framesReceived() 신호를 내보냅니다.

서브클래스는 프레임을 수신할 때 이 함수를 호출해야 합니다.

QCanBusDevice::CanBusError QCanBusDevice::error() const

마지막으로 발생한 오류를 반환합니다. 오류 값은 항상 마지막으로 발생한 오류로 설정되며 재설정되지 않습니다.

setError() 및 errorString()도 참조하세요 .

[signal] void QCanBusDevice::errorOccurred(QCanBusDevice::CanBusError)

이 신호는 오류가 발생하면 발산됩니다.

QString QCanBusDevice::errorString() const

마지막으로 발생한 장치 오류에 대한 사람이 읽을 수 있는 설명을 반환합니다.

error()도 참조하세요 .

qint64 QCanBusDevice::framesAvailable() const

사용 가능한 프레임 수를 반환합니다. 사용 가능한 프레임이 없으면 이 함수는 0을 반환합니다.

clear(), readFrame() 및 readAllFrames()도 참조하세요 .

[signal] void QCanBusDevice::framesReceived()

이 신호는 하나 이상의 프레임이 수신되었을 때 방출됩니다. 프레임은 readFrame() 및 framesAvailable()을 사용하여 읽어야 합니다.

qint64 QCanBusDevice::framesToWrite() const

버퍼링된 장치의 경우, 이 함수는 쓰기 대기 중인 프레임 수를 반환합니다. 버퍼링되지 않은 장치의 경우 이 함수는 항상 0을 반환합니다.

참고: CAN 드라이버와 CAN 하드웨어 계층에 추가 버퍼링이 있을 수 있습니다. 따라서 이 함수가 0을 반환한다고 해서 모든 CAN 프레임이 이미 CAN 버스에 기록되었다는 의미는 아닙니다.

clear() 및 writeFrame()도 참조하세요 .

[signal] void QCanBusDevice::framesWritten(qint64 framesCount)

이 신호는 프레임 페이로드가 CAN 버스에 기록될 때마다 발생합니다. framesCount 인수는 이 페이로드에 기록된 프레임 수로 설정됩니다.

[virtual] bool QCanBusDevice::hasBusStatus() const

CAN 플러그인이 CAN 버스 상태 요청을 지원하면 true를 반환합니다.

busStatus()도 참조하세요 .

[protected] bool QCanBusDevice::hasOutgoingFrames() const

발신 프레임의 내부 목록이 비어 있지 않으면 true 을 반환하고, 그렇지 않으면 false 을 반환합니다.

[pure virtual] QString QCanBusDevice::interpretErrorFrame(const QCanBusFrame &frame)

frame 을 오류 프레임으로 해석하고 사람이 읽을 수 있는 오류 설명을 반환합니다.

frame 이 오류 프레임이 아닌 경우 반환되는 문자열은 비어 있습니다.

[pure virtual protected] bool QCanBusDevice::open()

이 함수는 connectDevice()에 의해 호출됩니다. 서브클래스는 CAN 버스 연결이 가능한 경우 true 을 반환하고, 그렇지 않으면 false 을 반환하는 구현을 제공해야 합니다. QCanBusDevice 구현은 이 함수를 호출할 때 디바이스의 state()이 이미 QCanBusDevice::ConnectingState 로 설정되어 있는지 확인합니다.

구현은 성공 시 인스턴스의 state()가 QCanBusDevice::ConnectedState 으로 설정되어 있는지, 그렇지 않으면 QCanBusDevice::UnconnectedState 으로 설정되어 있는지 확인해야 합니다. setState()를 사용하여 새 장치 상태를 설정해야 합니다.

사용자 정의 구현은 소켓 열기, 잠재적으로 필요한 QSocketNotifier 인스턴스화, 사용자 정의 및 기본 QCanBusDevice::configurationParameter()의 적용을 담당합니다.

connectDevice()도 참조하세요 .

QList<QCanBusFrame> QCanBusDevice::readAllFrames()

큐에서 모든 QCanBusFrame를 반환하고, 그렇지 않으면 빈 QList 을 반환합니다. 반환된 프레임은 큐에서 제거됩니다.

큐는 FIFO 원칙에 따라 작동합니다.

clear(), framesAvailable() 및 readFrame()도 참조하세요 .

QCanBusFrame QCanBusDevice::readFrame()

큐에서 다음 QCanBusFrame 을 반환하고, 그렇지 않으면 빈 QCanBusFrame 을 반환합니다. 반환된 프레임은 큐에서 제거됩니다.

큐는 FIFO 원칙에 따라 작동합니다.

clear(), framesAvailable() 및 readAllFrames()도 참조하세요 .

[virtual] void QCanBusDevice::resetController()

가능한 경우 CAN 컨트롤러 재설정을 수행하여 CAN 컨트롤러를 버스 오프 상태에서 해제합니다.

참고: CAN 컨트롤러 재설정은 실행 중인 통신을 방해하며 완료하는 데 최대 1초가 소요될 수 있습니다. 이 함수는 버스 오류로부터 복구할 때만 호출하세요.

참고: 이 기능은 모든 CAN 플러그인에서 구현되지 않을 수 있습니다. 자세한 내용은 플러그인 도움말 페이지를 참조하세요.

busStatus()도 참조하세요 .

[virtual] void QCanBusDevice::setConfigurationParameter(QCanBusDevice::ConfigurationKey key, const QVariant &value)

CAN 버스 연결에 대한 구성 파라미터 keyvalue 로 설정합니다. 잠재적 키는 ConfigurationKey 로 표시됩니다.

잘못된 QVariant 을 설정하여 파라미터를 설정 해제할 수 있습니다. 파라미터를 설정 해제하면 구성이 기본 설정으로 재설정됩니다.

참고: 대부분의 경우 구성 변경 사항은 다시 연결한 후에만 적용됩니다.

configurationParameter()도 참조하세요 .

[protected] void QCanBusDevice::setError(const QString &errorText, QCanBusDevice::CanBusError errorId)

마지막 장치 오류에 대한 사람이 읽을 수 있는 설명을 errorText 으로 설정합니다. errorId 은 오류 유형을 분류합니다.

CAN 버스 구현은 이 함수를 사용하여 장치의 오류 상태를 업데이트해야 합니다.

error(), errorOccurred() 및 clearError()도 참조하세요 .

[protected] void QCanBusDevice::setState(QCanBusDevice::CanBusDeviceState newState)

디바이스 상태를 newState 로 설정합니다. CAN 버스 구현은 이 함수를 사용하여 장치 상태를 업데이트해야 합니다.

state()도 참조하세요 .

QCanBusDevice::CanBusDeviceState QCanBusDevice::state() const

디바이스의 현재 상태를 반환합니다.

setState() 및 stateChanged()도 참조하세요 .

[signal] void QCanBusDevice::stateChanged(QCanBusDevice::CanBusDeviceState state)

이 신호는 디바이스의 상태가 변경될 때마다 발신됩니다. 새 상태는 state 로 표시됩니다.

setState() 및 state()도 참조하세요 .

[virtual] bool QCanBusDevice::waitForFramesReceived(int msecs)

새 프레임을 읽을 수 있고 framesReceived() 신호가 전송될 때까지 또는 msecs 밀리초가 경과할 때까지 차단합니다. msecs-1 인 경우 이 함수는 시간 초과되지 않습니다.

새 프레임을 읽을 수 있고 framesReceived() 신호가 전송되면 true 을 반환하고, 그렇지 않으면 false 을 반환합니다(작업 시간이 초과되었거나 오류가 발생한 경우).

참고: 이 함수는 로컬 이벤트 루프를 시작합니다. 이로 인해 이 함수 범위의 실행이 차단되는 동안 다른 애플리케이션 슬롯이 호출될 수 있는 시나리오가 발생할 수 있습니다. 문제를 방지하려면 이 클래스의 신호를 슬롯에 연결해서는 안 됩니다. 마찬가지로 이 함수는 framesReceived() 또는 errorOccurred() 신호에 대한 응답으로 호출되어서는 안 됩니다.

waitForFramesWritten()도 참조하세요 .

[virtual] bool QCanBusDevice::waitForFramesWritten(int msecs)

버퍼링된 디바이스의 경우 이 함수는 모든 버퍼링된 프레임이 디바이스에 기록되고 framesWritten() 신호가 전송될 때까지 또는 msecs 밀리초가 경과할 때까지 대기합니다. msecs 이 -1이면 이 함수는 시간 초과되지 않습니다. 버퍼가 없는 디바이스의 경우 writeFrame()에는 쓰기 버퍼가 필요하지 않으므로 false 으로 즉시 반환됩니다.

framesWritten() 신호가 발생하면 true 을 반환하고, 그렇지 않으면 false 을 반환합니다(즉, 작업 시간이 초과되었거나 오류가 발생한 경우).

참고: 이 함수는 로컬 이벤트 루프를 시작합니다. 이로 인해 이 함수 범위의 실행이 차단되는 동안 다른 애플리케이션 슬롯이 호출될 수 있는 시나리오가 발생할 수 있습니다. 문제를 방지하려면 이 클래스의 신호를 슬롯에 연결해서는 안 됩니다. 마찬가지로 이 함수는 framesWritten() 또는 errorOccurred() 신호에 대한 응답으로 호출되어서는 안 됩니다.

waitForFramesReceived()도 참조하세요 .

[pure virtual] bool QCanBusDevice::writeFrame(const QCanBusFrame &frame)

frame 을 CAN 버스에 쓰고 성공하면 true 을 반환하고, 그렇지 않으면 false 을 반환합니다.

일부 플랫폼에서는 프레임이 대기열에 삽입될 수 있으며 반환 값은 대기열에 성공적으로 삽입된 것만 나타낼 수 있습니다. 실제 프레임은 나중에 전송됩니다. 따라서 framesWritten() 신호는 프레임이 전송 계층으로 전달되었음을 최종적으로 확인하는 신호입니다. 오류가 발생하면 errorOccurred()가 전송됩니다.

CAN 버스 사양에 따라 remote transfer request (RTR) 유형의 프레임에는 페이로드가 없고 0에서 8까지의 길이(포함)가 있습니다. 이 길이는 원격 당사자로부터 예상되는 응답 페이로드 길이를 나타냅니다. 따라서 이 기능을 사용하여 RTR 프레임을 전송할 때는 frame 에 임의의 페이로드를 설정해야 할 수 있습니다. 임의 페이로드의 길이는 RTR 프레임의 예상 크기로 설정된 길이입니다.

QCanBusFrame::setPayload()도 참조하세요 .

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.