CAN网络协议

2024-07-25

CAN网络协议(共7篇)

CAN网络协议 篇1

0 引言

CAN的技术规范只定义了物理层和数据链路层协议,没有定义应用层协议。CAN的技术特点允许各厂家在CAN协议的基础上自行开发自己的高层应用协议,给用户提供一个面向应用的清晰接口。为了将CAN协议的应用推向更深的层次,同时满足产品的兼容和互操作性,国际上已经形成了诸多基于CAN的应用层协议:CANOpen、Device Net、SAEJ1939、CAL、SDS、CAN Kingdom等,这些高层协议都对CAN应用层做了完整而详尽的定义[1]。Device Net最初由Rock Well旗下Allen-Bradly公司研制开发,凭借该公司在可编程控制器和变频器等方面的优势,在PLC与现场设备之间的通信网络中得到广泛应用。CANOpen是基于CAN总线系统的网络,它是由Ci A进行开发的,CANOpen甚至可以在具有低计算性能和存储能力的设备中使用[2]。

由于目前国内还没有CAN通讯的应用层协议标准,而国外的应用层协议又较为昂贵,并且在一些利用简单的通信协议就可以满足要求的情况下,采用复杂的协议有时会造成资源浪费,用户在应用时也会觉得诸多不便,反而限制了CAN的灵活性,在实际应用中,可以根据需要自定义一个简单有效的协议实现所要求的功能。该协议制订的合理与否,直接关系到总线的传输效率、通用性和将来的可扩展性。

1 系统总体架构设计

考察汽车电气控制部分,可以发现仪表显示、车灯控制和传感器信号采集部分的连线是最复杂的,所以从这几方面入手来解决系统设计所面临的问题。系统分为高速CAN和低速CAN两部分,由高速数据采集模块、低速数据采集模块、仪表显示模块、车灯控制模块、上位机监控模块组成。对于发动机的转速和车速,采用500Kbps的高速速率,以保证良好的通信带宽,从而满足高实时性要求;对于仪表信息显示和车灯系统等普通实时性要求的设备,可工作在125Kbps的低带通信波特率上,通过CAN网桥对两CAN网络数据处理[3]。数据采集模块接收传感器输出的模拟信号、数字信号和开关信号,经ECU进行处理,转换为可在CAN总线上通讯的数据报文格式,分别送到仪表显示模块和灯光控制模块。仪表显示模块分别输出显示油量、水温、转速、车速、本次里程和总里程,用来实时反映汽车各部件当前的工作状态。灯光控制模块完成对灯光控制命令的接收及驱动控制车灯亮灭。同时,将数据采集模块处理后的信号通过RS232-CAN转换卡送入PC机处理及显示,并对CAN总线的发送和接收情况进行监控。

2 系统应用层协议的制定

在本系统中我们采用的是扩展帧,这种模式支持具有很多特性的CAN2.0B协议,具有增强的验收滤波器、强有力的错误处理能力以及自我测试功能。其数据格式[4]如表1所示。

其中:字节0的第7位FF表示帧格式,在扩展帧中FF=1,在标准帧中FF=0;第6位RTR表示帧类型,RTR=0表示为数据帧,RTR=1表示为远程帧。

2.1 标识符ID的定义

CAN总线上每条信息都有一个独一无二的标识符ID,在接收端只有与自己标识符相同的信息才被接收。在CAN系统中,标识符ID决定了信息的优先权和等待时间,一般ID的二进制值越小则优行权越高,所以将重要数据规定为帧号较小。

在CAN扩展格式里,标识符位由ID.28-ID.0组成,其中高7位ID.28-ID.22不能全为隐性1。标识符的分配要满足节点及报文对优先级的要求,同时尽可能地利用标识符加载有关信息,以减少在数据域占用的空间,此外标识符的格式还要为消息滤波提供便利。本文根据CAN仲裁的特点和一般汽车结构特点对CAN的29位标识符作以下设计,这里设定都留有一定的余量,以备将来扩展所需[5]。具体分配如表2所示。

信息采集节点分为模拟量(油量、温度)采集,脉冲量(转速、车速)采集,开关量(左转向、右转向、近光灯、远光灯、制动灯、超车灯、倒车灯、雾灯)采集,分别由ID28~ID24这5位的二进制数组合来定义。仪表显示节点主要包括油量、水温、转速、车速、本次里程、总里程6个仪表,以及4个报警灯:油量低于10L报警、水温高于110℃报警、转速高于8000R/M报警、车速超过120Km/H报警,分别由ID23~ID20这4位的二进制数组合来定义。灯控节点主要控制8个车灯的亮灭,分别由ID19~ID16这4位的二进制数组合来定义。系统主要有5类信息类别:紧急信息、广播信息、命令信息、状态信息、数据信息,分别由ID15~ID13这3位的二进制数组合来定义。

2.2 数据域格式的定义

对CAN报文进行数据域编码是本规范进行数据格式编码的主体,如何对数据域的功能进行详细的划分,这里采用分级编码的方式来进行。本规范中数据域编码的大小只有1个字节,而数据域的实际大小可为8个字节的容量,所以具有很大的扩充性,将来如果车身器件或电子元件增多后,可适量进行功能拓展。表3显示了数据域编码的分配方式。

器件类型编码是指对具体器件进行类型划分,主要包括传感器、仪表、开关、车灯4类,由D7~D5这3位的二进制数组合来定义。具体器件编码是按器件类型为汽车总线的每个控制器件进行编码,从而制定相关的报文格式,由D4~D1这4位的二进制数组合来定义。状态编码一是为说明传感器和仪表的控制流方向是输入还是输出,二是为说明开关和车灯的状态。

3 实验调试软件的设计应用

3.1 监控调试软件的设计

由于本系统的运行都是基于硬件的,功能程序加载在各种微控制器上,系统运行的结果表现为汽车仪表上的各种显示数据,以及汽车上的各种灯类开启,这样对于系统运行的调试和监控就显得比较困难,尤其是对系统的调试和故障排查,如果不设计一套监控调试软件,就无法方便有效的对整个系统的运行情况进行全面掌握。系统监控软件设计的目标是建立一套较为完整的系统调试和测试平台,能够观察本系统汽车仪表所显示的各种数据,能够显示车灯的亮灭情况;此外,还要通过手动输入各种不同的数据,测试系统在不同条件下的运行情况和异常情况。

本系统采用VB设计人机界面,包括汽车控制模块和通讯测试模块两部分。控制模块执行情况如图1所示,数字化显示车辆在行驶过程中的关键数据,以及四个报警灯的亮灭情况。在界面中还包括8个车灯的亮灭显示,通过设定车灯开关的状态,一方面可以监控车灯的启灭情况,另一方面也方便车灯系统的故障检测。当点击车灯的“开关”按钮后,将向总线上发出信号,车灯成功控制后会反馈一个信号给监控软件,监控软件上的模拟灯会相应亮灭。通讯测试模块执行情况如图2所示。数据发送栏中可以选择要发送的CAN帧结构类型(数据帧或远程帧),之后输入待发送的报文ID及数据,点击“发送”后被网络上其他节点接收,将标识符改动再把数据原样返回,返回的报文显示在报文接收栏中,以便测试CAN通信是否成功。

3.2 测试软件的应用

CAN总线的扩展模式支持“自收自发”测试功能,可以检测节点本身的CAN硬件电路功能,但不能测试与CAN总线密切相关的通讯参数。本系统借助于一套有ZLGCANtest通用测试软件支持的接口卡,来监听CAN总线网络通讯数据,向网络发送CAN总线帧报文,以提供给其它节点接收信息,从而检测CAN通路的正确与否。操作此软件,由于CAN节点正在向CAN总线上连续发送报文,因此,在CAN分析测试软件界面可以看到报文接收情况,如图3所示。从图中可以看出接收到的报文是数据长度为8的扩展数据帧,这是CAN节点发出的报文,可以在程序中设置发送CAN报文的格式和数据。

