APP下载

CAN总线在塔机状态监控系统中的应用

2012-07-07邵国平于浩洋

黑龙江工程学院学报 2012年1期
关键词:驱动程序嵌入式总线

邵国平,于浩洋

(黑龙江工程学院 电子工程系,黑龙江 哈尔滨150050)

塔机是一种广泛应用于建筑领域的大型起重设备,由于各种主客观原因极易发生重大事故,从而导致设备损坏甚至人身伤亡,给社会造成重大损失。本文开发一个能够对塔机进行实时监控的系统,控制其在安全限度内工作,增加对塔机的过载保护。在生产现场中起吊幅度、起吊高度、转角和起重量等实时数据构成了塔机工作状态。在Linux嵌入式系统中基于CAN数据总线网络采集塔机工作状态,保证在不同工况参数下所能起吊的最大额定起重量、变幅、转角和起吊高度不会超出相应不同工况条件下的极限值,完成CAN总线驱动程序包和有好的图形化GUI人机界面。系统功能包括CAN总线通信模块、图形界面模块和数据非易失存储等模块。塔机监控系统能够对塔机主要工作参数进行综合自动显示与记录、自动保护,对正常工作、满载、超载、变幅超限等工作状态给出相应提示,以保证起重机械的正常工作。

1 系统总体结构

CAN模块结构如图1所示。系统中CAN节点是一个集中数据处理的重要控制节点,主要有两个功能:一是作为主处理器与CAN总线的接口,完成基于MCP2510的CAN总线控制器接口的数据转换,对智能节点传送过来的数据信息进行缓存。二是负责协调S3C2440处理器与CAN数据采集节点的通信,以确保各节点的监控数据能够快速、准确地传给S3C2440处理器。CAN数据采集节点以MSP430F149为微控制器,外围模块带有CAN总线接口模块和能够分别进行角度采集、高度采集、压力采集、长度采集等模块。主控模块基于S3C2440处理器的嵌入式系统,负责对系统各监控节点数据的数据采集管理、控制命令的发送及各控制单元动态参数和设备状态的实时显示。

S3C2440X处理器集成了LCD控制器,主要用于传输显示数据和产生控制信号,并支持屏幕水平和垂直滚动显示。数据的传送采用DMA(直接内存访问)方式,以达到最小的延迟,可以支持多种液晶屏。

图1 嵌入式CAN网络监控系统结构

主控CAN节点为智能型模块,以Linux2.6嵌入式系统为核心,主要负责以轮询方式对现场塔吊工况参数进行监测,接收CAN通信控制器MCP2510进入缓冲区的数据,形成图形动画和文本显示,按操作过程先后组成过程数据记录,定期写入到非易失存储器中。各个节点模块将传感器采集的信号通过串口传至 MSP430F149微控制器并经过简单的处理,经由MCP2510转化成CAN总线的输出和输入信号。通过CAN总线传到S3C2440微处理器进行分析处理,判断系统所处的状态,在系统异常工作状态时,发出报警信号,同时实现诸多工作参数的数字化集中显示和控制。监控中心节点的主要工作是利用QT/E界面,创建通信线程,请求数据采集节点传送数据到主控制节点,接收塔机的实时运行数据,将其直观显示,便于监控人员监视塔机的生产运行情况。

本系统主控节点软件应用程序的编写是基于Linux操作系统,使用QT Designer进行界面设计。主要功能是:实现对起重机的长度、角度、压力和高度限位开关量的采集和运算;根据运算结果实现对起重机的控制;同时将相关数据通过液晶显示。监控中心节点系统的软件总体结构:1)数据报警处理模块,2)显示界面模块(用户登陆、工作状态显示、参数设置、报警信息查询模块),3)按键输入处理模块,4)CAN收发数据模块。

2 主节点Linux嵌入式系统中CAN字符设备驱动程序设计

Linux下的CAN总线驱动程序是相对复杂的Linux字符设备驱动程序。本系统采用Microchip公司的CAN总线接口芯片MCP2510,实现TTL电平到CAN总线电平特性的转换,它支持扩展格式的 CAN 数据帧结构(CAN2.0)。通过设置MCP2510中的CNF1、CNF2、CNF3三个寄存器,实现不同时钟下CAN总线通信波特率的设置。系统中CAN总线的数据发送和接收是两个不同的进程。在驱动程序中开放数据发送区和数据接收缓冲区。驱动程序会根据module_init()函数所指定的参数作为入口函数,在CAN控制器驱动程序中,这个入口函数为s3c2440_mcp2510_init(),主要完成一些基本的初始化工作。CAN控制器驱动的初始化工作主要有:软件复位,进入配置模式;设置CAN总线传输速率;关闭中断;设置ID过滤器;切换MCP2510到正常状态(Normal);清空接收和发送缓冲区。

初始化工作完成之后,引入驱动程序的操作集。应用程序通过系统来调用,是设备驱动程序对应程序的接口。驱动程序提供如下文件操作入口,定义如下:

s3c2440_mcp2510_open入口点负责打开CAN设备及初始化,设置设备的占用标志。s3c2440_mcp2510_release入口点负责关闭 CAN 设备。s3c2440_mcp2510_read入口点负责检查设备有没有接收到完整的帧,判断是否由完整的数据帧可读。要获取数据帧,使用ioctl的CAN_READFRAME命令。can_write入口点负责向CAN发送数据。如果发送队列有足够的空间,则向设备传送数据。can_ioctl入口点负责向CAN设备下发各种操作命令,命令代码通过cmd参数传送,命令参数通过arg参数传送。Read和write操作的驱动框架如图2所示,实现用户区和内核区之间的数据传送。

图2 Read和Write操作的驱动框架

