在CAN网络的开发初级阶段,我们首先是面临着一个工程问题,比如说一个汽车ECU网络的开发。开发第一步,是需求分析的定义,即定义在这个网络里的通讯需求:需要有几个节点;在网络中定义发送多少个具体的报文(Meage);数据分别是从哪个节点传送至哪个节点;每个报文的具体的组成--信号(Signal);同时为了描述一些外部的输入输出,就要加上环境变量。在这一过程中,我们可以利用到Vector公司的网络数据库工具CANdb++,利用它可以定义和管理分布ECU网络的通讯数据,能检查出概念定义的一些错误及时改正,网络设计也能得到优化。接下来,我们需要从功能建模,仿真分析,系统部分实现到系统的全部实现这几个步骤。而利用Vector提供的CANoe能支持上面的四个开发步骤。我们将前两者综合成一个开发阶段因此提出开发分为三个阶段:
第一阶段是进行功能建模和仿真。这一过程,主要是针对有具体数据定义的报文的事件处理,也就是网络节点的行为定义,可借助CAPL很好的来实现。这是在CANoe的环境中的一种类似于C的语言,利用它可以对比如说一个报文的接收,环境变量的改变或错误的出现等事件进行处理。同时因为CANoe的开放性,我们能使用现有的成熟的算法、函数和模型来扩充自己函数的功能,复杂模型的建立甚至还可以通过其他的建模工具(如Matlab)。接下来就是利用软件进行系统的虚拟的仿真来检验功能的设计,在CANoe中将所设计的完整的软件模拟节点系统进行离线的仿真,来检验各个节点功能的完善性以及网络的合理性。
第二阶段是系统部分的实现。在第一阶段结束后,我们能得到整个完整的系统功能模型。接下来我们开发自己的真实的控制器节点,利用总线接口和CANoe剩下的节点相连接,来测试自己节点的功能:如通信,纠错。这样,如果我们系统的节点是并行开发的,就可以不受其他节点开发步骤的影响。在这一阶段中,一些环境变量的获取可以通过不同的方法来实现从而模拟出一个真实的总线环境。
第三阶段是整个系统的集成。开发的最终阶段我们逐步把所有的节点都用真实的来代替实现,CANoe只是观察分析的工具了。在这个过程中,整个系统,包括各个功能节点都能详细的检查到。由于利用功能模块取代真实的网络节点能减少错误的发生,因为通过这两种状态的切换能检查其功能。
在开发的第二阶段和第三阶段,Vector公司能为开发提供各种不同用处的工具。比如说针对具体的芯片和功能的源代码(有CANopen,DeviceNet,J1939的源码);符合OSEK的实时多任务操作系统OCAN;总线强大分析工具CANalyzer;各种不同的硬件工具如网络示波器CANcope、网络干扰生成器CANtre等。
当系统都实现之后,有可能要对系统进行测试或者是对其进行标定。在这个方面Vector又提供了测试和标定软件工具:CANape。它可以利用现有的标定协议在控制器实时运行的情况下对一些需要标定的控制参数进行在线标定。CANdid这是对CANopen网络进行动态测试一种工具。还有多种不同功能的硬件工具。
CAN网络仿真
可以采用德国Vector公司提供的CANoe(CANOpenEnvironment)进行设计和开发,这样的开发平台也是在欧美各大汽车厂商广泛采用的。
CANoe(CANOpenEnvironment)是一套可用于CAN开发设计所有阶段的强力工具。由于它的开放性结构,因此可以用来解决所有CAN开发的复杂问题。它提供了多种图形或文字化的功能窗口或是仪器面板来对分布式网络进行仿真和分析。CANoe因为其具有可编程功能,其中利用集成的CAPL(CANAcceProgrammingLanguage),一种基于事件的面向对象的可编程语言可以实现对网络节点的建模设计。也可以利用CANoe和其他建模工具如
Matlab/Simulink的接口来实现建模。
利用CANoe进行CAN系统的设计一般分为三个开发阶段。三个阶段分别是:利用数字仿真进行网络需求分析和设计阶段;节点实现和半物理仿真阶段;全系统集成阶段。各开发阶段如图所示:
阶段1:利用数字仿真进行网络需求分析和设计阶段
开发第一步,进行系统全部功能及分布式设计并且明确网络节点的层次。这就包括定义报文和选择总线的波特率。然后必须明确单个节点的网络行为(例如周期发送或更复杂的协议)。接下来,可以通过CANoe建立各个网络节点的模型进行仿真来预估在设定波特率情况下的总线负载和延迟。为了进一步精确的研究,可以通过CANoe建立整个系统的动态功能模型。这包括了网络节点的根据变量输入输出和报文收发的特定行为。这用到了CAPL语言的基于事件来描述行为的原理。举个例子,模型可以描述当某一节点收到一个报文的时候(事件),利用程序对数据进一步进行处理并且结果作为一个控制变量输出。用户必须指定输入输出变量以便网络节点的时间行为和报文累计的仿真。通过仿真来检验各个节点功能的完善性以及网络的合理,可以监控网络负载和延迟。阶段2::节点实现和半物理仿真;
在第一阶段设计之后,通常网络的各个节点是由不同的开发者承担设和开发的,而且这些开发是并行独立进行的。对于这样一种并行工程各个节点的开发通常需要一个全系统的测试环境。这样就可以利用到前一阶段所得到的全数字仿真系统,利用总线的实时接口和CANoe剩下的节点相连接,来测试自己节点的功能:如通信,纠错。对于并行开发的节点,就可以不受其他节点开发步骤的影响。在这一阶段中,一些环境变量的获取可以通过不同的方法来实现从而模拟出一个真实的总线环境。阶段3::全系统集成
在开发的最后阶段,所有的真实网络阶段按顺序的一步步连接起来实现全系统。CANoe只是监控和观察分析的工具了。在这个过程中,整个系统,包括各个功能节点都能详细的检查到。由于利用功能模块取代真实的网络节点能减少错误的发生,因为通过这两种状态的切换能检查其功能。
前面所讲到的节点的输入输出信号可以借助环境变量来描述。利用CANoe可以区分连续的或是离散的变量。例如开关的位置可以用离散的环境变量表示,发动机的转速或是温度则可以用连续环境变量表示。控制面板为环境变量提供一个友好的用户接口,可以模拟一个直观的车辆运行外部环境如汽车仪表显示等。用户还可以自己进行开发仪表界面来适应自己特殊需求。在仿真过程中,环境变量可以进行显示也可以进行修改。
另外CANoe还包括一些可以进行CAN的上层协议设计开发和分析的功能,如加入CANoeOptionJ1939就可以进行基于J1939的分析了。利用其数据库编辑工具CANdb++可以建立基于J1939协议的数据库,然后将优化精简过后的数据库数据录入到数据库文件中,将来所有的开发设计都基于这样一个数据库。因此,利用CANoe强大的仿真分析功能,第一步可以在实验室环境下建立离线的数字仿真全系统模型,将
设计的协议在计算机进行一个测试和验证。来进一步优化网络设计。
Q:有关J1939协议的问题
在应用层使用J1939协议采用CANoe和Matlab/Simulink软件能实现离线仿真吗?我想开发一个节点(比如AMT)J1939协议能在一台PC机上进行测试和验证吗
A:可以,CANoe实现网络通信的仿真,配合Matlab/Simulink则可以实现整个网络系统(包
含AMT动态控制)的仿真
Q:请教个关于CANoe的问题。现遇到这么个问题:
两个节点通讯,节点1通过两个按键分别发两个不同报文给节点2。可无论我按哪个按键它都是是将第一个报文发出去,我就是将这个按键的触发事件及对应的报文给删去,当我运行程序时还是发第一个报文所对应的ID,只是数据域对应的数据不正确。请问这个问题该怎样解决,是不是我那儿设的不正确。请答复一下,谢谢了!
A:在CAPL中进行报文定义时可用meage进行定义,但是在针对J1939进行报文定义时用PG(ParameterGroup)命令
Q:请教如何在CANoeLIN仿真的imulationetup界面中定义主机节点和从机节点?是否仅有在数据库中定义一种方法?另外LIN的报文发送是否必须在数据库中定义进度表?如果不定义是否还有其他发送LIN报文的方法?
A:我先简要回答一下你的问题吧,因为时间久了。
从主节点定义是需要在数据库中定义的。先需定义进度表,或者你可以试一下Gernerate模块
Q:对于CANOE的一些担心
CANOE功能的确比较丰富,但大部分功能属于监测性质,而如果仅仅需要总线监测,其实有很多价廉物美的实现方案;而对于其独有的总线网络系统的仿真开发功能(目前尚未发现其他软件有此功能),虽然表面上对开发很有用,但其开发过程的操作和实现过于独立(一个人一台PC即可),不
利于团队工作,不知道在大型复杂系统开发中怎样能协调团队开发与CANOE软件独立性的矛盾,从而有效利用人力,缩短开发周期呢A:首先,我不同意你所说的“CANoe大部分功能属于监测性质”。的确,CANoe提供了很丰富的总线统计,报文统计、跟踪和数据监测的功能,但是CANoe的主要功能并不在此(你可以对比以下CANalyzer,就会发现CANoe的几乎所有监测、统计功能,在CANalyzer中同样有)。CANoe的主要功能是针对网络开发全过程的仿真,这个仿真包含了对通讯协议(CANdbEditor)的仿真和对每个节点功能定义的仿真(CAPL)。而上述所有监测工具只是用来帮助工程师在仿真或者测试过程中方便直观的获得各种统计信息和数据监视。
其次,对于团队工作而言,也是看是处于整个开发流程的哪个阶段。CANoe可以应用与开发流程的几乎全部阶段,但是我个人认为,最主要的应用还是在最初的网络的全局设计阶段。在这个阶段,只需要确定协议及每个节点的功能定义,而不需要很多的软硬件开发工作。这个和普通的系统或者节点开发还是有区别的。另外,CAPL语言所针对的也是网络中各节点通讯功能的实现,例如在整车动力系统网络中,发动机ECU的算法就不是CAPL语言所能简单实现的。
因此,在团队开发工作中,CANoe起到的是整体设计仿真验证和测试的作用,无需多个子团队参与到CANoe的开发工作中;但是,一旦CANoe的仿真环境搭建好之后,又是每个子团队都可以充分利用的一个很好的仿真测试环境。
请教CANoe中PANELEDITOR的问题
我们用PANELEDITOR进行仪表界面编辑时,打开或存储编辑文档时,PANELEDITOR编辑环境总是莫名其妙的就消失了,文档也没有存上,在台式机和笔记本上都是这样的问题,请问这是什么原因,是什么地方设置不当的原因?A:您说的这个问题比较奇怪。
是说在打开一个事先存储的界面文件,或者存储一个新建的界面文件时,PanelEdtior都会自动关闭么?还是说建立的界面文件没有出现在仿真环境中?
如果是后者,请打开菜单中的Panel\\\\ConfigPanel,在对话框中通过Add按钮选择你所存储的界面文件,并通过Diplay按钮让你选择的界面文件显示在仿真环境中。
在使用can-analzyer时,log中出现了ErrorFrame的帧,它是如何产生的,怎样消除这个不需要的帧?A:产生错误帧的原因有很多,例如CAN规范中定义的错误就有:
应答错误,位错误,格式错误,填充错误和CRC错误,任何一个错误都会产生错误帧。而这些错误帧都会被CANoe记录。
要消除这些帧,必须检查你的网络排除造成错误的故障;如果您仅仅是不需要在Log中记录这些帧,可以在Log模块之前添加一个Filter,选择StopFilter,将错误帧过滤掉,这样在Log文件里就看不到错误了。
但是在Trace和Butatitic仍然可以看到错误。当然你也可以用同样的办法过滤掉错误帧Q:CANoe只能安装到一台计算机上吗?
我们公司购买的CANoe设备为什么只能在一台计算机上安装?其他计算机安装后提示licence或者用户名等不对??
A:CANoe可以安装多台计算机,但是CANoe的Licene绑定在CAN卡上,因此同时只能有一套CANoe在使用(无CAN卡CANoe无法启动)。
您在第一篇帖子中不是说“其他计算机安装后提示licence或者用户名等不对”,我以为是
安装完成了。如果是安装过程中的问题,请注意以下几点:
1。先安装CAN卡驱动,即插上CAN卡,按计算机提示安装驱动
Q:CAN总线负载如何计算??
CAN总线负载如果计算的?并且每个can帧最大传输需要多少位?
A:简单的说,某个时间长度内,总线处于工作状态的百分比就是总线负载。
CAN帧(标准帧)由起始位(SOF,1bit),ID(11bit),RTR(1bit),IDE(1bit),保留位(1bit),DLC(4bit),数据场(0~8Byte),CRC(2byte),ACK(2bit),帧结束(7bit)和帧间隔(3bit)构成。自己用加法算一下咯。当然在实际传输时还要考虑填充位的影响
Q:大家是否遇到到CAN帧丢失?
我在做接收端的时候遇到过CAN帧不能全部接收到,发送丢失现象,大家是否遇到过?如果避免呢?
A:能否详细描述这个现象。
在接收节点收到严重干扰的时候,有时可能会出现丢帧现象。我所说丢帧是指:当发送节点成功发送1000个报文时,接受节点正确接收的节点可能只有不到1000个这样的现象。
这种现象的原因是接收节点本身设计上软硬件缺陷,因而在干扰,或者高负载情况下工作
不正常。因为不清楚你所说的丢帧是否和我说的一样,所以希望了解更详细的信息。是的
我在第一次设计节点的时候确实没有考虑到这个问题!其实我CAN已经接收到了,但是我没有及时的处理!也许设定个合理的Buffer会好点!
Q:请教关于CANoe使用问题
在现场使用CANoe与其他控制器互相通信时,偶尔会收到Errorframe祯,但系统运行正常,请教此时对此现象应该如何分析,错误出在哪一方面,是属于CAN底层通信错误、现场干扰、还是上层协议制定的问题,请指教如何分析,谢谢:)
A:CANoe是无法知道错误帧的类型,如果您需要查看错误出现的原因,需要使用CANcope进行观察。
Q:CANoe问题,急
在我运行例子时,write窗口出现CANboard:t某queueifull-dvErr:3014dvBufferState:0以前我们没有出现这种情况,难道是CAN卡有问题了
A:你的CANoe肯定运行在RealBu的模式下。在这种模式中,所有的CAN报文的发送和接收是通过真实的CAN收发器(也就是所用的CANcab,CANpiggy)通过真实CAN总线进行。也就是说,在这种模式下,你设置的发送报文如果没有收发器来发送,或者没法被其他节点接收,就会出现你说的发送队列堆满的现象。
为解决这个问题,或者将你使用的CAN通道连接到你真实的总线网络,或者将CAN卡的两个通道互相连接,实现自发自收。
还有一种简单的方法,就是将CANoe运行在SimulatedBu模式下。在选择Config菜单-Option项,选中左栏的Simulation,在右栏中将WorkingMode改为SimulatedBu。
Q:请教CANoe使用过程中的问题
1、我们打开PANElEDITOR进行新文件存储新文件或打开已有的文件时,总是莫名其妙的退出PANElEDITOR,我们是哈工大的用户,请告知原因,是什么没设置正确。
2、请问CANoe发出的数据贞在默认情况下都是标准贞,怎么才能设置硬件,使CANoe发出的数据贞格式变成扩展贞的格式。
A:对于第一个问题而言,我反复在CANoe里面操作PanelEditor,但是未发生你所描述的现象,这和设置应该没有关系,可能和系统有关,重新启动电脑或换一台电脑试试,看看是否还是发生该现象?对于第二个问题而言,硬件都是支持标准帧或扩展帧的的收发的,你只需要在CANdb中定义消息用那一种帧,具体定义的位置在CANdb++Editor中Meage的Define/Type中可选用CANtandard/CANe某tended谢谢指导第2个问题,现在已经清楚了,只要在ID后加上某就表示扩展贞。
但是对于第一个问题,我是在好几个电脑上都是这个问题,笔记本和台式机上都是,都是WIN某P系统,笔记本是P3800,台式机是赛扬1.8G,内存都是256M,现在是打开或保存文件都是莫名其妙的退出软件,除非我们在PANELEDITOR里把Vector这个图标拉出来,拉大,仍改一下,再删掉,在存储文件就不会关闭了,但是打开就不可以,我只能每次都用文件下拉菜单的以前保留的几个文档打开,相当不方便。庆邦族考虑一下是什么问题??谢谢
我在Window某P和Window2000两个系统都测试了一下,没什么问题。请问一下你的
PanelEditor的版本是多少?我测试的版本是PanelEditorVerion2.3(CANoe4.1)和3.0(CANoe5.0)。
Q:请教CAN实时性的问题请教一下各位高手:
CAN通信中一个重要的指标是信息传递的实时性问题,从信息写进缓存到节点接收到为止的时间延迟,请问有没有具体的方法来测试总线的实时性,CANoe可以做吗?谢谢各位高手:)A:CANoe目前没有一种现成的手段用于你所说的实时性测试。
另外,对你所说的CAN总线实时性的概念,我的观点如下:
在总线负载率不高,总线通讯顺畅的情况下,任何信息都可以在无竞争,无干扰的情况下进行传输。那么,从信息写入缓存到节点接受到的时间只和收发节点的控制器(如SJA1000)型号,收发器(如PCA82C251)型号,总线波特率(Bit/econd),信息(Meage)长度——主要由标准帧(11位标识符)、扩展帧(29位标识符)以及数据场长度(DLC)决定——相关,并且将是个比较固定的值。
但是在环境比较复杂时,例如电磁干扰,电气故障等会造成信息无法被正确接受,那么发送节点反复重发是否要记入实时性?
另外,在出现总线竞争的情况下,总线的仲裁机制会使优先级别较低的信息被延时发送,而这是由于系统设计,主要是应用层协议设计所带来的问题。
因此保障总线实时性的关键在于完善的硬件设计保障信息的抗干扰特性,优化的系统设计保障总线的低负载率,在这种情况下,总线的实时性是可以得到可预测的保障。
我在Window某P和Window2000两个系统都测试了一下,没什么问题。请问一下你的PanelEditor的版本是多少?我测试的版本是PanelEditorVerion2.3(CANoe4.1)和3.0(CANoe5.0)。
Q:请教CAN实时性的问题请教一下各位高手:
CAN通信中一个重要的指标是信息传递的实时性问题,从信息写进缓存到节点接收到为止的时间延迟,请问有没有具体的方法来测试总线的实时性,CANoe可以做吗?谢谢各位高手:)A:CANoe目前没有一种现成的手段用于你所说的实时性测试。
另外,对你所说的CAN总线实时性的概念,我的观点如下:
在总线负载率不高,总线通讯顺畅的情况下,任何信息都可以在无竞争,无干扰的情况下进行传输。那么,从信息写入缓存到节点接受到的时间只和收发节点的控制器(如SJA1000)型号,收发器(如PCA82C251)型号,总线波特率(Bit/econd),信息(Meage)长度——主要由标准帧(11位标识符)、扩展帧(29位标识符)以及数据场长度(DLC)决定——相关,并且将是个比较固定的值。
但是在环境比较复杂时,例如电磁干扰,电气故障等会造成信息无法被正确接受,那么发送节点反复重发是否要记入实时性?
另外,在出现总线竞争的情况下,总线的仲裁机制会使优先级别较低的信息被延时发送,而这是由于系统设计,主要是应用层协议设计所带来的问题。
因此保障总线实时性的关键在于完善的硬件设计保障信息的抗干扰特性,优化的系统设计
保障总线的低负载率,在这种情况下,总线的实时性是可以得到可预测的保障。
因篇幅问题不能全部显示,请点此查看更多更全内容