ican协议和canopen.docx
《ican协议和canopen.docx》由会员分享,可在线阅读,更多相关《ican协议和canopen.docx(8页珍藏版)》请在冰点文库上搜索。
ican协议和canopen
竭诚为您提供优质文档/双击可除
ican协议和canopen
篇一:
canopen协议讲解
根据ds301的内容进行介绍
1、can总线
can标准报文
2、canopen应用层协议
canopen协议不针对某种特别的应用对象,具有较高的配置灵活性,高数据传输能力,较低的实现复杂度。
同时,canopen完全基于can标准报文格式,而无需扩展报文的支持,最多支持127个节点,并且协议开源。
一个标准的canopen节点(下图),在数据链路层之上,添加了应用层。
该应用层一般由软件实现,和控制算法共同运行在实时处理单元内。
一个标准的canopen节点
canopen应用层协议细化了can总线协议中关于标识符的定义。
定义标准报文的11比特标识符中高4比特为功能码,后7比特为节点号,重命名为通讯对象标识符(cob-id)。
功能码将所有的报文分为7个优先级,按照优先级从高至低依次为:
网络命令报文(nmt)
同步报文(sync)
紧急报文(emeRgency)
时间戳(time)
过程数据对象(pdo)
服务数据对象(sdo)
节点状态报文(nmterrcontrol)
7位的节点号则表明canopen网络最多可支持127个节点共存(0号节点为主站)。
下表给出了各报文的cob-id范围。
nmt命令为最高优先级报文,由canopen主站发出,用以更改从节点的运行状态。
sync报文定期由canopen主站发出,所有的同步pdo根据sync报文发送。
emeRgency报文由出现紧急状态的从节点发出,任何具备紧急事件监控与处理能力的节点会接收并处理紧急报文。
time报文由canopen主站发出,用于同步所有从站的内部时钟。
pdo分为4对发送和接收pdo,每一个节点默认拥有4对发送pdo和接收pdo,用于过程数据的传递。
sdo分为发送sdo和接收sdo,用于读写对象字典。
mterrorcontrol报文由从节点发出,用以监测从节点的运行状态。
状态机
canopen的每一个节点都维护了一个状态机。
该状态机的状态决定了该节点当前支持的通讯方式以及节点行为。
初始化时,节点将自动设置自身参数和canopen对象字典,发出节点启动报文,并不接收任何网络报文。
初始化完成后,自动进入预运行状态。
在该状态,节点等待主站的网络命令,接收主站的配置请求,因此可以接收和发送除了pdo以外的所有报文。
运行状态为节点的正常工作状态,接收并发送所有通讯报文。
停止状态为一种临时状态,只能接收主站的网络命令,以恢复运行或者重新启动。
canopen节点状态转换图
canopen节点状态转换条件
3、devicemodel
communication提供通信对象和传输经过底层的数据的适当功能;
objectdictionary对此设备上的应用程序对象,通信对象和状态机的行为有影响的所有数据项的集合。
application由在处理环境方面的设备功能组成。
设备应用在数据条目中的完整描述在对象字典中叫设备子文件(deviceprofile)
4、od
每个节点维护一个对象字典(objectdictionary,od)。
该对象字典保存了节点信息、通讯参数和所有的过程数据,是canopen节点的核心数据结构。
上层应用程序也主要通过读写对象字典和canopen应用层进行交互。
canopen对象字典为两级数组结构,通过索引(16bits)和子索引(8bits)来编址。
设备子文件中最重要的就是对象字典的描述,对象字典在slave节点中一般是在设备初始化写好的不会修改,而在master节点中可以在运行过程中动态修改,不修改的od一般存在Rom中,而修改的存在Ram中。
篇二:
canopen协议
一、canopen总线结构
广播命令
二、通信类型
canopen有三种通信方式:
主/从通信方式
服务器/客户端通信方式
生产商/顾客通信方式
2.1主/从通信方式(nmt)
对某一特点功能而言,一个网络中只有一个主机,其他全为从机。
由主机发送请求信号,从机发送相应信号(如果需要)
主机发出命令,从机作出响应,但不回送数据
主机发出命令,从机作出响应,同时回送数据确认
2.2服务器/客户端通信方式(sdo)
这种关系指发生在一个服务器和一个客户端之间,客户端发送命令,服务器执行后,回答客户端
2.3生产商/顾客通信方式(sync、timestamp、emcy)
这种通信方式有push和pull两种模式,网络中在这一个生产厂,0或多个顾客。
2.3.1push模式
厂商发送命令,顾客执行,不需回送数据
2.3.2pull模式
厂商发送命令,顾客执行,回送证实数据
三pdo传送模式
pdo分为tpdo(发送pdo)与Rpdo(接收pdo)两种,pdo的传送模式有两种:
同步传送与异步传送。
同步传送又分为周期传送与非周期传送
3.1同步传送
由某一个同步应用在网路上周期性的发送同步对象,及发送sync帧,该同步应用可以是主机也可以是从机
pdo通信参数中的传输类型说明传送模式与触发方式,
tpdo:
传送类型同时说明其传送率,以基本传送周期的倍数表示。
传送类型为0时,表示当某事件发生后,收到一个同步对象帧(sync)时,立刻进行数据传输。
(非周期传送)
传送类型为1时,表示当每收到一次同步对象帧(sync)时,传送一次数据。
(周期传送)
传送类型为n时,表示当每收到n次同步对象帧(sync)时,传送一次数据。
(周期传送)
Rpdo:
接收是在收到sync信号后,运行接收,独立于传输参数定义的传送率。
传输类型252为非周期传输,在接收到同步对象后进行采样但不发送,在接收到请求该数据的远程帧后发送。
3.2异步传送
tpdo:
异步传送与sync无关,
传输类型253-255为异步传输,定义为此三种类型的tpdo在接收到远程帧或规定的事件发生后进行传输。
3.3触发模式:
触发方式有三种
3.3.1事件触发方式
对于周期性传送,接收到的sync报文达到设定数量,相当于出发事件,引起一次发送。
对于非周期性传送由设备子协议设定的事件触发发送
3.3.2定时器触发
当设定的时间达到后,触发一次发送
3.3.3远程帧触发
在收到其他设备发送的远程帧后,启动一次异步传送
3.4pdo协议
pdo的通信模式相当于厂商/顾客的通信模式,包含如下参数:
pdo数量:
1~512,
用户类型:
厂商/顾客
数据类型:
由pdo映射确定
禁止时间:
n*100ns
索引20h描述pdo的通信参数,索引21描述pdo的映射参数
3.4.1写pdo
使用厂商/顾客模式的push形式,厂商主动发送pdo
3.4.2读pdo
使用厂商/顾客模式的pull形式,某一顾客发送远程帧,传送发送pdo,这是可选模式,所有的pdo都可以接收,。
这种模式若pdo发送的数据量l大于pdo映射定义的数据量n,取前那个数据,若pdo发送的数据量l小于pdo映射定义的数据量n,若顾客支持emergency报文,发送emergency报文,错误代码为8210
四sdo传送模式
sdo以段的形式发送,首先发送的是初始化阶段的段,以加速传送方式传送,包含4个以内字节的数据,索引为22h的对象字典描述sdo通信参数。
相应的对象字典的条目通过下式计算:
ssdo(Rsdo)通信参数索引=1200h+ssdo_no-1
csdo(tsdo)通信参数索引=1280h+csdo_no-1
4.1sdo协议
sdo参数:
sdo数量:
1~128,
用户类型:
客户端/服务器
index和subindex的数据类型有多种形式:
structureunsigned(16),unsigned(8)index说明对象字典的条目,subindex说明条目中的具体内容
传送类型:
数据在4个字节以下:
加速传送
数据在4个字节以上:
分段传送或块传送
数据类型:
由index和subindex确定
禁止时间:
n*100ns
篇三:
canopen协议介绍
endat信号补充
晚安,20xx-欧迪的20xx纪念册canopen协议介绍(讲义)
20xx-10-1215:
58:
28|分类:
技术文档|举报|字号订阅
很长一段时间以来,很多人问我canopen总线优势到底在什么地方,我也大体的给了口头的讲述,但是比较笼统,没办法做到详细解释,加上纯技术的话语比较晦涩,遇上内行还能多聊几句,如果是刚接触的,那就是云里雾里了。
这次正好要进行公司业务员培训,要讲讲canopen,在整理过程中把我的讲义贴出来,希望能帮到大家,以下内容是我讲课的口述内容,比较白话,不能作为资料,大家见谅,鉴于我整理也比较辛苦,也算个小小的知识产权,所以ppt我就不贴出来了。
^-^
讲义内容:
通常canopen协议相关的一些资料相对来说比较晦涩,非专业人士看起来比较困难。
我尽量以浅显易懂的方式将canopen协议的框架和它在实际应用中存在的优缺点展示给大家。
我按照最先接触的内容由浅入深的讲解,直接讲canopen协议会有点跳跃
的感觉,所以,我以产品作为切入点,分析一下如何使用,在这个过程中,让大家理解什么是canopen协议。
首先,我们拿到一个产品,比方说是编码器,它的用途是作为位置传感器,那我们就需要将编码器送出的数据进行采集。
一般自然界中存在的信号有多种形式,大多以模拟量形式存在,类似于人感觉到温度的高低、水流的快慢、风力的大小等等。
但这是很模糊的概念,今天热了还是冷了,风大风小,没有比较是很难界定的,为了规范这些量,方便描述时的统一性,温度计量标准有华氏和摄氏、水流有每秒多少立方、风力有级数。
这些,就是数字量。
数字量在人与人之间传递时,可以通过嘴和耳,语言和听力,在设备之间如何来传递呢?
学过数电的人知道,灯泡有两种状态,亮和暗,在最基础的电路回路里,“通”和“断”是两个最基本的状态,我们可以把他理解为“1”和
“0”,这样,就有了表述的方法。
但是单独使用这两种状态是无法传递信息的,如何把编码器的数据传递出去,就需要使用到协议,下面我就讲讲协议。
我们知道,人与人交流需要用到语言,我们要表达出一个完整的意思就要使用一句话,一句话内会包含很多的字,每个字又由笔画构成。
这样,我们协议的基本框架就出来了,在整个canopen协议传递过程中,最大的单位称为“帧”,类似于一句话,“帧”由“字节”组成,就代表了字,每个“字节”由“位”组成,我们称为笔画。
那地球上还有英语、法语、德语、还有听不懂的鸟语呢!
那就是各个通讯协议,比如pro
fibus-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,我们在很多资料上会看到这样一张表
注意:
pdo/sdo发送/接收是由(slave)can节点方观察的
表一:
canopen主/从连接集对象
假设我们读取到一组编码器数据是这样的《0x1810x300x1F0x00
0x00》,我们应该如何理解呢?
首先,“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的报文形式很多样化,在不同的应用场合可以采取不同的方式,上面说的称为异步方式,异步方式也分两种,一种是上面的内部时钟触发,也就是按照固定时间间隔发送,另一种是事件触发,假设编码器发生转动,数据相应送出。
还有一种同步方式,我们也可以口述为踏拍方式,当主站要求报数是,所有从节点按照仲裁的优先顺序进行数据发送。
这三种报文方式分别在哪些场合适用呢?
我们以车辆来举例。
车辆开在路上,在整个车辆控制内,最重要的,具有高优先级的,应该是牵涉到安全的制动(刹车),安全气囊等等。
其次是转向、车灯。
再次是音响、影视系统(当然,我对车不是很熟悉,这是我的主观认识,作为一个例程)。
我们可以把小的节点号分配给制动系统,以保证数据能及时送达控制器,并采用定时报数,实时监测车辆制动系统的情况。
对于音箱什么的,我们可以采用事件触发方式,