4 结束语

CAN的技术规范只定义了物理层和数据链路层协议,而没有定义应用层协议。因此,本系统针对汽车CAN网络控制系统,制定了一个简单有效的协议实现所要求的功能。系统采用29位标识符的扩展模式,定义了2个字节的标识符ID的和1个字节的数据域编码,并通过自行设计的上位机监测软件和CAN分析测试软件ZLGCANtest对CAN总线上的数据进行实验测试,在PC机上观察节点报文的发送和接收情况。经试验调试表明,报文的接收和发送没有异常,此协议的制定能够实现硬件系统所要求的功能。但这种简单协议的制定也表现出了它的弊端,就是不具有通用性,难以和其他系统兼容。

摘要:针对汽车CAN网络控制系统,依据CAN协议技术规范,重点制定了仪表显示、车灯控制和传感器信号采集部分的应用层协议。CAN总线系统是信息地址定位,而不是设备地址定位,系统采用29位标识符的扩展模式,定义了2个字节的标识符ID的和1个字节的数据域编码。采用自行设计的上位机监测软件和CAN分析测试软件ZLGCANtest对CAN总线上的数据进行实验测试,在PC机上观察节点报文的发送和接收情况。经试验调试表明,报文接收和发送正常,此协议的制定能够实现硬件系统所要求的功能。

关键词:CAN总线,应用层协议,标识符,数据域编码,ZLGCANtest

参考文献

[1]李银河.CAN总线和基于CAN总线的高层协议[J].可编程控制器与工厂自动化,2005,(11):65-68.

[2]SAE.SAE International Surface Vehicle Standard series.2003

[3]刘立峰,廖力清.高低速CAN总线在汽车控制系统中的研究[J].自动化与仪表.2006,(1):36-39.

[4]N.Navet,Y.-Q.Song and F.Simonot,Worst-case deadline fail-ure probability in real-time applications distributed overcontroller area network,ARTICLE Journal of Systems Architecture,2000,46(7).

[5]SAE,SAE J1939,Recommended Practice for Control and Co-mmunications Network,USA,SAE,2000.

车载CAN总线网络管理协议浅析 篇2

随着车辆电子技术的不断发展,车辆电气系统中电控单元(ECU)的应用日益增多。不断增多的ECU和数据交互使得车载网络也越来越复杂,也给整车的静态功耗设计带来了挑战,为了保证车载网络的安全性和可靠性,同时为了更好的控制整车静态功耗,有必要建立一套管理机制对网络安全和故障进行监控处理。

网络管理的主要功能有:保证网络同步进入睡眠状态、网络启动后确定网络配置、运行过程中监控网络配置、提供网络状态信息以及对网络故障的处理。

2、网络管理的方案

目前比较典型的适用于汽车CAN总线网络管理协议有OSEK、AUTOSAR和SAEJ1939网络管理协议,下面就这些协议进行简要的介绍和对比分析。

2.1 OSEK网络管理

OSEK/VDX是用于分布式实时结构的一组标准,它包含四个标准:操作系统(OS)、通信(COM)、网络管理(NM)和OSEK实现语言(OIL),其网络管理部分的标准(OSEK NM)被广泛的应用于车载CAN总线的网络管理。

OSEK网络管理分为直接管理和间接管理两种。

2.1.1 OSEK直接网络管理

OSEK直接网络管理是一种分布式的网络管理,它通过逻辑环对网络进行监控,每个节点被其他节点监控的同时也根据各自的状态发送特定统一的网络管理报文。

OSEK网络管理为每个节点定义了不同的工作状态和状态间的转换关系,各个节点通过调用网络管理服务进行网络管理状态的迁移。节点的网络状态及迁移关系如图1所示:

图2所示为逻辑环机制,当网络处于NMOn状态时,连接在总线上的ECU需要按照各自地址的大小从小到大依次发送网络管理报文,从而形成虚拟的逻辑环。

OSEK网络管理在协议数据单元(NMPDU)中进行网络管理需求和状态信息的传递,各节点需要按照各自的网络管理状态发送对应的信息,并接收其他节点发送的状态信息。网络管理协议数据单元包含地址域、控制域和数据域,与CAN总线的帧格式按照如下方式对应:

OSEK直接网络管理报文有以下三种类型(通过控制域的配置):

●Alive报文:各节点声明自身将要加入到“逻辑环”的报文

·Ring报文:各节点向后继节点传递“令牌”的报文

·LimpHome报文:节点不能正常收发报文时,节点进入跛足LimpHome状态,之后节点周期性的发送此报文

对于网络的休眠同步管理,OSEK直接网络管理提供了一个协商机制:休眠由网络上的某个节点发起,在发送的Ring报文中将Sleep.Ind置1,其他节点根据各自的状态进行确认,如果满足休眠条件则同样将Sleep.Ind置1,否则将Sleep.Ind置0;当网络上所有节点的Sleep.Ind都为1时,发起休眠的节点发送休眠确认报文(Sleep.Ack=1),其他节点在接收到休眠确认报文后停止发送Ring报文,同时启动休眠定时;当休眠定时到时,所有节点同步休眠。整个过程如下图所示:

2.1.2 OSEK间接网络管理

OSEK间接网络管理的策略与直接管理不同,间接网络管理主要通过监控节点的应用报文来间接监控网络的状态,这就需要有一个主节点来统一监控网络上的其他报文,被监控的节点需要有周期性发送的应用报文,如果某个节点正常情况下只接收而不发送报文,那么它需要发送特定的报文使它可以被其他节点监测到。

在间接网络管理中,被监控的网络节点有两个状态:

●在线:主节点接收到节点A的被监控报文,则认为A在线

●离线:节点A的被监控报文发生超时,则认为A离线

OSEK间接网络管理的休眠和唤醒策略采用主从方式进行,主节点在其一条应用报文中预留一个标志位,置“1”表示请求网络休眠,如果不请求休眠则置“0”。当达到休眠条件时,主节点请求网络睡眠,各节点在收到请求后即进入休眠。唤醒的过程则相反,主节点将睡眠标志位置“0”,然后各节点通过网络进行唤醒。

网络睡眠过程:

2.2 AUTOSAR网络管理

AUTOSAR是Automotive Open SystemArchitecture (汽车开发系统架构)的缩写,是一个制定汽车电子软件标准的联盟,AUTOSAR规范主要包含3个领域:软件架构、应用接口以及方法论。与OSEK相比,AUTOSAR架构模块化更清晰、扩展性更强,有利于车辆电子系统软件的交互与更新,降低电子系统的开发成本提高开发效率。

在AUTOSAR的规范里专门针对CAN网络管理进行了定义。AUTOSAR网络管理采用分布式的直接网络管理机制,各节点网络状态的转换基于节点请求网络的状态及周期性网络管理报文的接收。

AUTOSAR定义的节点的网络状态转换如下图所示:

从图中可以看出,各状态及转换关系与OSEK直接网络管理基本相同,不同的是AUTOSAR没有在网络管理中进行总线错误的处理。这一点,AUTOSAR规范将总线错误管理放到通讯管理模块来实现。

在AUTOSAR网络管理中,网络管理报文的发送即表示节点对于网络通讯有需求,各节点需要周期性的发送网络管理报文直至不再需要总线通信为止。

在网络初始化状态(Repeat Message State)和正常工作状态(Normal Operation State),各节点都要按设定的周期进行网络管理报文的发送,同时各个节点都定义了各自的网络管理报文发送时间偏移以防止报文突发。

当有节点满足休眠条件时,停止发送网络管理报文,此时网络进入准备休眠状态(Ready Sleep State);当所有节点都停止发送网络管理报文并网络空闲达到设定值时(NM timeout),网络进入总线预休眠状态(Prepare Bus-Sleep),随后如果没有节点唤醒的话则进入总线休眠状态(Bus-Sleep)。

