摘? 要: 將Windows操作系統(tǒng)引入J11280型臥式冷室壓鑄機(jī)控制系統(tǒng)" title="控制系統(tǒng)">控制系統(tǒng)中,通過(guò)分析Windows系統(tǒng)的運(yùn)行機(jī)制和壓鑄機(jī)的性能指標(biāo),解決了控制系統(tǒng)的實(shí)時(shí)性" title="實(shí)時(shí)性">實(shí)時(shí)性和設(shè)備相關(guān)性問(wèn)題。使用多線程、共享內(nèi)存及ActiveX 技術(shù)提高了系統(tǒng)的效率和健壯性;采用模糊神經(jīng)網(wǎng)絡(luò)PID控制提高了系統(tǒng)性能。經(jīng)過(guò)實(shí)際調(diào)試和運(yùn)行,證明該方法是有效的,對(duì)開(kāi)發(fā)通用的工控軟件具有借鑒意義。
關(guān)鍵詞: Windows? 壓鑄機(jī)? 設(shè)備相關(guān)? 實(shí)時(shí)控制" title="實(shí)時(shí)控制">實(shí)時(shí)控制? VxD? 多線程? ActiveX? 共享內(nèi)存
?
Windows是一個(gè)基于消息的非搶先式多任務(wù)操作系統(tǒng),將其用于壓鑄機(jī)實(shí)時(shí)控制,有很多的困難與挑戰(zhàn)。本文薦于實(shí)際工作中遇到的問(wèn)題,對(duì)基于Windows的壓鑄機(jī)控制系統(tǒng)進(jìn)行了研究。
1 Windows的運(yùn)行機(jī)制
Windows9x操作系統(tǒng)由內(nèi)核、設(shè)備驅(qū)動(dòng)程序" title="設(shè)備驅(qū)動(dòng)程序">設(shè)備驅(qū)動(dòng)程序和大量的動(dòng)態(tài)鏈接庫(kù)及應(yīng)用程序組成。Windows9x操作系統(tǒng)的結(jié)構(gòu)如圖1所示。Windows9x內(nèi)核與設(shè)備驅(qū)動(dòng)程序運(yùn)行在保護(hù)模式的Ring0級(jí),稱為核心態(tài);而一般應(yīng)用程序與動(dòng)態(tài)鏈接庫(kù)運(yùn)行在Ring3級(jí),稱為用戶態(tài)。熟悉80386保護(hù)模式體系的人都知道,Ring3代碼不能直接調(diào)用Ring0代碼,在Windows9x操作系統(tǒng)中與硬件設(shè)備打交道的程序代碼必須運(yùn)行在核心態(tài)(Ring0級(jí))。運(yùn)行在用戶態(tài)(Ring3級(jí))的代碼必須通過(guò)核心態(tài)(Ring0級(jí))代碼才能訪問(wèn)硬件。即使在用戶態(tài)(Ring3級(jí))執(zhí)行的所謂輸入輸出指令(in、out等)實(shí)際上也隱含調(diào)用了核心態(tài)(Ring0級(jí))代碼才得以執(zhí)行。Windows9x由內(nèi)核統(tǒng)一管理所有的系統(tǒng)資源。在保護(hù)模式下運(yùn)行時(shí),創(chuàng)建特定的內(nèi)存區(qū)域——虛擬機(jī)(VM)。每個(gè)虛擬機(jī)都有完整的地址空間、I/O空間以及中斷向量表等系統(tǒng)資源。真正的系統(tǒng)核心——虛擬機(jī)管理程序(VMM)以時(shí)間片中斷調(diào)度各個(gè)虛擬機(jī),這是多任務(wù)的本質(zhì)和要求。
?
?
由以上分析,開(kāi)發(fā)基于Windows的工控系統(tǒng),需要解決的兩個(gè)關(guān)鍵問(wèn)題是:
(1)實(shí)時(shí)性
??? 實(shí)時(shí)性要求開(kāi)發(fā)的系統(tǒng)能實(shí)時(shí)處理中斷,并能處理定時(shí)事件。但Windows9x是一個(gè)基于消息機(jī)制的非搶先式多任務(wù)操作系統(tǒng),而且設(shè)計(jì)初衷是面向事務(wù)處理,對(duì)多任務(wù)和圖形用戶界面的支持難免使得系統(tǒng)運(yùn)行速度下降;其保護(hù)系統(tǒng)和內(nèi)核運(yùn)行機(jī)制也使用于系統(tǒng)切換的時(shí)間無(wú)法確定。通常,Windows下的中斷響應(yīng)時(shí)間是DOS下的1/20;基于消息的機(jī)制和非剝奪性,當(dāng)消息隊(duì)列中的某個(gè)消息沒(méi)有響應(yīng)時(shí),整個(gè)系統(tǒng)處于阻塞狀態(tài),無(wú)法響應(yīng)其他操作。事實(shí)上,一個(gè)基于Windows的實(shí)時(shí)操作系統(tǒng),以下三個(gè)時(shí)間是非常重要的:
·中斷由操作系統(tǒng)和設(shè)備驅(qū)動(dòng)程序屏蔽的最大時(shí)間;
·設(shè)備驅(qū)動(dòng)程序處理中斷的最大時(shí)間;
·從中斷開(kāi)始到任務(wù)執(zhí)行的中斷延遲。
通常情況下,這些參數(shù)都是不可預(yù)測(cè)的,只能通過(guò)具體的實(shí)驗(yàn)進(jìn)行確定。這不但加大了實(shí)時(shí)應(yīng)用系統(tǒng)的難度,而且是系統(tǒng)不穩(wěn)定的重要因素。
(2)設(shè)備相關(guān)性
設(shè)備相關(guān)性是指系統(tǒng)能很好地控制硬件,包括I/O端口的讀寫(xiě)、內(nèi)存直接讀寫(xiě)和中斷服務(wù)設(shè)備無(wú)關(guān)性問(wèn)題,亦即Windows9x下直接訪問(wèn)外設(shè)的問(wèn)題。但是,因?yàn)閃indows9x是多任務(wù)操作系統(tǒng),設(shè)備保護(hù)在Windows下是必需的。它的保護(hù)系統(tǒng)用來(lái)保護(hù)用戶數(shù)據(jù)和程序不受同一系統(tǒng)內(nèi)同時(shí)運(yùn)行的其他程序的干擾,保護(hù)物理設(shè)備不受未經(jīng)允許的訪問(wèn)。Windows系統(tǒng)的一個(gè)重要宗旨就是程序員對(duì)硬件操作的透明性,屏蔽了對(duì)底層硬件的直接訪問(wèn),由操作系統(tǒng)統(tǒng)一管理所有的硬件資源和硬件訪問(wèn)。這使得Windows一般用戶在Windows下完成硬件操作具有較大的難度。
2 Windows下壓鑄機(jī)實(shí)時(shí)控制的實(shí)現(xiàn)
2.1 壓鑄機(jī)系統(tǒng)的功能和要求
J11280型臥式冷室壓鑄機(jī)控制系統(tǒng),主要的性能要求是:
·能夠完成調(diào)整、聯(lián)動(dòng)兩種工作機(jī)制;
·壓鑄工作過(guò)程的某些過(guò)程和工作參數(shù)具有實(shí)時(shí)動(dòng)態(tài)可調(diào)性和可選性;
·具有對(duì)壓鑄過(guò)程中各個(gè)行程開(kāi)關(guān)、按鈕、繼電器等狀態(tài)實(shí)時(shí)監(jiān)控和顯示功能;
·實(shí)時(shí)檢測(cè)合型力、壓射速度和油壓,用實(shí)時(shí)曲線顯示,具備保存和打印的功能;
·實(shí)時(shí)故障診斷與故障處理的功能。
壓鑄機(jī)控制系統(tǒng)結(jié)構(gòu)見(jiàn)圖2。其中,合型力檢測(cè)的采樣周期為0.5ms,油壓檢測(cè)的采樣周期為5ms,位移傳感器接觸壓射桿產(chǎn)生的脈沖信號(hào)經(jīng)變換處理作為壓鑄機(jī)的外部中斷,配合A/D板卡上的8253計(jì)數(shù)器,完成速度檢測(cè)??梢钥闯?由于控制過(guò)程采樣周期極短,并有大量的數(shù)據(jù)計(jì)算和邏輯判斷以及在線動(dòng)態(tài)檢測(cè)、監(jiān)視和參數(shù)調(diào)整,整個(gè)系統(tǒng)對(duì)實(shí)時(shí)性的要求很高。
?
?
2.2 使用設(shè)備驅(qū)動(dòng)程序?qū)崿F(xiàn)實(shí)時(shí)控制
設(shè)備驅(qū)動(dòng)程序作為操作系統(tǒng)內(nèi)核的一部分,處于Ring0層,具有直接操作硬件等特權(quán)。在實(shí)時(shí)控制中,中斷技術(shù)應(yīng)用得十分廣泛,其中實(shí)時(shí)時(shí)鐘" title="實(shí)時(shí)時(shí)鐘">實(shí)時(shí)時(shí)鐘的獲得基本上都是通過(guò)中斷來(lái)實(shí)現(xiàn)。時(shí)鐘控制在實(shí)時(shí)控制中處于十分重要的地位,它負(fù)責(zé)推進(jìn)控制過(guò)程、激活各控制任務(wù)或發(fā)相關(guān)控制消息,起到了總控制器的作用。在Windows9x下實(shí)時(shí)時(shí)鐘的獲得可以有不同的方法。設(shè)置Win32定時(shí)器并通過(guò)響應(yīng)WM_TIMER消息進(jìn)行實(shí)時(shí)處理是最簡(jiǎn)單的方法。但是由于WM_TIMER消息的低優(yōu)先級(jí)和未處理消息在消息隊(duì)列中的排隊(duì)造成了系統(tǒng)實(shí)時(shí)處理的不穩(wěn)定,因此這種方法只適合實(shí)時(shí)性要求不高的應(yīng)用。若采用Windows多媒體定時(shí)器,通過(guò)設(shè)置回調(diào)函數(shù)可以獲得最高精度為1ms的定時(shí)信號(hào);但是由于占用了系統(tǒng)寶貴的資源,而且當(dāng)定時(shí)信號(hào)由用戶提供或需要更高的中斷頻率時(shí),這種方法就顯得無(wú)能為力了。與類似軟件中斷的方法相比,基于硬件中斷的方法占據(jù)了主導(dǎo)地位,并在絕大多數(shù)的實(shí)時(shí)系統(tǒng)中得到了應(yīng)用。因?yàn)樗WC了對(duì)實(shí)時(shí)控制系統(tǒng)至關(guān)重要的可靠性。
經(jīng)過(guò)筆者探索,在Windows9x環(huán)境下,在虛擬設(shè)備驅(qū)動(dòng)程序中對(duì)硬件直接編程并掛接中斷的思路,有兩種實(shí)現(xiàn)方法:
(1)對(duì)8253直接編程
8253定時(shí)器是計(jì)算機(jī)跳動(dòng)的心臟,在計(jì)算機(jī)系統(tǒng)進(jìn)入Windows前對(duì)8253重新編程,將周期從18.2s修改為所希望的周期。修改INT8中斷服務(wù)程序,每次定時(shí)時(shí)間到就調(diào)用另一新中斷號(hào),并累計(jì)時(shí)間;若為55ms,則轉(zhuǎn)入舊INT 8中斷服務(wù)程序的入口,進(jìn)入Windows以后掛接新的時(shí)鐘中斷即可實(shí)現(xiàn)所希望的定時(shí)時(shí)鐘。使用這種方法可以滿足任意精度。
(2)對(duì)CMOS實(shí)時(shí)時(shí)鐘直接編程
與上述方法相比,對(duì)CMOS實(shí)時(shí)時(shí)鐘進(jìn)行編程獲得定時(shí)中斷的方法顯得更加優(yōu)越,所需的硬件知識(shí)相對(duì)較少,操作也相對(duì)簡(jiǎn)便。在PC機(jī)中,CMOS實(shí)時(shí)時(shí)鐘似乎是唯一沒(méi)有現(xiàn)成的虛擬設(shè)備驅(qū)動(dòng)程序的PC機(jī)硬件設(shè)備,所以可以直接開(kāi)發(fā)VxD驅(qū)動(dòng)程序來(lái)操作實(shí)時(shí)時(shí)鐘。通常,實(shí)時(shí)時(shí)鐘芯片的基本頻率初始化為32.768kHz,由它驅(qū)動(dòng)內(nèi)部時(shí)鐘電路,同時(shí)對(duì)內(nèi)部寄存器A(D3~D0)編程選擇22個(gè)分頻級(jí)之一,使其按確定的頻率以寄存器B指定的方式周期性地輸出方波或中斷信號(hào),作為實(shí)時(shí)鐘中斷信號(hào)經(jīng)反向直接連到8259A-5從片的第0級(jí)——IRQ8,然后把實(shí)時(shí)任務(wù)直接掛接到實(shí)時(shí)鐘中斷上,在中斷處理函數(shù)中進(jìn)行實(shí)時(shí)任務(wù)處理。使用這種方法最高可獲得8.192kHz(周期為0.1ms)的中斷頻率,足以滿足系統(tǒng)的要求。需要注意:與上述方法類似,掛接中斷時(shí),進(jìn)入自己的中斷前必須保護(hù)好原先的中斷狀態(tài),退出時(shí)恢復(fù),否則,系統(tǒng)將崩潰。
??? 無(wú)論使用哪種方法,都不可避免地與Windows中斷打交道。但是,VxD沒(méi)有義務(wù)必須向系統(tǒng)傳遞中斷消息,相反,它完全可以自己截獲中斷,進(jìn)行實(shí)時(shí)處理。本文采用了對(duì)CMOS時(shí)鐘直接編程的方法,運(yùn)行良好。
總之,使用虛擬設(shè)備驅(qū)動(dòng)程序直接控制硬件,解決了Windows環(huán)境下的設(shè)備無(wú)關(guān)性問(wèn)題,同時(shí)保證了實(shí)時(shí)控制所需要的實(shí)時(shí)時(shí)鐘和中斷控制。但是,虛擬設(shè)備驅(qū)動(dòng)程序編程要求技術(shù)人員對(duì)Windows內(nèi)核比較清楚,對(duì)底層硬件比較了解,也需要一定的匯編知識(shí)。由于Windows內(nèi)核資料非常少且大都較晦澀,有關(guān)VxD編程的部分更是艱深,所以使用這種方法有相當(dāng)?shù)碾y度。而且這種方法易給系統(tǒng)帶來(lái)隱患,有可能造成Windows系統(tǒng)本身不穩(wěn)定,還要考慮兼容性和效率問(wèn)題,在實(shí)際開(kāi)發(fā)時(shí)需要小心謹(jǐn)慎。
2.3 保證系統(tǒng)性能的其他技術(shù)
上一小節(jié)解決了最重要的實(shí)時(shí)性和設(shè)備相關(guān)性的問(wèn)題,但是,考慮效率和性能,本系統(tǒng)研究了有關(guān)的增強(qiáng)系統(tǒng)性能的技術(shù)。實(shí)踐證明,效果比較明顯。
(1)多線程
Windows系統(tǒng)的基本單元是線程,線程是可供系統(tǒng)調(diào)用的最小單元。一個(gè)進(jìn)程可有多個(gè)線程,系統(tǒng)調(diào)度程序?qū)PU的時(shí)間片劃分給各個(gè)線程,各個(gè)線程在各自的時(shí)間片內(nèi)使用CPU,從而實(shí)現(xiàn)了微觀上的輪流執(zhí)行和宏觀上的并發(fā)執(zhí)行。在實(shí)時(shí)性要求很高的工控系統(tǒng)中,如何避免程序反應(yīng)遲鈍以及死鎖問(wèn)題是關(guān)鍵之一。利用多線程技術(shù),是提高效率的有效途徑,不僅可以挖掘潛在的CPU空閑時(shí)間,還可以提高程序的反應(yīng)速度。這在有多個(gè)任務(wù)需要完成且有巨大數(shù)據(jù)流量的程序中反映尤其明顯。根據(jù)系統(tǒng)要求,本主控制臺(tái)程序?qū)崿F(xiàn)了一個(gè)控制系統(tǒng)主要運(yùn)行過(guò)程的主線程、一個(gè)負(fù)責(zé)壓鑄機(jī)工作過(guò)程的壓鑄過(guò)程線程(工作者線程)和一個(gè)實(shí)現(xiàn)速度壓力曲線的顯示線程(用戶界面線程)。主線程在每個(gè)Windows應(yīng)用程序啟動(dòng)時(shí)由操作系統(tǒng)創(chuàng)建,不可或缺。在主線程中,主要負(fù)責(zé)線程間的同步、向壓鑄過(guò)程線程和顯示線程傳遞參數(shù)、管理人機(jī)界面、故障處理與實(shí)時(shí)檢測(cè)、與用戶交互等功能。顯示線程負(fù)責(zé)從共享內(nèi)存讀出數(shù)據(jù)并以動(dòng)態(tài)曲線的形式在屏幕上繪制,保存實(shí)時(shí)曲線作為歷史紀(jì)錄以及讀取曲線歷史紀(jì)錄的功能。壓鑄過(guò)程線程控制壓鑄機(jī)的整個(gè)工作過(guò)程,包括數(shù)據(jù)采集、邏輯控制、算法實(shí)現(xiàn)及相關(guān)的處理。實(shí)踐證明,多線程的使用,明顯提高了系統(tǒng)特別是實(shí)時(shí)顯示的性能,增強(qiáng)了系統(tǒng)的效率和穩(wěn)定性。
(2)共享內(nèi)存
數(shù)據(jù)采集系統(tǒng)得到各模擬通道采樣值的轉(zhuǎn)換結(jié)果后,應(yīng)存放在一個(gè)規(guī)定的RAM區(qū)。由于Win32程序和虛擬驅(qū)動(dòng)程序都需要直接訪問(wèn)此內(nèi)存RAM區(qū),故稱為共享內(nèi)存。有經(jīng)驗(yàn)的程序員都很清楚Windows的內(nèi)存分頁(yè)管理機(jī)制,所以應(yīng)該由VxD中斷功能程序申請(qǐng)后與Win32程序共享,原因不言自明。在VxD中申請(qǐng)連續(xù)內(nèi)存的函數(shù)一般使用:BOOL PageAllocate(DWORD nPages,DWORD pType,VMHANDLE hVM,DWORD AlignMask,DWORD minPhys,DWORD maxPhys,PVOID PhysAddr,DWORD Flags,PMEMHANDLE pHandle,PPVOID pAddress)。注意:必須明確指定pType為開(kāi)辟VxD和Win32應(yīng)用程序共享內(nèi)存的PG_VM,其他常量不可取;必須指定Flags為不會(huì)被系統(tǒng)分頁(yè)交換的PAEGELOCKED;Hvm為使用此循環(huán)寄存器區(qū)的Win32應(yīng)用程序虛擬機(jī)句柄,須在使用PageAllocate()前傳到申請(qǐng)內(nèi)存的VxD。
只要緩沖區(qū)足夠大,即使在采集頻率非常高的情況下,中斷程序填滿一個(gè)子緩沖區(qū)的時(shí)間也會(huì)比較長(zhǎng),而處理線程進(jìn)行一次處理和存盤(pán)的時(shí)間相對(duì)比較短。因此,中斷程序和處理線程可以并行地訪問(wèn)緩沖區(qū)而不會(huì)發(fā)生交疊,即中斷程序訪問(wèn)的子緩沖區(qū)與處理線程訪問(wèn)的子緩沖區(qū)總是不同的。這樣,就可以在不丟失任何數(shù)據(jù)的情況下實(shí)現(xiàn)長(zhǎng)時(shí)間連續(xù)高速采集。實(shí)際相當(dāng)于在PC機(jī)的內(nèi)存中開(kāi)辟了一片F(xiàn)IFO隊(duì)列。與硬件FIFO相比,這種方法大大降低了成本。而且,由于將其放在內(nèi)存中,可以輕易地得到非常大的FIFO隊(duì)列,減輕了數(shù)據(jù)處理的負(fù)擔(dān)。另外,由于采用了雙緩沖的結(jié)構(gòu),避免了數(shù)據(jù)訪問(wèn)的交疊,實(shí)現(xiàn)了不丟失任何數(shù)據(jù)的長(zhǎng)時(shí)間連續(xù)高速采集。當(dāng)然,由于采用中斷方式采集數(shù)據(jù),每次采集都要占用CPU時(shí)間,使采集速度受到一定限制,無(wú)法達(dá)到采用硬件FIFO隊(duì)列的水平。
(3)ActiveX
ActiveX控件作為一種可重用的軟件部件和一種標(biāo)準(zhǔn)接口元素,能方便地組裝到應(yīng)用程序中,快速創(chuàng)建應(yīng)用程序界面,從而直觀地實(shí)現(xiàn)控制組態(tài)和策略解釋,非常便于工程技術(shù)人員掌握。本系統(tǒng)中,實(shí)現(xiàn)了一個(gè)數(shù)據(jù)顯示功能的ActiveX控件,并掛接在顯示線程中,通過(guò)它支持的屬性、方法和事件機(jī)制,控制數(shù)據(jù)顯示,極大地改善了速度壓力曲線的顯示性能。
(4)模糊神經(jīng)網(wǎng)絡(luò)PID控制
智能控制特別是模糊控制和神經(jīng)網(wǎng)絡(luò)控制技術(shù)發(fā)展迅速,將其應(yīng)用于復(fù)雜模型和惡劣工況下的過(guò)程控制,具有理論優(yōu)勢(shì),也是難點(diǎn)和熱點(diǎn);另一方面,傳統(tǒng)的PID控制也不斷發(fā)展和完善,出現(xiàn)了各種與先進(jìn)方法和理論結(jié)合的新型PID算法;最后,以前的壓鑄機(jī)系統(tǒng)盡管運(yùn)行穩(wěn)定,但是基于開(kāi)環(huán)算法,控制性能不理想。筆者通過(guò)研究和學(xué)習(xí)國(guó)內(nèi)外相關(guān)的理論和實(shí)踐,從現(xiàn)場(chǎng)實(shí)際控制的角度,給出了一種集模糊控制、神經(jīng)元控制和PID控制三者優(yōu)勢(shì)于一身的新型控制算法的實(shí)現(xiàn),大大提高了系統(tǒng)的性能,獲得了滿意的效果,限于篇幅,另文著述。
3 系統(tǒng)的總體框架
依據(jù)上述各種技術(shù),使用Numega公司的VtoolsD工具開(kāi)發(fā)了底層的虛擬設(shè)備驅(qū)動(dòng)程序,使用VC++6.0開(kāi)發(fā)用戶界面程序,在Windows98環(huán)境下,實(shí)現(xiàn)了2800噸J11280型臥式冷室壓鑄機(jī)控制系統(tǒng)的設(shè)計(jì),并在阜新壓鑄機(jī)廠通過(guò)了測(cè)試,運(yùn)行穩(wěn)定、操作簡(jiǎn)便、界面友好、功能齊全、實(shí)踐證明是一個(gè)比較成功的工控系統(tǒng),圖3是主控制臺(tái)總體框架圖。
?
參考文獻(xiàn)
1 [美]David A. Solomon著,北京博彥科技發(fā)展有限公司譯.Windows NT技術(shù)內(nèi)幕(第2版)·[M]. 北京:清華大學(xué)出版社,
? 1999
2 武安河, 周利莉. Windows設(shè)備驅(qū)動(dòng)程序(VxD與WDM)開(kāi)發(fā)實(shí)務(wù)[M].北京:電子工業(yè)出版社,2002
3 喬 林,楊志剛. Visual C++ 6.0高級(jí)編程技術(shù)(MFC與多線程篇)[M].北京:中國(guó)鐵道出版社,2000



