水下機器人設計畢業(yè)論文_第1頁
水下機器人設計畢業(yè)論文_第2頁
水下機器人設計畢業(yè)論文_第3頁
水下機器人設計畢業(yè)論文_第4頁
水下機器人設計畢業(yè)論文_第5頁
已閱讀5頁,還剩62頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

PAGEPAGE66目錄第一章.緒論 1第二章.ROV簡介 2(一)ROV的概念和結構組成 2(二)ROV的特點 4(三)ROV的功能和應用 4(四)ROV的應用分類 6(五)ROV的關鍵技術 8第三章.總體設計 10(一)系統(tǒng)的總體架構 10(二)ROV控制系統(tǒng)結構及發(fā)展 10(三)數(shù)據(jù)庫設計 11(四)運行設計 12第四章.詳細設計 14(一)整體軟件設計 14(二)上位機軟件設計 14(三)下位機軟件設計 52第五章.軟件測試 61(一)測試目的 61(二)測試方法和效果 61第一章緒論21世紀是人類向海洋進軍的世紀。深海作為人類尚未開發(fā)的寶地和高技術領域之一,已經成為各國的重要戰(zhàn)略目標,也是近幾年國際上競爭的焦點之一。水下機器人作為一種高技術手段在海洋開發(fā)和利用領域的重要性日漸重要。當今,在一些國家的水下機器人技術已經日趨成熟,并在許多場合的應用中體現(xiàn)出了良好的效果。隨著產業(yè)的發(fā)展,迫切需要大量適用于作業(yè)的各式各樣的水下機器人。世界上許多國正在大力加強水下機器人的研究,我國力爭在不久的將來,推出大量實用的機器人,以使自己的機器人技術和產品在國際上占有一席之地。

隨著科學技術的不斷發(fā)展,水下機器人從無智能走向智能化發(fā)展。具有智能的機器人應用于深海作業(yè)中,極大地提高了人類對海洋的探測。重要的是水下機器人在海洋開發(fā)各個領域都有著廣泛的應用,代替人在那些人類無法工作的深海環(huán)境條件下完成任務作業(yè)。這將極大地擴展人類科學研究活動的范圍,提高人類創(chuàng)造性科學的探究和發(fā)展。

