打印
[CAN-bus/DeviceNet]

最近开始看CANopen的资料

[复制链接]
16018|30
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
John_light|  楼主 | 2008-1-26 16:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
JOHN_light| | 2008-1-27 22:21 | 只看该作者

鸟语把我整得够呛

“profile”是什么东西?

A very important concept when discussing CANopen is the concept of a profile. In network protocol terminology. a profile is a protocol specification that is based on other existing protocol specifications. Usually, a profile defines a subset of the services provided by the existing protocols that can be used for communication, and restricts the
way in which these services can be applied.

在论述CANopen时,一个很重要的概念就是profile的概念。在网络协议术语中,profile是基于其它现有协议规范的协议规范。通常,profile定义了能够用于通迅的现存协议所提供服务的子集,并限定了应用这些服务的方法。

Device Profile / Communication Profile,我晕

使用特权

评论回复
板凳
alice84| | 2008-1-27 22:23 | 只看该作者

a profile is a protocol

使用特权

评论回复
地板
alice84| | 2008-1-27 22:28 | 只看该作者

设备协议/通信协议

设备协议估计是和设备通信时发送给和设备返回的值之类的协议
通信协议好想有很多种,如TCP/IP协议

使用特权

评论回复
5
john_light| | 2008-1-28 16:38 | 只看该作者

爱丽斯有心了

周立功公司在相关的文档翻译中好象把这个profile翻译为“子协议”。

使用特权

评论回复
6
alice84| | 2008-1-28 16:43 | 只看该作者

子协议???/

a profile defines a subset of the services provided by the existing protocols that can be used for communication

使用特权

评论回复
7
john_light| | 2008-1-29 10:01 | 只看该作者

随看随记

CANopen profile族指定了CANopen的通迅机制和设备功能。profile族由CiA(CAN in Automation)维护。

CANopen规范涵盖了应用层和通迅profile(CiA DS-301)、
针对可编程设备的框架[framework](CiA DSP-302)、
推荐使用的电缆与连接器接法(CiA DRP-303-1)
和SI单位还有前缀表示法[prefix representations](CiA DRP-303-2)。
CANopen由许多的标准设备profiles、接口profiles还有应用profiles(CiA DS-4XX)补充。



CANopen参考模型

标准的设备profile、接口profile和应用profiles描述了设备、接口和应用的默认行为和可以选择实现的功能。

CANopen协议层交互

协议层交互描述了不同层的通迅。设备在CANopen应用层上交换信息和应用对象。所有这些对象都通过一个16位的索引和一个8位的子索引来访问。

这些通迅对象[communication object](COB)都用预定义或已配置的标识符映射到一个或多个CAN帧中。CAN物理层指定了包括位速率的位电平。

使用特权

评论回复
8
john_light| | 2008-1-29 11:29 | 只看该作者

位定时

位定时规范

在1 Mbit/s的位速率下,每一位由多于8份的时间量组成;在800 kbit/s时,多于10份时间量;从500 kbit/s到10 kbit/s,多于16份时间量。
CANopen只使用单次采样方式。


每个CANopen模块都必须支持以上列出的指定位速率中的一种。
整个总线的长度估计(最坏的情况)以5 ns/m的延时传播,内部设备的进出延时总体实际为:
1M - 800 kbit/s:  210 ns
500 - 200 kbit/s: 300 ns (包括光耦的2×40 ns)
125 kbit/s:       450 ns (包括光耦的2×100 ns)
50 - 10 kbit/s:   1.5份时间量;实际延时=(隐性到显性 + 显性到隐性)/2

对于总线长度超过200 m的情况,建议使用光耦。
对于总线长度超过1 km的情况,可能需要使用中继器。

使用特权

评论回复
9
john_light| | 2008-1-29 11:46 | 只看该作者

连接器引脚分配

引脚分配
CANopen设备通迅所使用的物理介质是依照ISO 11898标准的带公共回路的差分驱动两线总线。
CiA DPR-303-1 CANopen recommendation定义了9针D-sub connector(DIN 41652或者对应的国际标准)、5针mini style connector、open style connector、multi-pole connector和其它的连接器[connector]。
D-Sub connector连接遵循CiA DS-102。






使用特权

评论回复
10
john_light| | 2008-1-29 13:44 | 只看该作者

CANopen设备模型

CANopen设备模型


我们可以将一个CANopen设备分为三部分:
1、通迅接口[communication interface]和协议软件[protocol software];
2、对象字典[object dictionary];
3、过程接口[process interface]和应用程序[application program]。

