CANopen个人之所见,所想

转自:http://www.gongkong.com/article/201412/55783.html

TonyZhou: 一直想写一篇关于CANopen的文章,鉴于个人知识能力没有动笔,今天做了一番思想斗争,斗胆发表一下自己对CANOPEN的肤浅认识。

计划从销售人员,技术人员角度都分析一下CANopen的优势,文章可能没有什么章法,只是想到哪里说哪里,欢迎拍砖。

背景:CANopen四问

1. CANopen的起源,CANopen从何而来?

德国Bosch公司于1983年研发CAN协议,用于汽车传动系统的网络通讯。之后称为国际标准ISO11898,目前CANopen由非营利组织CiA(CAN in Automaion)进行标准的起草及审核工作,基本的 CANopen 设备及通讯子协定定义在 CAN in Automation (CiA) draft standard 301. 中。针对个别设备的子协定以 CiA 301 为基础再进行扩充,如针对 I/O 模组的 CiA401 及针对运动控制的 CiA402。

2. CANopen硬件的优势?

CAN协议最大的突出特点是错误检测,限制和处理。当CAN设备检测到总线错误时,会拒绝之前接收到的位序列,然后发送“错误帧”,其完全由CAN芯片本身处理,不需要人为编程。

支持多主站,类似Profibus DP,总线上每个设备都是主站,也是从站,免除了人为仲裁的过程,方便用户开发。

报文短帧结构,CAN报文通常只有8个字节,数据帧非常短,在抗干扰能力上具有先天的优势。解释一下,为什末短帧结构抗干扰好?如果通讯报文长,发送一帧耗时也就长,加入遇到干扰,辛辛苦苦好不容发送了一条报文,结果因为干扰对方还没有收到,只能嚎啕大哭。

成本低廉,CAN外设基本在现在主流芯片上都可以找到,20几块钱的MCU都支持CAN外设,有的还支持两个CAN。这里有CiA的积极推广作用。

3. CANopen软件优势?

CANopen主要有CiA在推广,是非盈利组织,CANopen协议资料,网上一堆,任何人都可以下载到,我们常用的DS301(Draft Standand),DS402,CAN粉丝几乎人手一本,犹如葵花宝典,一定要珍藏一本。

CANopen协议开发,开源项目非常多,CanFestival就是其中一个,我做过移植,在步科MT4414TE-CAN触摸屏,用在8位单片机上,此源码有点耗费资源,网上有很多基于MCU的精简源码。

开发完整的CANopen协议栈,是很艰辛的工作,想要做好非常难。难点就在于你对CANopen协议的理解上,比如EMCY,复位节点,是否需要“NO Initialization”,heartbeat,Node guard是否需要?如何处理?这条不能算是其优点。

4. 为什么如此多公司在推广CANopen?

CANopen对于运动控制来说是一款优秀的通讯协议,采用了面向对象的一些设计思路,比如对象字典,过程数据对象(PDO),服务数据对象(SDO)等等。

CANopen在欧洲已成为最普通的协议,任何一家自动化公司都有CANopen的通讯接口,也成了低配。低配并不代表不好,只是说明其性价比更高。CANopen定义了完整的同步控制机制,使其成为主流的运动控制协议,除了在CAN总线上运行外,还被搬到了以太网上(CANopen over Ethernet),形成了著名的PowerLink,EtherCat工业以太网协议。

在这里多废话几句,所谓的运动控制总线标准,没有多大意义,因为运动控制技术都掌握在各个厂商手里,每一个稍微大一点的厂商,都有自己的专用运动控制协议,如三菱的SSCNET,安川的MECHATROLINK,倍福的CANOPEN以及EtherCat,施耐德的CANopen,西门子的SiMotion,贝加莱的PowerLink,博世力士乐的SERCOS。

由于CANopen(可以看DS402,伺服控制标准)在运动控制的优势,尤其是同步控制,不管几流的厂商,在运动控制系统中,多多少少都加入了自己的东西,导致运动控制系统通常是封闭的,很少走互联路线,事实上要做到互联也非常困难。

