版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
目錄第一章.緒論 1第二章.ROV簡介 2(一)ROV的概念和結(jié)構(gòu)組成. 2(二)ROV的特點 4(三)ROV的功能和應(yīng)用. 4(四)ROV的應(yīng)用分類 6(五)ROV的關(guān)鍵技術(shù) 8第三章.總體設(shè)計 10(一)系統(tǒng)的總體架構(gòu) 10(二)ROV控制系統(tǒng)結(jié)構(gòu)及發(fā)展. 10(三)數(shù)據(jù)庫設(shè)計 11(四)運行設(shè)計 12第四章.詳細(xì)設(shè)計 14(一)整體軟件設(shè)計 14(二)上位機軟件設(shè)計 14(三)下位機軟件設(shè)計 52第五章.軟件測試 61(一)測試目的 61(二)測試方法和效果 61word文檔 可自由復(fù)制編輯第一章 緒論21世紀(jì)是人類向海洋進(jìn)軍的世紀(jì)。深海作為人類尚未開發(fā)的寶地和高技術(shù)領(lǐng)域之一,已經(jīng)成為各國的重要戰(zhàn)略目標(biāo),也是近幾年國際上競爭的焦點之一。水下機器人作為一種高技術(shù)手段在海洋開發(fā)和利用領(lǐng)域的重要性日漸重要。當(dāng)今,在一些國家的水下機器人技術(shù)已經(jīng)日趨成熟,并在許多場合的應(yīng)用中體現(xiàn)出了良好的效果。隨著產(chǎn)業(yè)的發(fā)展,迫切需要大量適用于作業(yè)的各式各樣的水下機器人。世界上許多國正在大力加強水下機器人的研究,我國力爭在不久的將來,推出大量實用的機器人,以使自己的機器人技術(shù)和產(chǎn)品在國際上占有一席之地。隨著科學(xué)技術(shù)的不斷發(fā)展,水下機器人從無智能走向智能化發(fā)展。具有智能的機器人應(yīng)用于深海作業(yè)中,極大地提高了人類對海洋的探測。重要的是水下機器人在海洋開發(fā)各個領(lǐng)域都有著廣泛的應(yīng)用,代替人在那些人類無法工作的深海環(huán)境條件下完成任務(wù)作業(yè)。這將極大地擴展人類科學(xué)研究活動的范圍,提高人類創(chuàng)造性科學(xué)的探究和發(fā)展。word文檔 可自由復(fù)制編輯第二章 ROV簡介(一)ROV的概念和結(jié)構(gòu)組成1、ROV的概念ROV,即水下機器人( RemoteOperatedVehicle ),是一種可在水下移動、具有視覺和感知系統(tǒng)、 通過遙控或自主操作方式、使用機械手或其他工具代替或輔助人去完成水下作業(yè)任務(wù)的機電裝置。2、ROV的結(jié)構(gòu)組成(1)ROV系統(tǒng)組成包括:動力推進(jìn)器、遙控電子通訊裝置、黑白或彩色攝像頭、攝像俯仰云臺、用戶外圍傳感器接口、實時在線顯示單元、導(dǎo)航定位裝置、自動舵手導(dǎo)航單元、輔助照明燈和凱夫拉零浮力拖纜等單元部件。如下圖是一個中型的ROV:(2)機器人框架規(guī)格說明表word文檔 可自由復(fù)制編輯序號名稱1水下機器人外形結(jié)構(gòu)與尺寸照明系統(tǒng)攝像系統(tǒng)云臺系統(tǒng)推進(jìn)器系統(tǒng)基本傳感器配重浮體電纜
技術(shù)要求結(jié)構(gòu):框架式尺寸:約400mm高 450mm寬 700mm長根據(jù)具體訂做規(guī)格要求尺寸會在此基礎(chǔ)上有所變動3組50w的高光通量鹵素?zé)?,固定在框架中,燈光可覆蓋俯仰140度范圍。與攝像系統(tǒng)配合使用,能清晰觀看約5米以外的物體,可調(diào)節(jié)亮度。530線變焦彩色CCD攝像機,1.2Lux,F(xiàn)1.2光圈,PAL制式,可電動變焦,與照明系統(tǒng)配合使用,能清晰觀看約5米以外的物體俯仰140度,配合攝像系統(tǒng)使用,運動靈活4個有刷電機推進(jìn)器。水平方向:兩個推進(jìn)器,呈 V字形排列,V字角度可調(diào)。垂直方向:兩個推進(jìn)器,呈 V字形排列,V字角度可調(diào)。航行速度約 3節(jié)(在0節(jié)水流狀態(tài)下)。能升降、前進(jìn)、后退、橫移以及轉(zhuǎn)彎等運動,運動自如;能穩(wěn)定在某一深度(定深)。用于航行自動控制的三軸磁羅經(jīng)傳感器1個,精確度0.3度,三軸傾斜傳感器1個,精確度0.1度,深度傳感器1個,精確度0.1m。配重采用掛載機構(gòu)設(shè)計,機體中裝有掛載平臺,上面帶有各種安裝孔,同時預(yù)備有各種重量的配重塊,通過安裝孔將各種配重塊安裝到掛載平臺中。框架中帶有配重懸架,根據(jù)攜帶的傳感器重量不同,可方便安裝和拆卸配重塊。深水浮體,耐壓強度可達(dá) 40MPa。滿足主機重量22kg內(nèi)、有效載重至少2kg的機器在水下姿態(tài)平衡的要求,顏色為黃色。密度約0.95kg/dm3,浮力為相對偏向正浮力,直徑12mm左右,牽引力達(dá)到100KG,電纜內(nèi)部帶有紡輪編織抗拉層。此外動力線一組,超五類雙絞線兩組。word文檔 可自由復(fù)制編輯地面控制系統(tǒng)供電系統(tǒng)最大下潛深度水下機器人在空氣中13重量以及有效載重14 保修期(二)ROV的特點
配備專用操作控制臺和增強型的軟件控制系統(tǒng),專用控制臺和計算機軟件多模式操作;控制臺配備搖桿手柄和按鈕。軟件采用全圖形界面設(shè)計。內(nèi)容包括:圖像捕捉,云臺控制,照片存儲管理,整個系統(tǒng)自檢,照明燈控制(開、關(guān)、調(diào)節(jié)亮度),顯示潛水導(dǎo)航參數(shù),各種信息指示等。顯示配備10寸液晶屏。帶sony游戲手柄,控制機器運動,筆記本電腦由用戶自配。輸入交流電100-270VAC,50/60Hz,整個水下機器人的功率約為 800W。根據(jù)客戶要求定制水下機器人在空氣中重量約為22KG,有效載重2kg兩年水下機器人小巧靈活、操作簡便(通過控制臺上的多個旋鈕即可控制機器人前進(jìn)、后退、轉(zhuǎn)彎、上升、下沉;燈光強弱和攝像頭焦距;云臺俯仰等);機器人可攜帶定位聲納、圖像掃描聲納、多參數(shù)水質(zhì)檢測傳感器(YSI)、輻射傳感器、機械手、金屬測厚計等;可實時進(jìn)行水下視頻檢測和觀測。概括為以下四點:1、可移動性移動是指水下機器人在海底爬行、附著在結(jié)構(gòu)物上行進(jìn)或在海水中浮游。2、能夠感知機器人的外部和內(nèi)部環(huán)境特性3、擁有完成使命所需的執(zhí)行機構(gòu)4、能自主地或在人的參與下完成水下作業(yè)(三)ROV的功能和應(yīng)用無人有纜水下機器人 ROV的優(yōu)點在于動力充足,可以支撐復(fù)雜的探測設(shè)備和較大的機械作業(yè)用電,信息和數(shù)據(jù)的傳遞和交換word文檔 可自由復(fù)制編輯快捷方便、數(shù)據(jù)量大,其總體決策水平較高,因此應(yīng)用廣泛。目前,小型遙控水下機器人已廣泛用于:1、管道容器檢查市政飲用水系統(tǒng)中水罐、水管、水庫檢查;排污/排澇管道、下水道檢查;洋輸油管道檢查;跨江、跨河管道檢查;2、船舶河道海洋石油船體檢修;水下錨、推進(jìn)器、船底探查;碼頭及碼頭樁基、橋梁、大壩水下部分檢查;航道排障、港口作業(yè);鉆井平臺水下結(jié)構(gòu)檢修、海洋石油工程;3、科學(xué)研究教學(xué)水環(huán)境、水下生物的觀測、研究和教學(xué);海洋考察;冰下觀察;4、水下娛樂水下電視拍攝、水下攝影;潛水、劃船、游艇;看護(hù)潛水員,潛水前合適地點的選擇;5、能源核電站反應(yīng)器檢查、管道檢查、異物探測和取出;水電站船閘檢修;水電大壩、水庫堤壩檢修 (排沙洞口、攔污柵、泄水道檢修 );6、安全檢查大壩、橋墩上是否安裝爆炸物以及結(jié)構(gòu)好壞情況;遙控偵察、危險品靠近檢查;水下基陣協(xié)助安裝/拆卸;船側(cè)、船底走私物品檢測(公安、海關(guān));水下目標(biāo)觀察,廢墟、坍塌礦井搜救等;word文檔 可自由復(fù)制編輯搜尋水下證據(jù) (公安、海關(guān));海上救助打撈、近海搜索;7、考古水下考古、水下沉船考察;8、漁業(yè)深水網(wǎng)箱漁業(yè)養(yǎng)殖,人工漁礁調(diào)查(四)ROV的應(yīng)用分類水下機器人應(yīng)用分為軍用和民用兩類。1、軍用有纜水下機器人美國海軍的 ROV-CURV最引人注目。它是專門用于美國海軍實驗中心打撈沉沒于水中的武器,其作業(yè)深度 610m,1958年建成。在最初服役的 6年中,平均每年回收約 100個魚雷及其他裝置。茬CURV的基礎(chǔ)上,美國海軍后來又改迸建造了一艘 CURV2和一艘CURV3,它們的作業(yè)深度分別增至為 762m和2300m。這類水下機器人的另一個重要作用是協(xié)助潛水員執(zhí)行打撈作業(yè)。 I973年8月CURV3和載人水下機器人 PISCESV共同打撈起另一艘沉沒的載人潛水器PISCESIII 。2、軍用無纜水下機器人AUV可用來輔助軍用潛艇,作為它的體外傳感器,為它護(hù)航和警戒,以及為它引開敵方攻擊充當(dāng)假目標(biāo)。在反潛方面, AUV可擔(dān)任海上反潛警戒, 也可當(dāng)作反潛艦艇進(jìn)行訓(xùn)練的靶艇。 另外,在水雷戰(zhàn)和反水雷方面以及其他許多特種作業(yè)中, AUV都可以大顯身手。3、民用水下機器人由于近年來人們對海洋考察和開發(fā)的增多,水下機器人得到廣泛的應(yīng)用,其申 ROV大量地被使用在各種水下作業(yè)中, AUV大范圍、大深度的作業(yè)設(shè)備近期在深海資源勘探和科學(xué)考察上得到了快速地發(fā)展。由于造價和人員風(fēng)險的原因,載人潛水器相對發(fā)word文檔 可自由復(fù)制編輯展放緩。目前水下機器人主要應(yīng)用領(lǐng)域包括水下工程、 海洋石油、打撈救生和海洋科學(xué)考察等各方面。(1)水下工程水下檢查:查明管道、水下工程、電纜鋪設(shè)的情況及其位置,檢查百油鉆井平臺和井口的銹蝕及損壞的程度,檢查水庫大壩及閘門的裂縫、損壞情況等。水下監(jiān)視:監(jiān)視和輔助潛水員進(jìn)行水下作業(yè)、救助打撈和石油鉆井平臺的水下作業(yè)等。搜索與識別:對海洋、湖泊、江河中的沉船、遺失的儀器、工程設(shè)備等搜索尋找、記錄和識別。安裝與回收:協(xié)助石油鉆井平臺安裝、搬遷,扭轉(zhuǎn)閥門、更換和安放設(shè)備,協(xié)助水下工程建設(shè)、打撈作業(yè)等。水下清理:水電站攔污柵清理,海上石油鉆井平臺基礎(chǔ)清理,船體、管道及水下構(gòu)件除銹、除漆等。(2)海洋救助與打撈救生在海難救助,打撈沉船的作業(yè)中獨立完成或協(xié)助潛水員完成水下作業(yè)任務(wù)。全球定位、搜索,救援遇難艦船、解救受困潛水艇、中繼通訊等。(3)海洋科學(xué)考察海洋科學(xué)考察主要包括水文地質(zhì)考察 (記錄海底地形、繪制海底地圖、選擇土樣和巖石樣本等 )、海洋生物考察 (測定海底生物形態(tài),采集生物樣本等 )、海洋物理考察 (測定地球磁場,考察石油、天然氣、礦物資源,考察海底火山活動情況等 )、海洋光學(xué)考察等等。(4)水下考古確定水下文物位置和性質(zhì),采集文物樣本,清理考古現(xiàn)場,打撈文物等。word文檔 可自由復(fù)制編輯(五)ROV的關(guān)鍵技術(shù)1、能源技術(shù) 有纜遙控水下機器人隨著深度的增加,高電壓的動力輸送和動力設(shè)備是必須的。目前 3000V電壓動力較為普遍地應(yīng)用在 ROV設(shè)備上。為了減少臍帶電纜的尺寸和重量,將來ROV會采用更高的電壓等級。目前無纜水下機器人的能源較多是使用鉛酸電池和銀鋅電池。2、精確定位技術(shù) 目前水下機器人在水上采用 GPS,水下定位采用聲學(xué)定位設(shè)備。水下 GPS技術(shù)目前正在迅速地發(fā)展,自治導(dǎo)航的精度預(yù)計將在 5年內(nèi)提高 10倍。3、零可見度導(dǎo)航技術(shù) 混水作業(yè)一直是水下機器人應(yīng)用的最大障礙,利用聲學(xué)、激光技術(shù)以及計算機圖形增強技術(shù),將使這個難題得到解決。4、材料技術(shù)在水中每增加10m的水深,外界壓力將增加1個大氣壓(0.1MPa)。高強度、輕質(zhì)、耐腐蝕的結(jié)構(gòu)材料和浮力材料是水下機器人重點發(fā)展的技術(shù)問題。5、作業(yè)技術(shù) 水下機器人的發(fā)展目標(biāo)是代替人完成各種水下作業(yè)。柔性水下機械手、專用水下作業(yè)工具以及臨場感、虛擬現(xiàn)實技術(shù)的發(fā)展,將便水下機器人在海洋開發(fā)中發(fā)揮更大的作用。6、聲學(xué)技術(shù) 被稱為聲學(xué)技術(shù)革命的最新的 "矢量換能技術(shù)",可使自主水下機器人的跟蹤距離達(dá)到 100km以上。低頻水聲通訊技術(shù)可使在水下的通訊距離達(dá)到 1000km以上,圖像的水下傳輸距離可達(dá) 20km以上。水聲技術(shù)的發(fā)展將使水下機器人真正具有"千里耳"。7、智能技術(shù) 機器具有與人相同的智能或超過人的智能是科幻電影的事情,從目前機器智能的發(fā)展程度看還需有較長的路要走。由人參與或半自主的水下機器人是解決目前復(fù)雜的水下作業(yè)的現(xiàn)實辦法。word文檔 可自由復(fù)制編輯8、回收技術(shù) 水下機器人的吊放回收作業(yè)一般是在海面附近進(jìn)行,所以常受海況條件的限制而成為影響水下機器人水下作業(yè)的主要因素。word文檔 可自由復(fù)制編輯第三章 總體設(shè)計(一)系統(tǒng)的總體架構(gòu)1.ROV工作原理2.接口設(shè)計如圖所示,下位機通過姿態(tài)信息采集等儀器獲取外界信息,再把這些信息通過接口傳給上位機,上位機將接受到的數(shù)據(jù)進(jìn)行處理后又通過接口把命令發(fā)給下位機,讓它執(zhí)行相應(yīng)的操作。接口是連接上位機、下位機協(xié)調(diào)工作的橋梁。主要包括硬件接口、軟件接口、通信接口等。3. 封裝函數(shù)上位機和下位機都有大量的數(shù)據(jù)需要獲取、儲存、處理等,想讓軟件系統(tǒng)能高效率的工作,就要將這些具有相同屬性的函數(shù)封裝,然后各自調(diào)用。這樣不僅能夠保護(hù)或防止代碼(或數(shù)據(jù))被我們無意破壞,而且減除了程序的冗余。有效地提高了軟件的運行效率。(二)ROV控制系統(tǒng)結(jié)構(gòu)及發(fā)展水上控制設(shè)備水上控制設(shè)備的功能是監(jiān)視和操作水下載體,并向水下載體提word文檔 可自由復(fù)制編輯供所需的動力水下控制設(shè)備水下控制設(shè)備的功能則是執(zhí)行水面的命令,產(chǎn)生需要的運動以完成給定的作業(yè)使命(三)數(shù)據(jù)庫設(shè)計1.數(shù)據(jù)庫整體架構(gòu)2.SensorDataRecord表設(shè)計word文檔 可自由復(fù)制編輯(四)運行設(shè)計1.運行效果圖該軟件不論是運行效果界面設(shè)計還是功能實現(xiàn)都是完全按照ROV的基本功能需求設(shè)計制作的。上位機界面的設(shè)計將 ROV的抽象功能清晰地展示在人們面前。主要功能顯示包括視頻功能、檢測姿態(tài)信息功能、GPS定位功能、水下設(shè)備狀態(tài)顯示、網(wǎng)絡(luò)數(shù)據(jù)處理功能、操控系統(tǒng)功能等。2.運行模塊設(shè)計word文檔 可自由復(fù)制編輯多個具體的軟件運行模塊相互交換信息、處理數(shù)據(jù)夠成了完善的軟件運行效果。運行模塊主要包括主控模塊、分控模塊、電源模塊、電壓轉(zhuǎn)換模塊、顯示模塊、輸入模塊、存儲模塊、通信模塊、信號傳輸模塊、信號采集模塊、視頻采集模塊、管道定位模塊、姿態(tài)測量模塊、電位采集模塊、位置定位模塊、照明控制模塊和運行控制模塊。word文檔 可自由復(fù)制編輯第四章.詳細(xì)設(shè)計(一)整體軟件設(shè)計ROV控制系統(tǒng)由上位機軟件和下位機軟件兩部分組成,兩部分的緊密結(jié)合、完美協(xié)調(diào)才能使整個 ROV控制系統(tǒng)高效率運作。(二)上位機軟件設(shè)計1.上位機軟件組成框架word文檔 可自由復(fù)制編輯2.代碼實現(xiàn)(1)數(shù)據(jù)庫類設(shè)計及其調(diào)用usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Data.SqlClient;usingSystem.Data;usingSystem.Windows.Forms;usingNature.XML;namespaceDataRecord{classDataRecord{private string connectionString = "Data Source=" +SelectXMLData.GetConfiguration("SQLString", "value") + ";InitialCatalog=SensorDataRecord;IntegratedSecurity=True";privateSqlConnectionconn=null;publicvoidOpen()// 打開數(shù)據(jù)庫連接word文檔 可自由復(fù)制編輯{if(conn==null){conn=newSqlConnection(connectionString);}if(conn.State==ConnectionState.Closed){try{conn.Open();}catch{}}}publicvoidClose()// 關(guān)閉數(shù)據(jù)庫連接{if(conn!=null&&conn.State!=ConnectionState.Closed){conn.Close();}}publicvoidDispose()// 釋放數(shù)據(jù)庫連接資源{if(conn!=null) // 確認(rèn)連接是否已經(jīng)關(guān)閉{conn.Dispose();conn=null;}}publicintExecuteSql(stringsqlstring)// 執(zhí)行SqlCommand命令{intn=0;word文檔 可自由復(fù)制編輯try{this.Open();SqlCommandcom=newSqlCommand(sqlstring,conn);n=com.ExecuteNonQuery();this.Close();this.Dispose();}catch{}returnn;}public DataSet GetDataSet(string sqlstring, string tableName)// 創(chuàng)建DataSet對象{DataSetds=null;try{this.Open();SqlDataAdapterda=newSqlDataAdapter(sqlstring,conn);ds=newDataSet();da.Fill(ds,tableName);this.Close();this.Dispose();}catch{};returnds;}public SqlDataReader GetDataReader(string sqlstring)// 創(chuàng) 建SqlDataReader對象word文檔 可自由復(fù)制編輯{SqlDataReaderdr=null;try{this.Open();SqlCommandcom=newSqlCommand(sqlstring,conn);dr =com.ExecuteReader(CommandBehavior.CloseConnection);}catch{};returndr;}}}privatevoidbtnAll_Click(objectsender,EventArgse) // 查詢?nèi)坑涗泏paraInt=1;DataRecordrecord=newDataRecord();DataSetdst=record.GetDataSet("select 時間,方位角,俯仰角,翻滾角,加速度,管道深度,水深,電位,電位梯度,手自動,經(jīng)度,緯度,高程fromSensorDataRecord","SensorDataRecord");dataGridViewHistory.DataSource=dst.Tables["SensorDataRecord"];dataGridViewHistory.FirstDisplayedScrollingRowIndex =dataGridViewHistory.RowCount - 1;dataGridViewHistory.Columns[0].DefaultCellStyle.Format ="yyyy-MM-ddHH:mm:ss";}把有關(guān)查詢數(shù)據(jù)的操作封裝在 DataRecord類里,查詢時調(diào)用DataRecord類。數(shù)據(jù)庫的查詢分全部查詢和部分查詢,也分手動查詢和自動查詢。點擊“查看全部”按鈕和“刷新”復(fù)選框,數(shù)據(jù)表就word文檔 可自由復(fù)制編輯會每5秒自動更新一次,將數(shù)據(jù)庫最新的數(shù)據(jù)顯示在這個可視化表里,而且表的滾動條已被設(shè)定在最低端,能看到時時更新的最新數(shù)據(jù)。從而操作人員能很好的掌握ROV的最新狀況,如下圖:點擊“方位角、俯仰角、翻滾角、加速度、管道深度、水深、電位、電位梯度、經(jīng)度、緯度、高程”等復(fù)選框和“查詢”按鈕,表中就顯示部分查詢記錄,如下圖:word文檔 可自由復(fù)制編輯(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=7word文檔 可自由復(fù)制編輯}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;private DataReceiveStatus datareceivestatus =DataReceiveStatus.Head;privateArrayListmalCmdQueue=newArrayList();privateThreadthreadSending;privateThreadthreadReceiving;public delegate void UserRequest(object sender,ReceivedEventArgse);word文檔 可自由復(fù)制編輯public delegate void UserCommandRequest(object sender,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;word文檔 可自由復(fù)制編輯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{}}word文檔 可自由復(fù)制編輯}publicvoidOpenPort(stringport,intbaud)// 打開串口{serialPort1.PortName=port;serialPort1.BaudRate=baud;serialPort1.Open();if(serialPort1.IsOpen==true){threadSending = new Thread(newThreadStart(StartSending));threadSending.Start();threadReceiving = new Thread(newThreadStart(StartReceiving));threadReceiving.Start();}}publicvoidClosePort()// 關(guān)閉串口{if (threadSending != null && threadSending.IsAlive)threadSending.Abort();if (threadReceiving != null &&threadReceiving.IsAlive)threadReceiving.Abort();serialPort1.DiscardInBuffer();serialPort1.DiscardOutBuffer();serialPort1.Close();}publicvoidSendMessage(byte[]cmd)//str 前引導(dǎo)符;str1 數(shù)值{tryword文檔 可自由復(fù)制編輯{serialPort1.DiscardOutBuffer();serialPort1.Write(cmd,0,cmd.Length);}catch(TimeoutException){}}public void SendMessage(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:word文檔 可自由復(fù)制編輯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);word文檔 可自由復(fù)制編輯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;word文檔 可自由復(fù)制編輯}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;}word文檔 可自由復(fù)制編輯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;word文檔 可自由復(fù)制編輯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;word文檔 可自由復(fù)制編輯}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;word文檔 可自由復(fù)制編輯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;word文檔 可自由復(fù)制編輯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;word文檔 可自由復(fù)制編輯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;word文檔 可自由復(fù)制編輯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;//設(shè)定指定行字符尺寸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;// 設(shè)定每行的字符顏色colorbytes[1]=0x11;colorbytes[2]=0x70;colorbytes[3]=0x00;colorbytes[4]=255;word文檔 可自由復(fù)制編輯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++){word文檔 可自由復(fù)制編輯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)word文檔 可自由復(fù)制編輯{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);}publicvoidOSDPitch(string_pitch){byte[] src_bytes =System.Text.Encoding.ASCII.GetBytes(_pitch);if(Convert.ToDouble(_pitch)<0){OSDLine[51]=Convert.ToByte(src_bytes[0]+0x80);OSDLine[53]=Convert.ToByte(src_bytes[1]+0x80);OSDLine[55]=Convert.ToByte(src_bytes[2]+0x80);OSDLine[57]=Convert.ToByte(src_bytes[3]+0x80);OSDLine[59]=Convert.ToByte(src_bytes[4]+0x80);word文檔 可自由復(fù)制編輯}elseif(Convert.ToDouble(_pitch)>=0){OSDLine[51] = Convert.ToByte(Convert.ToByte('+') +0x80);OSDLine[53]=Convert.ToByte(src_bytes[0]+0x80);OSDLine[55]=Convert.ToByte(src_bytes[1]+0x80);OSDLine[57]=Convert.ToByte(src_bytes[2]+0x80);OSDLine[59]=Convert.ToByte(src_bytes[3]+0x80);}}publicvoidOSDRoll(string_roll){byte[] src_bytes =System.Text.Encoding.ASCII.GetBytes(_roll);if(Convert.ToDouble(_roll)<0){OSDLine[75]=Convert.ToByte(src_bytes[0]+0x80);OSDLine[77]=Convert.ToByte(src_bytes[1]+0x80);OSDLine[79]=Convert.ToByte(src_bytes[2]+0x80);OSDLine[81]=Convert.ToByte(src_bytes[3]+0x80);OSDLine[83]=Convert.ToByte(src_bytes[4]+0x80);}elseif(Convert.ToDouble(_roll)>=0){OSDLine[75] = Convert.ToByte(Convert.ToByte('+') +0x80);OSDLine[77]=Convert.ToByte(src_bytes[0]+0x80);OSDLine[79]=Convert.ToByte(src_bytes[1]+0x80);OSDLine[81]=Convert.ToByte(src_bytes[2]+0x80);word文檔 可自由復(fù)制編輯OSDLine[83]=Convert.ToByte(src_bytes[3]+0x80);}}publicvoidOSDTemp(string_temp){byte[] src_bytes =System.Text.Encoding.ASCII.GetBytes(_temp);OSDLine[99]=Convert.ToByte(src_bytes[0]+0x80);OSDLine[101]=Convert.ToByte(src_bytes[1]+0x80);OSDLine[103]=Convert.ToByte(src_bytes[2]+0x80);OSDLine[105]=Convert.ToByte(src_bytes[3]+0x80);}publicboolIsOpened(){returnserialPort1.IsOpen;}}publicclassReceivedEventArgs:EventArgs{privatebyte[]bytes;publicReceivedEventArgs(byte[]bytes){this.bytes=bytes;}publicbyte[]DataReceived{get{returnbytes;}word文檔 可自由復(fù)制編輯}}publicclassReceivedCommandEventArgs:EventArgs{privatebytenewbyte;publicReceivedCommandEventArgs(byte_byte){this.newbyte=_byte;}publicbyteDataReceived{get{returnnewbyte;}}}}上位機數(shù)據(jù)發(fā)送包括兩個部分:首先點擊主窗體的菜單欄“儀表”項,會出現(xiàn)一個選擇儀表各種設(shè)置的下拉列表框,例如陰保中斷周期設(shè)置、存儲設(shè)置等,選擇之后點擊“確定”按鈕,將設(shè)置發(fā)給下位機,下位機接受到命令后給上位機回應(yīng),上位機接受到回應(yīng)就可以操作手柄搖桿或用鍵盤對ROV進(jìn)行相應(yīng)的操作。下圖為儀表設(shè)置:word文檔 可自由復(fù)制編輯儀表設(shè)置放大圖:(3)串口數(shù)據(jù)的接受privatevoidDoOutPort(byte[]bytes){doubledblVIN=0.0;stringSensor=Encoding.Default.GetString(bytes,0,bytes.Length);//LogDoOutPort(Sensor);string[]SensorLine=Sensor.Split('\r','\n');for(inti=0;i<SensorLine.Length;i++){string[]SensorData=SensorLine[i].Split(',');if(SensorData[0]=="$SYS"){tryword文檔 可自由復(fù)制編輯{axiAnalogDisplayTemperatureTab.Value=Convert.ToDouble(SensorData[4]);axiThermometerTemperatureTab.Position=Convert.ToDouble(SensorData[4]);//CompassaxiCompassSensor.Direction=Convert.ToDouble(SensorData[1]);//PressuredblVIN=Convert.ToDouble(SensorData[5]);axiAnalogDisplayPressure.Value=dblVIN;axiAnalogDisplayPressureTab.Value=dblVIN;axiLinearGaugePressureTab.Position=dblVIN;//俯仰角axiAnalogDisplayPitch.Value =Convert.ToDouble(SensorData[2]) -mdblOppositeClinoValue;//翻滾角axiAnalogDisplayRoll.Value=Convert.ToDouble(SensorData[3])-mdblRollValue;attitudeIndicatorInstrumentControl1.SetAttitudeIndicatorParameters(axiAnalogDisplayPitch.Value,axiAnalogDisplayRoll.Value);if(mboolAutoPipeCPTDFlag==true){lblCPA.Text="A";lblTDA.Text="A";}else{lblCPA.Text="M";lblTDA.Text="M";}word文檔 可自由復(fù)制編輯//電位值axiAnalogDisplayCP.Value=Convert.ToDouble(SensorData[6]);//深度axiAnalogDisplayDepth.Value=Convert.ToDouble(SensorData[8]);axiAnalogDisplayMage.Value=Convert.ToDouble(SensorData[9]);axiAnalogDisplayDenfit.Value=Convert.ToDouble(SensorData[10]);//GPSaxiAnalogDisplayCPTD.Value=Convert.ToDouble(SensorData[14]);axiAnalogDisplayAccelerationX.Value=Convert.ToDouble(SensorData[16]);mdblAccelerationX=Convert.ToDouble(SensorData[16]);if(SensorData[7]=="ThrusterOn"){ultraToolbarsManager1.Ribbon.Tabs[2].Groups[0].Tools["StateButtonThruster"].SharedProps.Caption=" 關(guān)閉推進(jìn)器";mblnThrusterSwitchOn=true;lblThrusterInfo.Text=" 開";lblThrusterInfo.BackColor=System.Drawing.Color.Red;}elseif(SensorData[7]=="ThrusterOff"){ultraToolbarsManager1.Ribbon.Tabs[2].Groups[0].Tools["StateButtonThruster"].SharedProps.Caption=" 開啟推進(jìn)器";mblnThrusterSwitchOn=false;lblThrusterInfo.Text=" 關(guān)";lblThrusterInfo.BackColor=System.Drawing.Color.Silver;}}catch{};}}}word文檔 可自由復(fù)制編輯從下位機接受到的數(shù)據(jù)經(jīng)過處理首先顯示在主窗體的左半框中,如下圖:然后采集此處顯示的個種數(shù)據(jù)繪制成時時曲線圖放在主窗體的右半部分和下半部分。下半部分的是電位和電位梯度的雙縱坐標(biāo)曲線圖。而右半部分其中的左邊4個縮略圖分別是方位角曲線圖、翻滾角曲線圖、俯仰角曲線圖、加速度曲線圖,右邊最上面是視頻顯示,其次是管道深度曲線圖和水深曲線圖。點擊縮略圖會在中間的顯示相應(yīng)的大圖,這樣有利于用戶更清晰的查看各種信息的變化。如下圖:①中間的大圖是方位角曲線圖:word文檔 可自由復(fù)制編輯②中間的大圖是俯仰角曲線圖:(4)數(shù)據(jù)處理privatevoidSerialDoOutPort(byte[]bytes)// 串口數(shù)據(jù)處理{if(bytes.Length==0)return;stringGPS=Encoding.Default.GetString(bytes,0,bytes.Length);word文檔 可自由復(fù)制編輯string[]GPSLine=GPS.Split('\r','\n');if(GPSLine.Length==0)return;try{for(inti=0;i<GPSLine.Length;i++){string[]GPSData=(GPSLine[i].Split(','));if(GPSData.Length<10)continue;else{switch(GPSData[0]){case"$GPRMC":break;case"$GPGGA":try{axiAnalogDisplayGPSX.Value=Convert.ToDouble(Convert.ToDouble(GPSData[4]).ToString("f5"));axiAnalogDisplayGPSY.Value=Convert.ToDouble(Convert.ToDouble(GPSData[2]).ToString("f5"));axiAnalogDisplayHeight.Value=Convert.ToDouble(Convert.ToDouble(GPSData[9]).ToString("f1"));}catch(FormatExceptionfex){return;}word文檔 可自由復(fù)制編輯break;}}}}catch{MessageBox.Show(" 上位機數(shù)據(jù)處理異常!");}}GPS數(shù)據(jù)是GPS信息采集數(shù)據(jù)不需要下位機的協(xié)助工作, 只在上位機將采集到的有用數(shù)據(jù)解析處理顯示在對應(yīng)框體就行,如下圖:(5)曲線圖的制作privatevoidtmrMainLoop_Tick(objectsender,EventArgse)//初始化曲線圖{CreateGraph(zedGraphPitch,"Pitch");CreateGraph(zedGraphControlFrontPitch,"Pitch");GraphPanemyPanePitch=zedGraphPitch.GraphPane;myPanePitch.Title.Text=" 俯仰角曲線";myPanePitch.XAxis.Title.Text=" 時間";myPanePitch.YAxis.Title.Text=" 俯仰角";myPanePitch.XAxis.Type=AxisType.Date;myPanePitch.XAxis.Scale.Format="HH:mm:ss";mintDrawPlotCounter++;if(mintDrawPlotCounter==DRAWPLOTTIME){doublex;mintDrawPlotCounter=0;word文檔 可自由復(fù)制編輯x = (double)new XDate(DateTime.Now.Year,DateTime.Now.Month, DateTime.Now.Day,DateTime.Now.HourDateTime.Now.Minute,DateTime.Now.Second);if (x >=zedGrapPressureTab.GraphPane.XAxis.Scale.Max){zedGrapPressureTab.GraphPane.CurveList[0].Clear();zedGrapPressureTab.GraphPane.XAxis.Scale.Min=(double)newXDate(DateTime.Now.Year,DateTime.Now.Month,DateTime.Now.Day,DateTime.Now.Hour,DateTime.Now.Minute,DateTime.Now.Second);zedGrapPressureTab.GraphPane.XAxis.Scale.Max=(double)newXDate(DateTime.Now.Year,DateTime.Now.Month,DateTime.Now.Day,DateTime.Now.Hour,DateTime.Now.Minute+5,DateTime.Now.Second);zedGraphPitch.GraphPane.CurveList[0].AddPoint(x,axiAnalogDisplayPitch.Value);zedGraphPitch.AxisChange();zedGraphPitch.Refresh();}}privatevoidCreateGraph(ZedGraphControlzgc,string_para)// 畫曲線圖{GraphPanemyPane=zgc.GraphPane;LineItemmyCurve=null;//Randomran=newRandom();PointPairListlist=newPointPairList();PointPairListlist1=newPointPairList();PointPairListlist2=newPointPairList();doublex,y;switch(_para)word文檔 可自由復(fù)制編輯{case"Pitch":myPane.Title.Text="俯仰角監(jiān)控曲線圖";myPane.XAxis.Title.Text="時間";myPane.XAxis.Type=ZedGraph.AxisType.DateAsOrdinal;myPane.YAxis.Title.Text=" 俯仰角";break;}for(inti=0;i<=100;i++){x=(double)newXDate(DateTime.Now.AddSeconds(-(100-i)));y=0.0;//ran.NextDouble();list.Add(x,y);list1.Add(x,y);list2.Add(x,y);}}switch(_para){case"Pitch":myCurve=zgc.GraphPane.AddCurve("Pitch",list,Color.Red,SymbolType.None);break;}//自動更新曲線zedGraphControlFrontPitch.GraphPane.XAxis.Scale.MaxAuto=true;zedGraphControlFrontPitch.GraphPane.XAxis.Scale.MinAuto=true;zedGraphControlFrontPitch.GraphPane.XAxis.Scale.MajorStepAuto=true;zedGraphControlFrontPitch.GraphPane.XAxis.Scale.MinorStepAuto=true;zedGraphControlFrontPitch.GraphPane.XAxis.CrossAuto=true;word文檔 可自由復(fù)制編輯zedGraphControlFrontPitch.GraphPane.XAxis.Scale.MagAuto=true;zedGraphControlFrontPitch.GraphPane.XAxis.Scale.FormatAuto=true;zedGraphControlFrontPitch.GraphPane.YAxis.Scale.MaxAuto=true;zedGraphControlFrontPitch.GraphPane.YAxis.Scale.MinAuto=true;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 老年糖尿病患者多重用藥的真實世界研究
- 真空冶煉工班組建設(shè)考核試卷含答案
- 我國上市公司現(xiàn)金持有量決定因素的實證剖析:理論、模型與策略
- 我國上市公司控股股東掏空行為剖析與治理路徑探究
- 水族造景工誠信模擬考核試卷含答案
- 老年糖尿病β細(xì)胞自噬特點與個體化治療策略
- 碳排放管理員創(chuàng)新應(yīng)用評優(yōu)考核試卷含答案
- 出版物發(fā)行員變革管理考核試卷含答案
- 粗鎢酸鈉溶液制備工操作強化考核試卷含答案
- 2026內(nèi)蒙古鄂爾多斯市城投商業(yè)運營管理有限公司招聘46人備考題庫及參考答案詳解1套
- 2019-2020學(xué)年貴州省貴陽市八年級下學(xué)期期末考試物理試卷及答案解析
- 培訓(xùn)機構(gòu)轉(zhuǎn)課協(xié)議
- 河道治理、拓寬工程 投標(biāo)方案(技術(shù)方案)
- 創(chuàng)客教室建設(shè)方案
- 政治審查表(模板)
- (完整版)南京市房屋租賃合同
- 《最奇妙的蛋》完整版
- SEMI S1-1107原版完整文檔
- 內(nèi)蒙古衛(wèi)生健康委員會綜合保障中心公開招聘8人模擬預(yù)測(共1000題)筆試備考題庫及答案解析
- 2023年中級財務(wù)會計各章作業(yè)練習(xí)題
- 金屬罐三片罐成型方法與罐型
評論
0/150
提交評論