通迅接口和协议软件提供在总线上发送和接收通迅对象的服务。
对象字典描述在该设备中使用的所有数据类型、通迅对象和应用对象。它是应用软件的接口。
应用程序提供内部控制功能,也提供到各过程硬件接口的接口[The application program provides the internal control functionality as well as the interface to the process hardware interfaces]。


对象字典的规划


一个CANopen设备最重要的部分就是对象字典。对象字典本质上是可通过网络访问的顺序预定义样式的分组对象。字典中的每个对象都通过一个16位索引和一个8位子索引来访问。

标准对象字典的整体规划和其它工业现场总线的原理一致。

对象字典概念迎合任意的设备特性,这意味着生产商不必在它的设备上提供某些扩展功能,不过如果他想这么做,他必须以预定义的样式来实现。

通过针对预期增长的功能来定义对象字典条目,任何类型的生产商希望这样实现增强功能时都必须以相同的方式来完成。

使用特权

评论回复
11
john_light| | 2008-1-30 09:10 | 只看该作者

CANopen数据类型

数据类型(1)


静态数据类型出于明确的目的(什么目的?)都放在对象字典中。
基本BOOLEAN型数据取TRUE或FALSE值。
基本INTEGERn型数据取整型值。其数值范围在负的2的(n-1)次方和正的2的(n-1)次方减1之间(长度为n的位序列)。
基本UNSIGNEDn型数据取非负整型值。其数值范围在零和正的2的(n-1)次方减1之间(长度为n的位序列)。
基本FLOAT型数据取实数值。

VISIBLE_STRING型数据用后面的数据与数据类型定义语法来描述:Unsigned8 - Visible Char,Visible Char数组 - Visible String。Visible Char型数据可接受的数值为0h或者20h到7Eh之间的值。

OCTET_STRING型数据用后面的数据与数据类型定义语法来描述:Unsigned8数组 - Octet String。

DATE型数据定义成长度为56的位序列,它包括毫秒(?)、分、时、标准或夏令时、日、星期、月、年和一些保留值。

TIME_OF_DAY型数据表示绝对时间,它包括午夜零点过后的毫秒数和自1984年1月1日开始的天数。

TIME_DEFFERENCS型数据表示天数与毫秒数的时间差(?)。

数据类型(2)


CANopen为PDO和SDO参数指定了一些预定义复杂数据类型。
此外,对象字典为特定设备标准和复杂数据类型保留了入口。
对于象多轴控制器那样提供多个设备模块的设备或者设备profile,每个虚拟设备都可以使用它自己的数据类型。

对象描述


对象代码必须在CANopen规范定义代码之一。
对于简单变量,属性描述只出现一次,无须子索引域和入口类项[For simple variables the attribute description appears once without the sub-index field and entry category.]。
对于复杂数据类型,必须为每个成员(子索引)定义属性描述[For complex data types the attribute description must be defined for each element(sub-index).]。

入口描述


对象字典入口


一个16位的索引被用来访问对象字典中的所有入口[entry](条目?)。
对于简单变量,它引用的就直接是变量的值。
然而,对于记录和数组,索引访问(寻址)了整个数据结构。

对于复杂对象字典入口例如有多个数据域的数组或记录,子索引引用的是由主索引指向的数据结构中的域。

例如,在一个单通道RS-232接口模块上,可能在定义该模块通迅参数的索引6092h处有一个数据结构。该结构包含了针对波特率、数据位、停止位和奇偶校验位的域。子索引概念能够象上图所示那般被用来访问这些独立的域。为了能够通过网络来访问这些数据结构的各个成员,这里定义了子索引。子索引的值总为零[The value for the sub-index is always zero.]。

通迅对象


错误寄存器


若某位被置1则表明发生了特定的错误。必须报告的唯一一个强制性错误是generic错误。在任何错误状态下都报generic错误。

对于设备来说,对象1001h是一个错误寄存器。设备可以把内部错误映射到该字节。所有设备都必须具备该入口。它是紧急对象的一部分。

身份对象


1018h索引处的强制身份对象包含了有关虚拟设备的综合信息。
Vendor ID是一个Unsigned32型的数值,它由在CiA注册的公司的唯一号和该公司每个部门的唯一号(仅在需要时)组成。
Vendor ID的分配由CiA总部来管理。Vendor ID的两部分都必须由CiA注册在案,管理费用为128欧元+德国增值税。该服务对CiA成员免费。

生产商特定产品代码标识了特定的设备版本。生产商特定修订号由主修订号(标识了特定的CANopen行为)和次修订号(标识了同一个CANopen行为的不同版本)组成。如果CANopen的功能被扩展了,那么必须增加主修订版本号。