AUTOSAR中对网络管理协议数据单元和在CAN总线数据帧中的映射进行了定义,网络管理协议数据单元包括节点标识域和控制位向量,节点标识域是各节点独立特有的标识,控制位向量中定义了网络初始化请求位(Repeat Message Request Bit)用于表示网络初始化的报文。其余6个字节由用户定义,可以增加网络唤醒原因域等。

为了降低网络正常工作时的总线负载,AUTO SAR网络管理还提供了一个网络负载降低机制,即在正常工作状态下,每个节点各自定义一个独立的周期时间参数(Reduced cycle time),在整个网络同时只有周期时间参数最小的两个节点发送网络管理报文。通过这种机制,在节点较多的网络可以大大降低网络负载。

2.3 SAE J1939网络管理

SAE J1939协议是由美国汽车工程协会(SAE)基于CAN2.0B规范编制,目前被广泛应用在商用车领域。

SAE J1939中对网络管理的具体规定在SAE J1939-81中体现,网络管理提供了用来唯一地识别网络中CA (控制器软件)的定义和过程描述,实现了对地址分配和网络错误的管理,但是对网络错误的管理仅限于地址声明方面的错误管理,另外,也没有对唤醒和休眠同步进行管理。

在SAE J1939中,每个节点都有唯一的地址和名字,其中地址长度为8位,用来保证报文ID的唯一;名字长度为64位,用来提供对节点CA的功能描述。

在SAE J1939中规定了3个网络管理报文用于网络管理:

1、地址声明请求报文:请求网络上CA的地址和名字

2、地址声明报文:为CA声明一个地址/公告不能声明地址。

3、命令地址报文:命令其他CA使用新的地址。

3、各网络管理协议对比

4、总结

通过对上述四种网络管理协议的介绍和简单对比,可以看出:

1)SAE J1939网络管理由于其功能的局限性,并不太适合国内的开发情况。协议中主要针对节点的地址分配和管理机制进行了定义,但没有定义同步休眠和唤醒的机制。在国内现有的开发模式下,整车的配置需求、网络通讯矩阵、节点供应商都比较明确,对地址管理的需求程度则变得越来越小;

2)OSEK间接网络管理相对比较简单,对网络的监控和节点的同步唤醒和休眠都有定义,且实时性较强。由于采用了主从结构的设计,如果主节点失效则整个网络管理就同时失效,使得其在使用过程中不够灵活和安全,适合于配置固定简单、对网络安全性要求不高的网络;

3)OSEK直接网络管理功能比较全面,且扩展性很强,由于采用了逻辑环的管理策略,网络中不需要指定专门的监控节点对网络进行监控,使得单独的节点在开发时相对独立,机制统一。但是当总线中连接的节点数量增加以后,令牌环在总线中传递一周的时间就会变长,网络管理的实时性就会降低。另外,功能全面的网络管理协议也会给节点的协议栈开发增加一定难度。

4)AUTOSAR网络管理与OSEK直接网络管理一样属于功能全面且扩展性很强协议,其在实时性和复杂度上较OESK网络管理要好一些。虽然目前行业内基于AUTOSAR的开发还未普及,但可以预见的是,它是未来汽车电子电气发展的一个趋势。

参考文献

[1]熊毅,郭杏荣,张倪,基于OSEK规范的网络管理的研究与改进,计算机应用研究,Vol.24 No.9 Sept.2007.

[2]W.齐默尔曼R.施密特加尔,汽车总线系统,机械工业出版社.

[3]AUTOSAR,Specification of CAN Network Management V3.1.0R4.0Revl.

基于CAN协议的多电机控制 篇3

关键词:CAN总线,协同控制,STM32

0 引言

电机协同控制系统在实际生产过程中的应用相当广泛, 如配料、工业切割、机械手臂、传动等生产过程必须多台电机协同控制。尤其是在大工件切割加工过程中, 由于电机比较多、分布比较广, 采用传统的控制器与电机驱动器一对一的脉冲控制模式, 不仅控制线路复杂, 抗干扰能力差, 且在控制过程中脉冲容易丢失或引进干扰脉冲、可靠性低。

现场总线打破了传统控制系统一对一的结构形式, 采用智能现场设备, 把传统的脉冲传送改为智能型总线数据传送并具有数据完整性校验和重发机制等纠错功能。近年来利用现场总线实现电机群控制有了较多的研究, 本设计利用CAN总线通信方式灵活, 通信速率高, 可靠性、实时性和抗干扰能力强[1], 且低成本的优点, 探索基于CAN总线的电机群控制系统, 通过编制控制协议改善电机群的协同控制性能。

1 系统设计

本系统设计分为硬件设计、CAN通信网络应用层协议设计、软件设计三个部分。

1.1 硬件设计

基于CAN总线的电机群控制系统的由运动控制器、步进电机或伺服电机 (4台) 及相应带CAN总线的电机驱动器等组成。通过CAN总线连接成一个完整的通讯网络, 实时传输各运行参数、控制命令。系统的控制对象主要是4台电机, 即M1:X轴向运动电机、M2:Y轴方向运行电机、M3:刀头上下移动电机 (Z轴电机) , M4:刀头旋转电机 (U轴) 。电机群控制系统结构图如图1所示:

1.1.1 运动控制模块

本系统的主控制CPU及各个模快控制CPU均选用的基于ARM Cortex-M3内核的STM32F103RBT6嵌入式处理器。该处理器带有64KB的Flash和20KB的SRAM资源, 主频为72MHz, 信号处理最高可达1.25DMips/MHz, 运算速度快, 非常符合电机群控制系统数据计算量大的需求。因该芯片内部带有2.0A和2.0B的CAN控制器, 不再需要另加CAN控制器, 给CAN通讯外围电路设计带来了便捷。主控制器负责位置、速度数据的运算, 将数据指令通过CAN总线发送各分布式控制模块。各节点运动控制模块接到命令后, 进行相应的操作, 驱动各自所带电机运动。

1.1.2 电机驱动模块

下位节点接收主控制器发送的数据, 并对数据进行分析处理, 将其转成脉冲信号送入步进电机驱动器。由于数据计算量大, 且要求运算速度快, 故下位机同样采用STM32芯片作为CPU。步进电机的驱动选用LV8731V芯片。LV8731V是2ch H桥驱动, 内置1ch PWM电流控制步进电机驱动, 能设定2相/1-2相/W1-2相/4W1-2相励磁模式, 只要输入STEP信号、励磁STEP就可以进行, 非常适合带动步进电机, 并且内置输出短路保护电路, 无需控制电源。切割机电机系统采用激光切割, 只需要一般的步进电机带动激光探头即可。所以这样的组合不需要额外的驱动设备, 结构简单, 性价比高, 非常适合切割机电机系统。

LV8731V的OUTA1, OUTA2, OUTB1, OUTB2管脚, 直接连接步进电机。LV8731V的DC12管脚与stm32 PA7管脚 (TIM1) 相连, 通过设置TIM1来调节输出的PWM波控制速度。励磁模式设定为8细分4W1-2相励磁模式, 通过stm32 PA6, PA7管脚来控制。设定DM接地, 使端子为STM模式, 能控制CLK—IN输入的1ch步进电机。

1.2 CAN通信网络应用层协议设计

CAN总线是一种有效支持分布式控制或实时控制的串行通信局域网络[2]。从OSI网络模型的角度来看[1], CAN现场总线仅仅定义了第1层即物理层、第2层即数据链路层 (见ISO11898标准) ;没有规定应用层, 需要一个高层协议来定义CAN报文中的11/29位标识符、8字节数据的使用。目前占领市场主流的应用层协议是:Device Net协议和CANopen协议[5]。但是Device Net和CANopen协议难度大、规范复杂, 开发周期长、成本高。针对本控制系统的控制对象为4台电机的情况, 根据CAN总线的要求, 必须研究一套简单而有效的高层通信协议。