考虑到CAN控制的特点和CAN总线网络传输数据的特点,设计两个数据结构:CanData和Mcp2510_DEV。

在CAN控制器设备驱动程序中,为了增强CAN控制器的通信能力、提高通信效率,根据CAN总线的特点,使用两级缓冲区结构,即直接面向CAN控制器的收发缓存区和直接面向系统调用的接收帧缓冲区。使得当大量数据进出CAN控制时,即可以保证数据帧丢失和出错几率允许范围内,又可以保证数据帧能被快速下发和接收。

在Linux操作系统中,CAN总线通信程序的设计可分为发送数据、接收数据和中断处理3个模块。如图3所示,系统中CAN总线的数据发送和接收是两个不同的线程。在驱动程序中建立数据发送和接收缓冲区。主节点中断处理程序只负责填充(或者读取)缓冲区中的数据,然后唤醒等待接收(或发送)数据的任务。数据的发送和接收都通过独立的缓冲区由中断来实现。操作系统的中断响应时间在软件上决定了CAN总线数据的最快收发速度。

图3 CAN总线通信程序结构

3 主节点图形用户GUI设计

主节点显示模块主要作用是对起重机的各种参数进行显示及设置相关的信息查询功能。Qt Embedded是挪威Trolletch公司的图形化界面开发工具Qt的嵌入式版本,它通过QtAPI与LinuxI/O以及Framebuffer直接交互,拥有较高的运行效率,而且整体采用面向对象编程,拥有良好的体系架构和编程模式。Qt Embedded实现结构如图4所示。

图4Qt Embedded的实现结构

工作状态显示画面LGUI中定义的图形对象主要包括:文本、矩形、椭圆等表示塔机的塔身、塔臂和牵引小车及吊钩。QT4软件中的2D绘图部分称为Arthur绘图系统,它由3个主要的类支撑起整个框架:QPainter、QPaintDevice 和 QPaintEngine。QPainter类具有GUI程序需要的绝大多数函数,能够绘制基本的图形(点、线、矩形、多边形等)以及复杂的图形(如图形路径)。QPaintPath对象可以用来填充、绘制轮廓。线和轮廓使用画笔(QPen)进行绘制,画刷(QPrush)进行填充。Qt的坐标由QPainter控制,QPainter的逻辑坐标与QPainter-Device的物理坐标之间的映射由QPainter的变换矩阵、视口和窗口处理。逻辑坐标与物理坐标默认是一致的。使用Qt Designer进行界面设计,设计一个定时器QTimer,建立一个信号和槽的连接connect(timer、SIGNAL(timerout())、this,SLOT(update()));让它200ms产生一个timerout信号,窗口接收函数为update(),这个函数自动调用PaintEvent()函数,对窗口进行重绘,根据缓冲区数据对LCD屏幕相应的图形显示进行刷新操作。如转动重绘过程当中根据塔吊角度数据,转动图形的角度,让它和角度对应起来。重绘图形之前,先通过Paintsave()保存坐标系,转动一定角度用Paintrotate();根据系统角度旋转后,最后使用 Paint.restore()恢复系统坐标系。塔吊高度显示图形通过QPainter::scale()函数进行比例变换;角度显示图形使用 QPainter::rotate()函数进行旋转变换;幅度显示图形的平移变换则使用QPainter::tanslate()函数。最终将数据通过坐标变换后实时显示图形位置到LCD屏幕上。

GUI模块显示定义了数据结构以描述当前工作空间以及图形对象的属性,结构体data包含6个float数据、3个char数据、5个bool数据、1个int数据。

4 结束语

本文介绍了基于S3C2410的塔吊实时监控,重点介绍了嵌入式系统的GUI设计,详细地给出了设计思路及部分核心代码。综合利用嵌入式平台提供的软硬件开发了实际的塔吊监控界面,提高操作的安全性。

[1]张瑞,于德海,马明龙.基于ARM 的嵌入式Linux的交叉编译环境的建立[J].科技信息,2009(25):508-509.

[2]刘伟民,韩斌,李征.基于linux的数据采集及在QT界面的显示[J].数采与监测,2008,24(8-1):97-99.

[3]彭均键,史步海,刘洋.基于Qt的嵌入式GUI开发平台的搭建[J].微型电脑应用,2010,26(2):40-42.

[4]俞辉.嵌入式Linux程序设计案例与实验教程[M].北京:机械工业出版社,2009.

[5]谭平,刘建新.基于QT的嵌入式CAN网络监控GUI系统[J]:计算机工程与设计,2008,29(16):4147-4152.

[6]Trolltech Corporation.Qt for embedded Linux [EB/OL]. http://trolltech.com/products/qtopia/qtopia _core/core_features,2008-01-10.

[7]赵莹,徐大平,吕跃刚.基于Qt/Embedded的嵌入式控制界面开发[J].微计算机信息,2009,25(4-2):36-38.

[8]张春艳.基于Qt的嵌入式图形用户界面研究与实现[D].大连:大连海事大学,2008.

[9]赵军伟.基于Linux嵌入式操作系统的图形化界面的研究和实现[D].四川:成都理工大学,2010.

猜你喜欢

驱动程序嵌入式总线
基于PCI Express总线的xHC与FPGA的直接通信
机载飞控1553B总线转以太网总线设计
计算机硬件设备驱动程序分析
搭建基于Qt的嵌入式开发平台
嵌入式软PLC在电镀生产流程控制系统中的应用
多通道ARINC429总线检查仪
Altera加入嵌入式视觉联盟
倍福 CX8091嵌入式控制器
基于EtherCAT总线的ROV控制系统设计
基于MPC8280的CPU单元与内部总线驱动程序设计