【CANopen】PDO进程数据对象

查找资料时,发现一个很好的博客,博主剖析的通俗易懂
 

PDO介绍:

英文名:Process Data Object ,过程数据对象。用来传输设备的实时数据。PDO消息的内容是预定义的,或者在网络启动时配置的。采用生产者/消费者模式进行通信,无确认模式的广播(不去确认消费者是否收到,生产者只负责再总线上广播生产出来的数据)。PDO消息的发送有几种触发方式,可以根据使用情况灵活选择。其实,这几种触发方式具有普适性,也可以利用到DIY的通信机制里面去。

PDO的的触发方式:

  • 事件触发:
当数据变化时,立刻发送出去,不需要等待主机轮训才发送,所以实时性好,而且避免重复数据占用大量总线占用资源,就像数据压缩了一样。事件驱动类型的RPDO可立即处理收到的数据。
  • 远程请求或轮询:
此方式就像485通信一样,主控主动远程请求或者轮询,子设备才发送PDO。因为市面上有一些不支持远程帧的CAN控制器,不建议使用。
  • 同步传输:
CAN总线上有一个设备作为SYNC信号的生产者,其他设备作为消费者。生产者和消费者都又SYNC计数功能,消费者计数到一定时(1~240),自动发送PDO。
  • if(同步传输&&事件触发):
顾名思义,不仅满足定时还满足事件触发,才发送PDO。
 

图1-PDO传输类型与传输方式(from周立功《CANopen协议介绍》)

 Tips:
  • 禁止时间:定义发送具有相同CAN标识符的两个PDO之间至少要间隔的时间。图1中,Event(数据变化等)一直发生时,PDO数据会一直发送,如果此值的优先级比较高,就会在总线仲裁后胜出,一直堵塞通信,所以,需要添加一个禁止时间,两个PDO发送的间隔,避免这种情况发送。
  • 事件计时器:在没有Event(数据变化等)发生时,PDO会不发送,为了让它能够发送。在第一次Event发送后,会计数,如果在计时器溢出之前,来了一个Event,此计数复位,如果一直没有Event,溢出后,也会发送PDO.

综上:这两个小东西,保证了在事件驱动发送PDO的方式下,避免出现连续发送和不发送的两种极端情况。

posted @ 2016-12-25 17:00  Isha  阅读(4310)  评论(0编辑  收藏  举报