控制器局部网(CAN)是在20世纪80年代早期专为汽车开发的一种串行总线系统。CAN总线符合国际标准ISO 11898-1。现在全世界大约有40家制造商生产符合CAN协议的半导体产品,如微控制器、收发器和单节点的CAN控制器等。CAN总线在汽车行业获得大量应用,使得芯片的价格大大降低。正因为此,在许多其他的行业(譬如工业自动化等)都发现了该协议所具有的鲁棒性和可靠实时传输性能等优异的性能。
因为具有多主分层结构,CAN协议允许构建分散和冗余系统。网上的任何节点都可以对所有其他节点发送消息(广播)。接收节点读取消息后判断是否需要这条消息。因为有了这个流程,网上的所有节点就都使用相同的一致信息。另外,其他一些确保数据完整性的手段也很完备,如错误检测机制和错误消息的重复发送等。
CAN-基于高层协议
符合CAN协议的半导体硬件仅仅能覆盖通信的部分功能,只有借助软件才能完成其余的部分。如果你将此与人类语言作比较,你会发现符合CAN协议的硬件好比拉丁字符。举个例子,写作的时候离不开拉丁字符,但是如果单单这些字符并不能表达任何意思。而软件充当单词和语法的作用,它将单个字符组织起来构成我们日常交流的基本单元。这样的软件被称为高层协议。有许多基于CAN的高层协议(HLP),其中一些是由制造商自己制订的标准,还有一些是国际标准(譬如 CANopen,Devicenet, 或者J1939)。无论如何,从本质上来讲,每个用户都可以定义其自己的高层协议(使用他们自己的“词语”和“语法”)并利用之工作。为了在网络中交换数据(譬如 和别人交谈的过程),用户将不得不使用标准的HLP(譬如,现有的定义明确的语言)。
想象一下你自己正处于国外,在向别人问路,此时你需要一些单词和语法向别人问话。可能你自己的字典可以给你提供一些存储的简单短语例如“请问我怎样才能到达火车站?”。这本短语集对于人类来说就像机器的通信子协议一样。工业环境中的设备使用语言以及规定短语的子集来作为设备之间或者一个应用中通信的基础。在人类的语言中这就好比一个特定的场景,譬如说在国外当你问路时你需要用特定的单词和语法组成短语来表达你想要问的路。回到我们的高层协议,标准化的HLP协议集中有一个是CANopen (EN 50325-4)。它基于CAN并且提供设备、接口和应用轮廓,这些都是预定义好并且使设备间、接口间以及应用中的通讯标准化。很多系统开发商并不愿意花费精力来设计自己的高层协议,他们也不会使用成套设备;他们更倾向于为其设备选择标准化的CANopen协议。CANopen为减轻了系统开发商的重担,开发商不再需要为特定的CAN标准细节譬如时序控制以及特定功能函数的实现而大费周折。系统集成商可能会愿意购买已经将CANopen协议集成好的成套设备。有许多供应商销售CANopen的源代码,同时也有许多供应商提供工具帮助用户组织网络交通。
CANopen
CANopen是一种标准化的针对嵌入式应用并基于CAN协议的网络。它的配置非常灵活。开始时它是专为传动类机器控制网络设计而用。它广泛应用在工业自动化领域,尤其是在欧洲,并且在远东国家例如中国等区域也开始逐渐流行。譬如绝大多数的挤压机和它们的下游的附加机器设备都采用CANopen网络。搬运机、包装机、传送带、装配机以及打印设备等都在大量应用CANopen。
CANopen是一种免费且公开版权的高层协议。这意味着它不属于任何特定的公司并且使用该协议也不需要任何花费。这些文档(CiA 301, CiA 302, and CiA 303)涵盖了应用层和通信子协议,可编程设备的框架,同时也推荐了相应配备的线缆、连接器以及SI单元和相关设备等。部分子协议可以免费使用,但是也有一部分的版权由CiA的成员拥有。
CANopen协议
在每一个分散控制应用中都需要不同的通信服务和协议。因此CANopen协议分别为实时数据(过程数据对象,PDO)、配置数据(服务数据对象,SDO)、网络管理数据(启动消息,NMT消息、错误控制)以及其他函数(时间标记、同步消息、紧急消息)提供标准化的通信对象。
对象字典描述了设备的功能性。它以特定的方式描述了通信对象(应用数据和配置数据),从而实现了设备的功能性描述。这些对象通过一个16位的索引和一个附加的8位子索引来访问。对象字典是CAN通信接口和应用程序之间的接口,对于每一个CANopen设备来讲,对象字典都是独一无二的。
实时数据在过程数据对象(PDO)中进行交换。这些PDO被映射到单个的CAN框架,并被用在多达8位的数据域来传输应用对象。每一个PDO都有一个标识符,并在网络中被唯一的节点传输。然而可以有不止一个的节点(生产者/消费者的通信)收到这个PDO。这些PDO可能是由一个内部事件所触发(例如温度升高超过一个特定的数值),或者被一个内部的时钟,或是被一个远程的请求和同步消息。对象字典描述了应用对象间默认的映射方式,从而可以实现每个PDO的交换以及对应支持的传输方式。PDO的传输并不被确定。高优先级的PDO消息通常被分配一个低的标识符数字以确保总线的优先访问权利。
一个设备被配置服务数据对象(SDO)消息。通常SDO从对象字典中读或写相关条目。通过将消息的内容分段处理,SDO协议能够传输任何大小的对象。SDO传输是一项确定的服务。
因为CANopen适合用于分散架构的控制应用,所以网络中并不需要单个的主节点。这意味着至少一个节点必须履行网络的管理任务(NMT)。NMT对象包括启动消息,心跳协议以及NMT消息。当CANopen网络的NMT主节点传输NMT消息时,所有其他的节点转变为另一个NMT状态。状态可以被初始化,预运转、运转以及停止。SDO消息只允许存在于预操作状态中。PDO消息被允许存在于操作状态中。在操作中当机器设备启动或者开始有功率运行时启动消息被一个节点发出去。它被发到CANopen的NMT主节点以说明该节点已经处于预运转状态。
一个节点通过发送心跳消息来说明它正处于正常工作状态。 通过发送周期性的消息给一个特定的节点或者几个节点,该节点就能通知出它的存在和现状。
CANopen也定义有关同步、紧急指示、时间标记的协议。为了确保网络中的所有节点能够按照同样的时钟同步运行,网络中有一个同步器周期性的广播同步消息给所有节点。如果一个节点内部发生一个错误,它将触发这个节点传送紧急消息给到相应的应用节点。一些应用节点需要一系列时间标记的消息。CANopen的时间标记协议也可以支持这一功能。