船舶控制系统冗余CAN总线网络研究

2016-06-28 01:33濮加佳曹丹丹中国船舶重工集团公司第七三研究所无锡分部江苏无锡214151
中国新技术新产品 2016年10期
关键词:冗余CAN总线通信协议

丁 超 濮加佳 曹丹丹(中国船舶重工集团公司第七〇三研究所无锡分部,江苏 无锡 214151)



船舶控制系统冗余CAN总线网络研究

丁 超 濮加佳 曹丹丹
(中国船舶重工集团公司第七〇三研究所无锡分部,江苏 无锡 214151)

摘 要:为了进一步提高船舶控制系统在恶劣海况下的可靠性,本文采用冗余CAN总线搭建了通信网络。该网络采用软件方法实现了两路CAN总线的热冗余,自定义了通信协议,通过动态链接库实现了不同设备之间的程序移植,并采用LabVIEW开发了上位监控软件。应用结果表明,该网络运行稳定可靠,故障检测准确,实时容错能力强,移植性好,大大降低了研发成本,具有很好的实用性和推广价值。

关键词:CAN总线;冗余;通信协议;动态链接库;LabVIEW

Abstract:This paper develops a redundancy CAN-bus network for improving reliability of marine control system in severe sea condition. This network implemented hot redundancy of CAN-bus by software method, defined a custom communication protocol, transplanted the program by Dynamic Link Library, and developed the monitoring software by LabVIEW. The application shows that this system runs stably and accurately. The technology and methods adopted in the system are practical and worthy of using abroad.

Keywords:CAN-bus; redundancy; bcommunication protocol; Dynamic Link Library; LabVIEW

船舶控制系统由发动机控制系统、螺旋桨控制系统、舵机控制系统、驾驶员操作台等设备组成,不同设备之间需要进行大量的实时数据传输,因此需要一种安全可靠的通信总线来完成这个任务。由德国Bosch公司开发的CAN总线具有简单易用、实时高速、可靠性高等诸多优点,能够满足要求。为了保证船舶控制系统在高温、水雾、颠震等恶劣条件下仍然能够安全可靠地工作,必须采用双冗余CAN总线系统。本文比较了现有的双冗余CAN总线系统技术方案的优缺点,提出了一种完全基于软件实现的双冗余CAN总线方案,不仅具备完善的故障检测的容错能力,而且对硬件无特殊要求,可以非常方便地移植到不同的设备上。为了搭建完整的冗余CAN总线网络,本文还根据船舶控制系统的特点自定义了通信协议,并基于LabVIEW开发了上位监控软件。

图1 双冗余CAN总线系统结构

图2 冗余功能的程序结构

1 双冗余CAN总线的实现方法概述

按照两路总线的工作状态来分类,双冗余CAN总线系统的实现方法主要有两种,一种是冷冗余,其原理是:一路总线工作,另一路总线待机,工作总线出现故障后切换到待机总线;另一种是热冗余,其原理是:两路总线同时工作,设备发送数据时同时往两路总线上发送同一个数据,接收数据时会从两路总线上接收到相同的两个数据,选取其中一个即可。在此基础上根据CPU主机、CAN控制器、CAN收发器等环节的配置不同,又可以分成CAN收发器冷、热冗余、CAN控制器冷、热冗余、全系统冗余、冷热冗余等。CAN收发器冷、热冗余与CAN控制器冷、热冗余的区别在于:前者是一个CAN控制器与两个CAN收发器连接,主要通过硬件模拟开关实现冗余功能;后者是两个CAN控制器分别与两个CAN收发器连接,主要通过软件实现冗余功能。如果把CPU主机的冗余也考虑在内,就成了全系统冗余方案。陈尧等人提出了一种冷热冗余相结合的方案,其思路是:按照CAN收发器热冗余方案设计两块相同的CAN通信单板,由CPU主机控制这两块单板的切换。曹俊敏等人提出了一种只有一个CAN控制器、一个CAN收发器的方案,其思路是:CAN收发器通过两个硬件模拟开关选择两路总线。然而这种方案只能对总线电缆故障进行容错,对CAN控制器和CAN收发器等关键器件的故障无能为力,因此不予考虑。