第二章ROV簡介(一)ROV的概念和結構組成1、ROV的概念ROV,即水下機器人(RemoteOperatedVehicle),是一種可在水下移動、具有視覺和感知系統(tǒng)、通過遙控或自主操作方式、使用機械手或其他工具代替或輔助人去完成水下作業(yè)任務的機電裝置。2、ROV的結構組成(1)ROV系統(tǒng)組成包括:動力推進器、遙控電子通訊裝置、黑白或彩色攝像頭、攝像俯仰云臺、用戶外圍傳感器接口、實時在線顯示單元、導航定位裝置、自動舵手導航單元、輔助照明燈和凱夫拉零浮力拖纜等單元部件。如下圖是一個中型的ROV:(2)機器人框架規(guī)格說明表序號名稱技術要求1水下機器人外形結構與尺寸結構:框架式尺寸:約400mm高450mm寬700mm長根據(jù)具體訂做規(guī)格要求尺寸會在此基礎上有所變動2照明系統(tǒng)3組50w的高光通量鹵素燈,固定在框架中,燈光可覆蓋俯仰140度范圍。與攝像系統(tǒng)配合使用,能清晰觀看約5米以外的物體,可調節(jié)亮度。3攝像系統(tǒng)530線變焦彩色CCD攝像機,1.2Lux,F(xiàn)1.2光圈,PAL制式,可電動變焦,與照明系統(tǒng)配合使用,能清晰觀看約5米以外的物體4云臺系統(tǒng)俯仰140度,配合攝像系統(tǒng)使用,運動靈活5推進器系統(tǒng)4個有刷電機推進器。水平方向:兩個推進器,呈V字形排列,V字角度可調。垂直方向:兩個推進器,呈V字形排列,V字角度可調。航行速度約3節(jié)(在0節(jié)水流狀態(tài)下)。能升降、前進、后退、橫移以及轉彎等運動,運動自如;能穩(wěn)定在某一深度(定深)。6基本傳感器用于航行自動控制的三軸磁羅經傳感器1個,精確度0.3度,三軸傾斜傳感器1個,精確度0.1度,深度傳感器1個,精確度0.1m。7配重配重采用掛載機構設計,機體中裝有掛載平臺,上面帶有各種安裝孔,同時預備有各種重量的配重塊,通過安裝孔將各種配重塊安裝到掛載平臺中??蚣苤袔в信渲貞壹埽鶕?jù)攜帶的傳感器重量不同,可方便安裝和拆卸配重塊。8浮體深水浮體,耐壓強度可達40MPa。滿足主機重量22kg內、有效載重至少2kg的機器在水下姿態(tài)平衡的要求,顏色為黃色。9電纜密度約0.95kg/dm3,浮力為相對偏向正浮力,直徑12mm左右,牽引力達到100KG,電纜內部帶有紡輪編織抗拉層。此外動力線一組,超五類雙絞線兩組。10地面控制系統(tǒng)配備專用操作控制臺和增強型的軟件控制系統(tǒng),專用控制臺和計算機軟件多模式操作;控制臺配備搖桿手柄和按鈕。軟件采用全圖形界面設計。內容包括:圖像捕捉,云臺控制,照片存儲管理,整個系統(tǒng)自檢,照明燈控制(開、關、調節(jié)亮度),顯示潛水導航參數(shù),各種信息指示等。顯示配備10寸液晶屏。帶sony游戲手柄,控制機器運動,筆記本電腦由用戶自配。11供電系統(tǒng)輸入交流電100-270VAC,50/60Hz,整個水下機器人的功率約為800W。12最大下潛深度根據(jù)客戶要求定制13水下機器人在空氣中重量以及有效載重水下機器人在空氣中重量約為22KG,有效載重2kg14保修期兩年(二)ROV的特點水下機器人小巧靈活、操作簡便(通過控制臺上的多個旋鈕即可控制機器人前進、后退、轉彎、上升、下沉;燈光強弱和攝像頭焦距;云臺俯仰等);機器人可攜帶定位聲納、圖像掃描聲納、多參數(shù)水質檢測傳感器(YSI)、輻射傳感器、機械手、金屬測厚計等;可實時進行水下視頻檢測和觀測。概括為以下四點:1、可移動性移動是指水下機器人在海底爬行、附著在結構物上行進或在海水中浮游。2、能夠感知機器人的外部和內部環(huán)境特性3、擁有完成使命所需的執(zhí)行機構4、能自主地或在人的參與下完成水下作業(yè)(三)ROV的功能和應用無人有纜水下機器人ROV的優(yōu)點在于動力充足,可以支撐復雜的探測設備和較大的機械作業(yè)用電,信息和數(shù)據(jù)的傳遞和交換快捷方便、數(shù)據(jù)量大,其總體決策水平較高,因此應用廣泛。目前,小型遙控水下機器人已廣泛用于:1、管道容器檢查市政飲用水系統(tǒng)中水罐、水管、水庫檢查;排污/排澇管道、下水道檢查;洋輸油管道檢查;跨江、跨河管道檢查;2、船舶河道海洋石油船體檢修;水下錨、推進器、船底探查;碼頭及碼頭樁基、橋梁、大壩水下部分檢查;航道排障、港口作業(yè);鉆井平臺水下結構檢修、海洋石油工程;3、科學研究教學水環(huán)境、水下生物的觀測、研究和教學;海洋考察;冰下觀察;4、水下娛樂水下電視拍攝、水下攝影;潛水、劃船、游艇;看護潛水員,潛水前合適地點的選擇;5、能源核電站反應器檢查、管道檢查、異物探測和取出;水電站船閘檢修;水電大壩、水庫堤壩檢修(排沙洞口、攔污柵、泄水道檢修);6、安全檢查大壩、橋墩上是否安裝爆炸物以及結構好壞情況;遙控偵察、危險品靠近檢查;水下基陣協(xié)助安裝/拆卸;船側、船底走私物品檢測(公安、海關);水下目標觀察,廢墟、坍塌礦井搜救等;搜尋水下證據(jù)(公安、海關);海上救助打撈、近海搜索;7、考古水下考古、水下沉船考察;8、漁業(yè)深水網箱漁業(yè)養(yǎng)殖,人工漁礁調查(四)ROV的應用分類水下機器人應用分為軍用和民用兩類。1、軍用有纜水下機器人美國海軍的ROV-CURV最引人注目。它是專門用于美國海軍實驗中心打撈沉沒于水中的武器,其作業(yè)深度610m,1958年建成。在最初服役的6年中,平均每年回收約100個魚雷及其他裝置。茬CURV的基礎上,美國海軍后來又改迸建造了一艘CURV2和一艘CURV3,它們的作業(yè)深度分別增至為762m和2300m。這類水下機器人的另一個重要作用是協(xié)助潛水員執(zhí)行打撈作業(yè)。I973年8月CURV3和載人水下機器人PISCESV共同打撈起另一艘沉沒的載人潛水器PISCESIII。2、軍用無纜水下機器人AUV可用來輔助軍用潛艇,作為它的體外傳感器,為它護航和警戒,以及為它引開敵方攻擊充當假目標。在反潛方面,AUV可擔任海上反潛警戒,也可當作反潛艦艇進行訓練的靶艇。另外,在水雷戰(zhàn)和反水雷方面以及其他許多特種作業(yè)中,AUV都可以大顯身手。3、民用水下機器人由于近年來人們對海洋考察和開發(fā)的增多,水下機器人得到廣泛的應用,其申ROV大量地被使用在各種水下作業(yè)中,AUV大范圍、大深度的作業(yè)設備近期在深海資源勘探和科學考察上得到了快速地發(fā)展。由于造價和人員風險的原因,載人潛水器相對發(fā)展放緩。目前水下機器人主要應用領域包括水下工程、海洋石油、打撈救生和海洋科學考察等各方面。(1)水下工程水下檢查:查明管道、水下工程、電纜鋪設的情況及其位置,檢查百油鉆井平臺和井口的銹蝕及損壞的程度,檢查水庫大壩及閘門的裂縫、損壞情況等。水下監(jiān)視:監(jiān)視和輔助潛水員進行水下作業(yè)、救助打撈和石油鉆井平臺的水下作業(yè)等。搜索與識別:對海洋、湖泊、江河中的沉船、遺失的儀器、工程設備等搜索尋找、記錄和識別。安裝與回收:協(xié)助石油鉆井平臺安裝、搬遷,扭轉閥門、更換和安放設備,協(xié)助水下工程建設、打撈作業(yè)等。水下清理:水電站攔污柵清理,海上石油鉆井平臺基礎清理,船體、管道及水下構件除銹、除漆等。(2)海洋救助與打撈救生在海難救助,打撈沉船的作業(yè)中獨立完成或協(xié)助潛水員完成水下作業(yè)任務。全球定位、搜索,救援遇難艦船、解救受困潛水艇、中繼通訊等。(3)海洋科學考察海洋科學考察主要包括水文地質考察(記錄海底地形、繪制海底地圖、選擇土樣和巖石樣本等)、海洋生物考察(測定海底生物形態(tài),采集生物樣本等)、海洋物理考察(測定地球磁場,考察石油、天然氣、礦物資源,考察海底火山活動情況等)、海洋光學考察等等。(4)水下考古確定水下文物位置和性質,采集文物樣本,清理考古現(xiàn)場,打撈文物等。(五)ROV的關鍵技術1、能源技術有纜遙控水下機器人隨著深度的增加,高電壓的動力輸送和動力設備是必須的。目前3000V電壓動力較為普遍地應用在ROV設備上。為了減少臍帶電纜的尺寸和重量,將來ROV會采用更高的電壓等級。目前無纜水下機器人的能源較多是使用鉛酸電池和銀鋅電池。2、精確定位技術目前水下機器人在水上采用GPS,水下定位采用聲學定位設備。水下GPS技術目前正在迅速地發(fā)展,自治導航的精度預計將在5年內提高10倍。3、零可見度導航技術混水作業(yè)一直是水下機器人應用的最大障礙,利用聲學、激光技術以及計算機圖形增強技術,將使這個難題得到解決。4、材料技術在水中每增加10m的水深,外界壓力將增加1個大氣壓(0.1MPa)。高強度、輕質、耐腐蝕的結構材料和浮力材料是水下機器人重點發(fā)展的技術問題。5、作業(yè)技術水下機器人的發(fā)展目標是代替人完成各種水下作業(yè)。柔性水下機械手、專用水下作業(yè)工具以及臨場感、虛擬現(xiàn)實技術的發(fā)展,將便水下機器人在海洋開發(fā)中發(fā)揮更大的作用。6、聲學技術被稱為聲學技術革命的最新的"矢量換能技術",可使自主水下機器人的跟蹤距離達到100km以上。低頻水聲通訊技術可使在水下的通訊距離達到1000km以上,圖像的水下傳輸距離可達20km以上。水聲技術的發(fā)展將使水下機器人真正具有"千里耳"。7、智能技術機器具有與人相同的智能或超過人的智能是科幻電影的事情,從目前機器智能的發(fā)展程度看還需有較長的路要走。由人參與或半自主的水下機器人是解決目前復雜的水下作業(yè)的現(xiàn)實辦法。8、回收技術水下機器人的吊放回收作業(yè)一般是在海面附近進行,所以常受海況條件的限制而成為影響水下機器人水下作業(yè)的主要因素。

