CANOPEN的PDO

节点1 0x1800的01位为COB-ID,若某个节点想接受,在0x1400的01位写相同ID。

节点1 0x1A00中的数据为映射地址,格式为XXXX_XX_XX分别为地址,子索引,数据长度。去找相应地址中的数据,就是要发送的数据。


节点2 0x1800的01位为COB-ID,若某个节点想接受,在0x1400的01位写相同ID。

节点2 0x1A00中的数据为映射地址。

节点2 0x1400的01位为COB-ID,若想接收某个TPDO,写TPDO中0x1800-01中的相同ID。

节点2 0x1600中的数据为映射地址,格式为XXXX_XX_XX分别为地址,子索引,数据长度。接受的数据就储存在地址中。


节点3 0x1400的01位为COB-ID,若想接收某个TPDO,则写TPDO中的相同ID。

节点3 0x1600中的数据为映射地址,格式为XXXX_XX_XX分别为地址,子索引,数据长度。接受的数据就储存在地址中。

节点3 0x1401的01位为COB-ID,若想接收某个TPDO,则写TPDO中的相同ID。

节点3 0x1601中的数据为映射地址,格式为XXXX_XX_XX分别为地址,子索引,数据长度。接受的数据就储存在地址中。



节点1的TPDO写0x181,节点2的RPDO和节点3的RPDO1均写0x181,就完成了节点1向节点2,3的数据传输。

节点2的TPDO写0x182,节点3的RPDO2写0x182,实现了节点2向节点3的数据传输。


CANOPEN的PDO_第1张图片

但是要实现PDO,还需要同步信号SYNC。其模式在0x1800-02中设定。 :

        写传输类型«t»(1字节)

        t = 1 to 0xF0 : PDO每接收到« t »个SYNC就发送;
        t = FD : 在接收到一个请求PDO (rtr = 1)后发送;
        t = FF : 基于事件发送。节点自发主动地发送PDO。

首先要进入operational模式,Note: 节点必须处于operational模式才能发送SYNC。(有问题,没进入operational模式也发了,但是PDO不发送)

CANOPEN的PDO_第2张图片

CANOPEN的PDO_第3张图片

(同步信号间隔不一致,有两个间隔,很奇怪)

发送SYNC信号,就可以看到TPDO发送了。

也可以在子索引02中设定为远程触发,通过远程帧触发TPDO。

CANOPEN的PDO_第4张图片

没成功。


你可能感兴趣的:(CANOPEN)