1、引言
近几年,风力发电产业开始进入一个高速增长期[1],而随着风电的火热,风力发电控制技术也得到了快速的发展。本文所设计的风力发电控制系统采用模块化设计,应用于1兆瓦风力发电控制。设计包括了主控制器模块、i/o模块、电网测量模块和变桨驱动模块,各模块间通过can总线连接进行通讯。
由于传统的can网络没有统一的全局时钟,本质上是以事件触发为基础的总线系统,会经常存在总线时序混乱、报文发送冲突导致发送延迟等弊端,影响系统的实时性[2]。尽管事件触发can在报文发送失败后提供自动重发功能,但是发送的延时会导致报文帧发送的确切时间难以预料,从而导致can网络报文发送周期的抖动。所以报文发送时倘若发生传输错误,报文的重传会加重can总线的负担,很可能造成某报文帧因重传的延时而错过其有效时间[3],实时性大打折扣。而采用时间触发的ttcan协议,保证任何时候总线上只有一条信息传输,能有效地避免冲突造成的总线仲裁,避免报文重传,在具有较多节点且通讯量较大的can总线通讯中,能更好地控制通讯周期,提高系统的实时性。本论文设计采用基于ttcan的can总线通信方式来实现分布式风力发电控制系统各模块间的数据通信。同时结合冗余措施,旨在提高控制系统的实时性和可靠性。
2、系统结构
图1为本控制系统总体结构图,系统包括cpu模块、变桨伺服卡模块、3个i/o模块和电网测量模块一共6个模块节点。系统选用infineon公司xc164cs单片机来完成总线架构。xc164cs所具有的twincan模块包括两个全功能can节点,与外扩can芯片相比在保证速度和稳定性的同时也为软件编程提供了方便。两个全can节点中的每一个都能接收和发送带11位标识符的标准帧和带29位标识符的扩展帧。两个can节点共享twincan模块的资源,目的是优化can总线通信处理以及使cpu负荷最小[4]。全can功能与fifo结构的灵活组合可满足复杂嵌入式系统的实时要求。同时它具备禁止重发功能,所以利用各个模块xc164cs单片机的twincan模块可以很方便地组建控制系统各模块间双冗余的ttcan通信网络。
图1 风力发电控制器系统总体框图
3、ttcan原理与实现
ttcan是在传统can的基础上融入时间触发机制,任何动作都是由一个时间(全局同步)系列决定的[5],它将通讯周期分割成若干时间片,同时分配给各个节点,形成一个调度时刻表,总线上各个节点严格遵照该时刻表在各自的时间片中进行can数据收发[6],如图2所示,当系统时钟到达3ms和6ms时,发送报文a;到达5ms和9ms时,分别接收报文b和发送报文c。网络内所有的报文活动都安排在一个这样的周期性的时刻表内,得到了系统信息阵,来控制所有节点正常有序的进行通讯。从而保证任何时刻总线上只有一条数据传输,避免总线仲裁,确保了系统实时性,所以ttcan的设计实际上是制定能满足系统控制周期的can节点调度时刻表[7]。
图2 ttcan时刻调度表
在ttcan网络中,节点的同步是靠所谓的参照报文维持的,如图3,它由一个特殊的节点定期发送,这就是时间主机(主节点)。参照报文也是一个can数据帧,其特征在于它的标识符。有效的参照报文同时被所有节点识别。两个参照报文之间的时间构成了can传输的基本周期,基本周期又由很多时间窗组成,在每个时间窗中可进行特定的报文操作[8]。每一个有效参照报文启动了一个新的基本循环,并且引起了每一个节点的循环时间复位,于是另一个基本循环重新开始,也就是说,ttcan的时间触发通信是基于参照报文的周期通信[9]。
图3 ttcan基本循环
针对1mw风力发电控制系统,系统包括包含cpu模块在内的6个节点,对每个节点进行编号,在一个通讯周期中,每个节点报文收发都有其具体执行的时刻,各节点严格按照该时刻表进行调度执行相关操作,从而确保cpu模块与系统其他各节点之间快速顺畅地进行can通讯。
而在1mw风力发电控制系统can通讯中,系统各节点报文在一个基本周期内收发所用时刻表参照图4。
图4 1mw can通讯调度时刻
每次通讯周期控制在20ms,也就是说每个基本循环的周期为20ms,其中节点0对应cpu模块,节点1对应变桨伺服卡,节点2对应i/o模块1,节点3对应i/o模块2,节点4对应i/o模块3,节点5对应电网测量模块,在一个通讯周期中,每个节点报文收发都有其具体执行的时刻,各节点严格按照该时刻表进行调度执行相关操作。如图6,cpu模块在每个查询周期最后会向总线上各节点广播一个时钟同步数据帧,通知各从节点复位计数,为下一个周期做时钟同步。总线上的每个从节点只有当收到这个时钟同步帧时,才会重新将它的时间计数清零,同时在他的中断发送时刻到来时进行发送,如果收不到该时钟同步帧,从模块不会将数据发送至cpu模块。于是这样就建立了总线的全局时间[10],从而确保cpu模块与系统其它各节点之间快速顺畅地进行can通讯。同时做为从模块,如果收到的时钟同步帧是由a通道传来,则其发送数据也选择a通道,如果收到的同步帧是由b通道传来,则其发送数据选择b通道。也就是说这个时钟同步帧对从节点而言还有发送使能的功效,并且同时利用这个时钟同步帧来完成冗余过程中的通道切换。
4、冗余设计
cpu模块与各从模块间采用双can通信,cana和canb都配置成8fifo接收和8fifo发送模式。系统采用冷冗余的方式进行can故障处理,正常情况下各模块均使用cana总线通讯,当在发现cana通道故障的情况下,才去激活系统的canb通道,使系统继续正常运行。设计思路如图5流程图所示,当系统自行判断到系统中任一模块的某个can通道通讯已经出错或中断时,进行报警并集体同时切换总线通道,保证系统同样正常的进行通讯。
图5 冗余流程
而要实现冗余,can通道的故障判断尤为重要。由于风力发电控制系统中,cpu模块充当着控制器的核心,系统所有的采集输入都在这里汇集,经过控制流程后又由它产生控制输出。于是在can网络中,cpu模块同时充当着主节点的角色。所以系统设计在cpu模块中进行can总线故障判断处理。具体判断流程如下:cpu模块中预设定时器中断(暂设1ms),对每个从节点都做时间计数,当每次收到从节点传来的数据帧时,对相应节点的计数清零。也就是说,这个计数就是距上次正确收到该从节点传来数据的延时(单位为ms)。当程序判断这个计数超过一定值(暂定100ms),认为通信超时,该从节点的can通讯已经出错或中断,此时整个控制系统需要切换总线通道,激活canb,重新建立通讯,并进行报警。如下面流程图6所示。
图6 can故障判断流程图
5、实验结果分析
基于本方案所设计的这种通讯方式,当can节点发送数据时,在其待发送的数据帧最后补加上两个字节的crc校验码,区别于twincan模块自身所带的crc容错机制,补加的crc校验是为了防止can传输多帧数据过程中出现数据丢帧的现象。于是,cpu模块每次都将接收完成的数据进行crc判断,以此验证收到的该帧数据是否出错。cpu模块程序设计使其对它收到的每个从节点传来的数据帧进行一个计数,每正确收到1帧,计数加1。设查询时刻为t,can通讯周期为t,则t时刻计数值cnt=t/t。以通讯周期20ms为例,每隔1秒钟,cpu模块应收到的每个从节点所传来的数据帧数cnt=50,即为32h,于是,我们每隔1秒钟将这些计数通过串口发出来,就可以监视这些计数,以此验证ttcan通讯周期长度,以及can总线切换机制。具体数据参见附表。
附表监视结果表
附表中为20ms通讯周期下,系统上电运行10min的一个情况,据表分析,系统上电时,延时1秒钟开始can通讯,正常情况下,每秒钟包含50个通讯周期,故应正常收发数据50帧,t时刻计数值则刚好满足cnt=(t-1)*50,相邻两秒之间计数基本相差32h。但偶尔会出现前后两秒相差31h的情况,这种情况出现的原因则是因为在该发送时刻,该节点该次数据暂未接收完成所致。
系统上电1min后,尝试切断总线上id号为1的节点,会发现该节点计数相对其他正常节点少5,则分析推断该节点can通讯停顿了100ms后又重新建立,而此刻,系统已经完成can通道切换,转用canb运行。
6、结束语
实验效果表明,基于冗余ttcan的模块化风力发电控制系统各模块间的通信总线,相对于过去常用的查询返回can通信方式,更具效率且更为可靠。它的应用,对于提高整个控制系统的可靠性和实时性极具意义。