在研制某大型醫(yī)療設(shè)備控制系統(tǒng)時,其內(nèi)部共有26個大小不一的進步電機需要控制。由于大部分的電機和控制器需要嵌人治療設(shè)備內(nèi)部,而且這些電機都驅(qū)動有對應(yīng)的機械運動裝置,所以要求盡量減少上位主控機與各控制器之間的連線。若采用傳統(tǒng)的集中式或集散式控制方式將無法滿足現(xiàn)場的要求。在對這些受控電機的控制任務(wù)進行了仔細分析后發(fā)現(xiàn),系統(tǒng)的實時性要求也不是太高。為此我們采用了LonWorks現(xiàn)場總線技術(shù)來實現(xiàn)對這些步進電機的控制。
一、主控機相關(guān)控制任務(wù)描述
系統(tǒng)主體結(jié)構(gòu)如圖1所示。所有受控的步進電機及其控制器都將安裝放置于治療設(shè)備內(nèi),它們通過一條78K速率的雙絞線與主機相連。主機內(nèi)插一塊PCLTA-20 LON網(wǎng)并行適配器(網(wǎng)卡),用于連接各測控節(jié)點。為了能直接對16位數(shù)據(jù)模式的LON網(wǎng)卡進行開發(fā),選擇了16/32位數(shù)據(jù)模式兼容的操作系統(tǒng)WIN/98。主控機的主要任務(wù)是根據(jù)操作員的命令設(shè)置和下發(fā)各步進電機的運動數(shù)據(jù),收集步進電機運動過程中反饋的數(shù)據(jù)并以圖形化方式加以顯示。由于這些步進電機的運動都是獨立的,不存在相互影響的關(guān)系,故可以分別對它們進行控制。主控機在工作過程中完成以下任務(wù):
1.開始工作時對各測控節(jié)點及電機驅(qū)動器進行狀態(tài)檢測和初始化設(shè)置
2.設(shè)定步進電機工作于程控方式還是手動方式以及電機方向
3.若是程控方式,需接受操作員設(shè)定的步進電機穩(wěn)速頻率和步進值并下傳給各測控節(jié)點。
4.接收并顯示測控節(jié)點回送的由電機軸角編碼器檢測到的步進電機實際步進值
二、Lonworks測控節(jié)點結(jié)構(gòu)及功能描述
Lonworks測控節(jié)點是以Neuron-3150芯片為核心構(gòu)造的測控單元,配之以64K的Flash-ROM.收發(fā)器采用78K bps雙絞線收發(fā)器。網(wǎng)絡(luò)采用自由拓撲結(jié)構(gòu)。每個Lonworks測控節(jié)點可以提供11個可編程多功能I/O端口。其結(jié)構(gòu)如圖2所示。
在工作過程中Lonworks測控節(jié)點的主要功能是按主控機下發(fā)的控制命令和運動數(shù)據(jù)產(chǎn)生步進電機的方向控制信號和頻率可變的步進脈沖,同時還要不斷讀人由電機軸角編碼器回送的電機實際運動數(shù)據(jù)并轉(zhuǎn)發(fā)給主控機。Lonworks測控節(jié)點的工作過程的主要部分如下:
1.系統(tǒng)啟動時對電機驅(qū)動器狀態(tài)和自身工作狀態(tài)進行自檢并報送主機
2.接受主機下發(fā)的步進電機控制參數(shù)。包括當(dāng)前設(shè)定的穩(wěn)速頻率值和當(dāng)前設(shè)定的步進值。并按照步進值產(chǎn)生具有合適上升速率和下降速率的頻率脈沖。
3.在給步進電機發(fā)步進脈沖的同時記錄電機軸角編碼器回饋的電機實際轉(zhuǎn)動值,并在本次步進運動完成后上傳給主控機。
4.檢測有關(guān)的開關(guān)量狀態(tài)并據(jù)此進行相關(guān)的操作。具體開關(guān)量有:
(1)電機手動/自動運行設(shè)置開關(guān)K1
(2)手動方式下步進電機方向設(shè)置開關(guān)K2
(3)手動方式下步進電機點動開關(guān)K3
(4)步進電機所帶機械裝置運動零點限位開關(guān)狀態(tài)ZERO
(5)步進電機所帶機械裝置運動終點限位開關(guān)狀態(tài)TERMINI,
(6)步進電機及其驅(qū)動器故障狀態(tài)ERROR
三、程序結(jié)構(gòu)與實現(xiàn)方法
(一)主機應(yīng)用程序結(jié)構(gòu)
主機應(yīng)用程序用VC6.0開發(fā)。主機應(yīng)用程序的主要任務(wù)是將控制臺上輸人的步進數(shù)據(jù)發(fā)送給指定的控制節(jié)點以及接收控制節(jié)點在電機運動過程中回饋的實際運動位置數(shù)據(jù)并加以顯示。
考慮到系統(tǒng)對主機應(yīng)用程序的實時性要求及不同節(jié)點與主機所傳輸數(shù)據(jù)的多樣性,在開發(fā)中采用了一些特殊的處理方法。
首先是沒有采用常規(guī)的網(wǎng)絡(luò)變量來定義和傳輸數(shù)據(jù)包。因為網(wǎng)絡(luò)變量不僅一次最多只能傳輸31個字節(jié),而且使用中的限制較多,不符合本應(yīng)甩的具體要求。所以主控機與各測控節(jié)點間的通信采用了顯式報文方式,但實現(xiàn)過程較網(wǎng)絡(luò)變量方法復(fù)雜。
另外的一個特點是為了提高主機對節(jié)點的響應(yīng)速度,沒有采用DDE方式,而是采用了通過HOST程序直接對PCLTA-20卡驅(qū)動程序進行調(diào)用的方法。Lonworks網(wǎng)卡的驅(qū)動程序沒有給出具體的功能調(diào)用,而商家提供的API開發(fā)系統(tǒng)又價格昂貴。經(jīng)仔細分析PCLTA-20的網(wǎng)卡驅(qū)動程序WLDV. DLL;我們發(fā)現(xiàn)WLDV. DLL還是提供了四個最基本的功能調(diào)用,分別是:打開網(wǎng)卡Idv open(),關(guān)閉網(wǎng)卡ldv close(),從網(wǎng)卡中讀取數(shù)據(jù)ldv_read(),和向網(wǎng)卡寫數(shù)據(jù)ldv_write()。可以利用這四個基本函數(shù)進行二次開發(fā)。針對WLDV. DLL中的四個基本函數(shù)所進行的二次開發(fā)最終也是以動態(tài)鏈接庫DLL形式存在的,名為Host. dll,它的主要作用是為上位機收集電機信息和下達上位機對電機的控制命令。主機應(yīng)用程序與它們之間的關(guān)系可以簡單的用圖3表示。 Host. dll通過構(gòu)造的三個函數(shù)與應(yīng)用程序進行交互,它們分別是
void Send(SEND_DATA buf ):
應(yīng)用程序調(diào)用此函數(shù)向下層LON網(wǎng)的節(jié)點發(fā)送電機的控制信息。
BOOL ReadShare (RCV DATA*readLon):
應(yīng)用程序調(diào)用此函數(shù)獲取下層LON網(wǎng)發(fā)送上來的信息;
BOOL OperateConfg (up date dv eon*pDvConfig):
下層LON網(wǎng)上各節(jié)點的配置信息保存在一個名為lonmo-tor. ini的文件中,應(yīng)用程序調(diào)用此函數(shù)可發(fā)更改下層節(jié)點的配置信息并將之保存在lonmotor. ini文件中,應(yīng)用程序?qū)ο聦拥呐渲貌僮靼ㄌ砑樱瑒h除節(jié)點,更換網(wǎng)卡等。如果Windows系統(tǒng)意外崩潰,應(yīng)用程序還可調(diào)用該函數(shù)從下層節(jié)點提取信息,從而重建lonmo-tor. ini文件。
_0 output triggeredc ount sync(10_4)fiqout_ctrl_0;
(二)測控節(jié)點應(yīng)用程序的設(shè)計
測控節(jié)點應(yīng)用程序用Neuron C語言編寫。其主要功能是接受上位主控機的步進指令,然后根據(jù)各輸入的控制信息實現(xiàn)對步進電機的控制,即輸出按照設(shè)定轉(zhuǎn)速和運動距離而產(chǎn)生的步進脈沖頻率和脈沖個數(shù)。同時在電機運動過程中還需不斷對由電機軸角編碼器回送的電機實際運動值進行記錄,一者為避免丟步,二者向主控機報送數(shù)據(jù),主控機據(jù)此了解實際的步進數(shù)。
編寫測控節(jié)點應(yīng)用程序的主要困難點有以下幾個方面:(1)必須按照控制臺任意設(shè)定的電機轉(zhuǎn)速產(chǎn)生穩(wěn)速過程步進頻率以及起始/停止過程相應(yīng)的漸升/漸降頻率。(2)在向步進電機輸出脈沖的同時還需要記錄回饋的電機實際步進值。為此我們采用了NEURON I/O對象中的FREQUENCY和TRIGGERED C OUNT對象相結(jié)合的方法。用FREQUENCY對象來產(chǎn)生各種步進頻率脈沖;而用TRIGGERED COUNT對象記錄實際的步進脈沖數(shù)。各I/O對象定義如下: