專利名稱::一種智能農(nóng)機載高光譜采集方法
技術(shù)領(lǐng)域:
:本發(fā)明基于一種的智能農(nóng)機載高光譜采集方法,屬于基于GPS的高密度獲取農(nóng)田信息的技術(shù)方法,專用于精確農(nóng)業(yè)生產(chǎn)技術(shù)的動態(tài)監(jiān)測。二、技術(shù)背景“精確農(nóng)業(yè)”是近年來國際上農(nóng)業(yè)科學(xué)研究的熱點領(lǐng)域,它是現(xiàn)有農(nóng)業(yè)生產(chǎn)措施與現(xiàn)代高新技術(shù)的有機結(jié)合,核心是地理信息系統(tǒng)、全球衛(wèi)星定位系統(tǒng)、遙感和計算機自動控制系統(tǒng)。精確農(nóng)業(yè)就是通過地理信息系統(tǒng)、全球衛(wèi)星定位系統(tǒng)、遙感技術(shù)等自動化控制技術(shù)的應(yīng)用,按照田間每一操作單元的具體條件,精細準確地調(diào)整土壤和作物的各項管理措施,最大限度地優(yōu)化使用各項農(nóng)業(yè)投入,調(diào)動土壤生產(chǎn)力,以最少的或最節(jié)省的投入達到同等收入或更高的收入,改善環(huán)境,高效地利用各類農(nóng)業(yè)資源,取得良好的經(jīng)濟效益和環(huán)境效益。精確農(nóng)業(yè)需要盡可能高密度的、全面的農(nóng)田信息作為依據(jù)。目前,遙感以其獨特的信息獲取優(yōu)勢正逐漸成為農(nóng)田信息獲取的主要手段。用遙感獲取土壤和植物參數(shù)已經(jīng)比較普遍,遙感數(shù)據(jù)是屬于面數(shù)據(jù),可覆蓋整個農(nóng)田,不象常規(guī)的采樣分析手段所獲取的只是點數(shù)據(jù)。高光譜遙感是遙感發(fā)展的一個重要趨勢,高光譜遙感以其高光譜分辨率特性所攜帶的豐富光譜信息為遙感應(yīng)用帶來了強大的活力。國內(nèi)外許多學(xué)者已經(jīng)涉足高光譜遙感在植被生物物理信息和生物化學(xué)信息提取方面的研究。在衛(wèi)星和航空遙感技術(shù)進一步發(fā)展和成熟前,高光譜遙感正在被發(fā)展為高密度獲取農(nóng)田信息的技術(shù)手段。隨著高光譜遙感應(yīng)用的不斷深入,在“動態(tài)監(jiān)測”越來越成為人們共識的情況下,發(fā)展高效率的快速遙感技術(shù)就成為必須考慮的問題。為此,利用高光譜儀光譜識別能力很強的同時,快速實現(xiàn)光譜數(shù)據(jù)的同步“定位”,賦予三維坐標,形成“定性”、“定位”一體化快速遙感技術(shù)迫在眉睫。基于GPS的智能農(nóng)機載高光譜采集系統(tǒng)正是在這種背景下開展研究的。三、發(fā)明方案技術(shù)問題本發(fā)明的目的在于提供一種基于GPS的智能農(nóng)機載高光譜采集方法,能夠?qū)崟r獲取具有空間屬性的作物冠層光譜特征,同時在已知農(nóng)田信息的各圖層上定位,并獲取對應(yīng)點的屬性,如土壤養(yǎng)分信息等,計算出光譜植被指數(shù)NDVI等作物生長狀況一些重要指標,獲得一一對應(yīng)的地理定位信息、土壤屬性數(shù)據(jù)和光譜數(shù)據(jù),為實現(xiàn)精準施肥等提供可靠的作物參數(shù)。技術(shù)方案本發(fā)明一種智能農(nóng)機載高光譜采集方法,包括用GPS確定農(nóng)機的位置,用傳感器實時獲得作物和農(nóng)田各種信息,用微型計算機記錄、分析信息,發(fā)送相應(yīng)的控制指令,從而驅(qū)動農(nóng)機產(chǎn)生相應(yīng)的動作,其特征在于1)采用差分GPS25-lvsOEM板定位,差分GPS25-lvsOEM板通過RS-232口或RS-232&USB轉(zhuǎn)換器與微型計算機或筆記本電腦相連,在采集土壤樣品時,利用GPS接收機在計算機柵格地圖內(nèi)定位,記錄采集點的準確位置,樣品采集完后,在實驗室對樣品進行分析化驗,得到相應(yīng)的土壤屬性數(shù)據(jù),并添加到該柵格圖層中;2)利用拖拉機懸掛光譜儀,采用MSR16R型便攜式光譜儀實現(xiàn)作物冠層高光譜實時監(jiān)測,光譜儀通過RS-232或RS-232&USB轉(zhuǎn)換器與微型計算機或筆記本電腦相連,利用VisualBasic6.0和pccomm.dll動態(tài)鏈接庫,設(shè)計串行通訊程序,計算機從光譜儀中讀取采集到的作物冠層目標光譜多波段信息,同時從GPS中讀取該光譜數(shù)據(jù)的空間時間信息,并完成相關(guān)數(shù)據(jù)的解析,軟件設(shè)計中采用事件觸發(fā)方式監(jiān)視計算機串口緩沖區(qū),當(dāng)緩沖區(qū)有數(shù)據(jù)時,會自動觸發(fā)該事件讀取數(shù)據(jù),接收光譜儀和GPS傳來的實時數(shù)據(jù),實時傳送設(shè)備控制指令。MSR16R便攜式光譜儀的原始數(shù)據(jù)按照CropScanINC提供的算式進行轉(zhuǎn)換獲得作物冠頂光譜反射率R;3)利用MapObjectsOCX控件實現(xiàn)農(nóng)田地理信息系統(tǒng)GIS管理模塊用SQL語句查找相應(yīng)的地圖要素,將DGPS接受的位置信息投影到平面坐標系統(tǒng)上,或圖層在不同投影和坐標系之間相互轉(zhuǎn)換;利用MapObjects的Trackinglayer動態(tài)顯示農(nóng)機具運動軌跡和各圖層上與定位點相對應(yīng)的點的屬性數(shù)據(jù);利用Maplay.AddRelate自動完成具有定位信息的光譜數(shù)據(jù)表與圖層的關(guān)聯(lián);利用“GPS電子地圖坐標轉(zhuǎn)換算法,把動點坐標從WGS-84坐標系轉(zhuǎn)換到北京1954_GK坐標下;利用MapObjects把圖層原始坐標系轉(zhuǎn)換為WGS-84坐標系,在外部數(shù)據(jù)庫與圖層關(guān)聯(lián)中,首先將GPS傳遞的定位信息在圖層中定位,并讀取FeatureId值,并把FeatureId值、轉(zhuǎn)換后的光譜數(shù)據(jù)和定位信息存儲到數(shù)據(jù)庫中,獲得一一對應(yīng)的地理定位信息、土壤屬性數(shù)據(jù)和光譜數(shù)據(jù)。有益效果本發(fā)明是精確農(nóng)業(yè)信息采集技術(shù)集成研究成果。目前,計算機與單獨高光譜儀或與單獨GPS相連比較普遍,但無法在廠商提供的通訊程序基礎(chǔ)上擴展自己的應(yīng)用程序,為了滿足精準農(nóng)業(yè)對光譜數(shù)據(jù)的特殊要求(具有地理屬性的光譜數(shù)據(jù))必須把這兩個設(shè)備同時和計算機相連,開發(fā)可以控制采樣頻率和串行傳輸速率等參數(shù)的通訊程序,以適應(yīng)光譜儀和不同的GPS,同時在此基礎(chǔ)上,開發(fā)基于GPS,GIS的農(nóng)機載高光譜采集系統(tǒng)軟件平臺。利用VisualBasic和MapObjects對GPS、GIS和MSR16R型便攜式光譜儀進行有機集成,具有以下特點(1)系統(tǒng)通過集成GPS,能為采集到的光譜數(shù)據(jù)提供高精度的空間位置屬性,并錄入數(shù)據(jù)庫,實現(xiàn)光譜數(shù)據(jù)采集、定位、存儲一體化;(2)通過集成GIS,實現(xiàn)了具有空間屬性的光譜數(shù)據(jù)可視化管理和分析處理,同時能實時地顯示動點軌跡;(3)實現(xiàn)了采樣田塊的柵格化;(4)可實時顯示各圖層對應(yīng)點地理屬性和通過光譜數(shù)據(jù)計算作物生理參數(shù)等功能。本發(fā)明可為今后實現(xiàn)精準施肥,特別是氮肥的追施,提供及時、可靠的信息。四、說明書附1硬件系統(tǒng)結(jié)構(gòu)2軟件系統(tǒng)結(jié)構(gòu)五具體實施方式(一)系統(tǒng)硬件結(jié)構(gòu)在典型的體現(xiàn)精細農(nóng)業(yè)思想的自動化農(nóng)機硬件系統(tǒng)中,一般體現(xiàn)實時性,用GPS確定農(nóng)機的位置,用傳感器實時獲得作物和農(nóng)田各種信息,用微型計算機記錄、分析位置信息、相應(yīng)傳感器的信息和其它已知的信息,根據(jù)分析結(jié)果,發(fā)送相應(yīng)的控制指令,從而驅(qū)動農(nóng)機產(chǎn)生相應(yīng)的動作。這就需要GPS、RS、GIS與ES緊密結(jié)合,并使整個系統(tǒng)具有移動性、實時性。(見圖1)1拖拉機懸掛機構(gòu)該系統(tǒng)利用拖拉機懸掛農(nóng)機具的液壓懸掛升降機構(gòu),利用三節(jié)套管實現(xiàn)伸縮功能,長度為8米,利用液壓千斤頂實現(xiàn)升降功能,這樣不僅可使光譜儀隨農(nóng)機具移動,同時實現(xiàn)去除邊際效應(yīng)的作物監(jiān)測。為了保證光譜儀受光面與地面平行,我們在光譜儀懸掛機構(gòu)中采用了萬向頭、十字配重等平衡方式,使光譜儀在失去水平后能迅速回位,且可調(diào)節(jié)萬向頭的阻尼和限位彈片,減少大幅度擺動。2DGPS系統(tǒng)GPS技術(shù)為土壤類型、土壤肥力特性、水分、作物生長發(fā)育狀況、病蟲草害及農(nóng)作物產(chǎn)量等田間信息采樣和決策方案的田間實施提供準確的空間位置信息。在該系統(tǒng)中,全球定位系統(tǒng)采用廣泛用于精確農(nóng)業(yè)的GARMIN公司生產(chǎn)的差分GPS25-lvsOEM板,性能穩(wěn)定,運行可靠;具有快速捕獲、快速重捕和極強的抗遮蔽能力,以及優(yōu)越的EMC、EMI電磁兼容能力,能夠很好的適應(yīng)復(fù)雜多變的應(yīng)用環(huán)境。其作用主要有三點(1)智能化農(nóng)業(yè)機械作業(yè)的動態(tài)定位。(2)農(nóng)業(yè)信息采集樣點定位。即在農(nóng)田設(shè)置的數(shù)據(jù)采集點、人工數(shù)據(jù)采集點定位均需GPS定位數(shù)據(jù),以便形成信息層進入GIS。(3)遙感信息GPS定位。即對遙感信息中的特征點用GPS采集定位數(shù)據(jù),以便于與GIS配準。3RS系統(tǒng)地面遙感系統(tǒng)采用美國CROPSCINC生產(chǎn)的MSR16R型便攜式光譜儀實現(xiàn)作物冠層高光譜實時監(jiān)測。該儀器視場角為31度。該儀器的光譜分辨率已經(jīng)達到高光譜的光譜分辨率范圍,且基本覆蓋了大部分作物生物物理信息和生物化學(xué)信息敏感的波段(波段特征見表1)。其主要作用是監(jiān)測作物個體生長狀況、作物冠頂光譜,從而了解作物的養(yǎng)分狀況等生理生化參數(shù)。表1CropscanMSR16R波段的中心波長和帶寬波段Band460510560610660680710760中心波長(nm)461.3510.5561.6609.9659.1680.9711.8759.5帶寬(nm)8.38.18.510.010.811.39.29.8波段Band81087095011001220148015001650中心波長(nm)810.1871.6951.01101.91222.81481.11500.91669.0帶寬(nm)10.712.511.016.311.513.513.2195.04智能控制系統(tǒng)它是以微型計算機為核心,利用計算機串行通訊技術(shù)實時傳送設(shè)備控制指令,接收光譜儀和GPS傳來的實時數(shù)據(jù)等。系統(tǒng)軟件設(shè)計精細農(nóng)業(yè)的關(guān)鍵在于變量作業(yè),而變量作業(yè)需要有GPS、RS與GIS緊密結(jié)合。適用于農(nóng)業(yè)機械的GIS應(yīng)當(dāng)在具有通用的空間分析功能,同時還必須與數(shù)據(jù)采集系統(tǒng)、決策支持系統(tǒng)相結(jié)合,從而實現(xiàn)各硬件設(shè)備的有機集成。目前通用的GIS系統(tǒng),還不能同時滿足這些要求。因此,目前急需研究適用于精細農(nóng)業(yè)的GPS、GIS和RS集成技術(shù)和系統(tǒng)。我們采用集成二次開發(fā),以面向?qū)ο蟮目梢暬_發(fā)工具VisualBasic6.0為開發(fā)平臺,利用GIS工具軟件MapObjects2.2實現(xiàn)GIS基本功能。既可以充分利用可視化軟件開發(fā)工具的高效方便的編程功能,實現(xiàn)各種專用的、復(fù)雜的分析方法,并充分利用GIS工具軟件完備的空間數(shù)據(jù)可視化分析處理功能,大大提高應(yīng)用系統(tǒng)的開發(fā)效率,使用面向?qū)ο蟮目梢暬浖_發(fā)出來的應(yīng)用程序具有良好的外觀、完善的功能、較好的可靠性、便于維護等優(yōu)點。該軟件系統(tǒng)包括5個模塊,如圖2所示。4.1串行通訊模塊硬件系統(tǒng)集成了MSR16R型便攜式光譜儀和GPS25-lvs差分GPS。這兩個設(shè)備通過兩個RS-232(或RS-232&USB轉(zhuǎn)換器)與微型計算機(筆記本電腦)相連,計算機從光譜儀中讀取采集到的目標(作物冠層)光譜多波段信息,同時從GPS中讀取該光譜數(shù)據(jù)的空間時間信息,并完成相關(guān)數(shù)據(jù)的解析。為了能夠準確及時處理外設(shè)傳送到計算機串行端口的數(shù)據(jù),我們利用VisualBasic6.0和pccomm.dll動態(tài)鏈接庫,并采用事件觸發(fā)方式監(jiān)視計算機串口緩沖區(qū),當(dāng)緩沖區(qū)有數(shù)據(jù)時,會自動觸發(fā)該事件讀取數(shù)據(jù)。一般的GPS接收機都提供了向計算機串口發(fā)送NMEA格式數(shù)據(jù)的功能。NMEA格式的數(shù)據(jù)是一系列變長的字符串,每一字符串以‘$’開頭,以O(shè)DOA結(jié)尾,字符串內(nèi)以‘,’分隔各個不同的數(shù)據(jù)項。為了同步GPS和光譜儀,在起動光譜儀時,利用GPS的‘$’字符啟動光譜儀的A/D轉(zhuǎn)換,這樣有效地解決了GPS和光譜反射儀的同步問題。該模塊有兩種工作模式(1)手動模式,按SPACE鍵接收一次數(shù)據(jù)。(2)自動模式,每隔3秒接收一次數(shù)據(jù)。4.2MSR16R光譜數(shù)據(jù)轉(zhuǎn)換模塊MSR16R便攜式光譜儀的原始數(shù)據(jù)是各通道光敏元件的電壓值而不是作物冠頂光譜反射率,所以必須按照下面的算式進行轉(zhuǎn)換,以滿足決策模塊的要求。(1)計算傳感器在實際溫度時的暗電平。(2)利用暗電平校正(3)利用溫度校正(4)利用校準系數(shù)校正(5)利用太陽角的余弦校正UpmVreading=UpmVreading*COSINECOR(SUNANGLE)………………(5)(6)計算太陽角SUNANGLE=90-ATN([SIN(LA*RA)*SIN(DY*RA)+COS(LA*RA)*COS(DY*RA)*COS(HA*RA)]/[SQR(1-Z^2)*57.29578]其中GTGreenwichtimeHHHourMMMinuteGMTDIFFdifferenceinhoursfromyourtimezonetoGreenwichtimeLOLongitudeLALatitudeJDJulianDayRA0.745329E-02(7)計算光譜反射率PERCENTREFL=100*DnmVreading/UpmVreading………………(7)(8)利用白標準校準因素校正PERCENTREFL=PERCENTREFL*2PTCF………………(8)上述公式由CropScanINC提供。4.3農(nóng)田GIS管理模塊地理信息系統(tǒng)(GIS)在精確農(nóng)業(yè)技術(shù)體系中的地位是舉足輕重的,它出現(xiàn)在從規(guī)劃、田間信息采集、信息處理與管理、信息分析,到田間決策方案實施的整個過程,這要歸因于精確農(nóng)業(yè)實施對空間信息的依賴性。農(nóng)田信息具有多源性,具體表現(xiàn)在存儲格式多樣性、多尺度性、獲取方式多樣性,另外還包括系統(tǒng)或數(shù)據(jù)庫數(shù)據(jù)組織的復(fù)雜性。通過GIS平臺,融合多源數(shù)據(jù)的基礎(chǔ)上建立農(nóng)田管理系統(tǒng)實現(xiàn)對多源、多時相農(nóng)田信息的有序管理和分析,這是精確農(nóng)業(yè)實施的基礎(chǔ),其作用表現(xiàn)在數(shù)據(jù)組織和集成管理、空間分析查詢、空間數(shù)據(jù)更新與綜合處理、可視化分析與表達。GIS為田間信息采集提供基礎(chǔ)信息,也為田間變量實施決策分析提供信息源。利用MapObjectsOCX控件實現(xiàn)(1)多圖層顯示;(2)對圖層進行放大、縮小、移動等操作;(3)計算選定的矢量數(shù)據(jù)的一些統(tǒng)計值;(4)在圖層上繪制點、線、橢圓、矩形、多邊形等圖形;(5)顯示和更新選定的矢量數(shù)據(jù)的屬性值;(6)用SQL語句查找相應(yīng)的地圖要素;(7)坐標投影變換,將DGPS接受的位置信息投影到平面坐標系統(tǒng)上,或圖層在不同投影和坐標系之間相互轉(zhuǎn)換;(8)利用MapObjects的Trackinglayer動態(tài)顯示農(nóng)機具運動軌跡和各圖層上與定位點相對應(yīng)的點的屬性數(shù)據(jù);(9)利用Maplay.AddRelate自動完成具有定位信息的光譜數(shù)據(jù)表與圖層的關(guān)聯(lián)。在動點定位導(dǎo)航中,由于從GPS得到的位置信息是WGS-84坐標下的經(jīng)、緯度,我國的電子地圖常用北京1954坐標,采用高斯-克呂格投影。因此,在動點定位導(dǎo)航前必須進行坐標投影變換。轉(zhuǎn)換方法(1)利用“GPS電子地圖坐標轉(zhuǎn)換算法與實現(xiàn)”一文中的簡化算法,把動點坐標從WGS-84坐標系轉(zhuǎn)換到北京1954_GK坐標下。(2)利用MapObjects把圖層原始坐標系轉(zhuǎn)換為WGS-84坐標系。在外部數(shù)據(jù)庫與圖層關(guān)聯(lián)中,我們首先將GPS傳遞的定位信息在圖層中定位,并讀取FeatureId值,并把FeatureId值、轉(zhuǎn)換后的光譜數(shù)據(jù)和定位信息存儲到數(shù)據(jù)庫中,完成作業(yè)后,系統(tǒng)依據(jù)ID值完成圖層與數(shù)據(jù)庫的關(guān)聯(lián)。4.4農(nóng)田采樣?xùn)鸥窕K目前,一般農(nóng)田都不具備大比例尺圖,所以通過數(shù)字化來獲得農(nóng)田基礎(chǔ)信息地圖的方法不太適用;對于小面積區(qū)域利用GPS采點測繪農(nóng)田基本信息圖層則是一種相對成本較低、速度較快的方法。在采樣前,可以利用GPS獲得田塊邊界的點,然后在圖層上生成多邊形,利用WGS_1984_UTM_Zone_50N[32650](以江蘇儀征為例),把多邊形投影到WGS_1984平面直角坐標系上,生成采樣?xùn)鸥瘢⒔o每個多邊形編號,依照行列順序用MapObjects提供的Intersect語句把每個小矩形與生成的多邊形進行相交運算,并計算每個地塊周長、面積,當(dāng)面積小于柵格面積的四分之一時與同行相鄰的多邊形合并。在采集土壤樣品時,利用GPS接收機在柵格內(nèi)進行取樣,記錄采集點的準確位置,樣品采集完后,根據(jù)具體要求可以在實驗室對樣品進行分析化驗,得到相應(yīng)的土壤屬性數(shù)據(jù),并添加到該圖層中,實現(xiàn)采樣點空間定位、屬性記錄和導(dǎo)航實施過程有機結(jié)合。4.5信息處理模塊光譜反射儀所測得光譜(波譜)是眾多地物吸收光譜和散射光譜的混合光譜,一般是以反射率表達。為了正確地解譯遙感數(shù)據(jù),從中提取目標物的特征信息,并且減小背景的影響,人們構(gòu)造了多種植被指數(shù),也使用微分光譜技術(shù)。4.5.1微分光譜研究表明植物的反射光譜曲線具有顯著的特征,同一種植物的不同生長發(fā)育階段以及施肥條件的不同都會引起植物反射光譜曲線的變化。因此,可以利用植被光譜的這一特征,使用野外光譜儀在一定條件下測定它們對各種波段的一階微分反射光譜,來研究植物的生長狀況。一階微分光譜R′(λ)=R(λi+1)-R(λi-1)λi+1-λi-1]]>其中R為光譜反射率4.5.2歸一化植指數(shù)NDVINDVI與植株中的氮含量存在高度相關(guān)性,在分蘗盛期、孕穗期和抽穗期,通過光譜測定,用NDVI推算植株的氮含量效果較好,這為將來直接利用光譜來控制作物氮肥追施發(fā)揮重要作用。光譜植被指數(shù)NDVI=NIR-RNIR+R]]>其中R,NIR分別表示所取的紅光波段和近紅外光波段的光譜反射率。通過計算機運行操作獲得具有地理屬性的土壤養(yǎng)分數(shù)據(jù)N、P、K、微量元素等和具有地理屬性的光譜數(shù)據(jù)光譜反射率R、一階微分光譜、歸一化植指數(shù)NDVI等,從而指導(dǎo)施肥、播種、灌溉等變量機械作業(yè)。計算機與GPS和光譜儀串行通訊部分源程序<prelisting-type="program-listing"><![CDATA[Form1Option3(0).Value=FalseOption3(1).Value=FalsePrivateSubCheck1_Click()Command3.Visible=FalseIfCheck1.Value=1AndOption2(0).Value=TrueThensf=0dwxx.Visible=Truewm=0Elsepn=0dwxx.Visible=Falsecommand2.Visible=FalseEndIfEndSubOption1(0).Enabled=TrueOption1(1).Enabled=True″″″″″″″″″″″″″″″Option1(2).Enabled=True′結(jié)束按鈕Option2(0).Enabled=True′以sio_close(2)將COM2關(guān)閉Option2(1).Enabled=True′再使用End執(zhí)行結(jié)束系統(tǒng)Option3(0).Enabled=True″″″″″″″″″″″″″″″Option3(1).Enabled=TruePrivateSubCommand2_Click()UpDown1.Enabled=TrueTimer1.Enabled=FalseIfsm=2ThenTimer2.Enabled=FalsegbEndIfsio_close(pn)EndSubCommand4.Visible=FalseCommand1.Visible=TrueOption1(0).Value=FalsePrivateSubCommand3_Click()Option1(1).Value=FalseDimret%Option1(2).Value=Falseret=sio_open(pn)Option2(0).Value=FalseIfret<>SIO_OKThenOption2(1).Value=FalseMsgBox″打開通信端口錯誤″,vbCritical+vbOKOnly,″系統(tǒng)警告″UpDown1.Enabled=Falsesio_close(pn)EndSubExitSubPrivateSubCommand4_Click()(接收gps,和光譜儀)EndIfIfbuf(0)36ThenExitSubIfPortSet()=FalseThenFori=0To128sio_close(pn)txtReceive.Text=txtReceive.Text+MsgBox″通信端口參數(shù)設(shè)置發(fā)生錯誤″,Chr$(buf(i))vbCritical+vbOKOnly,″系統(tǒng)警告″NextExitSuba=j(luò)wd()EndIfText2.Text=j(luò)dret=sio_DTR(pn,0)Text3.Text=wdret=sio_RTS(pn,0)Text4.Text=ztIfwm=1ThenTemer2.Enabled=TrueIfsm=2ThenIfwm=2ThenTimer1.Enabled=Truedwxx=dwxx.TextCommand1.Visible=Falsetjjlcommand2.Visible=TrueEndIfIfwm=1ThenEndSubCommand4.Visible=TrueEndIf″″″″″″″″″″″″″″″Ifwm=2Then′窗體的加載事件Command4.Visible=False′執(zhí)行打開、設(shè)置等工作EndIf′并將DTR、RTS電位降低Command3.Visible=False″″″″″″″″″″″″″″″Option1(0).Enabled=FalseSubForm_Load()Option1(1).Enabled=Falsesf=1Option1(2).Enabled=FalseEndSubOption2(0).Enabled=FalseOption2(1).Enabled=False″″″″″″″″″″″″″″″Option3(0).Enabled=False′參數(shù)設(shè)置子程序Option3(1).Enabled=False′設(shè)置流量、速度、Parity、DataBut等項目″″″″″″″″″″″″″″″′接收按鈕PrivateFunctionPortSet()AsBoolean′以sio_Read函數(shù)讀取傳入的數(shù)據(jù)′參數(shù)設(shè)置子程序′再以返回值決定返回的字節(jié)數(shù),將其顯示到窗體上DimPortAsLong″″″″″″″″″″″″″″″DimmodeAsLongPrivateSubCommand1_Click()DimHwAsLong,SwAsLongEndDimretAsLongEndSubDimtoutAsLongPort=pn mode=P_NONEOrBIT_8OrSTOP_1PrivateSubOption1_Click(IndexAsInteger) Hw=0′沒有硬件流量控制IfOption1(0).ValueThenpn=1 Sw=0′沒有軟件流量控制IfOption1(1).ValueThenpn=2 PortSet=FalseIfOption1(2).ValueThenpn=3 ret=sio_ioctl(Port,B4800,mode)′設(shè)置Ifpn0Andwm<>0Andsm<>0Then Ifret<>SIO_OKThenCommand3.Visible=True MsgBox″設(shè)置時發(fā)生錯誤″,vbCritical+EndSubvbOKOnly,″系統(tǒng)警告″ ExitFunction EndIfPrivateSubOption2_Click(IndexAsInteger) ret=sio_flowctrl(Port,HwOrSw)IfOption2(0).ValueThen′流量控制wm=1 Ifret<>SIO_OKThen′Command4.Visible=True MsgBox″流量設(shè)置時發(fā)生錯誤″,vbCritical+EndIfvbOKOnly,″系統(tǒng)警告″IfOption2(1).ValueThen ExitFunctionwm=2 EndIf′Command4.Visible=False PortSet=TrueEndIfEndFunctionIfpn<>0Andwm<>0Andsm<>0Then Command3.Visible=True″″″″″″″″″″″″″″″IfCheck1.Value=1AndOption2(0).Value=TrueThendwxx.Visible=Truea=j(luò)wd()ElseText2.Text=j(luò)ddwxx.Visible=FalseText3.Text=wdEndIfText4.Text=ztEndSubIfzt=″0″Then Forj=1To10 BeepPrivateSubOption3_Click(IndexAsInteger)NextIfOption3(0).ValueThensm=1EndIfIfOption3(1).ValueThensm=2cs=0Ifpn<>0Andwm<>0Andsm<>0ThenIfsm=2ThenCommand3.Visible=Truedwxx=dwxx.TextIfsm=2AndForm2.Visible=FalseThenForm2.ShowtjjlIfsm=1AndForm2.Visible=TrueThenUnloadForm2EndIfEndSubElse ExitSub EndIfPrivateSubTimer1_Timer()Fori=1To130 rlen=sio_read(pn,buf(0),1)′EndIf Ifbuf(0)=36ThenExitForEndSub Next Fori=1To128 rlen=sio_read(pn,buf(i),1)PrivateSubTimer2_Timer() NextiFori=1To130 Ifcs=sfThenrlen=sio_read(pn,buf(0),1) Fori=0To128Ifbuf(0)=36ThenExitFor txtReceive.Text=txtReceive.Text+NextChr$(buf(i))Fori=1To128 Nextrlen=sio_read(ph,buf(i),1)NextiPrivateSubtjjl()′向數(shù)據(jù)庫添加記錄EndSubgpsRec.AddNew gpsRec.Fields(0)=Val(jd) gpsRec.Fields(1)=Val(wd)″″″″″″″″″″″″″″″Ifdwxx=″″Thendwxx=″″′接收文本框Click事件gpsRec.Fields(2)=dwxx′使用按一下后會將接收的數(shù)據(jù)清空gpsRec.Update″″″″″″″″″″″″″″″dwxx=″″PrivateSubtxtReceive_Click()EndSubtxtReceive.Text=″″EndSub PrivateSubgb()′關(guān)閉PrivateSubUpDown1_Change()gpsRec.Closesf=UpDown1.Valuedb.CloseEndSubEndSubPrivateFunctionjwd()AsSingleForm2jdt=″″PrivateSubCommand1_Click()jd=″″dkysjkFori=0To128UnloadMejdt=j(luò)dt+Chr$(buf(i))EndSubNextq=InStr(jdt,″$GPGGA″)jd=Mid$(jdt,q+14,9)PublicSubxjsjk()′新建數(shù)據(jù)庫wd=Mid$(jdt,q+26,10)CommonDialog1.ShowOpenzt=Mid$(jdt,q+39,1)newdatabasename=CommonDialog1.FileNameEndFunctionOnErrorGoToaa Setws=DBEngine.Workspaces(0) Setdb=ws.CreateDatabase(newdatabasename,dbLangChineseSimplified,dbVersion35)sjkdkbz=1′Setdb=OpenDatabase(newdatabasename,ture,F(xiàn)alse)ddEndSubSetnewtable=db.CreateTableDef(″gps″)Setnewfield=newtable.CreateField(″經(jīng)度″,dbDouble)PrivateSubCommand2_Click()newtable.Fields.AppendnewfieldxjsjkSetnewfield=newtable.CreateField(″緯度″,dbDouble)OnErrorGoToaa1newtable.Fields.AppendnewfieldSetws=DBEngine.Workspaces(0)Setnewfield=newtable.CreateField(″地物信息″,dbText,Setdb=OpenDatabase(newdatabasename)255)SetgpsRec=db.OpenRecordset(″gps″,newtable.Fields.AppendnewfielddbOpenDynaset)db.TableDefs.Appendnewtablesjkdkbz=0sjkdkbz=0GoTodd1GoToddaa1aasjkdkbz=1sjkdkbz=1dddd1UnloadMeCloseEndSubEndSubPublicSubdkysjk()′打開已有數(shù)據(jù)庫GlobalCommonDialog1.ShowOpen′*************************************************newdatabasename=CommonDialog1.FileName***********OnErrorGoToaa′ExGlobal.bas Setws=DBEngine.Workspaces(0)′--Globalvariable&Comportrecorddefinedfor Setdb=OpenDatabase(newdatabasename)′exampleprogram. SetgpsRec=db.OpenRecordset(″gps″,′dbOpenDynaset)′ sjkdkbz=0′1999/4/2TOMModifiedGoTodd′**********************************************aa***********OptionExplicitGlobalGstrBaudTable(0To19)AsString′通信參數(shù)結(jié)構(gòu)GlobalGstrParityTable(0To4)AsStringPublicTypeCOMMDATAGlobalGstrByteSizeTable(0To3)AsString PortAsLongGlobalGstrStopBitsTable(0To1)AsString BaudRateAsInteger′以下四項如PublicSubInitTable()9600,n,8,1,以常數(shù)表示GstrBaudTable(0)=″50″ ParityAsIntegerGstrBaudTable(1)=″75″ ByteSizeAsIntegerGstrBaudTable(2)=″110″ StopBitsAsIntegerGstrBaudTable(3)=″134″ ibaudrateAsInteger′以下四項如GstrBaudTable(4)=″150″9600,n,8,1,以整數(shù)表示GstrBaudTable(5)=″300″ iparityAsIntegerGstrBaudTable(6)=″600″ ibytesizeAsIntegerGstrBaudTable(7)=″1200″ istopbitsAsIntegerGstrBaudTable(8)=″1800″ HwAsInteger′硬件流量控制GstrBaudTable(9)=″2400″ SwAsInteger′軟件流量控制GstrBaudTable(10)=″4800″ DTRAsInteger′DTR線路狀態(tài)GstrBaudTable(11)=″7200″ RTSAsInteger′RTS線路狀態(tài)GstrBaudTable(12)=″9600″EndTypeGstrBaudTable(13)=″19200″ GstrBaudTable(14)=″38400″PublicGCommDataAsCOMMDATAGstrBaudTable(15)=″57600″PublicGhFormAsFormGstrBaudTable(16)=″115200″PublicGhExitAsBooleanGstrBaudTable(17)=″230400″ GstrBaudTable(18)=″460800″GlobalGBaudTable(0To19)AsIntegerGstrBaudTable(19)=″921600″GlobalGParityTable(0To4)AsIntegerGlobalGByteSizeTable(0To3)AsIntegerGstrParityTable(0)=″None″GlobalGStopBitsTable(0To1)AsIntegerGstrParityTable(1)=″Even″ GstrParityTable(2)=″Odd″GstrParityTable(3)=″Mark″GBaudTable(19)=B921600GstrParityTable(4)=″Space″GParityTable(0)=P_NONEGstrByteSizeTable(0)=″5″GParityTable(1)=P_EVENGstrByteSizeTable(1)=″6″GParityTable(2)=P_ODDGstrByteSizeTable(2)=″7″GParityTable(3)=P_MRKGstrByteSizeTable(3)=″8″GParityTable(4)=P_SPCGstrStopBitsTable(0)=″1″GByteSizeTable(0)=BIT_5GstrStopBitsTable(1)=″2″GByteSizeTable(1)=BIT_6 GByteSizeTable(2)=BIT_7GBaudTable(0)=B50GByteSizeTable(3)=BIT_8GBaudTable(1)=B75GBaudTable(2)=B110GStopBitsTable(0)=STOP_1GBaudTable(3)=B134GStopBitsTable(1)=STOP_2GBaudTable(4)=B150EndSubGBaudTable(5)=B300GBaudTable(6)=B600PublicSubRxIrq(ByValPortAsLong)GBaudTable(7)=B1200′接收的中斷子程序GBaudTable(8)=B1800DimrlenAsLongGBaudTable(9)=B2400Dimbuf(0To511)AsByteGBaudTable(10)=B4800GBaudTable(11)=B7200DoGBaudTable(12)=B9600rlen=sio_read(GCommData.Port,buf(0),512)GBaudTable(13)=B19200Ifrlen>0ThenGBaudTable(14)=B38400CallGhForm.ShowData(GhForm.Term,GBaudTable(15)=B57600buf,rlen)GBaudTable(16)=B115200ElseGBaudTable(17)=B230400Ifrlen=0ThenGBaudTable(18)=B460800ExitDoEndIfPublicsjkdkbzAsInteger′打開數(shù)據(jù)庫標志 EndIf LoopUntilGhExitEndSubMxtool ′*********************************************Model************** ′Mxtool.basPublicpnAsInteger′端口號′--ProcessPCommLibfunctionreturnvaluePublicsfAsInteger′采樣頻率′PublicwmAsInteger′工作方式′PublicsmAsInteger′存儲方式″1999/4/2TOMModified ′*********************************************Publicrlen&.i&*************Publicbuf(0To511)AsByteOptionExplicitPublicjdtAsStringPublicjdAsStringPublicConstFORMAT_MESSAGE_FROM_SYSTEM=PublicwdtAsString&H1000PublicwdAsStringPublicConstLANG_NEUTRAL=&H0PublicztAsStringPublicConstSUBLANG_DEFAULT=&H1PubliccsAsInteger′采樣次數(shù)PublicxshAsInteger′xianshihangDeclareFunctionGetLastErrorLib″kernel32″()AsLong DeclareFunctionFormatMessageLib″kernel32″AliasGlobalwsAsWorkspace″FormatMessageA″_GlobaldbAsDatabase(ByValdwFlagsAsLong,lpSourceAsAny,ByValPublicnewdatabasenameAsStringdwMessageIdAsLong,_PublicnewtableAsTableDef,newfieldAsFieldByValdwLanguageIdAsLong,ByVallpBufferAsPublicgpsRecAsRecordsetString,_PublicdwxxAsStringByValnSizeAsLong,ArgumentsAsLong)AsLong PublicSubShowSysErr(titleAsString,syserrAsLong)DimlpMsgBufAsString*80buf=″啟動硬件流量控制時不可控制DimlangAsIntegerRTS狀態(tài)″ CaseSIO_BADPARM ′lang={MAKELANGID(LANG_NEUTRAL,buf=″參數(shù)錯誤″SUBLANG_DEFAULT)}CaseSIO_BOARDNOTSUPPORT lang=SUBLANG_DEFAULT*2^10+buf=″接口未支持此函數(shù)″LANG_NEUTRALCaseSIO_ABORT_WRITE Callbuf=″用戶中斷寫出動作″FormatMessage(FORMAT_MESSAGE_FROM_SYSTECaseSIO_WRITETIMEOUM,_buf=″輸出逾時″ 0,syserr,lang,lpMsgBuf,80,0)CaseElse CallMsgBox(lpMsgBuf,vbOKOnlyOrbuf=″不可預(yù)測的錯誤″&errcodevbExclamation,title)EndSelectEndSubCallMsgBox(buf,vbOKOnlyOr vbExclamation,title)PublicSubMxShowError(titleAsString,errcodeAsElse′系統(tǒng)錯誤的信息Long,syserrAsLong)CallShowSysErr(title,syserr)DimbufAsStringEndIf EndSub Iferrcode<>SIO_WIN32FAILThen SelectCaseerrcodePccom CaseSIO_BADPORT′********************************************* buf=″通訊端口錯誤或未打開″********** CaseSIO_OUTCONTROL′PComm.bas buf=″未支持此功能″′--PCommmoduleforVisualBasic(5.0above) CaseSIO_NODATA′ buf=″未有數(shù)據(jù)被讀取″′Description CaseSIO_OPENFAIL′WhenyouwanttodeveloponeVBapplication buf=″打開錯誤″withPComm, CaseSIO_RTS_BY_HW′youshouldaddthismoduletoyourproject.′GlobalConstBIT_6=&H1′GlobalConstBIT_7=&H2′1999/4/2TOMModifiedGlobalConstBIT_8=&H3′********************************************************GlobalConstSTOP_1=&H0′Stop′BaudRateSettingbitsdefineGlobalConstB50=&H0GlobalConstSTOP_2=&H4GlobalConstB75=&H1GlobalConstB110=&H2GlobalConstP_EVEN=&H18′ParityGlobalConstB134=&H3defineGlobalConstB150=&H4GlobalConstP_ODD=&H8GlobalConstB300=&H5GlobalConstP_SPC=&H38GlobalConstB600=&H6GlobalConstP_MRK=&H28GlobalConstB1200=&H7GlobalConstP_NONE=&H0GlobalConstB1800=&H8GlobalConstB2400=&H9′ModemControlsettingGlobalConstB4800=&HAGlobalConstC_DTR=&H1GlobalConstB7200=&HBGlobalConstC_RTS=&H2GlobalConstB9600=&HCGlobalConstB19200=&HD′ModemLineStatusGlobalConstB38400=&HEGlobalConstS_CTS=&H1GlobalConstB57600=&HFGlobalConstS_DSR=&H2GlobalConstB115200=&H10GlobalConstS_RI=&H4GlobalConstB230400=&H11GlobalConstS_CD=&H8GlobalConstB460800=&H12GlobalConstB921600=&H13′Errorcode GlobalConstSIO_OK=0′ModesettingGlobalConstSIO_BADPORT=-1′NosuchportGlobalConstBIT_5=&H0′DataorportnotopenedbitsdefineGlobalConstSIO_OUTCONTROL=-2′Can′tcontrolboardGlobalConstSIOFT_FUNC=-4′FuncGlobalConstSIO_NODATA=-4′NodatatoreturnabortreadornobuffertowriteGlobalConstSIOFT_FOPEN=-5′CannotGlobalConstSIO_OPENFAIL=-5′NosuchportopenfilesorporthasopenedGlobalConstSIOFT_CANABORT=-6′YmodemGlobalConstSIO_RTS_BY_HW=-6′RTScan′tCANsignalabortsetbyH/WflowctrlGlobalConstSIOFT_PROTOCOL=-7′ProtocolGlobalConstSIO_BADPARM=-7′BadcheckingerrorabortparameterGlobalConstSIOFT_SKIP=-8′ZmodemGlobalConstSIO_WIN32FAIL=-8′Callwin32remoteskipthissendfilefunctionfail,pleasecallGlobalConstSIOFT_LACKRBUF=-9′Zmodem ′Recv-Buffsizemust>=2KbytesGetLastErrortogettheerrorcodeGlobalConstSIOFT_WIN32FAIL=-10′OSfailGlobalConstSIO_BOARDNOTSUPPORT=-9′′BoarddoesnotsupportthisfunctionGetLastErrortogettheerrorcodeGlobalConstSIO_FAIL=-10′PCommGlobalConstSIOFT_BOARDNOTSUPPORT=-11functionrunresultfail′BoarddoesnotsupportthisfunctionGlobalConstSIO_ABORT_WRITE=-11′Writehasblocked,anduserabortwriteDeclareFunctionsio_openLib″PComm.dll″(ByValPortGlobalConstSIO_WRITETIMEOUT=-12′WriteAsLong)AsLongtimeouehashappenedDeclareFunctionsio_closeLib″PComm.dll″(ByValPort AsLong)AsLong′FiletransfererrorcodeDeclareFunctionsio_ioctlLib″PComm.dll″(ByValPortGlobalConstSIOFT_OK=0AsLong,ByValbaudAsLong,ByValmodeAsLong)AsGlobalConstSIOFT_BADPORT=-1′NosuchLongportorportnotopenDeclareFunctionsio_flowetrlLib″PComm.dll″(ByValGlobalConstSIOFT_TIMEOUT=-2′ProtocolPortAsLong,ByValmodeAsLong)AsLongtimeoutDeclareFunctionsio_flushLib″PComm.dll″(ByValPortGlobalConstSIOFT_ABORT=-3′UserkeyAsLong,ByValfuncAsLong)AsLongabortDeclareFunctionsio_DTRLib″PComm.dll″(ByValPortAsLong,ByValmodeAsLong)AsLongPortAsLong)AsLongDeclareFunctionsio_RTSLib″PComm.dll″(ByValPortDeclareFunctionsio_iqueueLib″PComm.dll″(ByValAsLong,ByValmodeAsLong)AsLongPortAsLong)AsLongDeclareFunctionsio_lctrlLib″PComm.dll″(ByValPortDeclareFunctionsio_oqueueLib″PComm.dll″(ByValAsLong,ByValmodeAsLong)AsLongPortAsLong)AsLongDeclareFunctionsio_baudLib″PComm.dll″(ByValPortDeclareFunctionsio_Tx_holdLib″PComm.dll″(ByValAsLong,ByValspeedAsLong)AsLongPortAsLong)AsLongDeclareFunctionsio_getchLib″PComm.dll″(ByValPortDeclareFunctionsio_getbaudLib″PComm.dll″(ByValAsLong)AsLongPortAsLong)AsLongDeclareFunctionsio_readLib″PComm.dll″(ByValPortDeclareFunctionsio_getmodeLib″PComm.dll″(ByValAsLong,ByRefbufAsByte,ByVallengthAsLong)AsPortAsLong)AsLongLongDeclareFunctionsio_getflowLib″PComm.dll″(ByValDeclareFunctionsio_linputLib″PComm.dll″(ByValPortAsLong)AsLongPortAsLong,ByRefbufAsByte,ByVallengthAsLong,DeclareFunctionsio_data_statusLib″PComm.dll″ByValTermAsLong)AsLong(ByValPortAsLong)AsLongDeclareFunctionsio_putchLib″PComm.dll″(ByValPortDeclareFunctionsio_term_irqLib″PComm.dll″(ByValAsLong,ByValTermAsLong)AsLongPortAsLong,ByValfuncAsLong,ByValcodeAsByte)DeclareFunctionsio_putbLib″PComm.dll″AliasAsLong″sio_write″(ByValPortAsLong,ByRefbufAsByte,DeclareFunctionsio_cnt_irqLib″PComm.dll″(ByValByVallengthAsLong)AsLongPortAsLong,ByValfuncAsLong,ByValcountAsLong)DeclareFunctionsio_writeLib″PComm.dll″(ByValPortAsLongAsLong,ByRefbufAsByte,ByVallengthAsLong)AsDeclareFunctionsio_modem_irqLib″PComm.dll″Long(ByValPortAsLong,ByValfuncAsLong)AsLongDeclareFunctionsio_putb_xLib″PComm.dll″(ByValDeclareFunctionsio_break_irqLib″PComm.dll″(ByValPortAsLong,ByRefbufAsByte,ByVallengthAsLong,PortAsLong,ByValfuncAsLong)AsLongByValtickAsLong)AsLongDeclareFunctionsio_Tx_empty_irqLib″PComm.dll″DeclareFunctionsio_putb_x_exLib″PComm.dll″(ByValPortAsLong,ByValfuncAsLong)AsLong(ByValPortAsLong,ByRefbufAsByte,ByVallengthDeclareFunctionsio_breakLib″PComm.dll″(ByValPortAsLong,ByValtmsAsLong)AsLongAsLong,ByValtimeAsLong)AsLongDeclareFunctionsio_lstatusLib″PComm.dll″(ByValDeclareFunctionsio_viewLib″PComm.dll″(ByValPortAsLong,ByRefbufAsByte,ByVallengthAsLong)AsDeclareFunctionsio_FtXmodemCheckSumTxLibLong″PComm.dll″(_DeclareFunctionsio_TxLowWaterLib″PComm.dll″ByValPortAsLong,ByValfnameAsString,ByVal(ByValPortAsLong,ByValsizeAsLong)AsLongfuncAsLong,ByValkeyAsLong_DeclareFunctionsio_AbortWriteLib″PComm.dll″)AsLong(ByValPortAsLong)AsLongDeclareFunctionsio_AbortReadLib″PComm.dll″DeclareFunctionsio_FtXmodemCheckSumRxLib(ByValPortAsLong)AsLong″PComm.dll″(_DeclareFunctionsio_SetWriteTimeoutsLib″PComm.dll″ByValPortAsLong,ByValfnameAsString,ByVal(ByValPortAsLong,ByValtimeoutsAsLong)AsLongfuncAsLong,ByValkeyAsLong_DeclareFunctionsio_GetWriteTimeoutsLib)AsLong″PComm.dll″(ByValPortAsLong,ByRefTotalTimeoutsAsLong)AsLongDeclareFunctionsio_FtXmodemCRCTxLibDeclareFunctionsio_SetReadTimeoutsLib″PComm.dll″″PComm.dll″(_(ByValPortAsLong,ByValTotalTimeoutsAsLong,ByValPortAsLong,ByValfnameAsString,ByValByValIntervalTimeoutsAsLong)AsLongfuncAsLong,ByValkeyAsLong_DeclareFunctionsio_GetReadTimeoutsLib″PComm.dll″)AsLong(ByValPortAsLong,ByRefTotalTimeoutsAsLong,ByRefInterfalTimeoutsAsLong)AsLongDeclareFunctionsio_FtXmodemCRCRxLib ″PComm.dll″(_DeclareFunctionsio_FtASCIITxLib″PComm.dll″(_ByValPortAsLong,ByValfnameAsString,ByVal ByValPortAsLong,ByValfnameAsString,ByValfuncAsLong,ByValkeyAsLong_funcAsLong,ByValkeyAsLong_)AsLong)AsLong DeclareFunctionsio_FtXmodemlKCRCTxLibDeclareFunctionsio_FtASCIIRxLib″PComm.dll″(_″PComm.dll″(_ ByValPortAsLong,ByValfnameAsString,ByValByValPortAsLong,ByValfnameAsString,ByValfuncAsLong,ByValkeyAsLong,ByValsecAsLong_funcAsLong,ByValkeyAsLong_)AsLong)AsLongDeclareFunctionsio_FtXmodemlKCRCRxLibByValPortAsLong,ByReffnameAsLong,ByVal″PComm.dll″(_fnoAsLong,ByValfuncAsLong,ByValkeyAsLong_ ByValPortAsLong,ByValfnameAsString,ByVal)AsLongfuncAsLong,ByValkeyAsLong_)AsLongDeclareFunctionsio_FtYmodemTxLib″PComm.dll″(_ ByValPortAsLong,ByValfnameAsString,ByValfuncAsLong,ByValkeyAsLong)AsLongDeclareFunctionsio_FtYmodemRxLib″PComm.dll″(_ ByValPortAsLong,ByReffnameAsLong,ByValfnoAsLong,ByValfuncAsLong,ByValkeyAsLong_)AsLongDeclareFunctionsio_FtZmodemTxLib″PComm.dll″(_ ByValPortAsLong,ByValfnameAsString,ByValfuncAsLong,ByValkeyAsLong_)AsLongDeclareFunctionsio_FtZmodemRxLib″PComm.dll″(_ ByValPortAsLong,ByReffnameAsLong,ByValfnoAsLong,ByValfuncAsLong,ByValkeyAsLong_)AsLongDeclareFunctionsio_FtKermitTxLib″PComm.dll″(_ ByValPortAsLong,ByValfnameAsString,ByValfuncAsLong,ByValkeyAsLong_)AsLongDeclareFunctionsio_FtKermitRxLib″PComm.dll″(_]]></pre>權(quán)利要求1.一種智能農(nóng)機載高光譜采集方法,包括用GPS確定農(nóng)機的位置,用傳感器實時獲得作物和農(nóng)田各種信息,用微型計算機記錄、分析信息,發(fā)送相應(yīng)的控制指令,其特征在于1)采用差分GPS25-lvsOEM板定位,差分GPS25-lvsOEM板通過RS-232口或RS-232&USB轉(zhuǎn)換器與微型計算機或筆記本電腦相連,在采集土壤樣品時,利用GPS接收機在計算機柵格地圖內(nèi)定位,記錄采集點的準確位置,樣品采集完后,在實驗室對樣品進行分析化驗,得到相應(yīng)的土壤屬性數(shù)據(jù),并添加到該柵格圖層中;2)利用拖拉機懸掛光譜儀,采用MSR16R型便攜式光譜儀實現(xiàn)作物冠層高光譜實時監(jiān)測,光譜儀通過RS-232或RS-232&USB轉(zhuǎn)換器與微型計算機或筆記本電腦相連,利用VisualBasic6.0和pccomm.dll動態(tài)鏈接庫,設(shè)計串行通訊程序,計算機從光譜儀中讀取采集到的作物冠層目標光譜多波段信息,同時從GPS中讀取該光譜數(shù)據(jù)的空間時間信息,并完成相關(guān)數(shù)據(jù)的解析,軟件設(shè)計中采用事件觸發(fā)方式監(jiān)視計算機串口緩沖區(qū),當(dāng)緩沖區(qū)有數(shù)據(jù)時,會自動觸發(fā)該事件讀取數(shù)據(jù),接收光譜儀和GPS傳來的實時數(shù)據(jù),實時傳送設(shè)備控制指令,MSR16R便攜式光譜儀的原始數(shù)據(jù)按照CropScanINC提供的算式進行轉(zhuǎn)換獲得作物冠頂光譜反射率R;3)利用MapObjectsOCX控件實現(xiàn)農(nóng)田地理信息系統(tǒng)GIS管理模塊用SQL語句查找相應(yīng)的地圖要素,將DGPS接受的位置信息投影到平面坐標系統(tǒng)上;實現(xiàn)圖層在不同投影和坐標系之間相互轉(zhuǎn)換;利用MapObjects的Trackinglayer動態(tài)顯示農(nóng)機具運動軌跡和各圖層上與定位點相對應(yīng)的點的屬性數(shù)據(jù);利用Maplay.AddRelate自動完成具有定位信息的光譜數(shù)據(jù)表與圖層的關(guān)聯(lián);利用GPS電子地圖坐標轉(zhuǎn)換算法,把動點坐標從WGS-84坐標系轉(zhuǎn)換到北京1954_GK坐標下;利用MapObjects把圖層原始坐標系轉(zhuǎn)換為WGS-84坐標系,在外部數(shù)據(jù)庫與圖層關(guān)聯(lián)中,首先將GPS傳遞的定位信息在圖層中定位,并讀取FeatureId值,并把FeatureId值、轉(zhuǎn)換后的光譜數(shù)據(jù)和定位信息存儲到數(shù)據(jù)庫中,獲得一一對應(yīng)的地理定位信息、土壤屬性數(shù)據(jù)和光譜數(shù)據(jù)。全文摘要本發(fā)明基于GPS的智能農(nóng)機載高光譜采集方法,屬于高密度獲取農(nóng)田信息的技術(shù)方法,專用于精確農(nóng)業(yè)生產(chǎn)技術(shù)的動態(tài)監(jiān)測。本系統(tǒng)利用VisualBasic和MapObjects對GPS、GIS和RS進行有機集成,一方面系統(tǒng)通過集成GPS,能為采集到的光譜數(shù)據(jù)提供高精度的空間位置屬性,實現(xiàn)光譜數(shù)據(jù)采集、定位和存儲一體化;另一方面通過集成GIS,實現(xiàn)了具有空間屬性的光譜數(shù)據(jù)可視化管理和分析處理,實時地顯示動點軌跡、各圖層對應(yīng)點屬性,計算作物微分光譜和植被指數(shù)NDVI等功能,為專家系統(tǒng)和決策支持系統(tǒng)提供充足的信息。文檔編號G06F19/00GK1614392SQ20041000991公開日2005年5月11日申請日期2004年11月30日優(yōu)先權(quán)日2004年11月30日發(fā)明者潘劍君,李志偉,張佳寶,呂雄杰,陳坤杰申請人:南京農(nóng)業(yè)大學(xué)