二三流厂家,开发自己的CANopen协议,根据自己的需求,将其移至到不同的物理层上去运行,形成自己的运动控制系统,其性能优劣就在于其对CANopen协议的理解程度了。

基础:CANopen世界里的九个晦涩概念

1. DCF

是CAN网络的配置(Config)的数据存档文件。其作用不大,在Codesys软件里就有此选项。

2. EDS

电子数据表格,是描述一台从站设备的属性,参数的文件,是对从站设备对象字典的描述。比如一台伺服驱动器,如果其内部参数(每个参数对应对象字典中的一个位置,由index,sub-index决定)没有更改,其对应的EDS文件就不会更改。多说一句,不是所有的主控制器都需要使用EDS,比如Beckhoff就不需要,他需要你对CANopen DS301,DS402足够熟悉,人工对齐配置;步科FD,JD伺服按照DS402标准制定EDS文件,用户可直接配置,降低开发周期。

3. 复位节点

当设备遇到异常(如从站断线后重连,使用M258测试步科FD伺服),主控会发送“复位节点”,步科的ED伺服复位节点,驱动器恢复出厂值,而且连CAN通讯参数也恢复成默认值。FD,JD伺服是除了CAN通讯参数外,其他配置参数恢复出厂值。

4. EMCY

紧急报文,从站如伺服,在断电后会发送一条紧急报文,告诉主控其状态,一般伺服断电后,其电容电量能保证其发送该条报文。

5. 心跳,节点保护

配置心跳参数,设置心跳周期,心跳消费时间,这个消费者时间实际上是作为一个超时参数。主站收到一个心跳后,开始计时,如果在超时时间内没有收到下一个心跳,则认为从站离线,并报告错误,按照用户配置的错误处理方法处理。

网络中的每个节点都可以配置心跳,主站可以监听从站,从站可以监听主站,从站还可以监听从站。这里有一个生产者、消费者的概念,总线上的设备定义自己是心跳的生产者,还是消费者。生产者产生心跳,消费者监听心跳,然后在捕捉到异常后?做出对应的处理。

个人认为心跳作用不大,假设某个设备断线,重连后复位节点,而此设备刚好是使用了原点功能的伺服呢?断电上电后,原点位置改变。所以在一些客户应用中,出现此情况,小伙子,你麻利的,赶快断电重启吧。

节点保护,其作用类似心跳,但可以读取从站设备的CANopen通讯状态(初始化,预操作,操作中,停止),属于DS301的范畴。

6. DS301和DS402的区别

DS301就是一个通讯协议栈,DS402是建立在DS301的上层协议,属于伺服类的控制协议,协议中规定好每个对象字典值得作用,比如0x6040,是控制字。DS402把一个伺服应该具有的功能都定义好了,开发厂家按照协议定义即可。

7. 对象字典

从软件的角度来说,对象字典本质就是一些数据结构的集合。可以这么理解,把对象字典看做是一本书,CANopen设备的行为准则是要参考这本书的,不管它做什么,只要它的行为要参考对象字典,就必须先查阅字典,再决定要不要做。比如它什么时候发送TPDO,这个行为是需要查询对象字典中对应于TPDO的传输类型以及Event timer。还有就是像PDO映射的原理,比如我要发送的数据,都是去查询这本书,看下它那里写的什么内容,然后我在把这部分内容以PDO的形式发送出去。

例如你的程序收到了一笔CAN报文,由于可以访问对象字典的对象是SDO,首先要判断它是SDO对象,那么你的程序就需要按照SDO中指定的索引和子索引去查找对象字典(一个排好序的数据结构集),找到相应的对象后按照SDO中的指令去操作这个对象,例如把一个值赋给字典中的变量。

8. SDO

这个很简单,就是类似串口的一发一回模式,主站发送请求帧,从站回复应答帧。

大家看几个例子就明白了。

