PassThruCAN 플러그인 사용
Pass-Thru CAN 플러그인은 SAE J2534 Pass-Thru API를 통해 CAN 어댑터에 액세스합니다. SAE J2534는 x86 Windows PC에서 차량 버스에 접근하기 위한 표준입니다. 이 API는 32비트 Windows용으로만 지정되어 있지만, 일부 공급업체는 64비트 Windows 및 Linux와 같은 다른 운영 체제용 구현도 제공합니다.
PassThruCAN 사용법
PassThruCAN을 사용하려면 CAN 어댑터에 해당하는 벤더 드라이버가 설치되어 있어야 합니다. 또한 벤더는 공유 라이브러리 형태로 J2534 API 구현을 제공해야 합니다. 현재 Pass-Thru API의 04.04 버전만 지원됩니다.
x64 빌드의 Qt를 사용할 경우, 이 플러그인은 CAN 장치 제조사가 64비트 버전의 J2534 Pass-Thru 인터페이스 라이브러리도 제공하는 경우에만 작동합니다. 벤더가 32비트 J2534 인터페이스만 제공하는 경우, 이를 사용하려면 32비트 버전의 Qt가 필요합니다.
자동 장치 검색을 위해서는 공급업체 소프트웨어가 Windows 레지스트리에 사용 가능한 어댑터를 나열하고 설명해야 합니다. Windows 이외의 시스템에서는 현재 자동 검색이 지원되지 않습니다.
CAN 버스 장치 생성
먼저 QCanBus 에서 원하는 플러그인이 제공되는지 확인해야 합니다.
if (QCanBus::instance()->plugins().contains(QStringLiteral("passthrucan"))) {
// plugin available
}여기서 passthrucan은 플러그인 이름입니다.
Windows에서는 Pass-Thru API를 통해 액세스할 수 있는 사용 가능한 CAN 어댑터를 나열하기 위해 자동 장치 검색 기능을 사용해야 합니다:
const auto adapters = QCanBus::instance()->
availableDevices(QStringLiteral("passthrucan"));
for (const QCanBusDeviceInfo &info : adapters) {
// List available adapter in the user interface.
uiListBox->addItem(info.name());
}다른 운영 체제에서는 검색된 어댑터 목록이 비어 있을 것입니다. 대신, 장치 이름 대신 벤더가 제공하는 J2534 인터페이스 라이브러리의 전체 경로를 지정해야 합니다:
QCanBusDevice *device = QCanBus::instance()->createDevice(
QStringLiteral("passthrucan"), QStringLiteral("/path/to/libj2534-vendor.so"));특별한 요구 사항이 있는 경우, Pass-Thru 어댑터를 열 때 벤더별 장치 이름 인수를 전달할 수도 있습니다:
QCanBusDevice *device = QCanBus::instance()->createDevice(
QStringLiteral("passthrucan"), info.name() + QChar::fromLatin1('%') + deviceName);연결 및 연결 해제를 포함하여 Pass-Thru CAN 버스 장치에 대한 모든 작업은 비동기적으로 실행됩니다. 장치가 CAN 프레임 읽기 및 쓰기 준비가 되었을 때 알림을 받으려면 stateChanged(QCanBusDevice::CanBusDeviceState state) 신호에 연결하십시오:
if (!device) {
// Error handling goes here
} else {
connect(device, &QCanBusDevice::stateChanged,
this, &MyClass::canStateChanged);
device->connectDevice();
}state()는 CAN 어댑터에 성공적으로 연결되면 ConnectedState 를 반환합니다. 그러면 해당 장치는 CAN 프레임의 읽기 및 쓰기를 위해 열리게 됩니다:
QCanBusFrame frame;
frame.setFrameId(8);
frame.setPayload(QByteArray("\xA3\x6E\x74\x9C", 4));
device->writeFrame(frame);readFrame() 메서드를 사용하여 읽기를 수행할 수 있습니다. 읽을 수 있는 새 프레임이 하나 이상 있을 때 framesReceived() 신호가 발송됩니다:
QCanBusFrame frame = device->readFrame();Pass-Thru CAN 플러그인은 setConfigurationParameter()을 통해 제어할 수 있는 다음과 같은 구성 옵션을 지원합니다:
| 구성 매개변수 키 | 설명 |
|---|---|
| QCanBusDevice::LoopbackKey | 이 기능이 활성화되면, CAN 버스를 통해 CAN 프레임이 전송될 때 CAN 어댑터가 해당 프레임의 로컬 에코를 수신합니다. 에코 프레임은 QCanBusFrame::hasLocalEcho()로 표시됩니다. 기본적으로 루프백 모드는 비활성화되어 있습니다. |
| QCanBusDevice::RawFilterKey | 이 옵션을 사용하면 수신되는 CAN 버스 메시지에 대한 필터를 설정할 수 있습니다. 값을 지정할 경우, QList<QCanBusDevice::Filter> 형식이어야 합니다. 데이터 프레임 ID 필터만 지원됩니다. 기본적으로 모든 ID를 가진 데이터 프레임이 허용됩니다. |
| QCanBusDevice::BitRateKey | CAN 버스의 비트 전송률(bit/s)을 부호 없는 정수로 지정합니다. 기본 비트 전송률은 500000(500 kbit/s)입니다. 장치가 이미 연결된 상태에서 비트 전송률을 설정하면 CAN 인터페이스가 암시적으로 재초기화될 수 있습니다. |
Pass-Thru CAN 플러그인은 확장 프레임 형식(29비트 ID)을 지원하지만, 가변 데이터 전송률(CAN FD)은 지원하지 않습니다.
© 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.