邱 威,黃道敏,朱秋晨,唐國元
(1.華中科技大學船舶與海洋工程學院,湖北 武漢430074;2.空軍雷達學院,湖北 武漢430010)
隨著對資源的需求越來越大,人類已經開始大幅度地進行海洋探索。水下航行器不僅能進行情報搜集、勘測戰場,還能實施攻擊[1]。無論是在軍事方面或者科學研究方面,無人自主水下航行器(AUV)在信息交換和續航能力方面都有越來越高的要求,AUV需要更長的水下工作時間,更快的將探測的信息傳遞出來,在完成任務之后亦能夠準確的回收。因此,水下對接系統的設計就顯得很有必要[2]。同時,伴隨著計算機技術和控制技術的發展,在現代工業控制系統中,工控機作為上位機能實時的進行監控、提供友好的人機交換界面、數據處理、通訊以及聯網等功能。PLC作為下位機能接收上位機發出的命令,通過軟件設計輸出所需要的控制信號,對系統進行控制。在中小型控制系統中,由上位機和PLC構成的監控系統得到非常廣泛的應用。
在工程應用中,通過上位機和PLC結合實現了對水下對接系統的控制,實現了對接操作桿與上位機的通信以及上位機與PLC的通信。通過對接操作桿和人機界面,可以對機械手和對接臺進行實時地、穩定地控制,能準確完成對接。
綜合國內外研究情況,水下對接系統主要包括3類,捕捉式對接、包容式對接和平臺式對接[3]。由于目標物上設計的有對接桿,選用捕捉式對接,對接系統運動結構簡圖如圖1所示,系統主要由2部分組成,機械手部分和對接臺部分。機械手實現對目標物的捕捉,對接臺進行系統的精確對接。

圖1 水下對接系統運動結構
機械手肩關節、手爪夾持運動以及精確對接都是通過控制相應關節的電機來實現,大臂、中臂、小臂的俯仰以及對接臺的升降則是通過控制相應關節的電動推桿來實現。通過對電機和電動推桿的控制,系統可以很方便的通過機械手抓取到目標物上的對接桿,移動目標物到對接臺下方,通過控制機械手調節目標物的位置使其上的T型對接接口部件處于升降臺精確對接作業范圍之內,控制對接臺的升降確定精確對接作業位置。位置確定后,合攏對接臺上的鉤爪,使鉤爪夾持住目標物上的T型對接接口部件,最終實現精確對接。
水下對接控制系統原理如圖2所示,為控制方便,系統采用2個對接操作桿來操作機械手和對接臺的運動。上位機選用的是研華工控機,工控機的主要功能是,①與對接操作桿進行通信,對接操作桿各個方向的動作需要工控機進行識別和處理;②與PLC進行通信,工控機將對接操作桿的命令傳達給PLC,從而對對接系統進行控制;③軟件設計,提供友好的人機界面,對數據進行處理。工控機需要接收數據,分析處理數據,最后向下位機發送數據。由于控制各關節運動的執行器選擇的是電動推桿和直流電機。因此,控制器選擇西門子S7-200PLC即可實現高效的控制,PLC接收上位機的命令接通和斷開相應的繼電器,從而實時控制機械手各關節以及對接臺的運動,并將對接系統的運動情況反饋給上位機。

圖2 水下對接控制系統原理
控制流程:系統上電后,上位機定時向操作桿發送數據請求,操作桿向上位機反饋對應各個方向運動情況的數據,上位機對接收到的數據進行處理,從而向PLC發送命令,PLC通過對上位機的數據處理進行相應的輸出來控制相應關節的運動。同時上位機接受PLC反饋的運動情況,從而監視控制系統是否運作正常。
為了實現數據的交換,上位機與外圍數據源設備需要進行通信。對于對接操作桿和PLC,上位機可以很方便的通過串行口來進行通信,串行端口的本質功能是作為CPU和串行設備之間的編碼轉換器,當數據從CPU經過串行端口發送出去時,字節數據轉換為串行的位,在接收數據時,串行的位被轉換為字節數據[4]。在水下對接控制系統中,就是通過在通訊雙方來發送和接收一定長度的字符串來進行數據交換。
對接操作桿與上位機之間通過RS-232通信協議進行串口通信,上位機通過定時向操縱桿發送一個ASCII碼,操縱桿收到該碼后按一定格式向上位機發送當前操縱桿的狀態。操作桿反饋信號的格式與意義如表1所示。操作桿每個方向的運動都會使向上位機發送的數據不同,上位機通過處理接收到的數據來識別操作桿的哪個方向發生動作,從而向下位機發送相應的命令。系統有3個電機和4個電動推桿需要控制。因此,2個操作桿的XYZ和2個頂部按鈕可以實現7個執行結構的控制。

