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