1.2.1 CAN报文的分配

CAN一个数据帧[3]包括了帧起始、仲裁场 (标识符+RTR) 、控制场、数据场 (0-8bytes) 、CRC、应答场、帧结束。用户协议需要自行设计的为仲裁场、控制场和数据场。在本电机群控制系统中, 每一个节点有且只有一个其专属的地址, 地址码和系统中各电机模块对应, 总线上按照地址来传送数据。电机控制系统中主控节点为1, X轴、Y轴、Z轴、U轴电机节点依次为2、3、4、5。由于系统规模比较小, 节点数少于16个, 地址码设定为4位, 同一系统中地址码不能重复。目的地址的标识符定为ID3-ID0, 源地址标识符定ID7-ID4[5]。ID9-ID8定义为功能码, 用于表示报文所要实现的功能。两位标识符定义了4个功能码, 分别是:0X00表示对单个或多个节点写入数据;0X01表示断开与电机控制系统从节点的通讯连接;0X10表示和电机控制系统从节点建立通讯连接;0X11表示检测网络上的ID从节点是否存在[2]。ID10位定义为ACK响应位[4], 该位用来区分帧的类型。当响应标志位为0时, 表示发送的是命令帧, 节点需要应答。控制场有6个位组成, 标准格式里的帧包括数据长度代码、IDE位、保留位r0[5]。数据场由数据帧里的发送数据组成。它可以为0~8个字节, 每个字节包含了8位。第一个字节为命令, 接下来字节都为具体要发送的数据。发送的优先级由节点的ID决定, ID越小[4], 优先级越高。

1.2.2 数据通讯的实现

数据通讯定义了网络中传输数据的内容和传输的方式。电机群控制系统的CAN用户层协议通讯模式由主从方式和事件触发方式构成。两种模式搭配使用, 增强了通讯协议的灵活性。主从通讯模式用于CAN网络中的主站对于从站的访问。事件触发通讯模式用于从站主动向主站传送数据报文。

1.2.3 网络管理

网络管理的对象是于网络中节点和报文发送状态。对于CAN网络管理, 其主要任务是处理网络中的错误, 协调各个节点的状态, 监控报文的发送情况。可以分为节点控制和通讯控制两部分。节点管理[5]是指对总线上所有应用节点进行初始化, 让每个节点在通讯前处于准备状态并排除总线上是否存在相同的节点。通讯管理是管理网络中通讯的报文, 保证报文能够正常地接受发送。

1.2.4 电机设备协议的原则

电机设备协议是网络中电机设备的描述规则, 在本系统中对CAN应用层协议的电机描述设备以及要执行的命令参数定义见表1。

部分主要代码如下:

void CAN1_Init (void) , 在此函数中设置过滤器, 波特率以及管脚配置、中断配置;

void Init_Rx Mes (Can Rx Msg*Rx Message) , 初始化接收帧;

void CAN_Send Init (u8 addr) , 初始化节点, addr为目标地址, 当addr值取0X00时, 表示广播, 各节点都收到信息;

void CANSet Co (u8 addr, s32 co) , 设置坐标, addr为目标地址, co为设置的坐标;

void CANSet Speed (u8 addr, s32 speed) , 设置速度, addr为目标地址, speed为设置的速度;

void USB_LP_CAN1_RX0_IRQHandler (void) , 下位机CAN1接收中断处理函数, 更新线圈和寄存器。通过swtich语句来实现不同信息的处理。

1.3 软件设计

在电机群控制系统中, 系统软包括主控制器发送接收模块、运动控制器发送接收模块、CAN通讯模块。主控制器发送接收模块向各个电机的运动控制器发送运动信息 (设定位置、速度等) , 等待来自各运动控制器的反馈信息;运动控制器发送接收模块接收到来自主控制器的命令后, 对命令进行解析, 执行相应的操作控制电机, 并将电机的状态信息反馈给主控制器。CAN通讯模块负责主控制器与各运动控制器之间数据通讯。系统软件流程图如图2所示。本设计采用美国Keil Software公司出品的Keil u Vision4软件开发系统, 使用C语言来开发。

2 测试结果

在试验中, 用2个电机进行模拟测试, 主控制器 (节点1) 向X轴 (节点2) 和Y轴 (节点3) 两个电机的控制器发送指令, 将LA1032逻辑分析仪直接接入节点2和节点3的控制芯片的TIM1上, 同时测量节点2和节点3的脉冲波形, 通过对比分析两电机的协同工作情况及CAN通讯协议的通信效果。

按编制的CAN通讯协议, 节点1先发送一个广播帧对各站点进行初始化, 再向节点2、节点3同时发送周期为140us, 占空比为50%的脉冲;1ms以后, 向节点2、节点3发送周期为14us, 占空比为50%的脉冲, 两种频率不同的脉冲交替发送, 相隔时间为1ms。逻辑分析仪观察到节点2和节点3的波形图如图3。从图3可以看出, 两节点电机的执行命令的时间差在20us左右。表明通信协议是可行的, 两电机的同步控制误差比较小。

3 结束语

以STM32RBT6 ARM芯片为主、从控制器, 通过CAN总线利用总线广播模式实现电机群协同控制, 其CAN总线通信协议比较简单, 电机群的协同控制效果好, 且成本低, 可靠性高, 响应速度快, 该系统可实际应用于工件切割、数控钻孔。

参考文献

[1]邬宽明.CAN总线原理和应用的系统设计[M].北京:北京航空航天大学出版社, 1996.

[2]麦毅强, 倪文秀, 王仁龙.基于DSP的CAN总线通信技术研究[J].微计算机信息, 2010, 8-2:111-113.

[3]彭刚.基于ARMCortex-M3的STM32系列嵌入式微控制器应用实践[M].北京:电子工业出版社, 2011.

[4]刘涛, 王宗义, 孔庆磊, 武光田.基于CAN总线的多电机协调运动控制系统研究[J].机床与液压, 2010:38-3.

CAN网络协议 篇4

目前的汽车产业,其要求基本包括安全、方便、舒适、成本与低公害等,从而开发出了各种电子控制系统[1]。1986 年德国电气商博世公司开发了面向汽车的CAN通信协议[2],在此基础上实现了标准化的CAN。在开发了CAN等通信协议后,实现了多种LAN借助网关的数据交换[3]。如今,人们已经基本认同了CAN的高性能与可靠性,在工业自动化、医疗设备、船舶与工业设备等方面得到了广泛的应用。

文中在对时间触发和事件触发相结合的通信机制( TTCAN通信协议) 研究的基础上,分析TTCAN的特点和存在的不足,从理论上进行改进,并通过实验验证其可行性。

1 灵活的时间触发CAN协议

1. 1 结合时间触发和事件触发通信机制

不难看出,时间触发的系统活动建立在全局时钟上,所有的活动以这个时钟为准进行同步,周期地进行活动。在某个活动没有被轮到进行之前,难免存在延时,而延时的大小由于在计划之初就已经确定,所以是一个常数。基于控制的角度,较好的确定性,使系统稳定性得以增强; 而在事件触发的系统中,消息的产生带有随机性,而且传输延时随负荷的变化而变化,但是系统易于组合,灵活性较好。二者都有优势和不足,可以在不同的场合应用。

对事件触发与时间触发都支持是TTCAN通信协议的特点。然而,在调度表的仲裁窗口中传输的非周期性报文可能在其仲裁阶段或在其发送阶段,已经到了发送周期性报文的时刻。即在处理非周期报文时仲裁时间窗口或许会被超出,使周期性报文的发送受到影响。

为解决上述问题,本文提出了空闲时间的概念,即在异步窗口和异步窗口之间插入一定时间间隔的时间段,在次时间段内不允许任何操作。同时,也对调度表的结构进行了改变,如图1 所示,a为插入的空闲时间。