第三章總體設計(一)系統(tǒng)的總體架構1.ROV工作原理2.接口設計如圖所示,下位機通過姿態(tài)信息采集等儀器獲取外界信息,再把這些信息通過接口傳給上位機,上位機將接受到的數(shù)據(jù)進行處理后又通過接口把命令發(fā)給下位機,讓它執(zhí)行相應的操作。接口是連接上位機、下位機協(xié)調工作的橋梁。主要包括硬件接口、軟件接口、通信接口等。3.封裝函數(shù)上位機和下位機都有大量的數(shù)據(jù)需要獲取、儲存、處理等,想讓軟件系統(tǒng)能高效率的工作,就要將這些具有相同屬性的函數(shù)封裝,然后各自調用。這樣不僅能夠保護或防止代碼(或數(shù)據(jù))被我們無意破壞,而且減除了程序的冗余。有效地提高了軟件的運行效率。(二)ROV控制系統(tǒng)結構及發(fā)展水上控制設備的功能是監(jiān)視和操作水下載體,并向水下載體提供所需的動力水上控制設備水上控制設備的功能是監(jiān)視和操作水下載體,并向水下載體提供所需的動力水下控制設備的功能則是執(zhí)行水面的命令,產生需要的運動以完成給定的作業(yè)使命水下控制設備水下控制設備的功能則是執(zhí)行水面的命令,產生需要的運動以完成給定的作業(yè)使命(三)數(shù)據(jù)庫設計1.數(shù)據(jù)庫整體架構2.SensorDataRecord表設計(四)運行設計1.運行效果圖該軟件不論是運行效果界面設計還是功能實現(xiàn)都是完全按照ROV的基本功能需求設計制作的。上位機界面的設計將ROV的抽象功能清晰地展示在人們面前。主要功能顯示包括視頻功能、檢測姿態(tài)信息功能、GPS定位功能、水下設備狀態(tài)顯示、網絡數(shù)據(jù)處理功能、操控系統(tǒng)功能等。2.運行模塊設計多個具體的軟件運行模塊相互交換信息、處理數(shù)據(jù)夠成了完善的軟件運行效果。運行模塊主要包括主控模塊、分控模塊、電源模塊、電壓轉換模塊、顯示模塊、輸入模塊、存儲模塊、通信模塊、信號傳輸模塊、信號采集模塊、視頻采集模塊、管道定位模塊、姿態(tài)測量模塊、電位采集模塊、位置定位模塊、照明控制模塊和運行控制模塊。

