4 CAN接口通訊軟件設計
對于can的通訊程序,采用分層處理的方法,包括驅動層和應用層。因此,can接口軟件通訊包括兩部分:can驅動程序和can應用程序。驅動程序負責完成linux內核與sja1000之間的數據通訊,即linux內核設置sja1000的控制寄存器,讀寫sja1000接收、發(fā)送緩沖器。應用程序部分負責完成用戶空間和內核空間的數據交換,以及分析從sja1000接收到的報文,封裝要發(fā)送報文。接收的報文主要包括來自變流模塊和變槳偏航控制模塊的機組狀態(tài)信息及風速風向、各類溫度和轉速信號等。發(fā)送的報文包括下發(fā)給變流模塊和變槳偏航控制模塊的控制指令及控制參數。
4.1 can驅動程序設計
(1)底層驅動程序總體設計。在linux中設備驅動程序是由一組數據結構和函數組成的,它包含設備服務子程序(如open、read、write、close、ioctl等)、初始化函數can_init()和中斷處理程序can_interrupt()。
在linux加載can驅動時調用can_init(),向操作系統(tǒng)注冊設備,同時完成can總線波特率的設置,id過濾器的設置,清空接收和發(fā)送緩沖區(qū),開啟中斷等工作,完成初始化后,退出復位模式,進入正常的工作模式。
read從接收緩沖區(qū)讀取數據;write向發(fā)送緩沖區(qū)寫人數據;release關閉can 控制器;ioctl向can 控制器發(fā)各種操作命令,包括設置sja1000總線波特率、id過濾器等;open 打開can 控制器,并使用函數request_irq()向系統(tǒng)申請中斷,并設置中斷處理程序為can_interrupt(),當sja1000內部中斷寄存器(ir)的任意位置為1時,int引腳低電平有效,調用其中斷處理函數can-interrupt(),在該函數中讀取中斷控制寄存器,判斷中斷原因(接收中斷、發(fā)送中斷、錯誤中斷、數據溢出中斷、喚醒中斷),從而調用相應的服務子程序。
(2)sja1000讀寫邏輯分析及設計。由于sja1000的地址線和數據線是分時復用的,需要通過軟件編程模擬地址鎖存信號,以達到數據和地址的分時傳輸,因此,在程序設計中,要考慮sja1000的讀寫時序。圖4為sja1000的寫時序圖。
圖4 sja1000寫時序圖
系統(tǒng)中can通訊協(xié)議采用擴展幀格式,29位id定義見圖6。
圖6 can通訊協(xié)議擴展幀id
其中,命令碼是來自不同模塊的報文的代號,占id的高12位,范圍為0x000-0x0FFf,包含同一組信號的報文具有唯一的命令碼。源地址和目標地址取決于控制器地址,主控制器為0x01,網側變流控制器為0x02,電機側變流控制器為0x03,變槳偏航控制器為0x04。id的低9位分別為后續(xù)幀標志和后續(xù)幀幀數,若后續(xù)幀標志為1,則表示該報文還有后續(xù)幀需要傳輸。#p#分頁標題#e#
(2) 基于qt/e的圖形界面應用程序設計。本系統(tǒng)中主控制器圖形界面應用程序基于linux平臺的qt/e實現(xiàn)。圖形界面應用程序主要功能有兩個:一是從can 總線接收風電機組運行狀態(tài)信息,并顯示給用戶,二是判斷并處理機組狀態(tài)信息,通過can接口向各子控制模塊發(fā)送控制信息。由于本系統(tǒng)中can以多主方式工作,接收來自多個節(jié)點的數據,并向多個節(jié)點發(fā)送數據,因此,在應用程序中要封裝不同的報文,還要分析收到數據的信息。
為了提高系統(tǒng)的響應,應用程序采用多線程機制,本系統(tǒng)中設計三個獨立線程來處理不同的任務。主線程負責主界面實時數據顯示,歷史數據查詢以及機組狀態(tài)的邏輯判斷和流程控制等。由于數據庫的讀寫是對磁盤文件的直接操作,速度較慢,因此在一獨立線程中實現(xiàn)歷史數據的寫操作,以防止對主線程控制程序的影響,而對于歷史數據的查詢,現(xiàn)場只在特定情況下用到,仍在主線程中實現(xiàn)。can總線數據的交互比較頻繁,為了避免數據的丟失,在一獨立線程中完成數據的接收。
5 結束語
目前,風力發(fā)電控制技術主要掌握在國外大企業(yè)手中,國內機組的控制器主要依靠技術進口,因此,研究并設計有自主產權的機組控制系統(tǒng)有著深遠的意義。
參考文獻
[1] 葉杭冶. 風力發(fā)電機組的控制技術[m]. 北京:機械工業(yè)出版社,2006.
[2] 孫大鵬. 雙饋風力發(fā)電機組電控與安全保護系統(tǒng)設計研究[d]. 北京:華北電力大學研究生論文,2009.
[3] 繞運濤等. 現(xiàn)場總線can原理與應用技術[m]. 北京:北京航空航天大學出版社,2007:242-243.
[4] 儲忠,溫陽東. 基于s3c2410控制的can總線接口設計[j]. 合肥學院學報:自然科學版,2007,5,2:59-62.
轉載請注明出處。