To write the 1 byte data : 0xFD in the object dictionary of node 5, at index 0x1400, subindex 2, sends :

605 2F 00 14 02 FD 00 00 00

If success, the node 5 responds :

585 60 00 14 02 00 00 00 00

To write the 4 bytes data : 0x60120208 in the object dictionary of node 5, at index 0x1603, subindex 1, sends :

605 23 03 16 01 08 02 12 60

If success, the node 5 responds :

585 60 03 16 01 00 00 00 00

9. PDO

分为TX-PDO,RX-PDO。

上图,这就是PDO的配置过程,0x1402(接收PDO通讯参数),PDO使用的cob-id,传输类型,Inhibit time,EventTimer。

0x1602(映射对象),上例中映射为Controlword,Target position。

这里着重讲一下Transmission Type,上述是codesys中支持的集中方式:

acyclic sync(数值为0):同步PDO,同步方式由具体设备协议定义

Cyclic sync(数值为1-240):同步PDO,每个N个SYNC周期后,发送PDO

Sync rtr(数值253):同步PDO,收到远程帧请求后发送PDO

Async(数值253):异步PDO,收到远程帧后发送PDO

最后两个Async(254,255),都是设备厂家定义的,也是大家最常用的,当事件发生时发送。各个厂家在这里基本都是使用数据变化时发送方式,FD,JD伺服两种方法是一样的,都是数据变化发送。要注意设置“禁止时间”,降低CANOPEN通讯带宽。

具体案例

主控制器写target position,mode of operation给伺服,此PDO的cob-id为0x200 node id。传输方式为255或者254,禁止时间为100,也就是10ms。

先写到这里吧,看看反响再写下篇文章(想写写codesys与CANopen)。此文得到了步科孙志武的修正,沟通了心跳报文和节点复位,再次表示感谢。欢迎智友留言交流,拍砖狠砸!

时间: 2024-08-10 18:52:39

CANopen个人之所见,所想的相关文章

Qcon会议之所见所想

作为普通码农一枚,Qcon是俺参与过的最高级的技术大会了.大会共历时三天,因为俺第二天就得赶火车休个五一大长假,所以只参加了第一天4/25号的会议(其他俩天自然有其他同事会去观摩),不过第一天的会议有俺很喜欢的老池(@池建强)组织出品的专题,所以俺参加会议的目标这这么愉快的定下拉. 还是得先感谢给俺票票的经理@狸姑娘,也终于幸运见到了<MacTalk>作者本尊,让俺也当了一把小小的追星族哈.同时也厚着脸皮搭讪,与Mac君进行了正式友好.亲切的交流:) 五一休假后需要给组内同学分享一些在Qcon

不能忍受代码排版不整齐,并不是得了强迫症

把代码排列的整齐,并不是得了强迫症. 工作之前,我是一名文艺青年.所谓文艺青年就是,以一种独立的精神和态度去思考生活.因此常做些与别人不同的事情,写诗作文是大学生活的主要组成部分.那个时候爱好写作,常常提笔千言,抒发自己丰沛的情感.或空穴来风.或者含沙射影.或张冠李戴.总之将生活中自己的所见所想所感,全部凝结为文字.开始的时候,并不喜欢用电脑打字.都是手写,要用中性笔仔仔细细的写在草稿纸上,然后等闲暇的时候再录入电脑上. 工作之后,第一份工作做的是设计.写作对我来说,顶多算是不入流的水平.也许凭

硬件信息

CPU 1.物理CPU个数 x 核数 = 逻辑CPU的个数.如果CPU支持超线程技术,这不相等. 2.配置服务器应用时,以逻辑CPU个数为准. 3.一个CPU有多个Core核心,一个核心有2个逻辑处理器(图1) 3.具有相同core id 的CPU是同一个core的超线程.一般一个核心core超线程为2个逻辑处理器. 4.具有相同physical id 的CPU是同一个CPU封装的线程或核心. 请保留此份的欢迎稿兼使用说明,如需撰写新稿件,点击顶部工具栏右侧的  新文稿 或者使用快捷键 Ctrl

