您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > CANopen协议介绍(讲义)
CANopen协议介绍(讲义)2010-10-1215:58:28|分类:技术文档|标签:|举报|字号大中小订阅很长一段时间以来,很多人问我CANopen总线优势到底在什么地方,我也大体的给了口头的讲述,但是比较笼统,没办法做到详细解释,加上纯技术的话语比较晦涩,遇上内行还能多聊几句,如果是刚接触的,那就是云里雾里了。这次正好要进行公司业务员培训,要讲讲CANopen,在整理过程中把我的讲义贴出来,希望能帮到大家,以下内容是我讲课的口述内容,比较白话,不能作为资料,大家见谅,鉴于我整理也比较辛苦,也算个小小的知识产权,所以PPT我就不贴出来了。^-^讲义内容:通常CANopen协议相关的一些资料相对来说比较晦涩,非专业人士看起来比较困难。我尽量以浅显易懂的方式将CANopen协议的框架和它在实际应用中存在的优缺点展示给大家。我按照最先接触的内容由浅入深的讲解,直接讲CANopen协议会有点跳跃的感觉,所以,我以产品作为切入点,分析一下如何使用,在这个过程中,让大家理解什么是CANopen协议。首先,我们拿到一个产品,比方说是编码器,它的用途是作为位置传感器,那我们就需要将编码器送出的数据进行采集。一般自然界中存在的信号有多种形式,大多以模拟量形式存在,类似于人感觉到温度的高低、水流的快慢、风力的大小等等。但这是很模糊的概念,今天热了还是冷了,风大风小,没有比较是很难界定的,为了规范这些量,方便描述时的统一性,温度计量标准有华氏和摄氏、水流有每秒多少立方、风力有级数。这些,就是数字量。数字量在人与人之间传递时,可以通过嘴和耳,语言和听力,在设备之间如何来传递呢?学过数电的人知道,灯泡有两种状态,亮和暗,在最基础的电路回路里,“通”和“断”是两个最基本的状态,我们可以把他理解为“1”和“0”,这样,就有了表述的方法。但是单独使用这两种状态是无法传递信息的,如何把编码器的数据传递出去,就需要使用到协议,下面我就讲讲协议。我们知道,人与人交流需要用到语言,我们要表达出一个完整的意思就要使用一句话,一句话内会包含很多的字,每个字又由笔画构成。这样,我们协议的基本框架就出来了,在整个CANopen协议传递过程中,最大的单位称为“帧”,类似于一句话,“帧”由“字节”组成,就代表了字,每个“字节”由“位”组成,我们称为笔画。那地球上还有英语、法语、德语、还有听不懂的鸟语呢!那就是各个通讯协议,比如Profibus-DP、DeviceNet、CC-Link、Hart、Modbus等。让DP和CANopen通讯,那就是相当于一个讲德语的与讲中文的对话,鸡同鸭讲,能沟通吗?需要翻译,对吧。回过头来我们讲讲CANopen的帧格式,CANopen一帧数据由一个COB-ID(报文头)和最大8字节数据组成,其中COB-ID可以是11位(CAN2.0),也可以是29位(CAN2.0B),当然,CAN2.0B需要向下兼容11位CAN报文。对于每字节数据由哪些位组成,这里就不再赘述,因为这部分内容不在OSI模型的第七层应用层内描述,开发人员也不必过多考虑这块内容。由于CANopen协议内对COB-ID的各个地址段报文有详细规范,这里就花点时间讲一下,当然也没时间全部讨论,只选一些重要内容来说。以前我们培训一直在说CANopen协议好,速度快,广播报文,这些关键字听的多了,但是大家可能不是很理解这些内容。现在就来解释一下。在编码器应用中,CAN报文我们常用的有SDO(ServiceDataObject服务数据对象)和PDO(ProcessDataObject过程数据对象),从字面描述意义看,通常数据的发送读取是采用PDO来实现的,CAN参数的修改是通过SDO来实现的(当然这不是绝对的,具体的如果有兴趣可以会后询问)。先来说说PDO,我们在很多资料上会看到这样一张表对象COB-ID通讯参数在OD中的索引紧急081H-0FFH1024H,1015HPDO1(发送)181H-1FFH1800HPDO1(接收)201H-27FH1400HPDO2(发送)281H-2FFH1801HPDO2(接收)301H-37FH1401HPDO3(发送)381H-3FFH1802HPDO3(接收)401H-47FH1402HPDO4(发送)481H-4FFH1803HPDO4(接收)501H-57FH1403HSDO(发送/服务器)581H-5FFH1200HSDO(接收/客户)601H-67FH1200HNMTErrorControl701H-77FH1016H-1017H注意:PDO/SDO发送/接收是由(slave)CAN节点方观察的表一:CANopen主/从连接集对象假设我们读取到一组编码器数据是这样的《0x1810x300x1F0x000x00》,我们应该如何理解呢?首先,“0x”只是一个符号,它代表了紧跟着的数据是十六进制的(等同于在数据后面直接标“H”,上述表达式也可以表述为《181H30H1FH00H00H》),“181”我们查看上表后发现,它包含在PDO1(发送)里面,它代表了是由编码器发出的过程数据对象,表上显示是“181H~1FFH”,这是因为COB-ID包含了节点号信息,地址1对应着181H,地址2对应了182H,以此类推,最大127个节点。“0x300x1F0x000x00”就代表了数据内容,在CAN协议内,帧数据是低位在前,高位在后的。所以上述数据直接读取后得出编码器送出1F30H,这就代表了编码器的当前位置值。那在总线上面,多个节点同时发送数据不会产生冲突么?以前我们说过,CAN协议具有仲裁,这里简单介绍一下仲裁是如何实现的。上面说了,COB-ID包含了节点号信息,也就是说,只要总线上的设备节点号不同,所送出的广播报文的COB-ID肯定是不同的,如果一个是182H,一个是183H,仲裁时怎么做?本文最开始的时候介绍了每个字由笔画组成,现在就要用到位(bit)的概念了,182H换算成二进制是000110000010(B),“B”代表了二进制,183H换算成二进制是000110000011(B),关于显性位、隐形位这里不再赘述,这个有兴趣可以找我要资料看,这里我就简单描述为“0”比“1”的优先级高,可以理解为拖后腿,“0”为低电平,“1”为高电平,在线上低电平会把高电平拉低,一旦183H发现数据传输过程中与自身数据不符合,就终止上传,保证了182H的数据先上总线。我们在实践中会发现,编码器的数据在不断的更新输出,那输出周期如何定义呢?这个我们就来讨论一下引申的PDO传送方式。我们以前在培训时一直介绍CANopen协议与DP协议相比的好处在于DP是轮询的,问答方式浪费了大量的时间,而CAN协议是广播的,可以将1MHz的速率发挥至极致。这种说法形象,一般可以解释给初步接触CANopen的人听。其实CANopen的报文形式很多样化,在不同的应用场合可以采取不同的方式,上面说的称为异步方式,异步方式也分两种,一种是上面的内部时钟触发,也就是按照固定时间间隔发送,另一种是事件触发,假设编码器发生转动,数据相应送出。还有一种同步方式,我们也可以口述为踏拍方式,当主站要求报数是,所有从节点按照仲裁的优先顺序进行数据发送。这三种报文方式分别在哪些场合适用呢?我们以车辆来举例。车辆开在路上,在整个车辆控制内,最重要的,具有高优先级的,应该是牵涉到安全的制动(刹车),安全气囊等等。其次是转向、车灯。再次是音响、影视系统(当然,我对车不是很熟悉,这是我的主观认识,作为一个例程)。我们可以把小的节点号分配给制动系统,以保证数据能及时送达控制器,并采用定时报数,实时监测车辆制动系统的情况。对于音箱什么的,我们可以采用事件触发方式,在有输入控制时(比方说打开收音机)进行响应。同步数据一般用在实时数据监测方面,比方是在同一时间点查阅角度、位置、重量、压力、流量等等信息,保证所监测的各个数据在很小的时间变化范围内。当然CANopen不可能摒弃问答方式的数据采集,这可以通过SDO访问OD来实现。讲到SDO——服务数据对象,我们可以这么理解,PDO报文在发送出去后不需要反馈信号,总线上能消化这个数据的都可以消化,所以白话叫广播报文。而SDO报文是需要响应的,每一帧SDO发出后需要等待反馈。那这会不会引起无反馈时总线死机呢?不会,CAN数据链路内规定了超时,在一定时间内得不到回答,总线将进行后面的作业,多次询问无果,总线会对错误节点进行屏蔽处理。SDO的帧格式和PDO的帧格式是一致的,但对有些字节的定义不同,下面就简单介绍一些编码器修改参数时用到的帧格式。SDO中实现了5个请求/应答协议,这里我只讲讲启动域下载与上传,其他的有兴趣可以问我要资料看。COB-ID命令字对象字典OD子索引数据主从连接集1byte2bytes1byte4bytes我来解释一下上表,COB-ID引用第一张表的SDO地址段。假设主站需要读取1号编码器对象字典(OD)6200H内的参数,我们应该如何做呢?我们需要发送0x6010x400x000x620x000x000x000x000x00我们得到编码器的反馈数据是0x5810x4B0x000x620x000x0A0x000x000x00上述命令的解释是,控制器通过SDO指令读取1号编码器OD为6200H的编码器发送数据周期的参数,得到编码器的回答是每隔10ms发送一次。40H和4BH是启动域上传的命令字。如果需要将6200H的参数修改为20ms一次数据,我们应该怎么做?发送:0x6010x220x000x620x000x140x000x000x00反馈:0x5810x600x000x620x000x000x000x000x00未完待续。。。作为十大总线来说,CANOpen的开放性等等就不赘述了。该协议最早在汽车总线中得到了大量的推广。目前很多厂家都支持CANOpen总线。比如施耐德、菲尼克斯等。尤其是施耐德,目前在所有的传动产品、中高端的PLC上都支持CANOpen总线。可能是由于所有产品在总线支持上不然Rockwell和西门子的缘故吧。目前CANOpen在连接现场从站设备时,很多厂家的PLC已经可以像step7软件组态profibusDP从站设备一样,只需导入eds文件后,在软件中直接选择或拖拉即可。相关参数的地址定义等等都自动完成。相对来说比较简单。当然如果软件即便不支持上述方式,有个公司专门开发了一个sycon的软件,利用sycon软件也可以直接定义CANOpen从站设备。相对来说也比较简单。只不过需要做sycon到PLC软件的地址的映射的操作。CANOpen总线与ProfibusDP总线相比:1.CANOpen的通讯速率较低,最高1Mbps。而ProfibusDP最高支持12Mbps;2.两种总线随着距离的增加都会衰减,但是CANOpen衰减的更快一些;3.理论上CANOpen支持127个子站(当然和CANOpen主站设备有关,在实际PLC产品中一般最大只能支持64,有的只能支持32或16个),而ProfibusDP在子站支持能力上较强;4.CANOPen的中继器支持树形结构连接,这一点与Profibus的总线型连接方式有区别;5.从组态来说,集成CANOpen总线的设备组态方式与ProfibusDP的组态方式类似。只需导入eds文件即可;6.抗干扰能力经过我使用了,感觉和ProfibusDP差不多。当然CANOpen电缆有4种,DP应该分普通和复杂环境两种。从电缆来说,CANOpen电缆的适用性更强一些。以上内容,只是一己之见,不含任何广告内容,也请各位批评指正于CANopen协议的分布式控制系统设计孙树文杨建武(北京工业大学机械工程与应用电子学院,北京100022)摘要:针对印刷机外围设备多分散、数据传输信息量大、实时性和可靠性要求高等问题,设计了一种基于CAN现场总线的分布式控制系统。监控主机运行软PLC程序,通过PC-CAN卡与现场I/O从站进行通信,形成分布式网络,简化了系统结构,提高了可靠性。本文介绍了分布式监控系统的整体结构、工作原理及
本文标题:CANopen协议介绍(讲义)
链接地址:https://www.777doc.com/doc-2905095 .html