问号处有疑问,稍后复查。
翻译得很糟糕的地方附上原文。

使用特权

评论回复
12
john_light| | 2008-1-30 10:58 | 只看该作者

通迅协议

通讯协议

    * 过程数据对象[Process Data Object](PDO)协议
    * 服务数据对象[Service Data Object](SDO)协议
    * 特殊对象协议[Special Object Protocols]:
          - 同步[Synchronization](SYNC)协议
          - 时间戳[Time Stamp]协议
          - 紧急[Emergency](EMCY)协议
    * 网络管理协议[Network Management Protocols]:
          - NMT报文协议
          - 启动[Boot-Up]协议
          - 错误控制协议

通过CAN网络传输的CANopen通迅对象均由服务和协议来描述。
它们分类如下:
  + 实时数据传输由过程数据对象(PDO)协议执行。
  + 通过服务数据对象(SDO)协议提供对设备对象字典入口(条目)的读和写访问。
  + 特殊功能对象协议提供应用特定的网络同步、时间戳和紧急报文传输。
  + 网络管理(NMT)协议为网络初始化、错误控制和设备状态控制提供服务。

生产者/消费者模型


生产者/消费者模型完美地描述了CAN的广播通迅能力。
网络中的每个站点都侦听发送站点的报文。每个节点在接收了报文之后的任务就是决定是否接受该报文。因此在CAN节点中必须实现接收过滤器。

CAN的广播通迅和无线电台向汽车驾驶员传送交通堵塞信息差不多。每位驾驶员都根据他所要去的方向来确定该信息对他是否重要。

生产者/消费者模型允许的服务:发送报文(推模式)或请求报文(拉模式)。

客户机/服务器模型


在经典的客户机/服务器模型中,客户机发送一条将由服务器响应的报文,所以客户机得到一个confirmation(确认)。这就象发布一个必须确认的命令,你知道该命令能被领会。

客户机/服务器模型被用来传输长度超过8字节的数据。因此,要传输的原始数据被分段并使用相同的标识符一段接一段地发送。整个报文的每个或者一组段都将由接收者确认。所以这是点对点的通迅。在这个客户机/服务器传输上的服务包括上传、下载和终止传输。

主机/从机模型


主机/从机模型只允许由主机发动的通迅。从机总是必须等待主机的通迅请求。
这就象军队:军人将获得指令而他只能在被许可之后说话。

在基于CAN的网络中,主机/从机通迅能够上适当的标识符分配来实现。Unconfirmed(非确认)的主机/从机通迅也允许广播。


CANopen交叉使用这三种模型吗?

使用特权

评论回复
13
john_light| | 2008-1-30 13:27 | 只看该作者

过程数据对象

过程数据对象


PDO通迅可以用生产者/消费者模型来描述。
过程数据可以从一个设备(生产者)发送到另一个设备(消费者)或者到几个其它设备(广播)。PDO均以非确认(non-confirmed)的方式来发送。

生产者发出带特定标识符的发送[Transmit]-PDO(T_PDO),它和一个或多个消费者的接收[Receive]-PDO(R_PDO)标识符相对应。

PDO协议


有两种PDO服务:写PDO和读PDO。

写-PDO被映射到一个单独的CAN数据帧。读-PDO被映射到CAN远程帧,该远程帧将由对应的CAN数据帧响应。读-PDO是可选的,它依赖于设备的能力[capability](功能?)。

多达8字节的完整数据域可以包含过程数据。设备的PDO号和长度基于特定的应用而且必须在设备profile中指定。

PDO对应于对象字典中的入口并提供到应用对象的接口。数据类型和到PDO中的应用对象的映射由对象字典中相应的默认PDO映射结构决定。该结构在属于第一个R_PDO的1600h和属于第一个T_PDO的1A00h入口中定义。在一个CANopen网络中最多能够使用512个T_PDO和512个R_PDO。

PDO调度方式


CANopen通迅profile区分三种报文触发方式:
1、由设备profile中指定的对象特定事件的发生来触发报文传输。另外,周期性传输节点就算没有事件发生也会随着时间推移触发传输。
2、异步PDO的传输可以在接收到其它设备发出的远程请求后发动。
3、同步PDO由通过接收到SYNC对象所终止的特定传输周期同步来触发[Synchronous PDOs are triggered by the expiration of a specified transmission period synchronized by the reception of the SYNC object.]。

同步PDO


CANopen区分以下传输方式:
1、同步传输。
2、异步传输。

同步PDO在Sync对象后的同步窗中传输[Synchronous PDOs are transmitted within the synchronous window after the Sync Object.]。同步PDO的优先级比异步PDO的优先级要高。

