跳转到内容

CAN总线

CAN总线 协议的接口以「jc.can」作为对象访问前缀。CAN总线 通信流程包含以下步骤:

  1. 通过startAsync创建CAN总线连接「CanConnection」。
  2. 操作连接实例,通过 sendAsyncinCanframeAsync 接口获取CAN帧实例「CanFrame」。
  3. 操作CAN帧实例,通过接口 replyAsync 向数据来源发送数据。

操作接口

CAN总线 协议的操作接口由入口函数 startAsync 和不同层级(连接/数据帧)的工具类接口共同组成。

startAsync()

CAN总线入口函数。启动1个CAN总线连接,返回 CanConnection 实例。

  • 函数签名
ts
function startAsync (port?: string, bitrate?: number): Promise<CanConnection>;
  • 输入参数
    • port CAN接口设备名称,默认值为'CAN1'。
    • bitrate 传输比特率,默认值为125000(bps)
  • 返回值 CanConnection 实例对象。

CanConnection

CAN总线连接的操作接口如下:

sendAsync()

向CAN总线发送数据。

  • 函数签名
ts
interface CanframeData {
    messageId: number;
    messageData: string;
    rtr?: boolean;
}

sendAsync (data: CanframeData): Promise<CanFrame>;
  • 输入参数
    • data CAN帧数据对象。

CAN帧结构说明:

属性名类型说明
messageId无符号整数CAN帧的消息ID, 长度最多11比特,取值范围0-2047
messageDatastringCAN帧的数据域,最大长度为8字节的Hex字符串
rtrboolean是否为远程帧
  • 返回值 Promise对象,发送完成后返回所发送的CAN帧对象。

sendWithAsync()

将其他CAN页面中定义的已有CAN帧数据向CAN总线发送。

  • 函数签名

    ts
    sendWithAsync (pageName: string, contentName: string): Promise<CanFrame>;
  • 输入参数

    • pageName 页面名称,仅限在「接口」和「模板」页面中查找。
    • contentName CAN帧名称
  • 返回值 Promise对象,发送完成后返回所发送的CAN帧对象。

inCanframeAsync()

异步获取接收到的CAN帧对象。

  • 函数签名

    ts
    inCanframeAsync (): Promise<CanFrame>;
  • 输入参数 无

  • 返回值 Promise对象,接收到CAN帧后返回CanFrame对象。

onCanframe()


当「发送」或「接收」CAN帧时触发回调。

  • 函数签名

    ts
    onCanframe (
      handler: (canframe: CanFrame) => void, once?: boolean
    ): CancelFunc;
  • 输入参数

    • handler 新数据包的处理函数。触发时将会回调本函数,并传入新的CanFrame实例。
    • once(可选),默认值为false。是否注册为一次性的回调函数,若传入true则触发了1次回调后会自动取消注册。
  • 返回值 取消函数,调用此函数可以解除本次注册。

onCanframeIn()


当「接收」CAN帧时触发回调。

  • 函数签名

    ts
    onCanframeIn (
    handler: (canframe: CanFrame) => void, once?: boolean
    ): CancelFunc;
  • 输入参数

    • handler 新数据包的处理函数。触发时将会回调本函数,并传入新的CanFrame实例。
    • once(可选),默认值为false。是否注册为一次性的回调函数,若传入true则触发了1次回调后会自动取消注册。
  • 返回值 取消函数,调用此函数可以解除本次注册。

onCanframeOut()


当「发送」CAN帧时触发回调。

  • 函数签名

    ts
    onCanframeOut (
    handler: (canframe: CanFrame) => void, once?: boolean
    ): CancelFunc;
  • 输入参数

    • handler 新数据包的处理函数。触发时将会回调本函数,并传入新的CanFrame实例。
    • once(可选),默认值为false。是否注册为一次性的回调函数,若传入true则触发了1次回调后会自动取消注册。
  • 返回值 取消函数,调用此函数可以解除本次注册。

CanFrame

CAN总线数据帧的操作接口如下:

replyAsync()

向CAN总线回复1个数据帧。

  • 函数签名

    ts
    interface CanframeData {
        messageId: number;
        messageData: string;
        rtr?: boolean;
    }
    
    replyAsync (data: CanframeData): Promise<CanFrame>;
  • 输入参数

    • data CAN帧数据对象。

CAN帧结构说明:

属性名类型说明
messageId无符号整数CAN帧的消息ID, 长度最多11比特,取值范围0-2047
messageDatastringCAN帧的数据域,最大长度为8字节的Hex字符串
rtrboolean是否为远程帧
  • 返回值 Promise对象,发送完成后返回所发送的CAN帧对象。

只读接口

CanConnection

records()

获取连接的打开记录列表,因为连接可能被多次打开/关闭。

  • 函数签名
ts
records (): FlowConnectionRecord[];

FlowConnectionRecord

  • inBytes():返回自本次连接创建以来累计接收的字节数。
  • outBytes():返回自本次连接创建以来累计发送的字节数。
  • inPackets():返回自本次连接创建以来累计接收的数据包个数。
  • outPackets():返回自本次连接创建以来累计发送的数据包个数。

CanFrame

  • inout():数据帧的收发方向,"in"为接收,"out"为发送。
  • length():数据帧的数据域字节数。
  • payload():数据帧的数据域内容,即二进制数据。