1. 2 同步报文系统

为了更好地进行通信服务,文中定义了两个子系统,同步报文系统( SMS ) 和异步报文系统( AMS) ,它们各自管理各自类型数据的传输。生产者- 消费者模型是SMS提供服务的基础,但是只提供基本的发送与接收服务是AMS的特点。以下是对二者的详细介绍。

SMS传输时间触发的报文,在此称为同步是因为它是同步于基本周期( EC) 的。实际上,EC的持续时间是用来描述时间触发通信的时间特性的基本时间单位。而且,EC的触发报文用来设置时间进程的步调,在它的数据场中详细地列出了在该EC中将要调度的同步报文如图2 所示。所有产生同步报文的节点都必须对EC的触发报文进行解码并核对它们是否为某个特殊报文的生产者,这个核对是通过扫描本地表单包含的报文的识别信息进行的,由此确定该报文是被该节点生产还是消费。

1同步报文请求表

同步报文请求表( SRT,synchronous requirement table ) 包含了以实际要求为依据所规定的同步报文的时间属性,公式如下:

式( 1) 中SMi为第i个同步报文; DLC为数据长度( 0 ~ 8bytes) ; 每一报文的最大传输时间( 包括填充位) 表示为C; Ph为相位; P为周期; D为截止日期; Pr为各同步报文的优先级; Ns为同步报文的个数。Ph ,P ,D都是基本周期EC整数倍。在SRT的基础上,针对即将发送的同步报文,主节点能够完成一个包括其时间特性调度表( Sch T ,schedule ta-ble) 的建立。值得注意的是,同步报文的优先级和它的标识符是不同的参数,两个优先级相同的同步报文标识符可以不同。如果两个报文( 像数据帧与相应的远程帧) 标识符相同,初始化同时进行,远程帧落后于数据帧。

2同步报文的灵活调度

以SRT在线调度器为依据完成每个EC同步调度的建立。这些调度被插入到EC触发报文的各自的数据域中并把它广播出去。因为必须在线完成调度功能,在有限的延迟后,SRT在运行过程中的改变将在总线的发送上反映出来,其灵活性很强。

本文采用计划调度,即基于软件的应用来降低在线调度的处理负载。这种方法包括为被称为计划的将来的一个时间段建立一个静态的调度表,并且在每个计划结束后重新在线建立调度表。该计划的持续时间与报文周期没有关系,因此存放计划调度表的空间是限定的并且事先知道的。这种计划调度器尤其适合由低运算能力的节点组成的系统( 例如,基于8 位的微控制器) 。

灵活的在线调度之外,灵活的时间触发CAN协议还有另外一层的灵活性,即调度策略的灵活性。因为借助SRT报文独立的标识符实现了调度,所以能够很容易地应用任一调度策略。

3同步通信的调度

专门为了同步通信而采用的调度模型不允许信息的传输超过同步窗口的界线。这可以通过利用插入空闲时间来实现,只要一个报文在给定的EC的同步窗口不能完成传输,就将被推迟到下一个EC中。因此,EC的触发报文通常的发送是不会受到阻塞的。

非抢占式的无阻塞调度,与在灵活的时间触发CAN中用来调度同步通信的调度模型非常相似。任务周期和截止日期都是基本周期的整数倍,运行时间通常要比基本周期短并且任务的激活通常是与基本周期的起始时间同步的。唯一不同的是,在非抢占式的无阻塞调度中,整个周期都是可以执行任务的,而灵活的时间触发CAN中同步发送被限制在每个EC的同步窗口中,该窗口最大长度为LSW。

1. 3 异步报文系统

事件触发通信的异步传输能够被灵活的时间触发CAN协议支持,其实现依靠AMS。这个子系统的工作方式和最初的CAN协议本身的分布仲裁机制很相似,并且继承了它在处理事件触发传输通信的效率。然而,在CAN仲裁的上层,AMS包含访问控制的另一层,其设定了这类传输在每个EC中异步窗口的界限。为了使SMS和EC触发报文受异步报文的干扰得以避免,可以将一个严格的时间间隔插入到两个子系统中。访问控制根据与EC触发报文相关的时间为每个异步窗口制定起始和结束时间。它对基于报文交换的控制形式没有任何要求,因此带宽得到有效的利用。

此外,那些有等待处理的异步发送请求的节点试图在异步窗口内立即发送。超过这个窗口,那些请求就得被保持到下一个窗口,然后再次进行仲裁。均衡而言,该技术缩短了响应异步请求的时间。在最坏的情况下,必须考虑由于总线被占用而导致的潜在阻塞,例如,超出异步窗口的时间。

1异步报文系统的通信服务

对于应用软件的报文发送是通过一个补充的基本服务叫做AMS_receive,它是一个模块化接收函数,允许等待明确的或不明确的报文。在接收节点,ASM也对来自网络的报文进行排队,直到它们被AMS_re-ceive服务程序重新检测到,队列的长度也是在配置时设定的,很像发送方的队列。在这种情况下,重要的方面是一个节点可以接收的异步报文的数目和在两个连续的检测之间到达的相同报文的数目。更为复杂可靠的交换,例如,请求确认和请求数据,必须用上面提到的两个基本的服务在应用层完成。

2异步传输调度

从传输调度的观点看,AMS遵循一个动态best-effort模式。当通信请求给定后,即便情况最糟,响应异步请求的时间也不是无限的。因此,支持用异步报文来传输像报警信息一样的实时数据。从最初的CAN协议继承了基本的调度策略,比如说优先级驱动,报文标识符选用固定的优先级。而且,调度利用插入空闲时间在两种传输之间执行一个严格的时间隔离,当超出异步窗口时,异步报文就不能传输了。

AMS可以利用的带宽是SMS和EC触发报文剩下的。所以,越重的同步负载,就会得到越短的SMS通信时间。然而,可以通过为同步窗口设定一个最大的持续时间,从而可以保证AMS得到一个最小的利用带宽。如式( 2) 所示:

在式( 2) 中,下边的式子可以计算在每一个EC的同步调度的结构中可能的插入空闲时间段( Cs为其上限) 。这个修正对于异步传输的调度分析是十分重要的,因为它允许像同步报文在EC中同步释放一样考虑异步请求响应时间的临界时刻。

对实时异步通信请求的设置放在一个名叫异步请求表( Asynchronous Requirement Table,ART) 中,如式( 3) 所示:

式( 3) 中AMi为第i个实时异步报文,除了截止时间不是E的整数倍外,DLC ,C和D与SRT中参数一样,miti为最小内部到达时间( minimum inter-arrival time) ,报文的优先级用Pri来表示,表示为CAN协议的标识符,实时异步报文的个数用NsRT来表示。另外,许多非实时异步报文也同时存在,要使灵活性得以保证,放低其优先级规定的同时,任何限制不能再有。AMnrt表示此类非实时异步报文。

调度表在生成时其最大值law( k) 就能由同步窗口确定,同时也可以确定触发报文( TM) 的值( LTM) ,所以,通过式( 3) 就能计算出异步窗口的大小。以式( 3) 为依据,每一基本周期中异步窗口的最小值就能被主节点计算出来,在触发报文广播到每个节点间,在节点将总线使用权取得后,比较将要发送的异步报文的最大执行时间与剩下的异步窗口,若没有足够的时间将该报文发送,就将空闲时间插入,延迟至下一个EC再发送该报文,从而使时间触发的周期性报文的时间特性得以保证。

2 软件设计及实验分析

2. 1 实验平台

总线数据采集部分与CAN通信部分共同构成了实验平台。其结构图如图3 所示。在CAN通信部分设置了一个主节点、一个备用主节点和四个从节点,它们的节点ID分别为0 × 01、0 × 02、0 × 10、0 × 20、0 × 30。CANalyst - I单路CAN分析仪用于数据采集部分。

