摘 要:各種嵌入式產(chǎn)品的出現(xiàn)導(dǎo)致計(jì)算機(jī)控制系統(tǒng)出現(xiàn)了很多新的形式,作為典型的DSP應(yīng)用產(chǎn)品,PMAC非常適合軸類運(yùn)動(dòng)的控制。本文主要介紹PMAC在一個(gè)實(shí)際的飛行模擬轉(zhuǎn)臺(tái)控制系統(tǒng)中的應(yīng)用方法。
關(guān)鍵詞:PMAC, 轉(zhuǎn)臺(tái), 半實(shí)物仿真
1. 引言
由于各種民用、軍用飛行器技術(shù)的快速發(fā)展,當(dāng)今世界各國都十分重視半實(shí)物仿真技術(shù)的研究和應(yīng)用,而飛行模擬轉(zhuǎn)臺(tái)是半實(shí)物仿真的重要設(shè)備之一。通常,飛行模擬轉(zhuǎn)臺(tái)提供模擬飛行器飛行姿態(tài)角和為被試件提供測試條件的功能,以便驗(yàn)證全數(shù)字仿真的實(shí)驗(yàn)結(jié)果并進(jìn)一步優(yōu)化或改良飛行器設(shè)計(jì)方案。而對于轉(zhuǎn)臺(tái)這樣一個(gè)典型的自動(dòng)控制系統(tǒng)來講,控制器扮演重要角色,其優(yōu)劣直接決定飛行仿真實(shí)驗(yàn)的成敗和效果。因此,尋求簡單易用且可靠的控制器成為轉(zhuǎn)臺(tái)設(shè)計(jì)的一個(gè)重要方面。
2. 使用PMAC控制器
隨著自動(dòng)控制理論和數(shù)字計(jì)算機(jī)及其應(yīng)用技術(shù)的不斷發(fā)展,使以計(jì)算機(jī)為基礎(chǔ)控制技術(shù)迅猛發(fā)展,被控對象規(guī)模更大,控制過程和規(guī)律也更加復(fù)雜和精密,控制方法也更加靈活多樣。在轉(zhuǎn)臺(tái)的控制系統(tǒng)中,除了用來產(chǎn)生輸入信號(hào)的仿真機(jī)之外,計(jì)算機(jī)還扮演了控制器的角色。在這里,計(jì)算機(jī)可以是單片機(jī)、工控機(jī)或者是PC等。根據(jù)控制器的不同形式,計(jì)算機(jī)控制系統(tǒng)分為集中式,分布式,集散式三種類型,其中集散式控制器又分為PC機(jī)與單片機(jī),PC機(jī)與PC機(jī),PC機(jī)與嵌入式控制器三種形式。
在控制系統(tǒng)中使用PMAC,采用的就是PC機(jī)與嵌入式控制器組合這種形式。
2.1問題的提出
轉(zhuǎn)臺(tái)的控制系統(tǒng)通常采用上、下位機(jī)的形式。如圖1所示,常見的控制器一般位于下位機(jī),由其給出具體控制算法,并由下位機(jī)總線上的各個(gè)分立器件(如放大器,DA、AD轉(zhuǎn)換裝置等)來完成輸出控制信號(hào)和采集被控對象位置/速度等信息的功能,同時(shí)通過網(wǎng)卡等通信設(shè)備與上位機(jī)交換信息。這里,控制器的功能由一個(gè)各部分相對獨(dú)立的系統(tǒng)來完成,使系統(tǒng)設(shè)計(jì)、控制算法實(shí)現(xiàn)和數(shù)據(jù)采集都較為復(fù)雜;加上各個(gè)設(shè)備之間可能存在的干擾,整個(gè)系統(tǒng)的安裝調(diào)試需要花費(fèi)較多的精力才能完成。這樣看來,如果整個(gè)下位機(jī)(包括提到的各種功能)能夠由一個(gè)獨(dú)立的通用部件完成,系統(tǒng)設(shè)計(jì)和調(diào)試所面對的困難就要小得多。PMAC控制器正好可以達(dá)成這一目的。
2.2 PMAC簡介
PMAC的全稱是Programmable Multi Axis Controller,由美國Delta Tau公司設(shè)計(jì)生產(chǎn)。PMAC系列包含適用多種總線平臺(tái)的板卡以及適于獨(dú)立使用的組件。PMAC基于DSP(數(shù)字信號(hào)處理器),是一種通用的運(yùn)動(dòng)控制器,但更適用于數(shù)控機(jī)床等軸運(yùn)動(dòng)設(shè)備。它可以控制2 – 32根軸的運(yùn)動(dòng)(18塊PMAC級(jí)聯(lián)可以控制128根軸),同時(shí)包含多路數(shù)字I/O和DA/AD裝置;可以自動(dòng)生成各種控制曲線的軌跡,并允許用戶方便的生成自己的控制代碼。由于DSP的強(qiáng)大功能,PMAC甚至集成了典型的控制算法(也可以由用戶提供自己的控制算法),并提供高精度的計(jì)算能力。用于PC的PMAC提供ISA/PCI總線或串口的通信方式,并提供了一組編程接口供高級(jí)用戶進(jìn)行二次開發(fā)。
PMAC非常適合于對軸運(yùn)動(dòng)進(jìn)行控制。因此,只要滿足指標(biāo)要求,飛行模擬轉(zhuǎn)臺(tái)也可以采用PMAC作為控制器。這樣,整個(gè)下位機(jī)物理結(jié)構(gòu)可以大大簡化,系統(tǒng)設(shè)計(jì)和調(diào)試過程也變得相對簡單。
圖2是PMAC本身提供的前饋濾波+PID控制算法的框圖,其中的各個(gè)參數(shù)都可以調(diào)節(jié),以滿足不同需要。
[align=center]
圖2:PMAC的PID框圖[/align]
3. 系統(tǒng)構(gòu)成方法
3.1 由PMAC構(gòu)成上下位機(jī)系統(tǒng)
簡化的邏輯框圖如圖3所示。
圖中,PMAC控制卡通過標(biāo)準(zhǔn)總線與上位機(jī)相聯(lián),碼盤等測速或測角機(jī)構(gòu)通過PMAC上的DD接口傳遞位置、速度等信息,經(jīng)PMAC處理,并按上位機(jī)給出的控制要求通過PMAC上的DA接口輸出合適的電平信號(hào)控制轉(zhuǎn)臺(tái)上的電機(jī)運(yùn)動(dòng),從而構(gòu)成控制閉環(huán)。
另外,PMAC通過總線向上位機(jī)交換報(bào)告轉(zhuǎn)臺(tái)位置、運(yùn)行安全等信息,并從上位機(jī)獲得程序運(yùn)行所需要的命令,如程序開始、結(jié)束和系統(tǒng)復(fù)位等。
由于PMAC自身的特性,使諸如碼盤信號(hào)換算、行程限位等功能可以很方便的實(shí)現(xiàn),且PMAC的可編程特性使系統(tǒng)經(jīng)由很強(qiáng)的擴(kuò)展能力,整個(gè)系統(tǒng)構(gòu)成要比普通的上下位機(jī)系統(tǒng)顯得簡單實(shí)用。而PMAC的使用也使系統(tǒng)更具通用性,只需作少量調(diào)整即可應(yīng)用于其他設(shè)備。
3.2軟件環(huán)境的選擇
過去用于轉(zhuǎn)臺(tái)控制的上下位機(jī)軟件系統(tǒng)普遍采用DOS作為操作系統(tǒng)。這一方面是受當(dāng)時(shí)的條件限制,另一方面也是由于DOS的開放性,程序可以直接對硬件進(jìn)行操作,且一般認(rèn)為DOS的實(shí)時(shí)性較好。缺點(diǎn)是控制軟件的圖形界面不容易通過編程的方式生成,控制和通信程序中揉雜大量用于生成用戶界面的代碼,調(diào)試和維護(hù)比較困難,而且直接直接對硬件操作使得程序通用性較差。隨著計(jì)算機(jī)軟/硬件及其應(yīng)用技術(shù)的發(fā)展,一方面計(jì)算機(jī)硬件的價(jià)格顯著降低,軟件產(chǎn)品極大豐富,另一方面使用者對程序界面的要求也逐漸提高,越來越多的控制系統(tǒng)軟件開始采用Windows作為操作系統(tǒng)。對于PMAC而言,它同時(shí)提供了基于DOS和Windows的配置程序、二次開發(fā)工具以及例程。穩(wěn)定性方面,Windows作為控制系統(tǒng)上位機(jī)的操作系統(tǒng)已經(jīng)是流行的做法,說明它可以滿足一般要求;而實(shí)時(shí)性更是一個(gè)相對概念,對于轉(zhuǎn)臺(tái)控制系統(tǒng)而言,只要你有足夠快的硬件設(shè)備和不太差的控制/通信程序,毫秒級(jí)的時(shí)間精度不難達(dá)到。
這樣,如果采用PMAC作控制器,我們可以選用Windows作為上位機(jī)的操作系統(tǒng);而PMAC運(yùn)行一般并不需人為干預(yù),結(jié)果合適配置,上電后會(huì)按既定的方式執(zhí)行程序。PMAC通過驅(qū)動(dòng)程序+開發(fā)庫的方式提供與OS的接口,Windows下常見的開發(fā)工具都可以使用。
4. PMAC相關(guān)的程序設(shè)計(jì)
作為一款成熟的工業(yè)產(chǎn)品,PMAC不僅提供了快速穩(wěn)定的硬件平臺(tái),也提供了一套完整的二次開發(fā)接口供高級(jí)用戶使用。PMAC用于數(shù)控機(jī)床等的控制時(shí),可以由用戶編寫程序在相應(yīng)的坐標(biāo)系內(nèi)對各個(gè)軸的運(yùn)動(dòng)軌跡進(jìn)行方便的控制,并方便地取得各個(gè)軸的速度、加速度、位置等信息。
4.1 PMAC的基本運(yùn)行方式
在PMAC和PC構(gòu)成的系統(tǒng)中,相對于PMAC,PC機(jī)一側(cè)一般稱為主機(jī)(Host)。
PMAC上的DSP芯片起到CPU的作用,通過DSP Gate控制程序的運(yùn)行。用于PC的PMAC的啟動(dòng)過程和普通的板卡沒有太大的區(qū)別:主機(jī)上電后,PMAC默認(rèn)通過PCI或ISA總線(取決于PMAC的種類)與主機(jī)通信,隨后PMAC開始自檢過程(這一點(diǎn)上很象一臺(tái)計(jì)算機(jī)),如果PMAC自檢沒有問題,則從板上自帶的EPROM內(nèi)讀取變量初始設(shè)置等配置信息;如果有活動(dòng)的PLC程序且PLC程序可以運(yùn)行,則PLC程序也會(huì)開始在后臺(tái)運(yùn)行。PMAC啟動(dòng)完成后,則可以接收來自主機(jī)總線或端口(串行口)的指令,進(jìn)行進(jìn)一步的動(dòng)作。
這里簡單介紹一下在PMAC中運(yùn)行的幾種程序。
PMAC通過DSP處理所有的運(yùn)算過程,板卡上的芯片固化了所有負(fù)責(zé)PMAC啟動(dòng)和高級(jí)數(shù)學(xué)、邏輯運(yùn)算的核心程序。另外主要用于控制軸運(yùn)動(dòng)方式的的程序稱為“G-Code”,一般由用戶根據(jù)需要自行編寫,可以以編譯或非編譯的方式運(yùn)行,比如控制數(shù)控機(jī)床的程序中大部分是此類代碼,最多可以有256個(gè)。最后一類PLC程序(最多32個(gè))則是循環(huán)運(yùn)行于后臺(tái)的。只要被設(shè)置為允許運(yùn)行,PLC程序會(huì)一直運(yùn)行,直到PMAC本身停止。PMAC的程序運(yùn)行也有類似計(jì)算機(jī)的優(yōu)先級(jí)別分級(jí)。核心程序負(fù)責(zé)協(xié)調(diào)其它程序的運(yùn)行,優(yōu)先級(jí)最高;然后是PLC0,接下來是控制運(yùn)動(dòng)的G-Gode,最后是PLC1-PLC31,他們在運(yùn)動(dòng)程序的間歇運(yùn)行。同時(shí)PMAC也提供硬件中斷功能(中斷級(jí)數(shù)取決于PMC的級(jí)連使用情況),允許主機(jī)以中斷方式和PMAC通信。
4.2 PMAC的編程方式
PMAC提供了強(qiáng)大的功能用于軸類運(yùn)動(dòng)的控制。
一方面,普通用戶可以通過編寫并運(yùn)行G-Code的方式來控制特定設(shè)備(例如數(shù)控車床)的運(yùn)動(dòng)過程;另一方面,PMAC也允許高級(jí)用戶以命令的方式直接對PMAC的運(yùn)行過程進(jìn)行控制。對于前者,PMAC提供了一系列的配置工具和IDE,方便用戶進(jìn)行G-Code的編寫、調(diào)試、編譯和上載(至PMAC);對于后者,除了必需的配置工具以外,PMAC也提供了相應(yīng)的開發(fā)包用于高級(jí)用戶的二次開發(fā)。PMAC應(yīng)用于轉(zhuǎn)臺(tái)的控制系統(tǒng)時(shí)并不需運(yùn)行G-Code,因此以下著重解釋PMAC開發(fā)包的編程方式。
當(dāng)需要與PMAC直接通信時(shí),需要用到DeltaTau提供的PCOMM庫。針對微軟的Windows,可以使用PCOMM32庫來與PMAC通信。PCOMM32提供了支持ANSI/UNICODE的幾組函數(shù)分別用于初始化/停止/配置、字符方式通信、上/下載、雙端口RAM(PMAC板載)操作、偽中斷等,具體可查看PCOMMM32的參考手冊。
結(jié)合轉(zhuǎn)臺(tái)的具體情況,所要作的主要是配置PMAC的運(yùn)行參數(shù)和讀取軸運(yùn)動(dòng)狀態(tài)。為了保證較高的存取速度,可以使用雙端口RAM作為通信中介。當(dāng)雙端口RAM被配置成實(shí)時(shí)數(shù)據(jù)緩沖工作方式時(shí),可以直接從雙端口RAM讀取各個(gè)軸的運(yùn)動(dòng)狀態(tài),而PMAC本身負(fù)責(zé)在大約每400微秒的時(shí)間間隔內(nèi)對這些信息進(jìn)行刷新。用戶編寫的應(yīng)用程序只需要讀取對應(yīng)的雙端口RAM的地址上的數(shù)據(jù)即可。而且,PCOMM32提供了一組函數(shù)專門負(fù)責(zé)上述功能的實(shí)現(xiàn),使用戶不必和硬編碼的雙端口RAM地址打交道,提高了開發(fā)效率。
以下的代碼片斷是利用雙端口RAM從PMAC獲得運(yùn)動(dòng)信息的例子:
//針對軸的操作
double aDouble =DPRPosition(1,1); //軸的當(dāng)前位置
//other codes handle this
aDouble = DPRGetCommandedPos(1,1); //軸的給定位置
//other codes handle this
aDouble = DPRFollowError(1,1); //軸的隨動(dòng)誤差
//other codes handle this
aDouble = DPRGetVel(1,1); //軸的速度
//do more
如果雙端口RAM默認(rèn)功能提供的運(yùn)動(dòng)狀態(tài)信息不能夠滿足用戶要求,或者用戶只需要其中一部分信息而雙端口RAM又有足夠的存儲(chǔ)空間,也可以采用以下方式。
前文提到PMAC啟動(dòng)后可以以較高的優(yōu)先級(jí)別循環(huán)運(yùn)行PLC0程序,且其運(yùn)行的時(shí)間間隔也可以設(shè)置,默認(rèn)也是大約400微秒。于是可以通過編寫PLC0程序的方式,向雙端口RAM中刷新所需的數(shù)據(jù),然后再由用戶程序讀出處理。這樣也可以在保證實(shí)時(shí)性的前提下滿足用戶對數(shù)據(jù)的特殊需要,且代碼量不大。
以下的代碼片斷是使用PLC0更新雙端口RAM從PMAC獲得運(yùn)動(dòng)信息的例子:
//first in command line setup M-variable
m111->D$28 ;#1軸當(dāng)前位置
m112->DP$D000 ;first memory area
;... other settins
//PLC0
open plc 0 clear
m112 = m111 / (i108*32) ;在plc0內(nèi)刷新,i108*32是作單位轉(zhuǎn)換
;...do more
close
//wakeup plc 0
i5 = 2
enable plc 0
//user app
//...
float lamer = DPRGetFloat(DEVICE0_ID, 0); //0 is offset from DP$D000
//...handle the lamer
4.3PMAC應(yīng)用程序的一般結(jié)構(gòu)
綜合前面的論述,PMAC的應(yīng)用程序一般分為三個(gè)部分。
1. PMAC的設(shè)置。一般情況下,盡管PMAC使用出廠時(shí)的默認(rèn)配置即可運(yùn)行起來,在投入正式使用前一般都會(huì)根據(jù)具體需要對默認(rèn)配置進(jìn)行改變,包括硬件設(shè)置(如跳線)、軟件設(shè)置(如控制電機(jī)運(yùn)行的I變量等)、變量分配和報(bào)警設(shè)置,具體可以參考PMAC的軟件手冊和用戶手冊。另外還需要連接用的電纜等。
2. PMAC運(yùn)動(dòng)程序的編寫。作為控制器,在配置好系統(tǒng)變量的前提下,PMAC通過運(yùn)動(dòng)程序、PLC程序等對具體對象施加控制信號(hào)。同時(shí),這些程序還要負(fù)責(zé)向上位機(jī)報(bào)告工作狀態(tài)。一般來講,PMAC一側(cè)的程序以簡單語句為主,且最好不要有太復(fù)雜的邏輯,以保證運(yùn)行效率。
3. 主機(jī)(上位機(jī)PC)一側(cè)程序的編寫。主機(jī)一側(cè)的程序除負(fù)責(zé)向PMAC傳送仿真機(jī)的指令外,還需要獲得轉(zhuǎn)臺(tái)的實(shí)時(shí)運(yùn)動(dòng)狀態(tài)和報(bào)警情況,一般還需要繪制波形和記錄數(shù)據(jù)備查。當(dāng)上位機(jī)程序在WIN32下實(shí)現(xiàn)時(shí),應(yīng)盡可能利用線程來處理各種操作,以保證實(shí)時(shí)性。
5.結(jié)論
將PMAC作為轉(zhuǎn)臺(tái)的控制器在理論和實(shí)際上都是可行的,筆者已經(jīng)在實(shí)際系統(tǒng)上實(shí)現(xiàn)。這樣作使系統(tǒng)設(shè)計(jì)和應(yīng)用程序的設(shè)計(jì)大大簡化,設(shè)計(jì)者只需要較少的代碼就可以達(dá)到目的。另外,當(dāng)整個(gè)系統(tǒng)投入使用并進(jìn)入維護(hù)階段,采用PMAC這樣的標(biāo)準(zhǔn)部件也減少了軟/硬件維護(hù)的困難。作為飛行模擬轉(zhuǎn)臺(tái)設(shè)計(jì)實(shí)現(xiàn)的一個(gè)新思路,這一方法值得嘗試。
參考文獻(xiàn)
[1] 劉藻珍,魏華梁. 系統(tǒng)仿真[M]. 北京: 北京理工大學(xué)出版社,1998
[2] Deltatau Data Systems Inc., PMAC Manual. 1997
[3] Charles Petzold, Programming Windows.Microsoft Press, 1998