本帖最后由 xiaoyuan_ly 于 2015-12-28 20:49 编辑
对于使用CAN总线来说,其实并不是难而是烦。而对象字典的使用,让这个“烦”能够不太烦了。
使用对象字典是为了能更好解决烦后,并且可以标准化,模块化的使用。当然,代价也是明显的。
CANOPEN也是如此,为什么呢? 先从宏观上来说,一个应用,需要数据结构和程序代码(即方法),
在CAN的网络中,对于非本地化的运行情况,这么一个应用的达成,需要将数据结构数据和程序代码数据传送到相应的网络节点后,然后该网络节点再执行达成目的。但显然,通讯的代价是相当大的,需要
传送数据结构数据和程序代码数据这两大块。
有了以上的说法,那么怎么办才好? 当然是按需传送了,只传送需要的数据结构数据和对应要的
程序代码即可,但显然对CAN总线区区只有1M带宽来说,还是不足已实现。接下来,再改改了,那就是
程序代码的本地化副本。网络节点都有对象字典上描述的程序代码副本,就相当于空间换时间的方式。
这样,就只需要传送数据结构数据即可,而相应的方法(程序代码)只需要给索引值即可。有了这样的
思路,还可以精简,就是不传送整个对象数据结构,而只传递需要的对象数据结构中的部分数据即可,
将要传递的这个对象数据结构也用索引值达到本地化的目的。就这样,数据结构也索引化了--也是空间
换时间的方式。
有了以上的说法,这样数据结构索引化,和程序代码(即方法)也索引化了。这样,只要在每个
节点上有一个全局的索引表格就可以知道这些索引值代表的含义是什么。而这个全局的索引表格,
就称为对象字典,一个大家共同依据的协议。
以上就是应用程序和对象字典之间的一些宏观说法。那么对象字典和CAN总线呢?
其实,对象字典上的对象数据结构,就是如何通讯的依据。于是就有了对象字典通讯的基础协议
和子协议的说法。但从本质上来说,都是为了达成程序运行所需要的数据结构中数据传送到运行端的目的。
以上就是CAN总线应用上的一些浅显理解,希望能抛砖引玉。
|