对CAN总线网络进行安装、开发、测试、维护与管理是CANalsyt分析软件的功能。其32 位应用程序符合Windows 9X/ME /NT/2000 的标准,相关于操作系统的全部优势都在该工具中得到了体现,像多任务、剪切、粘贴与统一操作不依赖于程序等等。

以ZLGVCI( ZLGCAN软件驱动接口模块) 为基础的CANalsyt分析软件,能够在多个品种的ZLG-CAN智能CAN接口卡上运行,并且可以对11 位标志符模式( CAN2. 0A协议) 与29 位标识符模式( CAN2. 0B协议) 的CAN报文进行处理。

2. 2 实验数据分析

仿真实验设计的软件,结果如图4 所示。

从图4 中可以看出,主节点首先将第一个基本周期的触发报文发送给各个从节点,发送周期性报文的节点通过解码得知本周期是否要发报文; 作为对非周期性报文进行发送的节点,节点0x40 在触发报文与同步时间窗之间完成一组报文的随机发送。满足了按前文所述的基本周期顺序发送报文的要求。

3 结束语

文中以FTTCAN为基础,对其进行了改进,提出了在线生成调度表的方法。主节点在每一个调度周期完成后根据各个节点的情况,按照事先设定的生成策略自动生成。当网络发生变化时,主节点能够及时得知,重新生成新的调度,这样增加了应用的灵活性。同时,由于同步报文调度是通过同步报文请求表中报文的独立的标识符来实现的,因此,比较容易应用任何调度策略。

摘要:针对目前通信机制和调度算法CAN灵活可靠性问题,提出了一种基于FTTCAN的时间触发CAN通信协议,借鉴了FTTCAN关于事件触发和时间触发结合的通信机制。异步窗口与同步窗口对基本周期进行划分,传输方式用非周期报文与周期报文分别进行;将空闲时间插入两者之间,使非周期报文与周期报文的时间隔离得以实现。还提出了在线生成调度表的策略,即一个调度周期完成后,主节点再根据系统中节点的信息生成下一个调度表,实现了调度表的在线动态生成。实验表明,证明该协议不仅可以满足事件触发的灵活性,而且也可以满足时间触发的时间性,文中提出的通信机制和调度算法对CAN灵活可靠应用具有一定的参考价值。

关键词:时间触发,事件触发,空闲时间,EDF

参考文献

[1]王书举,张天侠,张国胜.车载CAN和FTTCAN网络设计与调度策略[J].农业机械学报,2011(2):7,14-17.

[2]高峰,吕广申.CAN总线调度算法的改进[J].佳木斯大学学报:自然科学版,2011(2):213-214,219.

[3]基于CAN总线的CANopen协议讲座(13)风电变流器设备CANopen通信的快速实现——基于CANopen协议的XGateCOP10应用[J].电子技术应用,2011(9):26-27.

[4]詹思瑜,李建平.基于遗传算法的Ad hoc路由协议优化[J].小型微型计算机系统,2012(1):24-27.

[5]Almeida L,Pedreiras P,Fonseca J.The FTT-CAN Protocol:Why and How[J].IEEE Transaction on Industrial Electronics,Dec.2002,49(6):1189-1201.

CAN网络协议 篇5

关键词:CAN总线协议,嵌入式系统,应用

随着计算机技术和自动化技术的不断进步, 嵌入式系统也在发生着变化, CAN总线是在嵌入式系统比较常用的一种总线技术, CAN总线具有通信速率高, 可靠性高, 连接方便, 性价比高的特点, 总线利用率高, 信息帧最多只含8个字节, 能够在强电磁干扰环境下进行远距离传输, 因此在嵌入式系统中得到了广泛的应用。

1 CAN总线简介

CAN是Controller Area Network的缩写 (以下称为CAN) , 是ISO国际标准化的串行通信协议。CAN通过ISO11898及ISO11519进行了标准化, 现在在欧洲已是汽车网络的标准协议。广泛应用于控制系统中的各检测和执行机构之间的数据通信。它是一种多主总线, 通信介质可以是双绞线、同轴电缆或光导纤维。通信距离最远可达l Okm (5kbps) , 通信速率最高可达1Mbps (40m) , 网络节点数实际可达110个, 每一帧的有效字节数最多为8个, 这样传输时间短, 受干扰的概率低;通信介质采用廉价的双绞线即可, 无特殊要求;每帧信息都有CRC校验及其它检错措施, 数据出错率极低, 可靠性极高, 在传输信息出错严重时, 节点可自动切断它与总线的联系, 以使总线上的其它操作不受影响。

2 系统的硬件设计

2.1 处理器

S3C2410处理器是Samsung公司基于ARM公司的ARM920T处理器核, 采用0.18um制造工艺的32位微控制器。该处理器拥有:独立的16KB指令Cache和16KB数据Cache, MMU, 支持TFT的LCD控制器, NAND闪存控制器, 3路UART, 4路DMA, 4路带PWM的Timer, I/O口, RTC, 8路10位ADC, Touch Screen接口, IIC-BUS接口, IIS-BUS接口, 2个USB主机, 1个USB设备, SD主机和MMC接口, 2路SPI。S3C2410处理器最高可运行在203MHz。

2.2 CAN控制器

SJA1000是一种独立的CAN控制器, 主要用于移动目标和一般工业环境中的区域网络控制。它是Philips半导体公司PCA82C200 CAN控制器 (Basic CAN) 的替代产品, 而且它增加了一种新的操作模式——Peli CAN, 这种模式支持具有很多新特性的CAN 2.0B协议。SJA1000采用了两种工作方式:Basic CAN方式 (PCA82C200兼容方式) , Peli CAN方式 (扩展特性方式) 。提供INTEL和Motorola两种寻址方式, 地址线和数据线分时复用, SJA1000基于寄存器编址, 可以通过读写寄存器来操作它。工作方式通过时钟分频寄存器中的CAN方式位来选择。

2.3 硬件设计

S3C2410是由3.3V供电的微处理器, 其各个IO引脚是3.3V的TTL电平, 可以承受5V的电压。作为CAN控制器的SJA1000是5V供电, 其各个IO口的电平是5V的TTL电平, IO可以直接相连。S3C2410的P0-P8与SJA1000的AD0-AD7直接相连实现数据交互, P13、P14、P15、P12分别与SJA1000的ALE/AS、RD/E、WR、CS相连实现读写和片选, n RST、EINT5分别与SJA1000的RST、INT相连实现复位和中断。SJA1000的TX0, RX0分别与CAN收发器的TXD, RXD相连。系统结构框图如图1所示。

3 系统的软件设计

本系统的软件开始基于Wince系统的, 因此本系统的开发工具是Platform Builder。Platform Builder是微软公司提供给Windows CE开发人员进行基于Windows CE平台下嵌入式操作系统定制的集成开发环境。它提供了所有进行设计、创建、编译、测试和调试。

3.1 CAN初始化

CAN初始化主要包含系统的复位, 进行标志为的判断, 设置模式寄存器, 进行模式的设置, 写复位标志, 控制器外部中断的设置, 完成CAN的初始化。具体流程如图2所示。

3.2 CAN总线驱动的开发

根据wince驱动的开发流程, 本系统的CAN总线驱动开发采用流接口驱动模式。主要要实现以下几个模块函数的实现, 最总完成整个CAN总线的驱动的开发。包含CAN_Open、CAN_Close、CAN_Read、CAN_Write、CAN_Io Control和CAN_Init等模块。其中CAN_Init模块是系统启动时由文件系统自动调用的, 主要完成设备的初始化工作。另外, 对于流接口驱动程序可选函数CAN_Power Up和CAN_Power Down, 主要实现电源管理的功能。

4 总结

该文采用CAN控制器SJA1000和嵌入式处理器S3C2410来实现CAN总线的功能。详细的介绍了CAN总线技术在嵌入式开发过程中的应用。通过测试验证, 在实验室环境条件下, 系统运行效果良好。相信随着计算机技术的不断发展, CAN总线技术也一定会得到更加广泛的使用。