异步PDO和SDO可以每当关系到它们的优先级时传输。因此它们也可以在同步窗中传输[Asynchronous PDOs and SDOs can be transmitted at every time with respect to their priority. So they could also be transmitted within the synchronous window.]。

周期性和非周期性PDO


同步PDO的传输还可以细分为周期性和非周期性传输方式。

同步周期性PDO在同步窗中传输。传输类号(1到240)指示了两个PDO传输之间的Sync对象总数。

非周期性的同步PDO的传输是由特定应用事件触发的。报文应该和Sync对象同步但不定时地传输。

PDO传输类型


同步(传输类型0~240还有252)的意思是PDO的传输应该和SYNC对象关联。

非周期性(传输类型0)意思是报文应该和SYNC对象同步但不定时地传输。

比较好的做法是,设备使用SYNC作为输出或者开动的触发条件,以先前的同步接收-PDO为基础来各自更新后面同步发送-PDO的数据传输。这种机制的细节和设备类型有关,若可用则在设备profile中定义。

一个PDO的传输类型在PDO通迅参数索引(对于第一个R_PDO为1400h,对于第一个T_PDO为1800h)中定义。

PDO参数“抑制时间”


为了保证网络上低优先级通迅对象不会饿死,可以赋予PDO一个抑制时间。该抑制时间定义了一个PDO服务的两个连续会话之间必须经过的时间。

在上图的例子中PDO_1获得比PDO_2和PDO_3更高的优先级。抑制时间使得第二个和第三个PDO即使优先权比第一个低也能够得到总线的访问权。

PDO参数集


通迅参数


通迅参数描述了一个PDO的通迅行为。通迅参数集在对象字典中的20h索引处定义。

PDO映射


PDO映射参数定义了过程数据对象的内容。在CANopen设备profile中可以指定默认的PDO映射。

CANopen还支持可变的PDO映射。如果一个设备支持可变的PDO映射,那么传输可以针对特定的应用进行最优化。

映射参数


映射参数集在规范的21h索引处描述,应用对象都映射到一个PDO中。

最多可以映射64个对象。

使用特权

评论回复
14
john_light| | 2008-1-30 13:54 | 只看该作者

自勉

客有曰:"梨益齿而损脾,枣益脾而损齿。"一呆弟子思久之,曰:"我食梨则嚼而不咽,不能伤我之脾;我食枣则吞而不嚼,不能伤我之齿。"狎者曰:"你真是囫囵吞却一个枣也。"遂绝倒。

使用特权

评论回复
15
john_light| | 2008-1-31 11:35 | 只看该作者

服务数据对象

服务数据对象


服务数据对象[Service Data Objects](SDO)提供对设备对象字典的访问。
因为该通迅是要确认的,所以一个SDO使用不同标识符的两个CAN数据帧。

依靠SDO,可以在两个设备之间建立一个点对点的通迅通道。
被访问对象字典的所有者是SDO的服务器。一个设备可以支持多于一个SDO。
支持一个SDO是强制的也是默认的情况。

分段传输


SDO允许传输任意大小的数据。它们以一连串的片断来传输。
长度小于5字节的数据的传输可以依靠“Initiate Domain Down/Upload”协议来实现“无阻”传输。With these protocols the data transmission is performed within the initiate protocol.

长度超过4字节的报文传输必须依靠分段传输来完成。由于数据能够分割进多个CAN报文中,因此允许传输任意长度的数据。在SDO的头一个CAN报文后的所有段都可以包含七字节的有用数据。最后的段可以含有一个结束指示符。

SDO以“确认”方式来传输,也就是每个段的接收都由相应的CAN报文应答。
总是由客户机负责发动传输。被访问对象字典的所有者就是SDO的服务器。客户机和服务器都可以主动终止一个域(domain)(数据块?)的传输。

可选地,SDO可以以一连串的块来传输。每个块都是一连串多达127个包含了一个顺序号和数据的段,不过只用一个报文确认。

对象字典的访问


对CANopen对象字典的读写访问是通过SDO来完成的。客户机/服务器命令分类符包含了以下信息:
  * 下载/上传;
  * 请求/响应;
  * 分段/分块/无阻传输;
  * 数据字节总数;
  * 结束指示符;
  * 针对每个随后段的交替翻转位

SDO由通迅参数描述。
默认的服务器-SDO(S_SDO)在入口1200h中定义,而头一个客户机-SDO在入口1280h中指定。

在一个CANopen网络中可以使用多达256个SDO通道,每个通道需要两个CAN标识符。

开启SDO下载


