传输方式

SocketCAN

qianmoQqianmoQ· 更新于 2026-10-01· 阅读 4 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

SocketCAN 是 Linux 内核暴露 CAN 总线的方式,而这种传输方式就是它的一个客户端。它是两种具体的 CAN 传输方式 之一;另一种是基于内存的 虚拟 CAN。

由于它通过内核运行,PLC4X 不处理总线访问、仲裁或时序——这些由底层的 CAN 层负责。它已成功用于 vcan 和 gs_usb 驱动。

仅限 Linux。SocketCAN 有其自己的帧表示方式——定长帧(一个 CAN 2.0A 帧总是占用 16 字节),并且使用 29 位标识符字段,而标准 CAN 帧使用 11 位,其余 3 位用于携带标志位。

传输语法

{name of the CAN interface}

示例

canopen:can-socketcan://can0
canopen:can-socketcan://vcan0?can-socketcan.read-timeout-ms=500

该接口也可以改用 can-socketcan.interface-name 选项来命名;如果两者都指定了名称,则以地址段中的名称为准。两者必须至少提供其一。

名称

类型

默认值

是否必填

描述

名称

SocketCAN

代码

can-socketcan

Maven 依赖

<dependency>
  <groupId>org.apache.plc4x</groupId>
  <artifactId>plc4j-transports-can-socketcan</artifactId>
  <version>1.0.0</version>
</dependency>

配置选项:

can-socketcan.interface-name

STRING

Linux CAN 接口名称(例如 "can0"、"vcan0")。也可以在连接字符串的地址段中指定接口名称,此时地址段中的写法优先生效。

can-socketcan.reuse-interface

BOOLEAN

false

在同一接口上的多个传输实例之间共享 CAN 套接字

can-socketcan.read-timeout-ms

INT

1000

读取超时(毫秒),用于 CAN 套接字上阻塞读取操作。

can-socketcan.filter-ids

STRING

以逗号分隔的已接受 CAN ID 列表(十进制或 0x 十六进制)。留空表示接受全部。

can-socketcan.filter-range-start

INT

-1

接受的 CAN ID 范围的起始值(含)。-1 表示不进行范围过滤。

can-socketcan.filter-range-end

INT

-1

接受的 CAN ID 范围的结束值(含该值)。-1 表示不进行范围过滤。

评论

登录后参与评论

正在加载评论…