参考文献

[1]广州致远电子有限公司.CTM8251从CTM8251AT通用CAN隔离收发器Rev1.00[Z].2007-12-25.

[2]广州周立功单片机发展有限公司CAN-bus网络电缆与插座的选择[Z].2004-08-06.

CAN网络协议 篇6

舰船同步相量测量装置(Phasor Measurement Unit——PMU)用于对舰船电力系统同步相量进行实时采集和动态监控。目前针对PMU的研究,基本上都是基于UDP协议定义的。对于IEEE1588(the Precision Time Protocol——PTP)的应用也都是基于此协议。但是这种基于以太网的研究技术连接的方式是星型连接,而且每次数据交换的时候都需要通过交换机。目前对于底层硬件通信,很多厂商生产的设备都是基于CAN协议的,很多标准化硬件底层通信设备也都是基于CAN协议的。所以这种基于UDP协议的PMU在这些设备中的无法正常使用。

针对上述问题,本文根据IEEE1588协议提出一种基于CAN现场总线的时钟同步方法,制定了一个CAN 应用层协议。设计出只针对舰船电力系统PMU的通信协议,将IEEE1588协议嵌入到CAN应用层协议。对CAN总线标准帧进行全新定义和合理分配,从而实现基于CAN 总线的精确时钟同步。

1 1588精确时钟同步报文交换模型

网络时钟同步协议从最早的RFC778到后来网络时钟协议NTP和再到SNTP,这些协议都无法达到所要求的精度和收敛速度;而最近几年新兴的基于IEEE1588网络精确时钟协议(PTP)的时钟同步方式,它所定义的网络结构可以使自身达到很高的精度,时间戳更容易在硬件上实现,并且不限于应用层。这使得PTP可以达到微秒以内的精度,此外,PTP模块化的设计也使得它更容易适应低端设备,这些优势都是NTP等其他协议无法比拟的[1]。

在分布式系统之中,存在着各种各样的电气设备,这些设备都可以看成是一个或多个时钟节点。根据这些设备在工作中的状态和作用,可以将他们划分为主时钟或者从时钟。主时钟节点作为整个子域的基准时钟,各子节点通过与主时钟节点的信息交换来达到与主时钟的同步。

1588协议时钟同步过程如图1所示,由同步报文来计算网络延迟和时钟偏移,主时钟周期性(一般为2 s)地向从时钟发送Sync报文并且记下准确发送时间tm1。从时钟记录Sync报文精确到达时间ts1,主时钟随后发送携带tm1的Follow_Up报文。从时钟向主时钟发送一个延迟请求Delay_Req报文并且记录该报文的精确发送时间ts2,主时钟记录Delay_Req报文到达的准确时间tm2,随后在Delay_Resp报文中把ts2回发到从时钟。假定传输路径是均匀对称的,即Td1=Td2。根据ts1、ts2、tm1、tm2由下面公式计算出报文的传输延时Td和主从时钟偏差TOffset[2]。

通过计算即可得到主从时钟延迟,然后对从节点时钟进行偏差补偿,即可实现二者精确同步,其时钟延迟计算如下:

Τd=(Τs1-Τm1)-(Τs2-Τm2)2

TOffset=Td+Τ1-Τ2。

2 CAN总线下的时钟同步过程

CAN总线是一种串行总线通信协议,网络上各主从节点都是通过总线上CAN时钟同步报文的收发来实现彼此同步。要使网络中所有节点在建立统一时间坐标(即同步)的基础上达到比较高的时钟精度,节点自身的时钟分辨率(即时钟所能精确表示的最小时间刻度)和节点时钟抖动必须尽可能高[3]。

STM32微处理器内置的定时器当CPU时钟频率为100 MHz时,其分辨率为10 ns。同时STM32微处理器内部带有硬件时钟标记单元,可以对流过物理层的报文进行时钟标记,因此,基于STM32微处理器实现时钟同步是可行的[4]。

假定网络上有多个PMU时钟节点,选定一个时钟作为系统时钟源,总线上的其他PMU节点都为从时钟,由于以太网可以通过ID设置来实现广播和单播,而CAN总线中却缺乏这项功能。本文通过对11位报文标识符定义和节点接收掩码设置,实现了CAN报文的广播和单播方式。首先由主时钟进行时钟同步命令的发送,通知从节点即将开始同步,广播Sync报文和Follow_Up报文,从节点则单播Delay_Req报文和Delay_Resp报文。总线上的报文数据多种多样,为此必须判断接收FIFO中报文类型。如果是时钟同步报文,由硬件标记单元记录报文接收时间,并进入到同步报文处理模块中进行处理,计算报文传输延迟以及主从时钟偏差,然后将其传递给PTP时钟单元,调节自身时钟以与主时钟同步[5]。

同步之后,各PMU节点开始向总线上发送相量数据,由上位机程序接收处理。图2为采用STM32微处理器CAN模块下的报文处理流程。

3 CAN应用层协议的制定

同步相量采集单元底层通信是基于CAN现场总线的,本应用层协议用于同步相量采集装置的同步报文和数据采集报文的传输过程,规定通信过程中的波特率为800 kbps,使用数据帧和远程中,数据帧用于发送和接收同步报文时间戳信息以及PMU采集数据,远程帧用于请求数据报文发送[6]。

3.1 报文格式的制定

由于同步相量采集单元采集到的是实时数据量信息,因此对于相量参数报文,必须包含相应的参数信息以及时间信息,记录相量参数的采集时刻,然后上传到CAN应用程序以及上位机程序。对于同步报文来说,必须包含报文发送和接收的准确时间信息,故定义数据域为2字节时间戳信息,数据域定义从字节0到字节8递增的顺序定义,未用到的字节作为保留信息。本协议以CAN2.0帧结构为基础,对CAN协议标准帧中11位标识符和8字节长度数据域进行重新定义和分配,通过格式的定义来对CAN报文标识符和数据域进行定义,使CAN报文数据具有特定的含义和作用,以用于节点之间的同步和数据量的传输[7,8]。

3.2 报文功能定义

报文对象类型定义。

3.2.1 NMT报文

NMT报文用于各节点ID设置,标识符为报文编号、节点ID,数据域部分包括同步报文发送周期和相量参数报文发送周期,以及节点状态发送周期。为0时表示取消定时发送功能,其报文格式定义为:

3.2.2 同步报文

同步报文包括Sync报文,Follow-Up报文,Delay-Req报文,Delay-Resp报文,同步报文用于节点同步计算单元,报文格式定义为:

3.2.3 相量参数报文

同步相量参数报文包括Phasors、Freq、Dfreq、Analog、Digital报文等。报文用于测量监控电力系统网络中各同步相量参数瞬时数据,Phasors报文表示相量数据,由6个字节表示,包括两字节幅值,两字节相角,以及两字节瞬时时间信息;Freq报文表示频率偏移量,同额定频率的差值,表示为(Hz×103),取值范围,-32.767 到+32.767 Hz,用16位有符号整数表示;Dfreq报文表示频率的变化率,表示为 (Hz/s×102)取值范围,-327.67 到+327.67 Hz/s,使用16位有符号的整数表示;Analog报文表示模拟量信息,使用16位有符号的整数表示,模拟量可以是采样量,例如控制信号或者变换器的值,数值的取值范围由用户自定义。Digital报文表示开关量状态字,按位对应的开关量通道状态,0表示对应位开关状态为打开,1表示对应位开关状态为闭合。同步相量报文格式定义为:

3.2.4 节点状态心跳报文

Heartbeat报文用于表示节点工作状态,节点配置为周期性地发送自身的状态信息,定时时间为5 s,其中字节0用于节点工作状态,状态数值0表示启动节点,1表示停止,2表示工作,当一个采用了Heartbeat通讯协议的节点启动后,发出一次启动报文,然后以固定频率发送心跳报文。心跳报文报文格式定义为:

