邵國平,于浩洋
(黑龍江工程學(xué)院 電子工程系,黑龍江 哈爾濱150050)
塔機是一種廣泛應(yīng)用于建筑領(lǐng)域的大型起重設(shè)備,由于各種主客觀原因極易發(fā)生重大事故,從而導(dǎo)致設(shè)備損壞甚至人身傷亡,給社會造成重大損失。本文開發(fā)一個能夠?qū)λC進行實時監(jiān)控的系統(tǒng),控制其在安全限度內(nèi)工作,增加對塔機的過載保護。在生產(chǎn)現(xiàn)場中起吊幅度、起吊高度、轉(zhuǎn)角和起重量等實時數(shù)據(jù)構(gòu)成了塔機工作狀態(tài)。在Linux嵌入式系統(tǒng)中基于CAN數(shù)據(jù)總線網(wǎng)絡(luò)采集塔機工作狀態(tài),保證在不同工況參數(shù)下所能起吊的最大額定起重量、變幅、轉(zhuǎn)角和起吊高度不會超出相應(yīng)不同工況條件下的極限值,完成CAN總線驅(qū)動程序包和有好的圖形化GUI人機界面。系統(tǒng)功能包括CAN總線通信模塊、圖形界面模塊和數(shù)據(jù)非易失存儲等模塊。塔機監(jiān)控系統(tǒng)能夠?qū)λC主要工作參數(shù)進行綜合自動顯示與記錄、自動保護,對正常工作、滿載、超載、變幅超限等工作狀態(tài)給出相應(yīng)提示,以保證起重機械的正常工作。
CAN模塊結(jié)構(gòu)如圖1所示。系統(tǒng)中CAN節(jié)點是一個集中數(shù)據(jù)處理的重要控制節(jié)點,主要有兩個功能:一是作為主處理器與CAN總線的接口,完成基于MCP2510的CAN總線控制器接口的數(shù)據(jù)轉(zhuǎn)換,對智能節(jié)點傳送過來的數(shù)據(jù)信息進行緩存。二是負責(zé)協(xié)調(diào)S3C2440處理器與CAN數(shù)據(jù)采集節(jié)點的通信,以確保各節(jié)點的監(jiān)控數(shù)據(jù)能夠快速、準確地傳給S3C2440處理器。CAN數(shù)據(jù)采集節(jié)點以MSP430F149為微控制器,外圍模塊帶有CAN總線接口模塊和能夠分別進行角度采集、高度采集、壓力采集、長度采集等模塊。主控模塊基于S3C2440處理器的嵌入式系統(tǒng),負責(zé)對系統(tǒng)各監(jiān)控節(jié)點數(shù)據(jù)的數(shù)據(jù)采集管理、控制命令的發(fā)送及各控制單元動態(tài)參數(shù)和設(shè)備狀態(tài)的實時顯示。
S3C2440X處理器集成了LCD控制器,主要用于傳輸顯示數(shù)據(jù)和產(chǎn)生控制信號,并支持屏幕水平和垂直滾動顯示。數(shù)據(jù)的傳送采用DMA(直接內(nèi)存訪問)方式,以達到最小的延遲,可以支持多種液晶屏。
圖1 嵌入式CAN網(wǎng)絡(luò)監(jiān)控系統(tǒng)結(jié)構(gòu)
主控CAN節(jié)點為智能型模塊,以Linux2.6嵌入式系統(tǒng)為核心,主要負責(zé)以輪詢方式對現(xiàn)場塔吊工況參數(shù)進行監(jiān)測,接收CAN通信控制器MCP2510進入緩沖區(qū)的數(shù)據(jù),形成圖形動畫和文本顯示,按操作過程先后組成過程數(shù)據(jù)記錄,定期寫入到非易失存儲器中。各個節(jié)點模塊將傳感器采集的信號通過串口傳至 MSP430F149微控制器并經(jīng)過簡單的處理,經(jīng)由MCP2510轉(zhuǎn)化成CAN總線的輸出和輸入信號。通過CAN總線傳到S3C2440微處理器進行分析處理,判斷系統(tǒng)所處的狀態(tài),在系統(tǒng)異常工作狀態(tài)時,發(fā)出報警信號,同時實現(xiàn)諸多工作參數(shù)的數(shù)字化集中顯示和控制。監(jiān)控中心節(jié)點的主要工作是利用QT/E界面,創(chuàng)建通信線程,請求數(shù)據(jù)采集節(jié)點傳送數(shù)據(jù)到主控制節(jié)點,接收塔機的實時運行數(shù)據(jù),將其直觀顯示,便于監(jiān)控人員監(jiān)視塔機的生產(chǎn)運行情況。
本系統(tǒng)主控節(jié)點軟件應(yīng)用程序的編寫是基于Linux操作系統(tǒng),使用QT Designer進行界面設(shè)計。主要功能是:實現(xiàn)對起重機的長度、角度、壓力和高度限位開關(guān)量的采集和運算;根據(jù)運算結(jié)果實現(xiàn)對起重機的控制;同時將相關(guān)數(shù)據(jù)通過液晶顯示。監(jiān)控中心節(jié)點系統(tǒng)的軟件總體結(jié)構(gòu):1)數(shù)據(jù)報警處理模塊,2)顯示界面模塊(用戶登陸、工作狀態(tài)顯示、參數(shù)設(shè)置、報警信息查詢模塊),3)按鍵輸入處理模塊,4)CAN收發(fā)數(shù)據(jù)模塊。
Linux下的CAN總線驅(qū)動程序是相對復(fù)雜的Linux字符設(shè)備驅(qū)動程序。本系統(tǒng)采用Microchip公司的CAN總線接口芯片MCP2510,實現(xiàn)TTL電平到CAN總線電平特性的轉(zhuǎn)換,它支持擴展格式的 CAN 數(shù)據(jù)幀結(jié)構(gòu)(CAN2.0)。通過設(shè)置MCP2510中的CNF1、CNF2、CNF3三個寄存器,實現(xiàn)不同時鐘下CAN總線通信波特率的設(shè)置。系統(tǒng)中CAN總線的數(shù)據(jù)發(fā)送和接收是兩個不同的進程。在驅(qū)動程序中開放數(shù)據(jù)發(fā)送區(qū)和數(shù)據(jù)接收緩沖區(qū)。驅(qū)動程序會根據(jù)module_init()函數(shù)所指定的參數(shù)作為入口函數(shù),在CAN控制器驅(qū)動程序中,這個入口函數(shù)為s3c2440_mcp2510_init(),主要完成一些基本的初始化工作。CAN控制器驅(qū)動的初始化工作主要有:軟件復(fù)位,進入配置模式;設(shè)置CAN總線傳輸速率;關(guān)閉中斷;設(shè)置ID過濾器;切換MCP2510到正常狀態(tài)(Normal);清空接收和發(fā)送緩沖區(qū)。
初始化工作完成之后,引入驅(qū)動程序的操作集。應(yīng)用程序通過系統(tǒng)來調(diào)用,是設(shè)備驅(qū)動程序?qū)?yīng)程序的接口。驅(qū)動程序提供如下文件操作入口,定義如下:
s3c2440_mcp2510_open入口點負責(zé)打開CAN設(shè)備及初始化,設(shè)置設(shè)備的占用標(biāo)志。s3c2440_mcp2510_release入口點負責(zé)關(guān)閉 CAN 設(shè)備。s3c2440_mcp2510_read入口點負責(zé)檢查設(shè)備有沒有接收到完整的幀,判斷是否由完整的數(shù)據(jù)幀可讀。要獲取數(shù)據(jù)幀,使用ioctl的CAN_READFRAME命令。can_write入口點負責(zé)向CAN發(fā)送數(shù)據(jù)。如果發(fā)送隊列有足夠的空間,則向設(shè)備傳送數(shù)據(jù)。can_ioctl入口點負責(zé)向CAN設(shè)備下發(fā)各種操作命令,命令代碼通過cmd參數(shù)傳送,命令參數(shù)通過arg參數(shù)傳送。Read和write操作的驅(qū)動框架如圖2所示,實現(xiàn)用戶區(qū)和內(nèi)核區(qū)之間的數(shù)據(jù)傳送。
圖2 Read和Write操作的驅(qū)動框架
考慮到CAN控制的特點和CAN總線網(wǎng)絡(luò)傳輸數(shù)據(jù)的特點,設(shè)計兩個數(shù)據(jù)結(jié)構(gòu):CanData和Mcp2510_DEV。
在CAN控制器設(shè)備驅(qū)動程序中,為了增強CAN控制器的通信能力、提高通信效率,根據(jù)CAN總線的特點,使用兩級緩沖區(qū)結(jié)構(gòu),即直接面向CAN控制器的收發(fā)緩存區(qū)和直接面向系統(tǒng)調(diào)用的接收幀緩沖區(qū)。使得當(dāng)大量數(shù)據(jù)進出CAN控制時,即可以保證數(shù)據(jù)幀丟失和出錯幾率允許范圍內(nèi),又可以保證數(shù)據(jù)幀能被快速下發(fā)和接收。
在Linux操作系統(tǒng)中,CAN總線通信程序的設(shè)計可分為發(fā)送數(shù)據(jù)、接收數(shù)據(jù)和中斷處理3個模塊。如圖3所示,系統(tǒng)中CAN總線的數(shù)據(jù)發(fā)送和接收是兩個不同的線程。在驅(qū)動程序中建立數(shù)據(jù)發(fā)送和接收緩沖區(qū)。主節(jié)點中斷處理程序只負責(zé)填充(或者讀?。┚彌_區(qū)中的數(shù)據(jù),然后喚醒等待接收(或發(fā)送)數(shù)據(jù)的任務(wù)。數(shù)據(jù)的發(fā)送和接收都通過獨立的緩沖區(qū)由中斷來實現(xiàn)。操作系統(tǒng)的中斷響應(yīng)時間在軟件上決定了CAN總線數(shù)據(jù)的最快收發(fā)速度。
圖3 CAN總線通信程序結(jié)構(gòu)
主節(jié)點顯示模塊主要作用是對起重機的各種參數(shù)進行顯示及設(shè)置相關(guān)的信息查詢功能。Qt Embedded是挪威Trolletch公司的圖形化界面開發(fā)工具Qt的嵌入式版本,它通過QtAPI與LinuxI/O以及Framebuffer直接交互,擁有較高的運行效率,而且整體采用面向?qū)ο缶幊?,擁有良好的體系架構(gòu)和編程模式。Qt Embedded實現(xiàn)結(jié)構(gòu)如圖4所示。
圖4Qt Embedded的實現(xiàn)結(jié)構(gòu)
工作狀態(tài)顯示畫面LGUI中定義的圖形對象主要包括:文本、矩形、橢圓等表示塔機的塔身、塔臂和牽引小車及吊鉤。QT4軟件中的2D繪圖部分稱為Arthur繪圖系統(tǒng),它由3個主要的類支撐起整個框架:QPainter、QPaintDevice 和 QPaintEngine。QPainter類具有GUI程序需要的絕大多數(shù)函數(shù),能夠繪制基本的圖形(點、線、矩形、多邊形等)以及復(fù)雜的圖形(如圖形路徑)。QPaintPath對象可以用來填充、繪制輪廓。線和輪廓使用畫筆(QPen)進行繪制,畫刷(QPrush)進行填充。Qt的坐標(biāo)由QPainter控制,QPainter的邏輯坐標(biāo)與QPainter-Device的物理坐標(biāo)之間的映射由QPainter的變換矩陣、視口和窗口處理。邏輯坐標(biāo)與物理坐標(biāo)默認是一致的。使用Qt Designer進行界面設(shè)計,設(shè)計一個定時器QTimer,建立一個信號和槽的連接connect(timer、SIGNAL(timerout())、this,SLOT(update()));讓它200ms產(chǎn)生一個timerout信號,窗口接收函數(shù)為update(),這個函數(shù)自動調(diào)用PaintEvent()函數(shù),對窗口進行重繪,根據(jù)緩沖區(qū)數(shù)據(jù)對LCD屏幕相應(yīng)的圖形顯示進行刷新操作。如轉(zhuǎn)動重繪過程當(dāng)中根據(jù)塔吊角度數(shù)據(jù),轉(zhuǎn)動圖形的角度,讓它和角度對應(yīng)起來。重繪圖形之前,先通過Paintsave()保存坐標(biāo)系,轉(zhuǎn)動一定角度用Paintrotate();根據(jù)系統(tǒng)角度旋轉(zhuǎn)后,最后使用 Paint.restore()恢復(fù)系統(tǒng)坐標(biāo)系。塔吊高度顯示圖形通過QPainter::scale()函數(shù)進行比例變換;角度顯示圖形使用 QPainter::rotate()函數(shù)進行旋轉(zhuǎn)變換;幅度顯示圖形的平移變換則使用QPainter::tanslate()函數(shù)。最終將數(shù)據(jù)通過坐標(biāo)變換后實時顯示圖形位置到LCD屏幕上。
GUI模塊顯示定義了數(shù)據(jù)結(jié)構(gòu)以描述當(dāng)前工作空間以及圖形對象的屬性,結(jié)構(gòu)體data包含6個float數(shù)據(jù)、3個char數(shù)據(jù)、5個bool數(shù)據(jù)、1個int數(shù)據(jù)。
本文介紹了基于S3C2410的塔吊實時監(jiān)控,重點介紹了嵌入式系統(tǒng)的GUI設(shè)計,詳細地給出了設(shè)計思路及部分核心代碼。綜合利用嵌入式平臺提供的軟硬件開發(fā)了實際的塔吊監(jiān)控界面,提高操作的安全性。
[1]張瑞,于德海,馬明龍.基于ARM 的嵌入式Linux的交叉編譯環(huán)境的建立[J].科技信息,2009(25):508-509.
[2]劉偉民,韓斌,李征.基于linux的數(shù)據(jù)采集及在QT界面的顯示[J].數(shù)采與監(jiān)測,2008,24(8-1):97-99.
[3]彭均鍵,史步海,劉洋.基于Qt的嵌入式GUI開發(fā)平臺的搭建[J].微型電腦應(yīng)用,2010,26(2):40-42.
[4]俞輝.嵌入式Linux程序設(shè)計案例與實驗教程[M].北京:機械工業(yè)出版社,2009.
[5]譚平,劉建新.基于QT的嵌入式CAN網(wǎng)絡(luò)監(jiān)控GUI系統(tǒng)[J]:計算機工程與設(shè)計,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的嵌入式控制界面開發(fā)[J].微計算機信息,2009,25(4-2):36-38.
[8]張春艷.基于Qt的嵌入式圖形用戶界面研究與實現(xiàn)[D].大連:大連海事大學(xué),2008.
[9]趙軍偉.基于Linux嵌入式操作系統(tǒng)的圖形化界面的研究和實現(xiàn)[D].四川:成都理工大學(xué),2010.