基于CANopen协议的车载平台数据通讯系统
引言
在现代战争中,随着武器装备系统的机动化、自动化和信息化程度的不断提高,军用车辆上的车载设备也不断增多,其中很多设备如车载雷达、车载光学瞄准设备、车载武器设备等,都需要一个稳定的水平平台作为基座,以保证武器系统的瞄准、跟踪和精确打击。同时,随着网络技术的不断发展,车辆系统中的网络化程度也越来越高,这就要求一个车载装置能和其它的设备进行互连,从而有利于形成整车监控系统。目前,在车辆中大多数设备都通过CAN总线进行连接,但是其应用层协议的不统一给不同厂商之间的设备互连带来了困难。
CANopen 是基于CAN(Controller Area Network)总线的应用层协议,它最初由从事工业控制的CiA (CAN in Automation)会员开发。由于CANopen是一种公共、开放、通用的协议,而且精练透明、容易开发,因此在发布后不久就获得了广泛的承认。如今已经被接受为CAN高层协议的标准之一。尤其在欧洲,CANopen协议被认为是在基于CAN的工业系统中占领导地位的标准,已经应用于多种领域,如越野车、海上电子设备、医疗设备甚至于还可应用于公共汽车和铁路,且针对行业应用,实现比较简洁。
一方面,将CANopen应用于车载平台装置,可使它很方便地挂接到总线上,这样不仅解决了设备间的互连问题,同时也提高了信息传输的可靠性、实时性及装置的标准化、开放化程度。另一方面,在国外CANopen的应用已经非常广泛,而在国内有关CANopen的文章还很少,希望借此文章给从事CAN总线技术开发的人员提供一些有用的信息,使我国的CAN总线应用早日与国际接轨。
一、CANopen协议设计的实质和核心内容
CAN 处于OSI网络模型中物理层和数据链路层,而CANopen是基于CAN的应用层,因为现场总线通常只包括一个网段,因此不需要第3层(传输层)和第4层 (网络层),也不需要第5层(会话层)、第6层(描述层)的作用。正是因为有了CANopen这样应用层协议的存在,从而使CAN总线成为了一个更加完善的网络系统。
1.1 CANopen协议设计的实质--面向对象
CANopen 协议在设计的时候,对总线上传输的数据进行了分类,即每一个传输数据都是某一特定类的对象,从而实现了面向对象的程序设计。在CANopen中每一类传输对象都有其规范化的格式,从而实现了应用层结构上的统一。这样无论从规范化角度,还是从模块化程序设计角度讲,CANopen协议都是一个设计比较完善的协议。
在CANopen 协议的数据传输中共定义了4类对象(通讯模式),分别为管理对象(NMT)、服务数据对象(SDO)、过程数据对象(PDO)和特殊功能对象。其中NMT 用来传递主节点对整个网络系统的管理信息,SDO用来传递网络系统中的配置信息,PDO用来传递过程数据信息(例如电压的变化值),特殊功能对象包括同步对象(SYNC)、紧急对象(Emergency)、时间基准(Time-Stamp)等。各类对象传输时的帧格式在参考文献中有详细的规定,在这里就不详细介绍了。在实际的工程中用户只要根据需要,按照类的规定把要传输的数据映射到相应的对象中就可以了。
1.2 CANopen协议中的核心内容--对象字典(Object Dictionary)
为了对各类对象进行规范化和方便的管理,在CANopen协议中定义了对象字典的概念。它是一个有序的对象组,其中定义了一个设备的所有信息,在 CANopen网络系统中每一个设备都要有一个唯一的对象字典,每个设备的对象字典具有结构相同、内容不同的特点。通过对对象字典中的对象定义一个唯一的 16位主索引和8位子索引,就可以方便地访问对象字典中的对象。CANopen协议中定义了通用的对象字典结构,其中规定了各种数据在对象字典中的位置区域。在我们建立设备对象字典的时候,主要工作应集中在定义通讯子协议区域(1000~1FFF)和制造商特定子协议区域(2000~5FFF)部分。
在整个CANopen协议中对象字典起到了连接DLL模块(通讯接口)和应用程序的作用。我们要想把一个应用程序中的数据(如I/O的输入值)送到CAN总线上,我们首先要确定这个数据属于对象字典中的哪一类对象(例如I/O口的输入值应为过程数据对象),然后用DLL模块访问对象字典中相应的对象并把其按照相应的帧格式发送到CAN总线上去,从而完成了数据的传输。
2.1 数据通讯系统的组成
在我们的调平系统中,平台采用4点支撑,由4个1KW、24V的直流电机和减速器、T型丝杠相连接,以控制平台中4个支点的上升或下降。主控制器、4个电机控制器和USB-to-CAN通过CAN总线相连,水平传感器和手操器通过RS232接口和主控制器相连,其结构如图1所示。其中主控制、电机控制器和手操器为我们自行开发的嵌入式设备,电机控制器可以实现准确的电机位置控制,手操器可以提供手动调平功能。水平传感器为Crossbow Technology公司生产的CXTD02型,它可以由RS232口送出精确的平台X、Y轴角度密位信息;USB-to-CAN设备为德国IXXAT公司生产的USB-to-CAN compact,其中包含了SJA1000 CAN控制器可完成消息的收发,并可以将CAN信号转换成USB信号传递给上位机,上位机通过运行IXXAT公司的监视软件(miniMON)可以在线观察总线上传输的数据。
2.2 系统中CAN硬件接口设计
在主控制器和电机控制器中微处理器采用FUJITSU公司的MB90F543芯片,其本身带有内嵌CAN控制器,因此只需加一个CAN总线驱动器,就可方便地实现主控制器和4个电机控制器之间的通信。本系统中选用了PCA82C250收发控制器,该芯片提供对总线的差动发送能力和对CAN控制器的差动接收能力,PCA82C250是标准的CAN收发器,实验显示,只要总线的每米电容小于120pf条件下,就满足CAN总线传送距离的标准。CAN总线驱动电路图略。为了加强总线的抗干扰能力,总线的通信介质采用带屏蔽线的双绞线。
2.3 对象字典的建立
在网络系统中每一个设备都要有一个唯一的对象字典,其中定义了各种对象的属性(如ID、发送方式等)。在我们的系统中共有5个节点,它们以主从方式工作(1 个主节点和4个从节点),主控制器对应主节点,4个电机控制器对应4个从节点。为了系统扩展的方便,我们设4个从节点的节点号分别为10、11、12、 13,在各个节点对象字典中的对象ID都采用预定义连接集中规定的11位ID,它由4位功能代码和7位节点号组成。
下面以主节点对象字典的建立为例说明对象字典的建立方法。首先要分析主节点在网络中的作用,从而确定对象字典中要包含哪一类对象及其个数,然后定义对象的属性。在我们的系统中主节点要支持从节点的访问,因此需要一个SDO;主节点要向4个从节点发送位置信息,因此要有4个Tx-PDO和4个Rx-PDO,其中每个PDO又由Tx(Rx)PDO Parameter和Tx(Rx)-PDO mapping两部分组成;当系统中发生紧急情况的时候主节点要发送紧急信息,因此要有1个应急指示紧急对象(Emergency Object);向从节点发送的位置信息保存在制造商特定子协议区域(2000~5FFF)中;另外主节点要完成各个从节点的管理工作,因此还要有NMT 管理模块。SDO、PDO的属性设置如表1、2所示,由于4对PDO的属性除了映射值不用以外,其他属性基本相同,因此只给出了向(从)节点号为10的从节点发送(接收)PDO的设置。
表1 | 表2 | |||||||||||||||||||||||
|
|
在表2中传输类型255表示异步、事件触发传输,映射参数0x20000110按照从左至右的顺序分别表示将对象字典中主索引为2000H,子索引为01H的16位数值(10)映射到PDO中去。也就是说将保存在2000H处的位置信息映射到PDO中发送。
在对象字典建立完成之后要生成EDS(Electronic Data Sheet)来描述这个设备的对象字典,主节点的EDS如图2所示。
2.3 DLL模块的实现
MB90F543具有两个CAN控制器分别为CAN0和CAN1,我们只用CAN0,这样CAN1可以在系统扩展时使用。CAN控制器具有如下的特点:
- 符合规范CAN2.0A和CAN2.0B;
- 支持通过接收远程帧发送数据;
- 16个收、发缓冲区,每个缓冲区都具有29比特ID和8字节数据,多级缓冲配置;
- 每个缓冲区支持标准帧和扩展帧的多种过滤方式;
- 波特率可从10Kbit/s到1Mbit/s。
在我们系统中使用规范CAN2.0A,波特率为125k/s,并且为每类消息分配了一个独立的缓冲区,这样做可以减少中断程序的处理时间,从而提高了系统的实时性。
DLL模块是对象字典和CAN控制器之间的通讯接口,它要完成的主要工作是:
- 对CAN控制器进行初始化,其中包括波特率设置和CAN寄存器初始化等;
- 对CAN引发的中断处理,其中包括:
- 1)在发送时通过访问对象字典将各种对象按照规定的帧格式发送到总线上;
- 2)在接收的时候把接收到的对象信息写到对象字典的相应位置中去。
我们用两个函数-DLL_InitCAN ()和DLL_Interrupt()来实现CAN控制器的初始化和中断处理功能。
2.4 主控制器的应用程序流程
在系统中各个从节点被配置成节点监测状态,主节点通过检测4个从节点发送的周期性心跳报文(Heartbeat)来判断各个从节点的工作状态。
主控制器的应用程序流程为:在系统上电后主控制器首先判断各个从控制器是否发出Boot-Up消息,如果有Boot-up消息则让各个从节点进 Operational状态并接着判断是否有心跳报文(Heartbeat)产生以判断各节点是否成功进Operational状态,否则通过指示灯报错,然后采集水平传感器输出的X、Y轴密位信息并判断是否在误差带内,接着通过调平策略解算出3个电机应该上移或下移的位置(3点即可解决一个平面),并且通过CAN总线将位置信息传送给电机控制器,电机控制器在运动了相应的位置后向主控制器发出确认消息,主控制器在接到确认消息后,再次采集水平传感器输出的位置信号,如果位置误差在误差带内则数据传输停止,否则循环上述过程。其流程图如图3所示。
3 实验结果
整个平台在调平过程中达到了满意的效果,调平的时间在2min之内,调平精度能达到3',这从一方面验证了通讯系统的可靠性。为了更直观地观察数据传输过程,我们通过运行监视程序(miniMON)可以在上位机上实时地显示数据传输的全过程,这无论从系统调试方面还是从系统检验方面来讲都是很有意义的。系统运行时的数据通讯如图4所示。通过监视数据的传输,我们可以更加确认数据传输的可靠性。
4 结束语
车载设备的网络化、标准化是组成车载监控系统的一个重要条件,同时也是车载设备发展的一个重要方向。CANopen协议作为CAN总线的应用层协议,在车辆领域有着广阔的应用前景。本文通过把车载平台做成符合CANopen协议的标准化装置,从而增强了设备的可扩展性同时也提高了数据传输的可靠性,可以满足现代化战争中军用车载设备的要求。
评论