很好用的在线markdown编辑器

# 欢迎使用 Cmd Markdown 编辑阅读器 基本符号 *,-,+ 3个符号效果都一样,这3个符号被称为 Markdown符号 空白行表示另起一个段落 `是表示inline代码,tab是用来标记 代码段,分别对应html的code,pre标签 换行 单一段落( <p>) 用一个空白行 连续两个空格 会变成一个 <br> 连续3个符号,然后是空行,表示 hr横线 标题 生成h1--h6,在文字前面加上 1--6个# 来实现 文字加粗是通过 文字左右各两个符号 引用 在第一行加上

敏捷脑图用例实践之路

原文在infoq已经发布,可以直接阅读:http://www.infoq.com/cn/articles/road-of-agile-mind-map-practice/ 传统的黑盒测试用例比较繁杂,在实施敏捷的项目中会显得水土不服,让测试人员过度关注用例步骤的编写.修改,甚至同一条用例经过多人执行得到相同结果,让人想到一个呼之欲出的广告词:一次编写,多人运行相同结果,没有思考的过程.在经历过这些痛楚之后,对用例进行改革,以便快速响应开发的交付节奏,同时形成用例评审规范,让开发.测试知己知彼,也

作业部落 Cmd Markdown 编辑阅读器

Cmd Markdown 编辑阅读器 Cmd Markdown 编辑阅读器 WindowsMacLinux 全平台客户端 什么是 Markdown 书写一个质能守恒公式1 高亮一段代码2 高效绘制 流程图 高效绘制 序列图 绘制表格 更详细语法说明 什么是 Cmd Markdown 实时同步预览 编辑工具栏 编辑模式 实时的云端文稿 离线模式 管理工具栏 阅读工具栏 阅读模式 标签分类和搜索 文稿发布和分享 我们理解您需要更便捷更高效的工具记录思想,整理笔记.知识,并将其中承载的价值传播给他人,

Linux内存模型

了解linux的内存模型,或许不能让你大幅度提高编程能力,但是作为一个基本知识点应该熟悉.坐火车外出旅行时,即时你对沿途的地方一无所知,仍然可以到达目标地.但是你对整个路途都很比较清楚的话,每到一个站都知道自己在哪里,知道当地的风土人情,对比一下所见所想,旅程可能更有趣一些. 类似的,了解linux的内存模型,你知道每块内存,每个变量,在系统中处于什么样的位置.这同样会让你心情愉快,知道这些,有时还会让你的生活轻更松些.看看变量的地址,你可以大致断定这是否是一个有效的地址.一个变量被破坏了,你可

测试markdown 博客功能

欢迎使用 Cmd - 在线 Markdown 编辑阅读器 我们理解您需要更便捷更高效的工具记录思想,整理笔记.知识,并将其中承载的价值传播给他人,Cmd Markdown 是我们给出的答案 -- 我们为记录思想和分享知识提供更专业的工具. 您可以使用 Cmd Markdown: 整理知识,学习笔记 发布日记,杂文,所见所想 撰写发布技术文稿(代码支持) 撰写发布学术论文(LaTeX 公式支持) 这是一份 Cmd Markdown 的欢迎稿兼使用说明,请保留,如需撰写 新稿件,点击顶部工具栏右侧的

设计灵感

来源:uimaker.com   作者:小久天 灵感,有时很像爱情一样.你以为你等着,幸福美满的爱情就会降临在自己身上……而事实是:你越等,就要等的越久,越久你就越等不到. <ignore_js_op> 开始之前先说个经常出现的场景. 当你无意间看到某个牛逼作品,在佩服和羡慕的同时,恐怕最想问的问题就是: “我靠( ‵o′)凸,这位大神好NB,他是怎么获得灵感的啊?” “这个设计你是怎么想到的?” “你都看了哪些收到启发?”这类问题吧. 但,其实我想说的是,这种问题本身就存在一种认知上的误区.