疯子8972 发表于 2007-12-24 09:30

CANOPEN专用贴

先说说情况吧:<br />&nbsp;&nbsp;&nbsp;&nbsp;本人今年7月毕业,在一个小公司做技术.我们公司做的是工程机械上用的电子设备.我们的产品功能上主要是模仿国外同类的产品,因为德国在这个方面比较强,所以也是重点攻击的对象了,呵呵.<br />&nbsp;&nbsp;&nbsp;&nbsp;这次我们有了一个新的开发目标,做一种以CANOPEN为通讯方式的外设,和德国的控制器能连接.<br />&nbsp;&nbsp;&nbsp;&nbsp;现在德国在工程机械上使用的电器解决方案主要是使用通用型控制器,就是类似PLC的东东,他们把这个控制器卖给中国人,中国人自己编程,然后安装到工程机械上去.因为老毛子的CANOPEN推广的好,所有牌子的控制器都是可以以CANOPEN方式通讯的,并且使用方便(相对来说),但是我们国家CANOPEN推广得差,基本没有外设能和他们的东西连接,只能全套买外国的东西.<br />&nbsp;&nbsp;&nbsp;&nbsp;周立功公司在CANOPEN的推广上也是花了力气的,但是发现在中国市场不好推,也放弃了.但是不好推并不真是说明前景不好.<br />&nbsp;&nbsp;&nbsp;&nbsp;我希望我们&quot;民间&quot;的力量能完善这个技术在中国的应用.<br />&nbsp;&nbsp;&nbsp;&nbsp;我知道我这个想法可能比较可笑,因为自己水平实在有限,但是既然没有人做,有我这么个不自量力的人先带头****歪歪也好,呵呵.<br />&nbsp;&nbsp;&nbsp;&nbsp;希望这个帖子能逐步增加大家学习讨论CANOPEN的热情,能有一天,在出版的书上,能有一些CANOPEN的例程,而不是象现在,就总在低的层次徘徊.(PS一句:太多现场总线,CAN总线的垃圾书了)<br />&nbsp;&nbsp;&nbsp;&nbsp;市场是越做越大的,牛人也不要怕别人抢饭碗,分享点经验,多带带小弟,等市场做大了,大家的视野就一起变更大了.<br />&nbsp;&nbsp;&nbsp;&nbsp;谢谢ZLG在CANOPEN初期推广所做的努力,我相信,我们能继续做下去的.^-^<br /><br />

疯子8972 发表于 2007-12-24 09:55

CANOPEN的基础

CANOPEN是对CAL协议的具体化,所以要了解CANOPEN,先要了解CAL.<br />CAL主要提供了4个功能,这4个功能分别用4种object实现<br />1,CMS.是一种基于变量,事件,域类型的变量,大体我理解,变量就是用来传送各种数据的,事件是表征网络上一些状态的变化,比如需要同步而发送的信息,域就是大块的数据.<br />2,NMT.一种网络管理的object,比如用来启动关闭节点,侦测节点是不是实效,这个功能需要主从方式实现.<br />3,DBT,用来动态分配CAN-ID的服务,是主从方式实现的,在CANOPEN网络中,各种object的ID已经是分清楚的,在一般应用中,谁会去动态分配ID?<br />4,LMT,LMT主节点可以修改LMT从节点的某些参数,比如定时位和波特率.哈哈,怪了,波特率也用通讯的方式设置?波特率如果不一样就不能通讯,不能通讯怎么收到这个波特率设置?先有**还是先有蛋?-_-!!!

疯子8972 发表于 2007-12-24 10:13

对象字典

