SystecCAN插件封装了低级API,以便与SYS TEC CAN适配器一起工作。
这个插件需要SYS TEC CAN设备驱动程序和usbcan32.dll (usbcan64.dll适用于64位构建)。
Creating CAN Bus Devices
首先,有必要检查QCanBus是否提供所需的插件:
if (QCanBus::instance()->plugins().contains(QStringLiteral("systeccan"))) {
// plugin available
}
其中systemcan是插件名。
接下来,可以建立到特定接口的连接:
QString errorString;
QCanBusDevice *device = QCanBus::instance()->createDevice(
QStringLiteral("systeccan"), QStringLiteral("can0.0"), &errorString);
if (!device) {
// Error handling goes here
qDebug << errorString;
} else {
device->connectDevice();
}
其中,can0.0为活动CAN接口名称(接口0,通道0),SystecCAN插件支持从can0.0到can63.1的64个USB接口(所谓模块)。每个模块可以有一个或两个通道,它们可以通过索引canX访问。0或canX.1。availableDevices()方法返回当前可用设备的列表。
注意:SYS TEC还提供8或16通道CAN接口。这些单元由一个USB集线器和多个内部双通道模块组成。
设备现在可以读写CAN帧:
QCanBusFrame frame;
frame.setFrameId(8);
QByteArray payload("A36E");
frame.setPayload(payload);
device->writeFrame(frame);
读取可以使用readFrame()方法完成。当至少有一个新的帧可供读取时,就会发出framesReceived()信号:
QCanBusFrame frame = device->readFrame();
systemcan支持以下配置,可以通过setConfigurationParameter()控制:
Configuration parameter key | Description |
---|---|
QCanBusDevice::BitRateKey | 确定CAN总线连接的比特率。支持的比特率为:10000、20000、50000、100000、125000、250000、500000、800000、1000000。注意,此配置参数只能在未连接QCanBusDevice时进行调整。 |
QCanBusDevice::ReceiveOwnKey | 默认情况下,在发送CAN帧的同一通道上不能接收CAN帧。如果启用了这个选项,那么接收到的帧将被标记为QCanBusFrame::hasLocalEcho() |
SystecCAN 支持以下附加功能:
QCanBusDevice::resetController()
QCanBusDevice::busStatus()