### CAN -- CAN 通讯

类型 | 系统指令
描述 | 直接通过 CAN 总线收发数据。 可以实现多个控制器通过 CAN 来通讯，但是同一个 CAN 网络上只能有一个主端(CANIO_ADDRESS=32)。 较新的固件版本才支持这个功能，如不支持请联系厂家。 接线如下图所示： CANL - CANL CANH - CANH CANL 和 CANH 的首尾两端分别连接 1 个 120 欧电阻用于阻抗匹配。连接带拨码开关的扩展模块时，将拨码第八位拨为 ON 即表示接入 120 欧电阻，无需额外接电阻。
语法 | CAN(channel, function, tablenum) channel：CAN 通道，0 表示第一个通道，-1 表示缺省通道 function：功能号
值 | 描述
6 | 接收，没有数据时，identifier<0
7 | 发送
16 需要升级固件 | 带扩展支持接收，没有数据时，identifier<0
17 需要升级固件 | 发送扩展数据，普通数据使用 7 发送
tablenum：数据存储的 TABLE 位置 6、7 模式时依次存储： identifier：Can 通讯对象(Cob-Id)，11 位，前 4 位是功能码，后 7 位是节点 ID，ZCAN 使用的高位数据预留，建议 0-511。接收时如果小于 0 则表明没有收到数据。bit11 表示是否远程帧。 bytes：数据区域字节数，最多为 8。 data：数据区域，字节（0-FF）。 16、17 模式时依次存储： identifier：Can 通讯对象(Cob-Id)，11 位，前 4 位是功能码，后 7 位是节点 ID，ZCAN 使用的高位数据预留，建议 0-511。接收时如果小于 0 则表明没有收到数据。bit11 表示是否远程帧。 identifier extend：扩展 id，增加高 11 位与低 18 位，共同组成 CAN 的 29 位 ID，不存在填-1。 bytes：数据区域字节数，最多为 8。 data：数据区域，字节（0-FF）。 29 位扩展帧 ID 从左边非 0 开始拆分为高 11 位和低 18 位，例子如下： 扩展帧 ID 为 18EF1300 对应二进制为 0001 1000 1110 1111 0001 0011 0000 0000 高 11 位为 11000111011，对应 10 进制 1595 低 18 位为 110001001100000000，对应 10 进制 201472 所以使用 CAN17 模式时，identifier=1595，Identifier extend=201472
适用控制器 | 通用
例子 | 例一 '发送端： TABLE(0,1,8,1,2,3,4,5,6,7,8) '发送 cobid=1，8 个字节，依次为 1-8 CAN(0,7,0) '发送 '接收端： CANIO_ADDRESS=1 '设置为非主控，此参数设置一次即可 CAN(0,6,0) '接收 ?TABLE(0) 例二 '发送端 TABLE(0,1,10,8,1,2,3,4,5,6,7,8) '发送 cobid=1，扩展 id10，8 个字节，依次'为 1-8 CAN(0,17,0) '发送 '接收端： CANIO_ADDRESS=1 '设置为非主控，此参数设置一次即可 CAN(0,16,0) '接收 ?TABLE(0)
相关指令 | CANIO_ADDRESS，CANIO_STATUS，CANIO_ENABLE