对象字典是CANOPEN的精髓.<br />&nbsp;&nbsp;&nbsp;&nbsp;说起来很简单,CANOPEN是一个通用的协议,就好象中国人交流都用汉字一样.比如一个外国人(不管哪个国家的人)要看中文书,他就要有一本字典.每看到一个字就去查下字典,知道了字的意思,CANOPEN也是这样,为了通用,有一个基本通用的字典,各个设备在通讯过程中,收到各种object,然后查阅object字典,知道具体的意思.当然,字典也可大可小,可以是辞海,也可以是小新华字典,只要大字典小字典中的内容不冲突就可以了^-^所以说CANOPEN协议可大可小,估计我们在初级阶段,用能满足最基本需要的字典就可以了.<br />&nbsp;&nbsp;&nbsp;&nbsp;查中文字典,用的是拼音法,或者是偏旁笔画,这个就是搜索的依据,在CANOPEN中,各个object是用索引的方式在字典中找到自己对应的意思,索引下有子索引,具体说明object的意思.各个object的索引号是固定的,这个要是变了就没有办法查字典了,呵呵^-^

疯子8972 发表于 2007-12-24 13:56

字典的结构

对象字典的结构非常简单<br />索引&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;意义<br />0000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;无意义<br />0001-009F&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;对数据类型的定义,基本没有用处<br />00A0-0FFF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;保留<br /><br />/**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以下为重点&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**/<br />1000-1FFF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通讯子协议区域,在此可以查到设备类型,错误寄存器等<br />2000-5FFF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;制造商特定子协议区<br />6000-9FFF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;标准设备子协议区,比如通用输入输出类设备<br />A000-FFFF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;保留

疯子8972 发表于 2007-12-24 15:09

CANOPEN中规定的通讯对象

CANOPEN中规定了4中通讯对象<br />&nbsp;&nbsp;&nbsp;&nbsp;1:管理报文,包含了CAL协议中LMT,NMT和DBT部分的功能,我理解应该是CANOPEN网络的初始化,节点状态变化,保护节点,心跳是管理报文中比较常用的.估计其他的不支持也不要紧.<br />&nbsp;&nbsp;&nbsp;&nbsp;2:服务数据对象(SDO),传输服务型的数据,通过这个客户可以访问服务器的对象字典.这里的通讯协议比较多.这种对象优先级低,传输不同步(没有严格时间上的规定)<br />&nbsp;&nbsp;&nbsp;&nbsp;3:过程数据对象(PDO),用来传输过程数据,这个东东最好理解了,就是我们平时用来不停传输温度,压力等等数据的报文对象.<br />&nbsp;&nbsp;&nbsp;&nbsp;4:预定义报文和特殊功能对象.<br />&nbsp;&nbsp;&nbsp;&nbsp;一个CANOPEN设备必须支持一定数量的管理报文,需要至少一个SDO,每个生产和消费过程数据的至少需要一个PDO,其他的可选.

疯子8972 发表于 2007-12-25 10:59

通讯对象的ID分配

上面讲的通讯对象在CAN网络中怎么分别呢?<br />用协议中预定义的ID分配就可以了.<br />拿CAN总线11位ID举例.前4位称作功能码,后7位称作Node-ID,功能码就可以区分通讯对象的类型了.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;功能码(b)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Node-ID(d)<br />/**广播对象**/<br />NMT&nbsp;Module&nbsp;Control&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br />SYNC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0001&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br />TIME&nbsp;SSTAMP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0010&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br />/**对等对象**/<br />紧急&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0001&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1-127<br />t-PDO1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0011&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1-127<br />r-PDO1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1-127<br />t-PDO2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0101&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1-127<br />r-PDO2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0110&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1-127<br />t-PDO3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1-127<br />r-PDO3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1-127<br />t-PDO4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1001&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1-127<br />r-PDO4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1010&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1-127<br />SDO服务器&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1011&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1-127<br />SDO客户&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1-127<br />NMT&nbsp;Error&nbsp;Control&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1110&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1-127<br />NMT错误控制包括节点保护,心跳报文,和boot-up协议

疯子8972 发表于 2007-12-27 15:02

CANopen标识符分配