基本功能码:ID.10-1D.7,基本功能码定义了NMT报文,同步报文和同步相量参数报文传输功能,它可以定义16种通信功能,由CAN总线的仲裁机制可知,这些标识符的定义也包含了报文信息的优先级顺序。同步相量采集器必须先同步,然后再进行相量采集,因此定义同步报文优先级高于相量报文,定义Sync为0001,Phasors为1000。

预留功能码:ID.6-ID.5,预留功能码用于添加附加功能,如请求应答、输出控制信息等功能,和ID.10-ID.7联合起来使用,可以定义多达64个报文对象,ID.5表示报文传输方向,0表示报文下行,1表示报文上行。

设备节点的定义:ID.4-ID.0,一个总线网络中有多个时钟节点,协议使用标识符的第五位,可以用来定义32个不同节点。这些节点可以是开关量输入模块,开关量输出模块,数据采集模块或传感器模块等,每个节点可以向总线上发送和接收不同的报文,如节点管理配置报文,同步报文和数据采集报文等,目标节点编号表示不同节点发送的报文信息相互不受影响,协议中节点定义为总线上不同的PMU数据采集单元等通过对节点ID进行验收滤波,即可实现同步报文的广播和单播。

4 结语

本文定义了基于CAN现场总线的同步相量应用层协议,并对CAN总线网络中各节点时钟同步和相量参数上传,该应用层协议已经在船舶综合电力数据采集分析系统等中得到了应用,得到的数据很好的反映了系统运行状况。

摘要:同步相量采集装置用于对舰船电力系统同步相量进行实时采集和动态监控。定义了基于CAN现场总线的同步相量通信应用层协议。对同步报文和相量报文的帧格式进行了定义。实现了CAN总线的单播和多播通信,很好地满足PMU通信要求。

关键词:同步相量测量,CAN应用层协议,帧结构

参考文献

[1] IEEE Std 1588—2004.Precision clock synchronization protocol fornetworked measurement and control systems.IEC61588-2009

[2]魏丰,孙文杰.IEEE-1588协议时钟同步报文的精确时间标记方法研究.仪器仪表学报,2009;(1):162—168

[3]常富杰,陈刚,魏巍,等.基于CAN现场总线的时钟同步的设计方法.自动化技术与应用,2004;(2):43—44

[4]张小强,谢鹏程.基于STM32F107VC的IEEE 1588精密时钟同步分析与实现.现代电子技术,2011;(7):172—174

[5]吴歆馨.基于IEEE1588高精度网络时钟同步系统的研究.武汉:华中科技大学,2007

[6]饶运涛,邹继军,王进宏,等.现场总线CAN原理与应用技术.北京:北京航空航天大学出版社,2007

[7]马昕,路亚娟.鱼雷制导系统CAN应用层协议的制定.兵工自动化,2006;(11):1—5

CAN网络协议 篇7

SAE-J1939协议是美国汽车工程师协会SAE制定的以CAN2.0B为基础的车辆网络串行通信标准,其在CAN2.0B的基础上增加了传输层、网络层、应用层,是目前CAN通信网络中应用最广泛的高层协议之一。工程机械引进ECU电喷发动机,发动机的工作状态和参数由原来仪表模拟采集变成ECU集中采集,并通过CAN总线遵循SAE-J1939协议对外传输,传统的模拟监控仪表盘无法兼容新型ECU电控发动机,针对现状我们设计了基于SAE-J1939协议的CAN总线仪表盘。

1 SAE-J1939协议介绍

J1939网络模型共定义为7层,下面的层对应的J1939标准文件是经常用到的:Layerl-J1939/11:物理层,要点是通信的电气信号和波特率250 kbps;Layer2-J1939/21:数据层,要点是PGN(参数组)的请求与响应和多帧传输机制;Layer3-J1939/81:网络层,要点是节点地址的申明与响应;J1939/71:车辆应用层,也是最重要的一层,定义了常用物理参数的格式及参数组编号、优先权、响应时间,数据刷新及数据的长度、分辨率、取值范围和类型等;J1939/73:诊断应用层,主要用于故障诊断。

SAE-J1939报文是以PDU(协议数据单元)为单位,由优先权(P)、保留位(R)、数据页(DP)、PDU格式(PF)、PDU细节(PS)、源地址(SA)及数据域(Date Field)等7个域组成,如表1所示。除了数据域外对应于CAN扩展帧的29位标识符,其对应关系如表2所示。PS是一个8位段,其定义取决于PF值。若PF值小于240,PS是目标地址(DA);PF值于240和255之间,PS为组扩展(GE)。

车辆应用层规定车辆使用参数的数据长度、数据类型、分辨率和数据范围等,其使用PGN作为一组参数的标号。一组参数称为“参数组”(PG),PGN是其唯一的标识号。参数组内有1个或多个具体的参数,每个具体参数都有一个唯一的标号即SPN。

2 系统设计

仪表盘系统由信号采集、处理、显示、CAN总线通信等模块组成。如图1所示,通过模拟量信号采集滤波电路,脉冲信号变换整形电路和CAN总线信号收发器转换后发送至主控制器,主控制器处理后的信号通过步进电机驱动器控制仪表步进电机指示,驱动LCD液晶屏显示。CAN总线的数据通信遵循SAE-J1939协议获取发动机转速、水温和故障代码,其他信息(包括车速、油量、气压)则从相应传感器以模拟量和脉冲量形式获得。

主控制器采用SILICON LABS C8051F500微控制器。它是基于高速51内核的汽车级微控制器,内嵌CAN控制器、A/D转换器、模拟比较器、I2C接口等功能模块,降低了外围电路设计成本。CAN控制器模块支持CAN2.0B协议,符合SAE-J1939协议的扩展帧报文传输要求,这些特性完全满足CAN总线仪表盘需要。采用专用的步进电机驱动器VID6606驱动表针。每片VID6606同时驱动4路步进电机。在其频率控制端输入脉冲序列F(SCX),可控制输出端使步进电机的输出轴以微步转动,每个脉冲对应电机输出轴转动1/12°,最大角速度可达600°/s,满足仪表指示的高精度、快速响应要求。LCD屏采用12864点阵液晶模块,由主控制器驱动显示,支持中英文显示。

软件采用KEIL编程调试软件编写。通过C2调试器与C8051F500的C2端口连接,实现在线仿真调试。首先初始化系统时钟、CAN节点、LCD液晶屏、步进电机等,并使CAN中断,设置CAN屏蔽码和验收码。初始化后,读取CAN总线和其他传感器信号。控制步进电机和液晶屏显示处理数据。等待CAN总线接收中断产生,判断总线数据是否满足屏蔽条件,如满足屏蔽条件从寄存器读取数据并存人缓存区,再根据SAE-J1939协议计算发动机转速、水温和故障代码信息,传输至步进电机和液晶屏显示。例如:接收的数据为:0CF00400××××××4F55××××××(×v为任意数据),根据SAE-J1939-71协议,此报文为:PGN61444一电子发动机控制器。因此,可得第4、5字节为发动机转速,并遵循低字节在前高字节在后的传输方式,则发动机转速=原始数×分辨率+偏移量=21 839×0.125+0=2 729.875 r/min。同理可计算其他所需参数。

3 结语

本文在研究CAN总线通讯协议及SAE-J1939协议的基础上,实现了基于SAE-J1939协议的CAN总线数字仪表系统设计。该数字仪表系统工作稳定、性能良好,目前正进行装车试验。随着欧洲排放标准在国内的推广,CAN总线数字仪表的应用必将进入快速发展阶段。

参考文献

[1]王华平,苗长云,陈弘,等.基于CAN总线的电动汽车车门控制系统的设计[J].微计算机信息,2006(26)

上一篇:油田基础建设工程管理下一篇:艺术的本质观