汪 靜,胡旭東,金玉珍,何偉強
(浙江理工大學(xué) 浙江省現(xiàn)代紡織裝備技術(shù)重點實驗室,杭州 310018)
噴氣織機控制器CAN通信接口設(shè)計及實現(xiàn)
汪 靜,胡旭東,金玉珍,何偉強
(浙江理工大學(xué) 浙江省現(xiàn)代紡織裝備技術(shù)重點實驗室,杭州 310018)
提出了基于Win CE的噴氣織機控制器CAN通信接口設(shè)計及實現(xiàn)的方法。設(shè)計了CAN通信接口的硬件電路,介紹了接口驅(qū)動程序的工作機制及開發(fā)環(huán)境,詳細(xì)闡述了Win CE流接口驅(qū)動程序的開發(fā)過程,并通過編寫CAN通信應(yīng)用程序測試通信。測試結(jié)果表明,CAN通信接口在Win CE下通信正常且具有較強的實時性。
Windows CE;CAN總線;流接口驅(qū)動;噴氣織機控制器
噴氣織機控制器主要由人機界面、主控制模塊及送經(jīng)/卷取模塊這三大部分組成,用戶在人機界面上設(shè)定織造工藝條件后傳送給織機下位機,下位機的主控制板及送經(jīng)/卷取板根據(jù)人機界面設(shè)定的參數(shù)執(zhí)行相應(yīng)動作并把當(dāng)前織機運行情況傳回人機界面實時顯示??棛C控制器的正常通信是保證織機正常運行的先決條件。目前,國外高檔噴氣織機的機電一體化控制普遍采用基于現(xiàn)場總線的通信方式實現(xiàn),如日本津田駒公司的ZAX-N噴氣織機、豐田公司的JAT710噴氣織機、比利時必佳樂公司OMNI plus 800噴氣織機的控制系統(tǒng)。
CAN總線技術(shù)自20世紀(jì)80年代末以來已逐漸發(fā)展形成一定影響,目前,CAN總線已形成國際標(biāo)準(zhǔn)。CAN總線適用于數(shù)據(jù)交換簡短而頻繁的場合,它高性能、高可靠性的優(yōu)點特別適合工業(yè)設(shè)備的互連,是解決工業(yè)控制設(shè)備之間數(shù)據(jù)通信的有效方式。
基于CAN總線本身具有的優(yōu)勢能夠滿足噴氣織機控制系統(tǒng)的通信要求,本設(shè)計中噴氣織機控制器的各部分機構(gòu)通信采用CAN總線通信實現(xiàn)。Windows CE系統(tǒng)是微軟公司專門為移動設(shè)備、嵌入式應(yīng)用等非PC領(lǐng)域而設(shè)計的一種32位嵌入式實時操作系統(tǒng),它具有很好的模塊性,良好的實時性及強大的通信能力,該操作系統(tǒng)在工業(yè)現(xiàn)場設(shè)備中也被廣泛應(yīng)用[1-2]。本研究以噴氣織機控制器的CAN通信實現(xiàn)為實例,具體給出Win CE下CAN通信接口的實現(xiàn),詳細(xì)介紹CAN接口硬件設(shè)計及Win CE下接口驅(qū)動程序的開發(fā)實現(xiàn)流程。
在Windows CE中,驅(qū)動程序是Windows CE內(nèi)核的一部分,所有驅(qū)動皆為動態(tài)鏈接庫,且在驅(qū)動實現(xiàn)中可以調(diào)用所有標(biāo)準(zhǔn)的API函數(shù)。Win CE驅(qū)動程序模型有本機驅(qū)動程序和流接口驅(qū)動程序兩種。本機驅(qū)動程序通常與基于Win CE的平臺有著緊密的連接,總是在平臺啟動時加載,如鍵盤、顯示器等都有專門用于Win CE的接口。流接口驅(qū)動程序是為連接到基于Win CE平臺的外圍設(shè)備而設(shè)計的,典型的流式設(shè)備如串口、網(wǎng)卡,打印機等。
流接口驅(qū)動程序是一般類型的設(shè)備驅(qū)動程序,由設(shè)備管理器統(tǒng)一加載、管理和卸載,它有固定的入口點函數(shù),主要任務(wù)是通過流接口函數(shù)使得應(yīng)用程序通過Win CE的文件系統(tǒng)訪問這些驅(qū)動程序,達(dá)到應(yīng)用程序訪問驅(qū)動程序、操作硬件的目的。應(yīng)用程序使用文件API對設(shè)備進(jìn)行訪問的過程是:OS接受API調(diào)用FileSys.exe,F(xiàn)ileSys.exe發(fā)現(xiàn)是對設(shè)備進(jìn)行操作,就會把執(zhí)行交給device.exe,調(diào)用流接口與硬件交互[3]。流驅(qū)動的體系結(jié)構(gòu)如圖1所示。
圖1 流式接口驅(qū)動程序體系結(jié)構(gòu)Fig.1 Architecture of Stream Interface Driver
本次設(shè)計的基于Win CE的CAN通信接口應(yīng)用于噴氣織機控制器的各部分通信,主要是織機的人機交互界面與織機的主控板及送經(jīng)/卷取板這三部分機構(gòu)的通信實現(xiàn)。設(shè)計選用基于ARM9結(jié)構(gòu)EP9307為核心處理器,外接觸摸板及液晶屏用于系統(tǒng)的輸入及輸出顯示,由于EP9307微處理器不帶CAN總線控制器,所以在外部擴展了獨立的CAN控制器。為提高系統(tǒng)的驅(qū)動能力、增大通信距離,CAN收發(fā)器采用PCA82C250芯片作為其與物理總線間的接口,以實現(xiàn)物理層的轉(zhuǎn)換和傳輸,增加了對總線的差動發(fā)送能力和對CAN控制器的差動接收能力[4]。CAN控制器采用SJA1000芯片,SJA1000完全支持CAN 2.0A和CAN 2.0B協(xié)議;通信位速率最高可達(dá)1 Mbps;有擴展的接收緩沖器64字節(jié),先進(jìn)先出(FIFO)。硬件結(jié)構(gòu)如圖2所示。
為提高系統(tǒng)的可靠性和抗干擾能力,主要從以下幾個方面考慮,在CAN收發(fā)器與控制器之間接入高速光耦TLP113以實現(xiàn)電氣隔離,TLP113可滿足在最高速率1 Mbps下的電氣響應(yīng),保護(hù)控制系統(tǒng)電路;采用隔離型DC/DC模塊為收發(fā)器電路供電,選擇B0505S型號定電壓輸入隔離非穩(wěn)壓單輸出型DC/DC模塊,可向收發(fā)器電路提供低于200 mA的電流,隔離電壓可高于1 000 VDC;由于CAN總線對收發(fā)器82C250發(fā)送數(shù)據(jù)輸入端(TXD)狀態(tài)的要求,在82C250的TXD端與高速光耦TLP113的輸出端5腳相連,同時接390 Ω上拉電阻以保證在總線空閑或出現(xiàn)異常情況時TXD端的狀態(tài)為高電平;在CAN總線末端必須連接2個120 Ω終端電阻以起到其對總線阻抗的匹配作用,加強總線數(shù)據(jù)通信的可靠性和抗干擾性。設(shè)計時還考慮其他抗干擾措施,如在82C250的CANH、CANL端與地之間并聯(lián)2個小電容以減小總線上的高頻干擾,在82C250與TLP113的電源端與地之間添加去耦合電容以降低干擾。具有光電隔離及電源隔離的CAN通信接口電路如圖3示。
圖2 硬件結(jié)構(gòu)框圖Fig.2 Hardware Structure Diagram
圖3 CAN通信接口電路Fig.3 Communication Interface Circuit ofCAN
Platform Builder(PB)是微軟公司提供的一個集成開發(fā)軟件,通過它可創(chuàng)建系統(tǒng)鏡像,包括核心文件系統(tǒng)、存儲的程序和文檔、系統(tǒng)配置文件等。本次CAN驅(qū)動開發(fā)選擇PB作為開發(fā)工具,通過串口連接在超級終端輸出打印信息,進(jìn)行驅(qū)動調(diào)試。由于驅(qū)動開發(fā)需要多次的調(diào)試、修改,而在PB中每次修改驅(qū)動程序后把它編譯進(jìn)系統(tǒng)鏡像再調(diào)試需要耗費大量的時間。為簡化開發(fā)過程,選擇在Win CE下動態(tài)加載流驅(qū)動的方法,即單獨編譯驅(qū)動,通過加載DLL文件的方式把驅(qū)動加載到Win CE系統(tǒng)中結(jié)合硬件進(jìn)行調(diào)試,直到對驅(qū)動程序進(jìn)行多次迭代調(diào)試,修改完成之后再將其封裝入Win CE系統(tǒng)映像。
CAN驅(qū)動程序的開發(fā)過程主要可概括為編寫DLL做成Project再加入到操作系統(tǒng)。實現(xiàn)的步驟是先在PB中新建一個DLL項目,編寫一些輸入函數(shù),寄存器,外設(shè)的聲明,寫DLLENTRY函數(shù);編寫流接口函數(shù);編寫DLL的導(dǎo)出函數(shù)文件.DEF;為驅(qū)動程序?qū)懭胱员眄?,修改bib文件。
流接口驅(qū)動程序必須實現(xiàn)一組標(biāo)準(zhǔn)的函數(shù)用來完成標(biāo)準(zhǔn)的輸入輸出管理和電源管理,而流驅(qū)動開發(fā)的重點就在于這10個標(biāo)準(zhǔn)流接口函數(shù)的實現(xiàn)[5]。接口函數(shù)見表1,在此設(shè)備名前綴命名為“CAN”。
表1 流接口函數(shù)Tab.1 Function of Stream Interface
現(xiàn)主要對CAN_Init、CAN_Open和CAN_IOControl這3個函數(shù)進(jìn)行分析。
3.2.1 CAN_Init()函數(shù)
CAN_Init()函數(shù)的主要任務(wù)是分配內(nèi)存、綁定中斷,CAN_Init函數(shù)流程如圖4所示。
圖4 CAN_Init函數(shù)流程Fig.4 Function Flow of CAN_Init
在Windows CE中,對物理內(nèi)存的訪問是通過虛擬地址進(jìn)行的,VirtualAlloc()函數(shù)負(fù)責(zé)在虛擬內(nèi)存空間內(nèi)保留一段虛擬內(nèi)存,而VirtualCopy()函數(shù)負(fù)責(zé)把一段物理內(nèi)存和虛擬內(nèi)存綁定,這樣,最終實現(xiàn)通過虛擬地址進(jìn)行對物理內(nèi)存的訪問,地址映射的關(guān)鍵代碼如下:
DWORD dwRet=1;
SJA1000_VBASE=VirtualAlloc (0, 0x04,MEM_RESERVE, PAGE_NOACCESS);
dwRet=VirtualCopy(SJA1000_VBASE, (PVOID)(SJA1000_PHYBASE>>8), 0x04, PAGE_READWRITE |PAGE_NOCACHE | PAGE_PHYSICAL);
3.2.2 CAN_Open()函數(shù)
CAN_Open()函數(shù)主要完成初始化,創(chuàng)建有名事件。初始化包括寄存器初始化、SJA1000初始化、緩沖區(qū)初始化、CAN設(shè)備初始化設(shè)置工作方式和波特率參數(shù)等。在Win CE中有名事件可以在進(jìn)程間被識別,通過有名事件實現(xiàn)處于不同進(jìn)程中的驅(qū)動程序與應(yīng)用程序間的通信,在此創(chuàng)建有名事件以備應(yīng)用程序使用。
3.2.3 CAN_IOControl()函數(shù)
在CAN通信應(yīng)用程序中通過調(diào)用CAN_IOControl()函數(shù)可根據(jù)自定義協(xié)議進(jìn)行相關(guān)參數(shù)設(shè)置。以波特率設(shè)置為例,定義IOCTL_CAN_SET_BAUDRATE函數(shù)之后,在應(yīng)用程序中通過設(shè)置控制代碼IoControlCode=IOCTL_CAN_SET_BAUDRATE,即可用DeviceIoControl直接調(diào)用進(jìn)行波特率的設(shè)置,而不必再對寄存器進(jìn)行設(shè)置,簡化了應(yīng)用程序的開發(fā)。
在驅(qū)動程序開發(fā)過程中還需注意Windows CE中斷的處理[6],處理中斷的幾個關(guān)鍵步驟是:首先在驅(qū)動的初始過程中用CreateEvent()函數(shù)創(chuàng)建有名事件,調(diào)用InterruptInitialize()函數(shù)將事件與中斷號綁定同時設(shè)置該中斷使能標(biāo)識。驅(qū)動程序中的中斷服務(wù)線程(IST)使用WaitForSingleObject()函數(shù)等待中斷發(fā)生,中斷發(fā)生時喚醒等待相應(yīng)事件的IST進(jìn)行中斷處理,處理完成后調(diào)用InterruptDone()函數(shù)告訴操作系統(tǒng)中斷處理結(jié)束,完成中斷處理。
中斷程序的任務(wù)是接收中斷觸發(fā)完成相應(yīng)操作。若接收到中斷類型為“接收中斷”,則讀緩存數(shù)據(jù),置中斷使能并SetEvent()設(shè)置同步等待事件對象為有信號量狀態(tài),若為其他類型中斷(如數(shù)據(jù)傳輸錯誤中斷,總線錯誤中斷,數(shù)據(jù)溢出中斷等)則置相應(yīng)中斷使能標(biāo)志,通信應(yīng)用程序即可根據(jù)使能標(biāo)志位捕捉錯誤信息。處理完成后調(diào)用InterruptDone()函數(shù)完成中斷。中斷程序流程圖如圖5所示,其中bStop標(biāo)識符在初始化函數(shù)中賦值,線程創(chuàng)建成功賦False,中斷程序不斷查詢等待中斷到達(dá)。
完成驅(qū)動程序的編寫后,需把驅(qū)動程序與Win CE操作系統(tǒng)的其他組件一起編譯,將編譯后產(chǎn)生的文件封裝進(jìn)操作系統(tǒng)。需要完成的工作是,把驅(qū)動程序?qū)懭胱员眄棽⑿薷腷ib文件。
1)在注冊表文件Platform.reg中增加CAN子鍵和相應(yīng)鍵值。[HKEY_LOCAL_MACHINEDriversBuiltInCAN]"Index"=dword: 1;設(shè)備驅(qū)動程序在同名設(shè)備文件中的序號
"Prefix"="CAN" ;設(shè)備文件前綴
"Dll"="can.dll" ;設(shè)備驅(qū)動的DLL文件名
"Order"=dword: 0
圖5 中斷流程Fig.5 Interrupt Flowchart
2)在文件Platform.Bib的MODULE部分增加代碼“CAN.DLL $(_FLATRELEASEDIR)CAN1.DLL NK SH”,使CAN驅(qū)動文件被包含在最終編譯生成的鏡像文件中。
完成驅(qū)動封裝之后,就可在應(yīng)用程序中通過標(biāo)準(zhǔn)的文件I/O函數(shù)來調(diào)用驅(qū)動函數(shù)控制設(shè)備“CAN1:”,如,調(diào)用CreateFile函數(shù)打開設(shè)備,調(diào)用ReadFile函數(shù)、WriteFile函數(shù)讀、寫設(shè)備信息,調(diào)用CloseHandle函數(shù)關(guān)閉設(shè)備。最終達(dá)到通過應(yīng)用程序訪問CAN驅(qū)動程序、操作CAN設(shè)備的目的。
本次CAN通信協(xié)議采用自定義的協(xié)議規(guī)范。CAN報文采用CAN2.0B協(xié)議規(guī)范中的擴展幀格式。CAN的一包幀由幀信息、幀ID、幀數(shù)據(jù)三部分組成,為使通信協(xié)議簡單實用,規(guī)定幀信息只能為擴展幀(29位ID),幀數(shù)據(jù)長度為8個字節(jié)。幀ID定義如圖6所示,ID值越小優(yōu)先級越高。幀數(shù)據(jù)、8位功能代碼和8位功能代碼參數(shù)根據(jù)實際需求自行定義,需傳輸?shù)膮?shù)量近100個,8位數(shù)據(jù)位(28=256)足夠使用。針對本系統(tǒng)定義的6位地址ID如表2所示。由于本次設(shè)計中CAN總線上設(shè)備較少,采用易于實現(xiàn)的總線形拓?fù)浣Y(jié)構(gòu)及多主式結(jié)構(gòu)的通信方式。
根據(jù)以上CAN通信協(xié)議實現(xiàn)織機上位機人機交互系統(tǒng)與底層主控板及送經(jīng)/卷取板的通信。當(dāng)人機交互系統(tǒng)啟動后在總線上發(fā)送廣播ID偵聽總線上其他CAN設(shè)備的連接請求,在收到總線上CAN設(shè)備的發(fā)送的請求后按優(yōu)先級高低與其建立連接進(jìn)行通信。
圖6 幀ID定義Fig.6 De fi nition of Frame ID
表2 地址ID定義Tab.2 De fi nition of Address ID
驅(qū)動封裝入系統(tǒng)后與系統(tǒng)鏡像一同下載到目標(biāo)設(shè)備中,再根據(jù)CAN通信協(xié)議規(guī)范編寫通信應(yīng)用程序來測通信是否正常,本次設(shè)計的通信應(yīng)用程序用C#語言編寫,采用Windows API函數(shù)操作文件的方式訪問CAN端口。用USB-CAN收發(fā)器連接普通計算機作為測試工具連接CAN收發(fā)器82C250的CANH、CANL兩腳進(jìn)行CAN通信的數(shù)據(jù)收發(fā)測試。
為提高CAN通信的實時數(shù)據(jù)處理能力,通信應(yīng)用程序設(shè)計引入多線程技術(shù),與底層CAN驅(qū)動結(jié)合,采用中斷觸發(fā)及事件同步對象實現(xiàn)通信應(yīng)用程序與驅(qū)動程序的實時通信,保證CAN總線上數(shù)據(jù)的即時接收與顯示,若在通信過程中出錯,則根據(jù)中斷類型判斷錯誤原因以提示用戶進(jìn)行相應(yīng)操作。程序中除主線程負(fù)責(zé)消息處理之外另外創(chuàng)建2個輔助線程:一個是讀線程,用于監(jiān)聽CAN端口的緩沖是否有數(shù)據(jù)到達(dá)從而判斷是否執(zhí)行讀操作;另一個是顯示線程,用于在界面上實時顯示接收到的數(shù)據(jù)信息。輔助線程使用線程同步的事件對象信號量來觸發(fā)。主線程在打開CAN口后創(chuàng)建與驅(qū)動程序初始化中創(chuàng)建的有名事件同名的事件,并將事件對象狀態(tài)標(biāo)識為“無信號”狀態(tài),同時在主線程中創(chuàng)建讀線程并阻塞等待,當(dāng)驅(qū)動程序中類型為“讀中斷”的中斷觸發(fā),則設(shè)置事件為有信號量狀態(tài),阻塞的讀線程被激活,調(diào)用函數(shù)讀取“接收緩沖區(qū)”中數(shù)據(jù)。在界面顯示還需注意,用戶界面上的控件是由主線程創(chuàng)建的,在主線程外修改控件屬性涉及跨線程處理控件的問題,因為在C#中不允許在函數(shù)中直接修改本線程外的控件屬性,必須使用控件的Invoke方法修改。采用委托調(diào)用的方法,在聲明委托時需注意在Win CE中必須且只能是EventHandler委托。
CAN通信可供選擇的波特率范圍最低為10 K,最高可達(dá)1 M,經(jīng)數(shù)據(jù)收發(fā)測試結(jié)果表明在此波特率范圍下通信正常,通信發(fā)送方與接收的幀數(shù)據(jù)、幀格式一致且能即時收發(fā)數(shù)據(jù),根據(jù)測試經(jīng)驗采用250 K的波特率傳輸穩(wěn)定性較好,傳送速度以ms為單位,實時性及可靠性都很好。
本研究提出了噴氣織機控制器CAN通信接口的設(shè)計與實現(xiàn)方法,給出基于EP9307微處理器和Win CE下CAN接口的具體實現(xiàn)過程,CAN接口電路設(shè)計中采取的措施提高了通信的可靠性及抗干擾能力。CAN接口驅(qū)動開發(fā)為進(jìn)一步開發(fā)Win CE下CAN總線設(shè)備提供了一個良好的底層硬件驅(qū)動支持,并可供以后開發(fā)基于Win CE下其他設(shè)備驅(qū)動程序進(jìn)行參考。CAN通信測試結(jié)果表明,CAN通信正常且實時性較強,能滿足噴氣織機控制器各機構(gòu)間的通信需求。
[1] 金玉珍,吳震宇,武傳宇,等.基于CAN總線噴氣織機控制系統(tǒng)的研制[J].紡織學(xué)報,2009,30(2):117-120.
[2] 羅健飛,吳仲城,沈春山,等.基于ARM和Win CE下的設(shè)備接口驅(qū)動設(shè)計與實現(xiàn)[J].自動化與儀表,2009(3):1-3.
[3] 何宗鍵.Windows CE嵌入式系統(tǒng)[M].北京:北京航空航天大學(xué)出版社,2006.
[4] 劉濤.CAN總線接口電路設(shè)計中的關(guān)鍵問題[J].工礦自動化,2007(1):100.
[5] 張毅,王學(xué)思.基于Win CE的流接口驅(qū)動程序開發(fā)[J].工業(yè)控制計算機,2008,21(6):47-48.
[6] 胡朝斌,王治森,董伯麟,等.基于Windows CE的數(shù)控系統(tǒng)中斷控制[J].中國機械工程,2005,16(9):761-764.
Design and Implementation of CAN Communication Interface for Air-jet Loom Controller
WANG Jing, HU Xu-dong, JIN Yu-zhen, HE Wei-qiang
(Zhejiang Province Key Laboratory of Modern Textile Machine, Zhejiang Sci-Tech University, Hangzhou 310018, China)
A design and implementation method of CAN communication interface for Air-jet loom controller based on Win CE was presented in the article. Firstly, the hardware circus of CAN communication interface was designed. Secondly, the working principle and the development environment of interface driver were introduced, the development process of the stream interface driver based on Win CE was discussed in detail.Finally, the application program of CAN communication was developed to test the communication effect.The test results showed that the CAN communication interface based on Win CE could achieve real-time communication.
Windows CE; CAN bus; Stream interface driver; Air-jet loom controller
TS103.337.11;TP316.7
A
1001-7003(2010)01-0031-05
2009-06-27
浙江省自然科學(xué)基金項目(Y1080469)
汪靜(1986- ),女,碩士研究生,研究方向為紡織設(shè)備機電一體化。通訊作者:胡旭東,教授,xdhu@zstu.edu.cn。