CANopen中支持3种ID的分配方法:<br />1,预定义,比如我们熟悉的拨码盘.<br />2,上电后修改PDO的ID(在预操作状态),使用预先定义的SDO修改节点的对象字典相关项目.<br />3,使用CAL&nbsp;DBT服务.<br />这三种方法,估计也就第一第二种用得多一点,呵呵,在不大的应用中,第一种应该最常用.

疯子8972 发表于 2007-12-27 16:26

CANopen boot-up过程

&nbsp;&nbsp;&nbsp;&nbsp;任何CANopen设备必须支持最小化的boot-up过程,呵呵这个都不支持就不叫CANopen设备了:)<br />&nbsp;&nbsp;&nbsp;&nbsp;上电后,设备进入initialising状态,这个时候,设备可以发送Boot-up报文,告诉主节点自己已经上电了,发送完成后从设备就进入了Pre-Operational状态,等待主节点对其进行沟通,并且改变它的状态.<br />&nbsp;&nbsp;&nbsp;&nbsp;如果主节点把从节点配置成了Operational,说明初始化过程已经结束,可以进行工作了.<br />&nbsp;&nbsp;&nbsp;&nbsp;这部分的协议应该很容易实现,就是对关键报文的判断,使设备本身的状态发生变化.

疯子8972 发表于 2007-12-29 14:35

我觉得好冷

CANopen果然没有人关心......

云龙湖 发表于 2008-1-18 19:06

我和你做一样东西,真巧啊

怎么联系啊,我也做和你一样的东西。我们用的是INTERCONTROL的东西

haibianfeng 发表于 2010-6-29 10:15

9# 疯子8972


楼主现在还做么 小弟最近也在做 云里雾里的 希望指教

brightjob 发表于 2010-7-29 09:52

楼主继续啊

想实习去 发表于 2010-9-2 18:35

1# 疯子8972 我和你的情况太一样了,现在我是在做一个模拟断路器的东西,多个子站和一个主站通信,如果光把ID预先固定好也倒好弄,但是领导不希望做成那样,希望能通过主站给子站分配ID,而且是CAN网中,不是仅仅有一种类型的处理器,我一直在找主站主动给子站分配ID的方法,找来找去,才发现CANOPEN协议,但是看不太懂,现在写程序就更别提了,在下今年7月毕业,小公司也是,直接塞给我一个项目,自己做吧,工期那个紧啊我的QQ308739799    加我啊

想实习去 发表于 2010-9-2 18:35

12# haibianfeng 可以一起讨论啊,我的QQ308739799    加我啊

想实习去 发表于 2010-9-2 18:37

7# 疯子8972     第二种是不是就属于主站给从站主动分配ID,也就是说,从站刚刚上电的时候,自己本身是没有ID的

liulingo 发表于 2010-11-19 16:49

技术不是靠热情去 推广的,有钱赚,跑的比兔子还快,LZ。

wenming 发表于 2010-11-20 13:58

什么工程机械,是不是赫四满的?

jkfdashjfh 发表于 2012-11-30 16:28

感觉很有用 顶下!

疯子8972 发表于 2013-1-2 01:38

一晃五年过去了。。。。
晚上翻看到自己的这篇帖子,还真有时间倒流的感觉啊:)
对于CANopen,我们已经有比较成熟的可编程模块
而且我们还成为盈德康(InterControl)的战略合作伙伴
大家有问题可以讨论啊:)

captzs 发表于 2013-1-3 09:23

重提5年前话题,想挑起对CAN总线的讨论热情,我看难。
对科学技术十分严谨的德国人弄出CAN总线,制定了许多条条框框,到门口一看就晕,不想入门,更何况门槛又高,有一定功底才进得去。多数非进不可的人钻进去是逼不得已。
你自称疯子,当疯到想撇开CAN总线,另搞一个系统时,请给我信。地址在我发的帖里(有的在模拟技术),顺便看看我的思路,有共同兴趣是进一步交流的基础。
页: [1] 2
查看完整版本: CANOPEN专用贴