📄 基于canopen协议的车载平台数据通讯系统.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0049)http://www.bol-system.com/APPLICATION/CANopen.HTM -->
<HTML><HEAD><TITLE>基于CANopen协议的车载平台数据通讯系统</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<SCRIPT language=JavaScript>
<!--
function MM_reloadPage(init) { //reloads the window if Nav4 resized
if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);
// -->
</SCRIPT>
<META content="MSHTML 6.00.2900.2668" name=GENERATOR></HEAD>
<BODY text=#000000 bgColor=#ffffff
background=基于CANopen协议的车载平台数据通讯系统.files/Bg.jpg>
<DIV id=Layer1
style="Z-INDEX: 1; LEFT: 12px; WIDTH: 748px; POSITION: absolute; TOP: 118px; HEIGHT: 383px">
<TABLE height=366 cellSpacing=0 cellPadding=0 width=732 border=0>
<TBODY>
<TR>
<TD width=58 bgColor=#99ccff> </TD>
<TD vAlign=top align=left width=674>
<TABLE height=337 cellSpacing=0 cellPadding=0 width=663 border=0>
<TBODY>
<TR>
<TD height=26><A href="http://www.bol-system.com/Application.HTM"
target=_self><FONT size=2>返回</FONT><FONT
size=2>>></FONT></A></TD></TR>
<TR>
<TD height=32>
<DIV align=center><FONT color=#ff0000
size=5><B>基于CANopen协议的车载平台数据通讯系统</B></FONT></DIV></TD></TR>
<TR>
<TD height=22>
<DIV align=center><FONT color=#0000ff size=2>北京理工大学 程坷飞 王渝
王向周</FONT></DIV></TD></TR>
<TR>
<TD height=22>
<DIV align=center>
<P><FONT color=#999999 size=2>(2005.6)</FONT></P></DIV></TD></TR>
<TR>
<TD vAlign=top align=left>
<P align=left><FONT color=#0000ff size=2>引言</FONT></P>
<P align=left><FONT color=#0000ff
size=2>在现代战争中,随着武器装备系统的机动化、自动化和信息化程度的不断提高,军用车辆上的车载设备也不断增多,其中很多设备如车载雷达、车载光学瞄准设备、车载武器设备等,都需要一个稳定的水平平台作为基座,以保证武器系统的瞄准、跟踪和精确打击。同时,随着网络技术的不断发展,车辆系统中的网络化程度也越来越高,这就要求一个车载装置能和其它的设备进行互连,从而有利于形成整车监控系统。目前,在车辆中大多数设备都通过CAN总线进行连接,但是其应用层协议的不统一给不同厂商之间的设备互连带来了困难。</FONT></P>
<P align=left><FONT color=#0000ff size=2>CANopen是基于CAN(Controller
Area Network)总线的应用层协议,它最初由从事工业控制的CiA (CAN in
Automation)会员开发。由于CANopen是一种公共、开放、通用的协议,而且精练透明、容易开发,因此在发布后不久就获得了广泛的承认。如今已经被接受为CAN高层协议的标准之一。尤其在欧洲,CANopen协议被认为是在基于CAN的工业系统中占领导地位的标准,已经应用于多种领域,如越野车、海上电子设备、医疗设备甚至于还可应用于公共汽车和铁路,且针对行业应用,实现比较简洁。</FONT></P>
<P align=left><FONT color=#0000ff
size=2>一方面,将CANopen应用于车载平台装置,可使它很方便地挂接到总线上,这样不仅解决了设备间的互连问题,同时也提高了信息传输的可靠性、实时性及装置的标准化、开放化程度。另一方面,在国外CANopen的应用已经非常广泛,而在国内有关CANopen的文章还很少,希望借此文章给从事CAN总线技术开发的人员提供一些有用的信息,使我国的CAN总线应用早日与国际接轨。</FONT></P>
<P align=left><FONT color=#0000ff
size=2>一、CANopen协议设计的实质和核心内容</FONT></P>
<P align=left><FONT color=#0000ff
size=2>CAN处于OSI网络模型中物理层和数据链路层,而CANopen是基于CAN的应用层,因为现场总线通常只包括一个网段,因此不需要第3层(传输层)和第4层(网络层),也不需要第5层(会话层)、第6层(描述层)的作用。正是因为有了CANopen这样应用层协议的存在,从而使CAN总线成为了一个更加完善的网络系统。</FONT></P>
<P align=left><FONT color=#0000ff size=2>1.1
CANopen协议设计的实质--面向对象</FONT></P>
<P align=left><FONT color=#0000ff
size=2>CANopen协议在设计的时候,对总线上传输的数据进行了分类,即每一个传输数据都是某一特定类的对象,从而实现了面向对象的程序设计。在CANopen中每一类传输对象都有其规范化的格式,从而实现了应用层结构上的统一。这样无论从规范化角度,还是从模块化程序设计角度讲,CANopen协议都是一个设计比较完善的协议。</FONT></P>
<P align=center><IMG height=198
src="基于CANopen协议的车载平台数据通讯系统.files/fig1.jpg" width=341></P>
<P align=left><FONT color=#0000ff
size=2>在CANopen协议的数据传输中共定义了4类对象(通讯模式),分别为管理对象(NMT)、服务数据对象(SDO)、过程数据对象(PDO)和特殊功能对象。其中NMT用来传递主节点对整个网络系统的管理信息,SDO用来传递网络系统中的配置信息,PDO用来传递过程数据信息(例如电压的变化值),特殊功能对象包括同步对象(SYNC)、紧急对象(Emergency)、时间基准(Time-Stamp)等。各类对象传输时的帧格式在参考文献中有详细的规定,在这里就不详细介绍了。在实际的工程中用户只要根据需要,按照类的规定把要传输的数据映射到相应的对象中就可以了。</FONT></P>
<P align=left><FONT color=#0000ff size=2>1.2
CANopen协议中的核心内容--对象字典(Object Dictionary)</FONT></P>
<P align=left><FONT color=#0000ff
size=2>为了对各类对象进行规范化和方便的管理,在CANopen协议中定义了对象字典的概念。它是一个有序的对象组,其中定义了一个设备的所有信息,在CANopen网络系统中每一个设备都要有一个唯一的对象字典,每个设备的对象字典具有结构相同、内容不同的特点。通过对对象字典中的对象定义一个唯一的16位主索引和8位子索引,就可以方便地访问对象字典中的对象。CANopen协议中定义了通用的对象字典结构,其中规定了各种数据在对象字典中的位置区域。在我们建立设备对象字典的时候,主要工作应集中在定义通讯子协议区域(1000~1FFF)和制造商特定子协议区域(2000~5FFF)部分。</FONT></P>
<P align=left><FONT color=#0000ff
size=2>在整个CANopen协议中对象字典起到了连接DLL模块(通讯接口)和应用程序的作用。我们要想把一个应用程序中的数据(如I/O的输入值)送到CAN总线上,我们首先要确定这个数据属于对象字典中的哪一类对象(例如I/O口的输入值应为过程数据对象),然后用DLL模块访问对象字典中相应的对象并把其按照相应的帧格式发送到CAN总线上去,从而完成了数据的传输。</FONT></P>
<P align=left><FONT color=#0000ff size=2>二、车载平台数据通讯系统的实现</FONT></P>
<P align=left><FONT color=#0000ff size=2>2.1 数据通讯系统的组成</FONT></P>
<P align=left><FONT color=#0000ff
size=2>在我们的调平系统中,平台采用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)可以在线观察总线上传输的数据。</FONT></P>
<P align=left><FONT color=#0000ff size=2>2.2 系统中CAN硬件接口设计</FONT></P>
<P align=left><FONT color=#0000ff
size=2>在主控制器和电机控制器中微处理器采用FUJITSU公司的MB90F543芯片,其本身带有内嵌CAN控制器,因此只需加一个CAN总线驱动器,就可方便地实现主控制器和4个电机控制器之间的通信。本系统中选用了PCA82C250收发控制器,该芯片提供对总线的差动发送能力和对CAN控制器的差动接收能力,PCA82C250是标准的CAN收发器,实验显示,只要总线的每米电容小于120pf条件下,就满足CAN总线传送距离的标准。CAN总线驱动电路图略。为了加强总线的抗干扰能力,总线的通信介质采用带屏蔽线的双绞线。</FONT></P>
<P align=left><FONT color=#0000ff size=2>2.3 对象字典的建立</FONT></P>
<P align=left><FONT color=#0000ff
size=2>在网络系统中每一个设备都要有一个唯一的对象字典,其中定义了各种对象的属性(如ID、发送方式等)。在我们的系统中共有5个节点,它们以主从方式工作(1个主节点和4个从节点),主控制器对应主节点,4个电机控制器对应4个从节点。为了系统扩展的方便,我们设4个从节点的节点号分别为10、11、12、13,在各个节点对象字典中的对象ID都采用预定义连接集中规定的11位ID,它由4位功能代码和7位节点号组成。</FONT></P>
<P align=left><FONT color=#0000ff
size=2>下面以主节点对象字典的建立为例说明对象字典的建立方法。首先要分析主节点在网络中的作用,从而确定对象字典中要包含哪一类对象及其个数,然后定义对象的属性。在我们的系统中主节点要支持从节点的访问,因此需要一个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的设置。</FONT></P>
<TABLE width="98%" border=0>
<TBODY>
<TR>
<TD width="45%">
<DIV align=center><FONT color=#0000ff
size=2>表1</FONT></DIV></TD>
<TD width="55%">
<DIV align=center><FONT color=#0000ff
size=2>表2</FONT></DIV></TD></TR>
<TR>
<TD width="45%">
<TABLE width="98%" border=0>
<TBODY>
<TR bgColor=#cccccc>
<TD>
<DIV align=center><FONT color=#0000ff
size=2>对象</FONT></DIV></TD>
<TD>
<DIV align=center><FONT color=#0000ff
size=2>索引</FONT></DIV></TD>
<TD>
<DIV align=center><FONT color=#0000ff
size=2>接收ID</FONT></DIV></TD>
<TD>
<DIV align=center><FONT color=#0000ff
size=2>发送ID</FONT></DIV></TD></TR>
<TR bgColor=#cccccc>
<TD>
<DIV align=center><FONT color=#0000ff
size=2>SDO</FONT></DIV></TD>
<TD>
<DIV align=center><FONT color=#0000ff
size=2>I200H</FONT></DIV></TD>
<TD>
<DIV align=center><FONT color=#0000ff
size=2>580H</FONT></DIV></TD>
<TD>
<DIV align=center><FONT color=#0000ff
size=2>600H</FONT></DIV></TD></TR></TBODY></TABLE></TD>
<TD width="55%">
<TABLE width="98%" border=0>
<TBODY>
<TR bgColor=#cccccc>
<TD width="18%">
<DIV align=center><FONT color=#0000ff
size=2>对象</FONT></DIV></TD>
<TD width="17%">
<DIV align=center><FONT color=#0000ff
size=2>索引</FONT></DIV></TD>
<TD width="17%">
<DIV align=center><FONT color=#0000ff
size=2>ID</FONT></DIV></TD>
<TD width="19%">
<DIV align=center><FONT color=#0000ff
size=2>传输类型</FONT></DIV></TD>
<TD width="29%">
<DIV align=center><FONT color=#0000ff
size=2>映射参数</FONT></DIV></TD></TR>
<TR bgColor=#cccccc>
<TD width="18%">
<DIV align=center><FONT color=#0000ff
size=2>Tx-PDO</FONT></DIV></TD>
<TD width="17%">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -