패스스루 CAN 플러그인 사용
패스스루 CAN 플러그인은 SAE J2534 패스스루 API를 통해 CAN 어댑터에 액세스합니다. SAE J2534는 x86 Windows PC에서 차량 버스에 액세스하기 위한 표준입니다. API는 32비트 Windows용으로만 지정되어 있지만 일부 공급업체는 64비트 Windows 및 Linux와 같은 기타 운영 체제에 대한 구현도 제공합니다.
PassThruCAN 사용
PassThruCAN을 사용하려면 해당 공급업체의 CAN 어댑터용 드라이버를 설치해야 합니다. 또한 공급업체는 공유 라이브러리를 통해 J2534 API의 구현을 제공해야 합니다. 현재 Pass-Thru API는 버전 04.04만 지원됩니다.
Qt의 x64 빌드를 사용하는 경우, 이 플러그인은 CAN 장치 공급업체가 64비트 버전의 J2534 패스스루 인터페이스 라이브러리도 제공하는 경우에만 작동합니다. 공급업체가 32비트 J2534 인터페이스만 제공하는 경우, 이를 사용하려면 32비트 빌드의 Qt가 필요합니다.
자동 장치 검색을 위해 공급업체 소프트웨어는 Windows 레지스트리에 사용 가능한 어댑터를 나열하고 설명해야 합니다. Windows 이외의 시스템에서는 현재 자동 검색이 지원되지 않습니다.
CAN 버스 장치 생성
먼저 QCanBus 에서 원하는 플러그인을 제공하는지 확인해야 합니다:
if (QCanBus::instance()->plugins().contains(QStringLiteral("passthrucan"))) { // plugin available }
여기서 passthrucan은 플러그인 이름입니다.
Windows에서는 자동 장치 검색을 사용하여 패스스루 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);
패스스루 CAN 버스 장치의 모든 작업은 연결 및 연결을 포함하여 비동기적으로 실행됩니다. 장치가 CAN 프레임을 읽고 쓸 준비가 되었을 때 알림을 받으려면 stateChanged(QCanBusDevice::CanBusDeviceState 상태) 신호에 연결하세요:
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 버스의 비트 전송률(부호 없는 정수, 비트/s 단위)입니다. 기본 비트 전송률은 500000(500kbit/s)입니다. 장치가 이미 연결된 후에 비트 전송률을 설정하면 CAN 인터페이스가 암시적으로 다시 초기화될 수 있습니다. |
패스스루 CAN 플러그인은 확장 프레임 형식(29비트 ID)을 지원하지만 유연한 데이터 전송률(CAN FD)은 지원하지 않습니다.
© 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.