表1 對接操作桿信號格式及意義
西門子S7-200系列PLC支持多種通信協議,自由口模式是S7-200PLC一個比較有特色的功能,使S7-200PLC可以與任何通信協議公開的控制器進行通信[5]。在水下對接控制系統中,通過PC/PPI電纜將S7-200PLC連接到上位機的RS-232接口來實現上位機與PLC的自由口通信。值得注意的是,自由口模式只有在PLC處于RUN模式下才有效,當PLC處于STOP模式時,PLC與工控機可以進行正常的PPI通信,此時可以從上位機通過STEP7Micro/Win軟件下載程序到 PLC內部[6]。
在自由口模式下,PLC的串行通信接口可以由用戶程序控制,可以用發送指令、接收指令、接收完成中斷、字符接收中斷和發送完成中斷來控制通信過程。S7-200CPU的自由口通信定義是通過將操作數傳入特殊寄存器SMB30(PORT 0)和SMB130(PORT 1)。在PLC程序中主要使用 XMT和RCV兩條指令[7]。XMT指令利用數據緩沖區指定要發送的字符,向指定通訊口以字節為單位發送一串數據字節,一次最多發送255個字節,同時指令完成后,會產生一個中斷事件,對于PORT0為中斷事件9,對于PORT1為中斷事件1。RCV指令可以用來從通信口接受一個或多個數據字節,接收到的數據字節會被保存到接收數據緩沖區,接收完成后同樣會產生一個中斷,對于PORT0為中斷事件23,對于PORT1為中斷事件24。接收指令的緩沖區字符中可能有起始字符和結束字符,在水下對接控制系統中,選擇十六進制0A即空格來作為結束字符。
對于水下對接控制系統而言,軟件設計主要包括上位機程序和下位機程序2個方面的編寫,上位機程序主要是用來與外圍設備進行通信、對數據進行處理以及提供良好的人機界面。下位機PLC程序主要起接受上位機命令、處理數據、進行輸出以及向上位機發送數據的作用。
在Windows環境下,上位機采用VC++基于MFC編寫人機界面程序。上位機和操作桿以及PLC都是通過串行口進行通信的,VC有兩種常用的方法實現串行口通信:一是使用Windows API函數,二 是 使 用 ActiveX 控 件[8]。設 計 中 選 用MSComm串行通信控件,編程實現簡單,結構清晰。使用MSComm控件需要4個步驟,即加載控件、初始化控件、捕獲串口事件、數據讀取以及關閉串口。使用之前需要將MSComm控件插入到當前工作空間中,控制系統人機界面編寫基于對話框,因此在C****Dlg.cpp的初始化函數中對串口進行初始化。初始化內容主要包括了設置串行口,數據接收方式,串口屬性,打開串口等。2個操作桿分別連接上位機的COM1和COM2口,PLC連接上位機的COM3口,初始化并打開串口后便可以捕捉串口事件通過串行口進行接收數據和發送數據。
為了從端口獲取數據,MSComm控件提供兩種捕獲串口事件的方法,一種是事件驅動方法,另一種是查詢法。在使用事件驅動法設計程序時,每當有新字符到達或端口狀態發生變化,都會觸發On-Comm事件,這種方法程序響應及時,可靠性高。查詢法是應用程序完成某一串行口操作后,將不斷檢查端口事件,這種方法由于占用內存大,適合小的應用程序的開發[9]。因此,采用事件驅動的方法,當接收到RThreshold個字節時,觸發OnComm事件讀取數據。在OnComm()函數中,對接收到的數據進行處理,從而決定向下位機PLC所要發送的數據,上位機向操作桿和下位機PLC發送數據是利用SetOutput(COleVariant(m_Array))函數[10]。
系統控制界面如圖3所示,界面主要分為2個部分,界面上方為顯示區,主要包括操作桿指令和各關節運動情況的指示;界面下方為按鈕區,用來控制與操作桿以及PLC通信的通斷,右下方為退出系統按鈕。