我们要读写服务器设备的对象字典时,第一个要调用的是开启(initiate)SDO下载/上传的服务。

要注意的是数据字节都是最高有效位最先发送。

下载SDO段


每个SDO段的上传/下载在客户机和服务器之间交换两个CAN数据帧。
request传送了数据段还有分段控制信息。
response对每个段的接收进行应答。

位t是翻转位,它在连续的域分段报文中来回翻转,在第一个段中它的初始值为零。

终止SDO传输


终止SDO传输[Abort SDO Transfer]是用来向客户机或服务器通报SDO传输错误的。

使用该服务的动机是指出保存在Error Class、Error Code和Additional Code域中一组错误代码[The reason for the invocation of this service is indicated as a set of error codes, stored in the fields Error Class, Error Code and Additional Code.]。

CANopen SDO 块传输


SDO下载/上传块协议由Initiate SDO Down-/Upload报文启动,后面跟着一连串SDO Down-/Upload块。
该协议由End SDO Block Down-/Upload报文来结束。

CANopen下载SDO块


下载SDO块是由单个报文确认的多达127序列段。在确认报文中,如果c-位被置为1,那么该下载序列块已经被成功接收。
未成功完成由终止SDO传输请求/指示来指出。

CANopen结束SDO块下载[CANopen End SDO Block Download]


为了校验SDO块下载/上传的正确性,客户端和服务器都对块进行CRC计算,该CRC结果在End SDO Block Down-/Upload报文中交换并校验。校验的多项式格式为X^16 + X^15 + X^5 + 1。
CRC生成器在计算校验前必须初始化为0。校验过程可以计算或者使用多项式表。

CANopen SDO参数集


CANopen SDO参数记录



翻译的让人头痛的是不知道如何以母语来贴切地表达一门外语。

使用特权

评论回复
16
疯子8972| | 2008-2-3 13:23 | 只看该作者

哈哈

又有一个CANOPEN的热心人
你是在哪里用CANOPEN啊
我在通讯技术里也贴了一点基础的东西
没有人回应
失去信心就没有再弄了
最近比较忙
有空要写个简易的东东
不管优化不优化
跑起来再说了:)

使用特权

评论回复
17
huangxq_26| | 2008-2-5 14:26 | 只看该作者

看兄弟这么努力,搞定CANopen应该比较快!

使用特权

评论回复
18
john_light| | 2008-2-13 15:55 | 只看该作者

感谢16楼17楼两位同学的关注和鼓励

路仍远但在脚下。

使用特权

评论回复
19
john_light| | 2008-2-15 09:43 | 只看该作者

CANopen同步对象

CANopen同步对象


Sync-Producer[同步生产者]为Sync-Consumer[同步消费者]提供同步信号。当Sync-Consumer接收到该信号时,它们开始执行它们的同步任务。
通常,同步PDO报文加上Sync对象的传输周期的固定传输时间保证了传感器设备可以整理采样过程变量而执行器同样可以应用它们的动作[actuation激励?]。
同步对象是标识符可在索引1005h处获得。

CANopen同步协议


同步对象通过同步设备担当该对象的生产者来实现。为了保证同步对象及时地访问CAN总线,它被赋予一个很高优先级的标识符。
CANopen建议标识符取128,它是预定义连接集中使用的最高优先组中的一个值。在同步对象中不传输任何应用数据。默认情况下,同步对象不传输任何数据(这是不是啰嗦了?)。

CANopen同步时间定义


PDO同步传输意味着关于同步对象的传输是在固定的时间内进行的。同步PDO在与同步传输相关的给定时间窗“synchronous window length[同步窗长度]”内传输,并且在每个同步周期内最多传输一次。同步对象之间的时间周期由参数“communication cycle period[通讯循环同期]”指定。
“synchronous window length”(1007h)和“communication cycle period”(1006h)在对象字典中指定,它们可以在启动过程中由配置工具向应用设备写入。
由于在同步对象之前可能刚好有另外的报文要发送,因此同步生产者的传输会存在与潜伏期相当接近的时间抖动。我们还必须考虑Sync被发送两次的情况。

CANopen同步操作


定期发送的同步报文可能使支持该功能的CANopen设备准同步地保存输入的实际值。然后它们在后面的时间帧中被发送给所有感兴趣的设备。

在后面的时间帧中,CANopen设备传送输出值给传动装置(actuators)。不过,这些值在下一个同步报文被接收之前不会生效。

使用特权

评论回复
20
DAVIDYE| | 2008-2-25 10:27 | 只看该作者

john_light!

john_light 的热情让人敬佩! 加油!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

1094

帖子

2

粉丝