CAN-Bus-Manager
Das Beispiel sendet und empfängt CAN-Bus-Frames.
Das Beispiel sendet und empfängt CAN-Bus-Frames. Eingehende Frames werden nach ihrem Typ sortiert. Über einen Verbindungsdialog können die Parameter für die CAN-Bus-Verbindung angepasst werden.
Wichtige Qt Serial Bus in diesem Beispiel verwendete Klassen:

Erstellen eines QCanBusDevice
Für jegliche CAN-Kommunikation ist eine Instanz von ` QCanBusDevice ` erforderlich.
Mit ` ConnectDialog ` lassen sich alle erforderlichen Parameter festlegen. Anschließend wird das Gerät unter Verwendung der angegebenen Plugin- und Schnittstellennamen erstellt:
QString errorString;
m_canDevice.reset(QCanBus::instance()->createDevice(p.pluginName, p.deviceInterfaceName,
&errorString));
connect(m_canDevice.get(), &QCanBusDevice::errorOccurred,
this, &MainWindow::processErrors);
connect(m_canDevice.get(), &QCanBusDevice::framesReceived,
this, &MainWindow::processReceivedFrames);
connect(m_canDevice.get(), &QCanBusDevice::framesWritten,
this, &MainWindow::processFramesWritten);Über die hergestellten Verbindungen können eingehende Frames verarbeitet, gesendete Frames gesteuert und Fehler behandelt werden.
Sobald das Gerät erstellt ist, verwenden Sie ` QCanBusDevice::connectDevice()` um die Kommunikation zu starten.
Verarbeitung eingehender Frames
QCanBusDevice gibt das Signal „ framesReceived()“ aus, sobald neue Frames verfügbar sind. Mit der Methode „ readFrame()“ kann ein einzelnes „ QCanBusFrame “ gelesen werden, sofern „ available frames “ vorhanden ist. Sobald der Frame empfangen wurde, können einzelne Parameter wie „ frameId “, „ timeStamp “ oder „ payload “ daraus extrahiert werden:
while (m_canDevice->framesAvailable()) {
m_numberFramesReceived++;
const QCanBusFrame frame = m_canDevice->readFrame();
QString data;
if (frame.frameType() == QCanBusFrame::ErrorFrame)
data = m_canDevice->interpretErrorFrame(frame);
else
data = QString::fromLatin1(frame.payload().toHex(' ').toUpper());
const QString time = QString::fromLatin1("%1.%2 ")
.arg(frame.timeStamp().seconds(), 10, 10, ' '_L1)
.arg(frame.timeStamp().microSeconds() / 100, 4, 10, '0'_L1);
const QString flags = frameFlags(frame);
const QString id = QString::number(frame.frameId(), 16).toUpper();
const QString dlc = QString::number(frame.payload().size());
m_model->appendFrame(QStringList({QString::number(m_numberFramesReceived),
time, flags, id, dlc, data}));
}Frames senden
Um benutzerdefinierte Daten über den CAN-Bus zu senden, muss der Benutzer mindestens einen „ frameId “ und einen „ payload “ angeben. Optional können weitere „ QCanBusFrame “-Parameter konfiguriert werden:
const uint frameId = m_ui->frameIdEdit->text().toUInt(nullptr, 16);
QString data = m_ui->payloadEdit->text();
m_ui->payloadEdit->setText(formatHexData(data));
const QByteArray payload = QByteArray::fromHex(data.remove(u' ').toLatin1());
QCanBusFrame frame = QCanBusFrame(frameId, payload);
frame.setExtendedFrameFormat(m_ui->extendedFormatBox->isChecked());
frame.setFlexibleDataRateFormat(m_ui->flexibleDataRateBox->isChecked());
frame.setBitrateSwitch(m_ui->bitrateSwitchBox->isChecked());
if (m_ui->errorFrame->isChecked())
frame.setFrameType(QCanBusFrame::ErrorFrame);
else if (m_ui->remoteFrame->isChecked())
frame.setFrameType(QCanBusFrame::RemoteRequestFrame);Sobald der Frame vorbereitet ist, kann die Methode ` QCanBusDevice::writeFrame()` verwendet werden, um ihn zu senden:
m_canDevice->writeFrame(frame);Ausführen des Beispiels
Sie können das Beispiel wie folgt ausführen:
- Qt Creator
Öffnen Sie den Modus „ Welcome “ und wählen Sie das Beispiel unter „ Examples “ aus. Weitere Informationen finden Sie unter Qt Creator: Tutorial: Erstellen und Ausführen.
- Qt Extension for Visual Studio Code
Führen Sie den Befehl „ Qt: Open Qt examples “ über „ Command Palette “ aus und wählen Sie das Beispiel aus der Liste aus. Weitere Informationen finden Sie unter Qt Extension for Visual Studio Code: Tutorial: Erstellen und Ausführen.
© 2026 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.