圖3 水下對接控制系統軟件界面
PLC程序流程如圖4所示,在OB1中對進行自由口通信模式的初始化。程序通過賦值控制字節SMB30來選擇通信模式、設定波特率以及數據長度和校驗位。將16#09賦值給SMB30選用自由口、端口0、波特率為9 600、8位數據、無校驗進行通信端口的初始化。將16#B0賦給接收信息狀態字節SMB87,使允許接收,同時檢測信息結束字符。通過將空格字符賦值給SMB89來設置結束字符,從而判斷數據接收是否結束。
INT2為接收程序,指定接收數據存放位置。INT0為接收完成中斷程序,當檢測到結束字符時,程序執行SBR0子程序,在子程序中對接收到的數據進行處理,產生相應的輸出,同時產生發送中斷程序INT1。INT1中可以指定發送數據存儲區。執行完INT1后,INT0返回并開始新的接收。在自由口通信過程中,就是利用中斷來實現發送數據和接收數據的切換,發送數據完成后,會產生發送完成中斷,在發送完成中斷中開啟數據的接收;當接收數據完成后,會產生接收完成中斷,在接收完成中斷中切換到發送數據的狀態,由于發送數據和接收數據需要一定的間隔,因此產生定時中斷來延時一段時間再進行發送數據[11]。

圖4 PLC程序流程
基于上位機和PLC設計了水下對接控制系統,對于控制過程中涉及的串行口通信和PLC的自由口模式通信進行了軟件設計。S7-200的自由口模式在對接系統中的應用通信穩定,可靠性高,實時性強,能準確高效的完成對接任務。S7-200的自由口模式不僅僅在水下對接控制系統中,對于由PC和PLC組成的控制系統在其他不同的控制對象、不同的環境下的小型控制系統方面同樣可以起到有效的控制。另外,由于自由口模式可以與任何通信協議公開的控制器進行通信,S7-200PLC同樣可以與其他的控制器連接成為特殊的控制系統來進行控制。所述對接控制系統設計為對接系統樣機試驗奠定了良好基礎。
[1] 李錫群,王志華.無人水下航行器(UUV)技術綜述[J].船電技術,2003(06):12-14.
[2] 羊云石,顧海東.AUV水下對接技術發展現狀[J].聲學與電子工程,2013(2):53-55.
[3] 燕全臣,吳利紅.AUV水下對接關鍵技術研究[J].機器人,2007,29(3):267-273.
[4] Axelson Jan.Serial Port Complete:COM Ports,USB Virtual COM Ports,and Ports for Embedded Systems[M].U.S.:Lakeview Research,2007.
[5] 姜建芳.西門子S7-200PLC工程應用技術教程 [M].北京:機械工業出版社,2010.
[6] 李江全.西門子S7-200PLC數據通信及測控應用[M].北京:電子工業出版社,2011.
[7] 趙桂清,單鵬.基于S7-200機械手的控制[J].煤礦機械,2011,32(7):150-152.
[8] 李豐堂,謝明紅.基于VC++的PC與PLC的通信軟件設計[J].計算機技術與發展,2008(8):219-222.
[9] 劉長征.Visual C++串口通信及測控應用實例詳解[M].北京:電子工業出版社,2014.
[10] 李景峰,潘恒,楊麗娜.Visual C++串口通信技術詳解[M].北京:機械工業出版社,2013
[11] 羅華陽;余岳.S7-200PLC在粉塵物包裝線上的實現與研究[J].包裝工程,2009,30(4):51-52.