孟 遨,赵 敏,陈志逸
(南京航空航天大学自动化学院,江苏 南京 210000)
在采用ECU的发动机监控平台中,数据是通过CAN总线进行发送和接收的。控制器局域网络CAN(Controller Area Network)属于现场总线的范畴,但现场总线依然属于“设备级层”,未能实现远程化的控制网络。随着现代智能仪表系统由集中控制向分布式控制系统发展,对仪表系统的远程化监视也显得尤为重要,即需要构建“管理级层”网络平台,而以太网恰恰具备远程控制的优势。因此,通过CAN总线和以太网的连接,不仅可以保证横向设备间的相互通信,同时为数据信息的纵向传递提供通道,从而能够实现智能仪表系统的远程化集中监控。
现在比较先进的柴油机都带有电子控制单元(ECU,Electronic Control Unit),采用CAN总线J1939规范进行控制和数据发送。本文介绍的船用仪表系统通过CAN总线从船舶发动机电子控制单元处获取发动机转速、冷却水温度等船舶运行参数以步进电机指针式仪表和LCD液晶显示屏式仪表这两种方式实现船舶各种运行工况的实时显示,通过一个裁剪过的适合嵌入式系统应用的TCP/IP协议栈,可通过上位机界面对船舶发动机进行实时监控。本系统采用ARM系列处理器STM32F10x为核心处理单元,利用处理器自带的CAN控制器实现CAN通讯,实现了信息的采集、处理和显示。水温、油温、电瓶电压、油压以及发动机转速都是通过CAN总线从船舶发动机控制单元处获取,ARM处理器把这些信号处理后驱动步进电机模块并通过串口发送给LCD液晶显示模块,系统还可以通过以太网发送给上位机。总设计框图如图l所示,主要有CAN总线模块、步进电机与LCD液晶显示模块和以太网模块。
CAN节点由微处理器、CAN控制器和CAN收发器组成。ARM处理器STM32F10x内置CAN控制器,它与CAN收发器TJA1050相连,可直接接到CAN总线上,实现CAN总线的接口功能。本系统中,船舶ECU将发动机转速、油压、油温、水温、电压等信号以扩展报文的形式通过CAN总线传播到本节点,由CAN收发器TJA1050接收后经过信号转换传递给STM32F107的内置CAN控制器,STM32F107内置CAN控制器实现报文过滤,以决定接收或放弃这一报文。对于接收到的报文,微处理器通过识别其ID以获得主节点不同参数的情况,并相应转化为所需的数据。步进电机部分采用的是ARM处理器STM32F103外接三态缓冲器74LVC244的方式来实现对步进电机的驱动。步进电机选用的MR1108型号步进电机,工作电压5V,驱动电流15mA左右,74LVC244最高输出电流可达到24mA,完全可以达到该步进电机对驱动电流的要求。系统还采用了LCD液晶屏来辅助显示各个参量值。LCD液晶显示屏采用NH056ZN02-IV,LCD液晶屏主要是通过图表的形式更直观地显示船舶的运行参数。
图1 仪表盘系统设计框图
为了实现对船舶发动机的远程化监控,本系统采用以太网通过上位机进行实时监控,以太网基本模型结构图如图2所示,系统采用的 ARM处理器之一STM32F107内置以太网10/100 MAC模块,对应图2中的数据链路层,只需外接PHY芯片DP83848,DP83848构成网络的物理层,当有下层数据,即下位机要通过以太网向上位机发送数据时,由软件将数据转换成以太网格式的数据包,并按照要求发送给内置以太网控制模块,通过以太网接口部分配置网关的IP地址、MAC地址,加上以太网帧的首部和尾部信息等,从而将数据成功地传送到以太网信息管理层。
图2 以太网基本结构模型
软件系统按照模块化的思想设计,便于移植和维护,避免代码的重复,从而节省数据的存储空间。软件模块主要分CAN总线模块、网络通信模块。
CAN总线模块程序设计主要包括:CAN初始化、数据的接收和处理。初始化程序是对CAN控制器进行必要的设置,主要包括CAN运行模式的选择、波特率的设置、报文过滤的设置,中断允许设置等。程序设计流程如图3所示。
图3 CAN总线程序流程图
2.1.1 报文过滤的设置
CAN协议的一个最大特点是废除了传统的站地址编码,而代之以对通信报文进行编码。根据CAN总线技术规范,CAN总线有标准和扩展两种报文编码格式,前者标识符有19位,后者有29位,一个报文的内容由其标识符ID来命名。STM32F10x通过报文的ID来进行报文过滤。以STM32F107为例,STM32F107共有28组过滤器,每组过滤器相互独立,可以同时启用任意组合的过滤器,只要能通过其中一组过滤器就能被处理器接收。每组过滤器包括了2个可配置的32位寄存器CAN-FxR0和CA N-FxR1,每组过滤器组有两种工作模式:标识符列表模式和标识符屏蔽位模式。标识符屏蔽位模式可过滤出一组标识符。此时CAN-FxR0中保存的就是标识符匹配值,CAN-FxR1中保存的是屏蔽码,即 CAN-FxR1中如果某一位为 1,则 CAN-FxR0中相应的位必须与收到的帧的标志符中的相应位吻合才能通过过滤器;CAN-FxR1中为0的位表示CAN-FxR0中的相应位可不必与收到的帧进行匹配。标识符列表模式可过滤出某一个标识符。此时CANFxR0和CAN-FxR1中都是要匹配的标识符,收到的帧的标识符必须与其中的一个吻合才能通过过滤。本系统只开启了过滤器0,将其设置成标识符屏蔽位模式,将CAN-FxR0和CAN-FxR1设置为0,表示收到的帧不需要与CAN-FxR0中任何一位进行匹配,使任何ID的报文都能够通过过滤器0被处理器接收。处理器读取报文ID,不同ID的报文代表不同的参数。
2.1.2 中断的设置
STM32共有两个3级深度的FIFO可供选择,分别为FIFO0和FIFO1,用来存放接收的报文,一次可保存三个完整的信息,FIFO完全由硬件来管理,从而节省了CPU的处理负荷,简化了软件并保证了数据的一致性。应用程序只需通过读取FIFO输出邮箱,来读取FIFO中收到的报文。CAN-FilterFIFOAssignment的值设定了指向 FIFO0或者FIFO1,以 FIFO0为例。CAN中断可选择FIFO溢出中断、FIFO接收报文中断、FIFO满中断等中断方式,以FIFO接收报文中断为例,当CAN总线上有数据通过CAN过滤器以后被存放于FIFO0中时,即产生一个中断,FIFO0接收报文标志位置位,进入CAN中断处理函数,清除标志位,从FIFO0中读取本次报文,清空FIFO0,每个报文可传输0到8个字节的数据,通过判断报文ID识别此次报文为哪一个参数,然后对数据进行相应转换。
考虑到嵌入式本身的特点以及系统的需要,网络通信在传输层采用了UDP协议,UDP协议是一个无连接协议,相对TCP,UDP的控制机制比较简单,且UDP在速度上比TCP更快,常用于数据量较少的数据传输,在少量数据传输时,使用UDP协议传输信息流,可以减少TCP连接的过程,提高工作效率。程序流程如图4所示。
在以太网程序设计中,对于以太网数据的接收和发送都使用了DMA(Direct Memory Access)方式,所谓DMA方式即利用STM32的DMA模块进行数据的传送,不占用CPU资源,从而提高了CPU运行效率。
在程序中数据的接收是通过中断来触发的,先打开以太网中断,然后用udp-new()函数建立一个UDP类型的套接字,udp-bind()函数为此套接字绑定IP地址与端口,udp-recv()函数设置回调函数udp-servercallback(),当接收到以太网底层数据时,进入名为LwIP-Pkt-Handle()的中断处理函数,在中断处理函数中调用ethernetif-input()函数,ethernetif-input()函数将接收到的底层数据包按要求存入pbuf类型的结构体中,此时调用回调函数udp-server-callback(),对接收到的数据进行判断后将待发送的船舶各运行参数做相应处理,通过udp-send()函数发送到上位机。
图4 以太网程序流程图
图5为上位机显示界面,上位机的显示软件采用NI公司的LABVIEW软件进行设计,LABVIEW使用的是图形化编辑语言G编写程序,产生的程序是框图的形式,开发周期短。本系统上位机显示软件可以曲线和数字两种形式对船舶各参数进行显示,并能产生各种报警功能,工作人员可手动设置报警参数,以及生成历史记录。
图5 上位机显示界面
本系统以CAN总线为通信机制,通过步进电机与LCD两种形式进行数据显示,并通过以太网在上位机上进行实时监控。为了测试系统是否稳定可靠,作者首先利用CANalyst分析仪模拟真实的CAN节点做了大量的实验,并且多次去到现场在潍柴动力蓝擎国三电控发动机上做实验,能够准确接收发动机的电子控制单元通过CAN总线发送的发动机转速、油温、油压、水温、水压等运行参数,通过步进电机和LCD液晶显示屏两种方式实时显示,并能够通过以太网从上位机实现远程控制,实现对发动机从启动到停止这一完整过程的监控。经过大量的实验测试与现场测试,本系统运行稳定,实时性好,具有广阔的应用前景。
[1]饶运涛,邹继军,郑勇芸.现场总线CAN原理与应用技术[M].北京:北京航空航天大学出版社,2003.
[2]李燕宁,鲍芳,邱雪琼,等.CAN现场总线的嵌入式网关设计[J].仪表技术与传感器,2006(11):27-29.
[3]庄松林,肖中汉.我国仪器仪表与测量控制科技的发展[J].自动化仪表,2009.30(5):2-6.
[4]王永胜.智能仪表技术及工业自动化应用发展探讨[J].自动化博览,2009(6):44-47.
[5]欧阳琰,王贵槐,陈先桥,等.基于CAN总线的汽车仪表盘电控单元设计[J].武汉理工大学学报,2009,31(1):79.81.