冷冗余方式最大的优点是功耗小,然而缺点很多,比如:某个节点出现故障后所有节点都要一起切换到另一路总线,要实现该功能就必须设置主节点,通过主节点来协调所有节点的动作,然而这又使得主节点的可靠性对整个系统的正常运行非常重要,李军等人提出了通过在网络中设置两个主节点来保证系统的可靠性;总线切换过程中会引起短时间的通信中断并丢失数据,给系统运行带来隐患;当网络中只有一个节点在工作时,该节点会不停地来回切换通道,冯源等人提出的解决办法是:来回切换几次通道后就判断为总线故障并退出总线,但是当其他节点投入工作后该节点还得复位才能重新工作,增加了操作的复杂性。这些缺点导致冷冗余方式不适合对实时性要求严格的系统。而采用硬件电路实现的冗余方案,对于由多家单位合作开发的船舶控制系统来说也不适用,因为所有设备提供的都是两个独立的CAN通道,如果采取CAN收发器冷、热冗余或者双单板冷热冗余等方案,所有设备都必须重新定制CAN通信板卡,不仅会导致研发成本和周期大大增加,还可能会因为设备本身的硬件架构问题而无法实现。因此,在船舶控制系统中采用的是基于软件实现的热冗余方案。

表1 心跳报文帧格式

图3 故障检测流程

表2 故障检测流程

表3 数据报文格式

2 双冗余CAN总线的原理与实现

双冗余CAN总线的结构如图1所示。设备上电后,两个CAN控制器都被初始化至工作状态。发送数据时,两个CAN控制器把来自CPU的数据同时往两路总线上发送;接收数据时,两个CAN控制器会几乎同时接收到同一个数据,只需接收到其中一个即可完成通信。冗余功能的程序结构如图2所示。

3 故障检测的原理与实现

为了保证船舶控制系统的通信故障能被及时发现和排除,冗余CAN总线网络必须具备完善的故障检测机制。通信协议定义了一种专门用于网络监控的数据帧报文,称为心跳报文,其帧格式见表1。

每个设备按固定周期往总线上发送心跳报文,同时接收其他设备发出的心跳报文,并把接收情况记录下来填写在心跳报文里;如果心跳报文发送失败,就进入故障检测程序,把检测结果也填写在心跳报文里。这样,每个设备的心跳报文里都包含了该设备的故障信息以及该设备与其他设备之间的通信通断信息,把所有的心跳报文集中起来进行分析,就可以知道哪个设备、哪段总线电缆出了什么故障。

故障检测函数的流程如图3所示,检测结果分为7种情况:

“1”:节点工作正常;

“2”:CAN卡正常,总线断路或者插头掉落;

“3”:CAN卡正常,总线短路;

“4”:CAN卡故障,只能发送不能接收;

“5”:CAN卡故障,只能接收不能发送;

“6”:CAN卡通道损坏,不能收发;

“7”:不明故障。

4 自定义通信协议

由于CAN总线底层协议没有规定应用层,因此在构建以CAN总线为基础的应用系统时必须定义一个应用层的通信协议。由于常用的通用型通信协议如CANopen、DeviceNet等大都是针对非冗余的一对多的分布式控制系统,不适合应用在每两台设备都需要通信的冗余CAN总线网络中,因此本文根据船舶控制系统和冗余CAN总线网络的具体情况自定义了一个简洁易用的应用层通信协议。

常用的数据接收方法有两种:

(1)在ID中腾出几个位作为地址编码,假定是ID0-ID4,一共有5个位,可以有32个不同的值,意味着这样的系统中最多可以有32个设备。总线上的所有设备都有一个编号,范围从0~31,某个设备需要向编号为1的设备发送数据,那么它只要在ID0-ID4中写1就行了;需要编号为20的设备发送数据,就往ID0-ID4中写20;依此类推。接收报文的设备只需要检查ID0-ID4的数值是不是本设备的编号,如果是,就接收报文;不是,就忽略。

很多文献中的设备寻址用的都是这种方法,因为这种寻址方法直观形象、容易理解。然而这种方法有一个不足之处,就是当数据的传输采用单点对多点,即单个设备同时往n个设备发送数据时,只能先给多点中的第一个设备发送一次,接着再给第二个设备发送一次,依此类推,有n个设备就得重复发送n次,无法做到只发送一次让n个设备同时接收。因此,如果系统中的单点对多点通信一旦用得很多,通信带宽就被大大浪费了。

图4 调用动态链接库函数发送模拟量数据

(2)CAN控制器不作任何滤波处理,所有的报文都会被接收,用户在程序中对报文加以判断,如果是自己需要的报文就保存起来,不是就忽略掉。这种方法很像广播:总线上出现的任何一个报文,所有的设备都会看到并接收,然后通过程序来选择自己所需的报文。