第四章.詳細設計(一)整體軟件設計ROV控制系統(tǒng)由上位機軟件和下位機軟件兩部分組成,兩部分的緊密結合、完美協(xié)調才能使整個ROV控制系統(tǒng)高效率運作。(二)上位機軟件設計1.上位機軟件組成框架2.代碼實現(xiàn)(1)數(shù)據(jù)庫類設計及其調用usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Data.SqlClient;usingSystem.Data;usingSystem.Windows.Forms;usingNature.XML;namespaceDataRecord{classDataRecord{privatestringconnectionString="DataSource="+SelectXMLData.GetConfiguration("SQLString","value")+";InitialCatalog=SensorDataRecord;IntegratedSecurity=True";privateSqlConnectionconn=null;publicvoidOpen()//打開數(shù)據(jù)庫連接{if(conn==null){conn=newSqlConnection(connectionString);}if(conn.State==ConnectionState.Closed){try{conn.Open();}catch{}}}publicvoidClose()//關閉數(shù)據(jù)庫連接{if(conn!=null&&conn.State!=ConnectionState.Closed){conn.Close();}}publicvoidDispose()//釋放數(shù)據(jù)庫連接資源{if(conn!=null)//確認連接是否已經關閉{conn.Dispose();conn=null;}}publicintExecuteSql(stringsqlstring)//執(zhí)行SqlCommand命令{intn=0;try{this.Open();SqlCommandcom=newSqlCommand(sqlstring,conn);n=com.ExecuteNonQuery();this.Close();this.Dispose();}catch{}returnn;}publicDataSetGetDataSet(stringsqlstring,stringtableName)//創(chuàng)建DataSet對象{DataSetds=null;try{this.Open();SqlDataAdapterda=newSqlDataAdapter(sqlstring,conn);ds=newDataSet();da.Fill(ds,tableName);this.Close();this.Dispose();}catch{};returnds;}publicSqlDataReaderGetDataReader(stringsqlstring)//創(chuàng)建SqlDataReader對象{SqlDataReaderdr=null;try{this.Open();SqlCommandcom=newSqlCommand(sqlstring,conn);dr=com.ExecuteReader(CommandBehavior.CloseConnection);}catch{};returndr;}}}privatevoidbtnAll_Click(objectsender,EventArgse)//查詢全部記錄{paraInt=1;DataRecordrecord=newDataRecord();DataSetdst=record.GetDataSet("select時間,方位角,俯仰角,翻滾角,加速度,管道深度,水深,電位,電位梯度,手自動,經度,緯度,高程fromSensorDataRecord","SensorDataRecord");dataGridViewHistory.DataSource=dst.Tables["SensorDataRecord"];dataGridViewHistory.FirstDisplayedScrollingRowIndex=dataGridViewHistory.RowCount-1;dataGridViewHistory.Columns[0].DefaultCellStyle.Format="yyyy-MM-ddHH:mm:ss";}把有關查詢數(shù)據(jù)的操作封裝在DataRecord類里,查詢時調用DataRecord類。數(shù)據(jù)庫的查詢分全部查詢和部分查詢,也分手動查詢和自動查詢。點擊“查看全部”按鈕和“刷新”復選框,數(shù)據(jù)表就會每5秒自動更新一次,將數(shù)據(jù)庫最新的數(shù)據(jù)顯示在這個可視化表里,而且表的滾動條已被設定在最低端,能看到時時更新的最新數(shù)據(jù)。從而操作人員能很好的掌握ROV的最新狀況,如下圖:點擊“方位角、俯仰角、翻滾角、加速度、管道深度、水深、電位、電位梯度、經度、緯度、高程”等復選框和“查詢”按鈕,表中就顯示部分查詢記錄,如下圖:(2)串口數(shù)據(jù)的發(fā)送usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.IO.Ports;usingSystem.Collections;usingSystem.Threading;namespaceExplorer.Serial{publicclassSerialSendData{privateenumDataReceiveStatus{Head=0,DataLen=1,Command=2,Data=3,CheckSum=4}publicenumDataType{Motor=0,ADC0=1,ADC5=2,ADC6=3,ADC7=4,Accelerometer=5,Temperature=6,Camera=7}privateSerialPortserialPort1;privatebyte[]headbytes=newbyte[2];privatebyte[]OSDLine=newbyte[110]{0xA3,0xC4,0xA3,0xBA,0xA3,0xB0,0xA3,0xB0,0xA3,0xB0,0xA3,0xAE,0xA3,0xB0,0xA1,0xA1,0xA3,0xCD,0xA1,0xA1,0xA3,0xC8,0xA3,0xBA,0xA3,0xB0,0xA3,0xB0,0xA3,0xB0,0xA3,0xAE,0xA3,0xB0,0xA1,0xE3,0x13,0x13,0xA3,0xD0,0xA3,0xE9,0xA3,0xF4,0xA3,0xE3,0xA3,0xE8,0xA3,0xBA,0xA3,0xB0,0xA3,0xB0,0xA3,0xB0,0xA3,0xAE,0xA3,0xB0,0xA1,0xE3,0xA1,0xA1,0xA3,0xD2,0xA3,0xEF,0xA3,0xEC,0xA3,0xEC,0xA3,0xBA,0xA3,0xB0,0xA3,0xB0,0xA3,0xB0,0xA3,0xAE,0xA3,0xB0,0xA1,0xE3,0x13,0x13,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1};//TEMP: privateintmintusertextlength=2;privatebytereceivecommandbyte=newbyte();privateintreceivecommandlen=0;privatebytechecksum=newbyte();privateboolmblnLineBusy=false;privateArrayListdatabyteslist=newArrayList();privateintreceiveheadbyteindex=0;privateDataReceiveStatusdatareceivestatus=DataReceiveStatus.Head;privateArrayListmalCmdQueue=newArrayList();privateThreadthreadSending;privateThreadthreadReceiving;publicdelegatevoidUserRequest(objectsender,ReceivedEventArgse);publicdelegatevoidUserCommandRequest(objectsender,ReceivedCommandEventArgse);publiceventUserRequestOnDataReceived;publiceventUserCommandRequestOnCommandDataReceived;publicSerialSendData(){serialPort1=newSystem.IO.Ports.SerialPort();if(serialPort1.IsOpen==false){serialPort1.ReadTimeout=50;serialPort1.ReadBufferSize=1024;serialPort1.DiscardNull=false;serialPort1.WriteBufferSize=512;serialPort1.BaudRate=9600;serialPort1.ReceivedBytesThreshold=1024;serialPort1.DataReceived+=newSerialDataReceivedEventHandler(serialPort1_DataReceived);}}publicvoidStartSending()//檢測發(fā)送隊列并發(fā)送{while(true){try{if(malCmdQueue.Count>0){byte[]tempbytes;tempbytes=(byte[])malCmdQueue[0];malCmdQueue.RemoveAt(0);serialPort1.Write(tempbytes,0,tempbytes.Length);}}catch{}Thread.Sleep(50);}}publicvoidStartReceiving()//接收隊列{while(true){try{Thread.Sleep(50);inttempbytestoread=serialPort1.BytesToRead;if(tempbytestoread>=128){byte[]tempbyte=newbyte[tempbytestoread];serialPort1.Read(tempbyte,0,tempbytestoread);OnDataReceived(this,newReceivedEventArgs(tempbyte));}}catch{}}}publicvoidOpenPort(stringport,intbaud)//打開串口{serialPort1.PortName=port;serialPort1.BaudRate=baud;serialPort1.Open();if(serialPort1.IsOpen==true){threadSending=newThread(newThreadStart(StartSending));threadSending.Start();threadReceiving=newThread(newThreadStart(StartReceiving));threadReceiving.Start();}}publicvoidClosePort()//關閉串口{if(threadSending!=null&&threadSending.IsAlive)threadSending.Abort();if(threadReceiving!=null&&threadReceiving.IsAlive)threadReceiving.Abort();serialPort1.DiscardInBuffer();serialPort1.DiscardOutBuffer();serialPort1.Close();}publicvoidSendMessage(byte[]cmd)//str前引導符;str1數(shù)值{try{serialPort1.DiscardOutBuffer();serialPort1.Write(cmd,0,cmd.Length);}catch(TimeoutException){}}publicvoidSendMessage(DataType_dt,String_para,String_para1){bytechecksum=newbyte();byte[]bytes=newbyte[7];bytes[0]=0xCC;//0x95bytes[1]=0xDD;bytes[2]=0x04;switch(_dt){caseDataType.Motor:bytes[3]=0x20;break;caseDataType.ADC0:bytes[3]=0x21;break;caseDataType.ADC5:bytes[3]=0x22;break;caseDataType.ADC6:bytes[3]=0x23;break;caseDataType.ADC7:bytes[3]=0x24;break;caseDataType.Accelerometer:bytes[3]=0x25;break;caseDataType.Camera:bytes[3]=0x27;break;caseDataType.Temperature:bytes[3]=0x28;break;}switch(_para){case"top":if(_para1=="down"){bytes[4]=0x75;bytes[5]=0x64;}elseif(_para1=="up"){bytes[4]=0x75;bytes[5]=0x75;}break;case"AutoTop":bytes[4]=0x90;bytes[5]=Convert.ToByte(_para1);break;case"AutoDown":bytes[4]=0x91;bytes[5]=Convert.ToByte(_para1);break;case"AutoLeft":bytes[4]=0x93;bytes[5]=Convert.ToByte(_para1);break;case"AutoRight":bytes[4]=0x92;bytes[5]=Convert.ToByte(_para1);break;case"bottom":if(_para1=="down"){bytes[4]=0x64;bytes[5]=0x64;}elseif(_para1=="up"){bytes[4]=0x64;bytes[5]=0x75;}break;case"left":if(_para1=="down"){bytes[4]=0x72;bytes[5]=0x64;}elseif(_para1=="up"){bytes[4]=0x72;bytes[5]=0x75;}break;case"right":if(_para1=="down"){bytes[4]=0x6c;bytes[5]=0x64;}elseif(_para1=="up"){bytes[4]=0x6c;bytes[5]=0x75;}break;case"led":if(_para1=="down"){bytes[4]=0x74;bytes[5]=0x64;}elseif(_para1=="up"){bytes[4]=0x74;bytes[5]=0x75;}break;case"AutoLed":bytes[4]=0x96;bytes[5]=Convert.ToByte(_para1);break;case"sink":if(_para1=="down"){bytes[4]=0x73;bytes[5]=0x64;}break;case"float":if(_para1=="down"){bytes[4]=0x66;bytes[5]=0x64;}break;case"suspend":if(_para1=="down"){bytes[4]=0x70;bytes[5]=0x64;}break;case"ADC":bytes[4]=0xFF;bytes[5]=0xFF;break;case"Temperature":bytes[4]=0xFF;bytes[5]=0xFF;break;case"MotorShut":if(_para1=="X"){bytes[4]=0x78;bytes[5]=0x78;}elseif(_para1=="Y"){bytes[4]=0x78;bytes[5]=0x79;}break;case"CameraShut":bytes[4]=0x01;bytes[5]=0x01;break;case"NW":if(_para1=="down"){bytes[4]=0x82;bytes[5]=0x64;}elseif(_para1=="up"){bytes[4]=0x82;bytes[5]=0x75;}break;case"SW":if(_para1=="down"){bytes[4]=0x83;bytes[5]=0x64;}elseif(_para1=="up"){bytes[4]=0x82;bytes[5]=0x75;}break;case"NE":if(_para1=="down"){bytes[4]=0x80;bytes[5]=0x64;}elseif(_para1=="up"){bytes[4]=0x80;bytes[5]=0x75;}break;case"SE":if(_para1=="down"){bytes[4]=0x81;bytes[5]=0x64;}elseif(_para1=="up"){bytes[4]=0x81;bytes[5]=0x75;}break;case"AutoNE":bytes[4]=0x84;bytes[5]=Convert.ToByte(_para1);break;case"AutoSE":bytes[4]=0x85;bytes[5]=Convert.ToByte(_para1);break;case"AutoNW":bytes[4]=0x86;bytes[5]=Convert.ToByte(_para1);break;case"AutoSW":bytes[4]=0x87;bytes[5]=Convert.ToByte(_para1);break;case"AutoSink":bytes[4]=0x94;bytes[5]=Convert.ToByte(_para1);break;case"AutoFloat":bytes[4]=0x95;bytes[5]=Convert.ToByte(_para1);break;}for(inti=0;i<4;i++){checksum^=bytes[i+2];}bytes[6]=checksum;malCmdQueue.Add(bytes);}publicvoidSendMessage(String_para){intchecksum=0;byte[]bytes=newbyte[7];bytes[0]=0xff;bytes[1]=0x01;bytes[2]=0x00;switch(_para){case"bottom"://"top"bytes[3]=0x08;bytes[4]=0x00;bytes[5]=0xff;break;case"top"://"bottom"bytes[3]=0x10;bytes[4]=0x00;bytes[5]=0xff;break;case"right"://"left"bytes[3]=0x04;bytes[4]=0xff;bytes[5]=0x00;break;case"left"://"right"bytes[3]=0x02;bytes[4]=0xff;bytes[5]=0x00;break;case"stop":bytes[3]=0x00;bytes[4]=0x00;bytes[5]=0x00;break;}for(inti=0;i<5;i++){checksum+=(int)bytes[i+1];}bytes[6]=Convert.ToByte(checksum%0x100);malCmdQueue.Add(bytes);}publicvoidInitOSD(){byte[]bytes=newbyte[5];//視頻掃描方式bytes[0]=0x55;bytes[1]=0x02;bytes[2]=0x12;bytes[3]=0x00;bytes[4]=255;serialPort1.Write(bytes,0,bytes.Length);//水平位移bytes[0]=0x55;bytes[1]=0x03;bytes[2]=0x00;bytes[3]=0x00;bytes[4]=255;serialPort1.Write(bytes,0,bytes.Length);bytes[0]=0x55;//垂直位移bytes[1]=0x04;bytes[2]=0x14;bytes[3]=0x00;bytes[4]=255;serialPort1.Write(bytes,0,bytes.Length);bytes[0]=0x55;//設定指定行字符尺寸bytes[1]=0x06;bytes[2]=0x00;bytes[3]=0x01;bytes[4]=255;serialPort1.Write(bytes,0,bytes.Length);byte[]colorbytes=newbyte[17]{0x00,0x00,0x00,0x00,0x00,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70};colorbytes[0]=0x55;//設定每行的字符顏色colorbytes[1]=0x11;colorbytes[2]=0x70;colorbytes[3]=0x00;colorbytes[4]=255;serialPort1.Write(bytes,0,bytes.Length);Thread.Sleep(5);publicvoidShowUserText(string_usertext){byte[]bytes=newbyte[5];bytes[0]=0x55;//從某行某列開始顯示字符bytes[1]=0x07;bytes[2]=0x09;bytes[3]=0x01;bytes[4]=255;serialPort1.Write(bytes,0,bytes.Length);Thread.Sleep(100);byte[]user_bytes_1=newbyte[mintusertextlength+5];user_bytes_1[0]=0x55;user_bytes_1[1]=0x31;//11;user_bytes_1[2]=Convert.ToByte(mintusertextlength/2);user_bytes_1[3]=255;user_bytes_1[4]=255;for(inti=0;i<mintusertextlength;i++)user_bytes_1[i+5]=0xA1;serialPort1.Write(user_bytes_1,0,mintusertextlength+5);byte[]temp_user_bytes=newbyte[_usertext.Length*2];byte[]temp_user_bytes_1=System.Text.Encoding.Default.GetBytes(_usertext);if(System.Text.Encoding.Default.GetBytes(_usertext).Length==_usertext.Length){for(inti=0;i<temp_user_bytes_1.Length;i++){temp_user_bytes[i*2]=0xA3;temp_user_bytes[i*2+1]=Convert.ToByte(temp_user_bytes_1[i]+0x80);}}elsefor(inti=0;i<temp_user_bytes_1.Length;i++)temp_user_bytes[i]=temp_user_bytes_1[i];mintusertextlength=temp_user_bytes.Length;byte[]user_bytes=newbyte[temp_user_bytes.Length+5];user_bytes[0]=0x55;user_bytes[1]=0x31;//11;user_bytes[2]=Convert.ToByte(temp_user_bytes.Length/2);user_bytes[3]=255;user_bytes[4]=255;for(inti=0;i<temp_user_bytes.Length;i++)user_bytes[i+5]=temp_user_bytes[i];serialPort1.Write(user_bytes,0,user_bytes.Length);bytes[0]=0x55;//從某行某列開始顯示字符bytes[1]=0x07;bytes[2]=0x01;bytes[3]=0x01;bytes[4]=255;serialPort1.Write(bytes,0,bytes.Length);Thread.Sleep(50);}publicvoidOSDHeading(string_heading){byte[]src_bytes=System.Text.Encoding.ASCII.GetBytes(_heading);OSDLine[25]=Convert.ToByte(src_bytes[0]+0x80);OSDLine[27]=Convert.ToByte(src_bytes[1]+0x80);OSDLine[29]=Convert.ToByte(src_bytes[2]+0x80);OSDLine[31]=Convert.ToByte(src_bytes[3]+0x80);OSDLine[33]=Convert.ToByte(src_bytes[4]+0x80);}publicvoidOSDDepth(string_depth){byte[]src_bytes=System.Text.Encoding.ASCII.GetBytes(_depth);OSDLine[5]=Convert.ToByte(src_bytes[0]+0x80);OSDLine[7]=Convert.ToByte(src_bytes[1]+0x80);OSDLine[9]=Convert.ToByte(src_bytes[2]+0x80);OSDLine[11]=Convert.ToByte(src_bytes[3]+0x80);OSDLine[13]=Convert.ToByte(src_bytes[4]+0x80);}publicvoidOSDPitc

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論