Canopen PDO 简介与示例

4.PDO通讯

4.1 PDO COB-ID参数

每一个PDO在对象字典内都会有其对应的PDO通讯参数,在使用PDO之前,必须要先查询对象字典中PDO通讯参数对象内的COB-ID项目(子索引0x01)。COB-ID项目内记录了PDO在传输时会使用的COB-ID,共有32位。

COB-ID项目每一个位所表示的意义如下表:

含义 PDO存在(此PDO有效) 31(MSB) PDO不存在 (此PDO无效) 此PDO允许RTR传输 30 此PDO不允许RTR传输 11-bit ID(CAN 2.0A) 29 29-bit ID(CAN 2.0B) 若bit 29=0,则此处的数值为 0 28-11 若bit 29=1:则此处就是29位COB-ID x 内的第 28~11位 10-0(LSB) x COB-ID内的第 10~0 位 Bit编号

除了保留的COB-ID以外,其他的COB-ID都能用来自定义PDO的COB-ID,但要注意避免一个COB-ID在同一节点上被不同的通讯对象重复使用。当bit 31=0时,PDO为有效状态,此时PDO的COB-ID的参数不允许更改。

值 0 1 0 1 0 1 0 4.2 传输类型

PDO通讯参数含有数个作用不同的参数,其中子索引为 0x02的参数为传输类型,而每一个PDO均可设定其传输类型。通过传输类型可以了解PDO在传送与接收时的特性。

不同类型与PDO传输特性关系表: 传输类型 0 1-240 241-251 252 253 PDO传输方式 循环 非循环 仅远程传送请求 ○ ○ reversed ○ ○ 同步 ○ ○ ○ 异步 ○ 254 255

○ ○ 当TxPDO的传输类型是1-240之间的某个值,则表示需要接收到这么多个SYNC对象才能够触发TxPDO的传送。若RxPDO的传输类型是0-240,则仅需要一个SYNC对象的接收便可以启用在此之前收到且尚未被启用的RxPDO对象,与传输类型的数字大小无关。

仅TxPDO的传输类型可以被设定为252和253,如果传输类型被设定为这两种时,则只有在接收到此TxPDO的RTR信息时,设备才会对外传送TxPDO。传输类型若被设定为252,则表示设备在接收到SYNC对象时,才会更新TxPDO内的数据。传输类型若被设定为253,则在接收到RTR信息时,设备会更新TxPDO内的数据。

传输类型如果被设定为254和255,便可以使用事件定时器(Event Timer)来触发TxPDO的传送。另外若某DI被映射到某个PDO,当此DI的值变化时,也会触发其对应TxPDO的传送。对RxPDO而言,若是传输类型被设定为254或255,则在接收到RxPDO之后,就必须立即启用此RxPDO。

4.3 PDO通讯规则

根据CANopen DS-301的规范,与PDO有关的对象存放在对象字典中主索引0x1400到0x1BFF之间。每一个PDO的通讯参数对象均会对应到一个映像参数对象,两者之间为一对一的关系。譬如第1组RxPDO通讯参数存放于对象字典中主索引为0x1400的地方,而其相对应的映射参数存放于对象字典中主索引0x1600的地方,可依次推得主索引0x1401和0x1601为一对,主索引0x1402和0x1602为一对。TxPDO的通讯参数和映像参数的关系同样遵循这样的关系。在用户开始利用PDO对实际的I/O通道作存取前,必须先取得PDO的通讯参数和映射参数。 此外,PDO的通讯只能在NMT的操作(Operational)状态下使用,若使用者要使用PDO来进行数据的传输,可以透过NMT模块控制协议传送模块控制信息,要求设备改变NMT状态为操作状态。

另外,通过PDO传送信息,PDO内的数据长度必须和其对应PDO映射参数内所记录的数据长度相吻合,当PDO消费者收到PDO信息时,会根据此PDO的COB-ID来查找相对应的RxPDO映射参数。若此PDO内的数据长度m大于其映像参数所记录的长度n,则PDO消费者只会取前n字节来使用,其余部分丢弃。若此PDO内的数据长度小于其映像参数所记录的长度,则PDO消费者将不会处理这个PDO,并且会发出一个错误码为8210h的EMCY(Emergency)信息给PDO生产者。

4.4 PDO通讯范例

4.4.1 读写设备IO

假设CANopen IO设备有16路DI,16路DO,节点ID为1。使用预设COB-ID,16个DI映射给第一组TxPDO,16个DO映射给第一组RxPDO。PDO传输类型预设是255,使其输出0x55AA。

步骤1:在使用PDO通讯之前,必须将设备NMT状态设定在操作状态。

11位 COB-ID =000 RTR=0 DLC=8 01 01 00 00 00 00 00 00

NMT主端 节点:1

步骤2:传送对象字典总第一组RxPDO给IO设备。

11位 COB-ID =201 RTR=0 DLC=8 AA 55 00 00 00 00 00 00

NMT从端

PDO生产者 PDO消费者

COB-ID:0x201

PDO-msg:AA 55 00 00 00 00 00 00

根据设备预设PDO映射,第一组RxPDO只有2字节数据,此处的数据长度DLC是8,设备在收到这个PDO之后会依据这个PDO映射参数处理前面2个字节,后面6个字节丢弃。第一个字节映射DO通道0~7,第二字节映射DO通道8~15。在IO设备上第一组RxPDO的预设是255,在收到此PDO之后会立即更新DO通道状态。

当DI变化时,对象字典内的数值就会发生变化。由于第一组TxPDO传输类型是255,当DI变化时,会传送第一组TxPDO给PDO消费者,假如DI状态改变为0xDDFF。

11位 COB-ID = 181 RTR=0 DLC=2 FF DD PDO消费者 COB-ID:0x181

PDO-msg:FF DD 00 00 00 00 00 00

数据长度设定为2,因此只有前面2个字节有效。

PDO生产者

模拟量输出AO与数字量输出DO类似,一个模拟量通道占用2个字节。例如,预设第二组RxPDO对应一个AO通道。AI数值变化并不会自动传送TxPDO给PDO消费者,使用者需要通过RTR远程传送请求,设备收到RTR信息以后会传送AI的TxPDO给使用者。

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4