这种方法搭建系统非常方便,只需要在程序中对报文辨别一下就行了。然而,不进行滤波处理的后果是接收了很多用不到的报文。为了保证通信的实时响应,一般都是使用中断来接收报文,CAN控制器接收到报文就触发中断,处理器立即对报文进行处理。如果接收到的报文不是所需要的,就白白浪费了宝贵的中断处理和CPU时间。

为了克服以上两个设备寻址方法的缺点,本文采用了一种全新的设备寻址方法,既能避免浪费通信带宽,也能避免硬件作很多无用功。表2所示ID0-ID28对应扩展帧ID的29位,把ID0-ID12作为设备寻址位,每个位对应总线上的一个设备,用法如下:要往设备10发送一个报文,就把ID9置1,其他位全部置0;要同时往设备4和设备9发送同一个报文,就把ID3和ID8同时置1,其他位全部置0;要同时给所有的设备发送同一个报文,就把ID0到ID9全部置1。在这样的寻址方式下,设备的接收滤波设置变得非常简单,比如:对于设备8,只要报文的ID7等于1就接收;对于设备4,只要报文的ID3等于1就接收。

“功能码”定义的是报文的种类,比如:(1)命令报文;(2)心跳报文;(3)模拟量报文;(4)开关量报文;(5)测试报文;(6)大文件传输报文;(7)命令反馈报文。一共可以分为8种类型。

“本机地址码”定义的是总线上各个设备的编码,根据这个编码可以判断出报文来自哪个设备,最多可以有16个设备。

“信号编码”定义的是每种类型报文的编码,比如:对于命令报文,假设一共有15个命令,则信号编码为1~15;对于开关量报文,假设一共有200个报文,则信号编码为1~200。一共可以有255个不同的编码。

为了定义的简洁统一以及便于编程,通信协议中将系统中用到的数据分为命令、命令响应、模拟量、开关量四种。这四种数据都用数据帧来传输,数据域有8个字节,格式见表3。

图5 冗余CAN总线网络故障监控页面

5 上位监控软件

LabVIEW是面向工业测控的图形化编程环境,除了具备常规组态软件的优点之外,还提供了对C语言和动态链接库的良好支持,因此非常适合用来开发冗余CAN总线网络的监控软件。

将前述的冗余功能和通信协议编写成动态链接库后,利用的LabVIEW的CLN节点就可以调用动态链接库中的函数了。图4是LabVIEW程序中调用动态链接库函数SendAnalog()发送模拟量数据的代码。图5是上位监控软件中监控整个冗余CAN总线网络故障情况的页面。

结语

本文提出的冗余CAN总线网络经过长时间的试验运行和项目实践,证明系统运行稳定可靠,单路总线发生故障时不会引起通信中断和数据丢失,故障检测的延时为一个心跳报文周期。本系统的软件采用了良好的模块化设计,而且对硬件没有特殊要求,可以很方便地移植到其他具备两个独立CAN通道的设备中,因此具有很好的实用性和推广价值。

参考文献

[1]饶运涛,邹继军,郑勇芸.现场总线CAN原理与应用技术[M].北京:北京航空航天大学出版社,2003.

[2]禹春来,许化龙,刘根旺,侯晓林.CAN总线冗余方法研究[J].测控技术,2003:22(10).

[3]郭晓松,王振业,于传强,潘兴杰.基于CAN总线的容错冗余技术研究[J].计算机测量与控制,2009,17(1).

[4]王红亮,田帅帅.基于节点冗余的CAN总线网络双冗余方法[J].探测与控制学报,2010:32(4).

[5]李军,李林,张晓艳.冗余CAN总线在机电管理系统中的应用研究[J].航空计算技术,2010,40(2).

[6]陈尧,孙汉旭,贾庆轩,史国振.空间机器人冷热双冗余CAN总线系统的研制[J].电子技术应用,2008(02).

[7]杨君,孙汉旭,贾庆轩,史国振.Vxworks下的冗余CAN通信模块设计[J].微计算机信息,2007(29).

[8]曹俊敏,孟祥群,唐厚君.单个CAN控制器的双总线冗余网络实现[J].微处理机,2007(4).

[9]冯源,向桂林,李军.基于C8051的冗余CAN总线智能节点设计[J].航空计算技术,2008,38(5).

中图分类号:TP273

文献标识码:A

猜你喜欢
冗余CAN总线通信协议
基于Z-Stack通信协议栈的红外地温采集电路设计
基于嵌入式的汽车辅助制动系统研究
基于DMX512通信协议的多路转发器设计与研究
基于NS-3的PLC多频通信协议仿真平台设计与实现
RSSP-I、RSSP-Ⅱ及SAHARA三种安全通信协议实现技术简介