王 浩,郝鳳琦,董振振,王茂勵,唐勇偉
(1.青島理工大學 信息與控制工程學院,山東 青島 266520;2.齊魯工業(yè)大學(山東省科學院),山東省計算中心(國家超級計算濟南中心)/山東省計算機網(wǎng)絡重點實驗室,濟南 250014)
《國民經(jīng)濟和社會發(fā)展第十三個五年規(guī)劃綱要(草案)》提出,農(nóng)業(yè)是全面建成小康社會和實現(xiàn)現(xiàn)代化的基礎,必須加快轉(zhuǎn)變農(nóng)業(yè)發(fā)展方式,著力構(gòu)建現(xiàn)代農(nóng)業(yè)產(chǎn)業(yè)體系、生產(chǎn)體系、經(jīng)營體系,提高農(nóng)業(yè)質(zhì)量效益和競爭力,走產(chǎn)出高效、產(chǎn)品安全、資源節(jié)約、環(huán)境友好的農(nóng)業(yè)現(xiàn)代化道路[1]。高穩(wěn)定性、高精度播種機的研發(fā)對糧食產(chǎn)量的影響舉足輕重。以小麥小區(qū)播種為例(見圖1),小區(qū)長度是否精準,各小區(qū)之間排列是否整齊,對通風、通光都會產(chǎn)生影響,直接關乎的最終產(chǎn)量。傳統(tǒng)的小麥小區(qū)播機大多采用編碼器測距方式,但這這種測距方式會受到作業(yè)環(huán)境、農(nóng)機機械誤差的影響,造成測量精度不足,產(chǎn)生累積誤差,從而影響小區(qū)長度的準確性。中國北斗衛(wèi)星導航系統(tǒng)(BeiDou Navigation Satellite System,BDS)是中國自行研制的全球衛(wèi)星導航系統(tǒng),由5顆靜止軌道衛(wèi)星和30顆非靜止軌道衛(wèi)星組成,是繼美國全球定位系統(tǒng)(GPS)、俄羅斯格洛納斯衛(wèi)星導航系統(tǒng)(GLONASS)之后第3個成熟的衛(wèi)星導航系統(tǒng)[2]?;诒倍沸l(wèi)星導航系統(tǒng)的開放性和高準確性,提出了一種采用北斗定位輔助播種的方法,通過實時采集播種機準確的經(jīng)緯度,來控制小區(qū)長度,從而提高小麥小區(qū)播種的精度。本文選用的S7-200smart plc是西門子公司推出的一款性能優(yōu)良的控制器,相比于其他控制器,在可靠性、穩(wěn)定性、通用性和驅(qū)動能力方面更加出色,在工作環(huán)境較為惡劣的農(nóng)田中能確保播種機正常工作。
圖1 小麥小區(qū)播種機
小麥小區(qū)播種機主要由發(fā)動機、駕駛室、電控操作屏、變速箱傳動裝置、錐體格盤排種裝置、投種座椅、整機機架、種盒支架、開溝器裝置、作業(yè)指引架、前后橋轉(zhuǎn)向機構(gòu)、步進電機、直流電機、電磁鐵、電控箱、顯示屏及北斗天線等主要零部件組成。
系統(tǒng)工作流程如下:通過架設在播種機頂部的北斗天線,接收北斗信號報文,控制器解讀報文,得到播種機實時坐標,實時計算兩個坐標之間的距離差;按照比例,將距離差換算成輸出給步進電機的脈沖數(shù)量,步進電機控制錐體格盤排種裝置,使種子均勻分配;當觸碰到限位開關時,電磁鐵將手柄提起,使得存種筒內(nèi)種子落下,從而實現(xiàn)倒種。系統(tǒng)組成結(jié)構(gòu)如圖2所示。
圖2 系統(tǒng)組成結(jié)構(gòu)
NMEA 0183是美國國家海洋電子協(xié)會為海用電子設備制定的標準格式,現(xiàn)在已經(jīng)成為GPS導航設備統(tǒng)一的RTCM標準協(xié)議[3]。數(shù)據(jù)傳輸以“語句”的方式進行,每個語句均以“$”開頭;然后是兩個字母的“識別符”和3個字母的“語句名”;接著就是以逗號分割的數(shù)據(jù)體,語句末尾為校驗和,整條語句以回車換行符結(jié)束。
NMEA-0183的數(shù)據(jù)信息有十幾種,本文使用的是輸出GPS的定位信息的$GPGGA。$GPGGA數(shù)據(jù)格式為$GPGGS,hhmmss.ss,Latitude,N,Longitude,E,FS,NoSV,HDOP,msl,m,Altref,m,DiffStation*cs
表1 $GPGGA數(shù)據(jù)說明
續(xù)表1
PLC通過自由口接收到$GPGGA報文,由于PLC無法直接使用接收到的數(shù)據(jù),因此需要通過程序?qū)?shù)據(jù)進行解析處理,提取出用戶需要的時間、經(jīng)度、緯度、南北東西半球等信息。解析過程如下:接收到字符串格式數(shù)據(jù)All_data后,使用STR_FIND指令從字符串中分別找到第1個和第2個”,”的位置Temp1、Temp2,計算第1個”,”后的第1位Temp1.1與第2個”,”的差值D12,通過SSTR_CPY指令從All_data的Temp1開始復制D12個字符,得到的字符串為UTC時間信息。通過以上辦法,解析出經(jīng)度、緯度、南北東西半球等信息,如圖3所示。
圖3 $GPGGA報文解析流程圖
地球是一個近乎標準的橢球體,赤道半徑6 378.140km,極半徑6 356.755km,平均半徑6 371.229km[4]。如果假設地球是一個完美的球體,那么它的半徑就是地球的平均半徑,記為R[5]。如果以0°經(jīng)線為基準,那么根據(jù)地球表面任意兩點的經(jīng)緯度就可以計算出這兩點間的地表距離(這里忽略地球表面地形對計算帶來的誤差,僅僅是理論上的估算值)[6]。設第1點A的經(jīng)緯度為(LonA,LatA),第2點B的經(jīng)緯度為(LonB,LatB),AB兩點緯度差值和緯度差值分別為
diffLon=LonA-LonB
(1)
式中LonA—A點經(jīng)度的弧度值;
LonB—B點經(jīng)度的弧度值;
diffLon—A、B兩點經(jīng)度弧度值的差值。
diffLat=LatA-LatB
(2)
式中LatA—A點緯度的弧度值;
LatB—B點緯度的弧度值;
diffLat—A、B兩點緯度弧度值的差值。
根據(jù)三角函數(shù)推導,可以得到計算兩點距離的如下公式,即
L=2Rarcsin(a)
(3)
式中L—A、B兩點間的距離(m);
R—地球平均半徑(m)。
為了確保小區(qū)長度的準確性,計算距離的精度要達到厘米級,那么WGS84格式的經(jīng)緯度在計算時需要保留到小數(shù)點后第6位。這就需要保證轉(zhuǎn)換前的度分格式經(jīng)緯度,至少要保留到小數(shù)點后第7位(dddmm.mmmmmmmm)。因此,浮點數(shù)的內(nèi)存需達到16位有效數(shù)字,需要用雙精度浮點數(shù)格式進行存儲。但由于s7-200smart浮點數(shù)的內(nèi)存格式為單精度浮點數(shù),有效值只有8位,如果直接進行計算,超出的部分會四舍五入,那么截取到的度分格式的經(jīng)緯度為dddmm.mm,小數(shù)點后只保留了兩位,誤差會達到米級別,這是完全無法容忍的。為了解決這一問題,提出了一種基于三角恒等式的數(shù)值分段法,來解決雙精度浮點數(shù)轉(zhuǎn)單精度浮點數(shù)的問題,極大地提高精度。
首先將dddmm.mmmmmmmm格式的經(jīng)度劃分3部分:Lon1=ddd,Lon3=Lon3*10-8,Lon3=mmmmmmm;緯度劃分為Lat1=dd,Lat2=mm.m,Lat3=mmmmmmm。由于Lon3和Lat3最后1位原本處于小數(shù)點第8位,為了保持數(shù)值不變,Lon3=Lon3*10-8,Lat3=Lat3×10-8。通過劃分可以保證在計算階段能夠讀取到所有經(jīng)緯度信息;然后,將度分格式的3部分經(jīng)緯度轉(zhuǎn)化為WGS84格式,再轉(zhuǎn)化為弧度。將Lat2和Lat3相加構(gòu)成Lat小數(shù)部分Lat*,將Lon2和Lon3相加構(gòu)成Lon的小數(shù)部分Lon*,則
Lat*=Lat2+Lat3
(4)
式中Lat*—A、B兩點緯度弧度值差值的小數(shù)部分;
Lat2—A、B兩點緯度弧度值差值小數(shù)部分的高位;
Lat3—A、B兩點緯度弧度值差值小數(shù)部分的低位。
Lon*=Lon2+Lon3
(5)
式中Lon*—A、B兩點經(jīng)度弧度值差值的小數(shù)部分;
Lon2—A、B兩點經(jīng)度弧度值差值小數(shù)部分的高位;
Lon3—A、B兩點經(jīng)度弧度值差值小數(shù)部分的低位。
通過以上步驟可以得到處理后A點經(jīng)緯度為(LonA1+LonA*,LatA1+LatA*),B點的經(jīng)緯度為(LonB1+LonB*,LatB1+LatB*),兩點的經(jīng)緯度差為(diffLon1+diffLon*,diffLat1+diffLat*),利用三角恒等式計算,即
=sin(diffLon1)cos(diffLon*)+
sin(diffLon*)cos(diffLon1)
(6)
=sin(diffLat1)cos(diffLat*)+
sin(diffLat*)cos(diffLat1)
(7)
cos(LonA)=cos(LonA1+LonA*) =cos(LonA1)cos(LonA*)- sin(LonA1)sin(LonA*)
(8)
cos(LonB)=cos(LonB1+LonB*) =cos(LonB1)cos(LonB*)- sin(LonB1)sin(LonB*)
(9)
(LonB)代入公式(3),計算得到L即為兩點間距。
為了對計算結(jié)果進行驗證,選擇可以進行雙精度數(shù)計算的Excel表格進行對兩點間距進行計算,隨機選取10組數(shù)據(jù),每組數(shù)據(jù)有A、B兩個點的經(jīng)緯度,如表3所示。
為了清晰地展示三角恒等式的數(shù)值分段法的優(yōu)勢,直接將A、B兩點的經(jīng)緯度代入式(3)計算,分別得到10組數(shù)據(jù),作為參照組,如表4所示。
表3 任意AB兩點經(jīng)緯度選取
表4 單精度浮點數(shù)直接計算結(jié)果
將同樣的10組數(shù)據(jù),按照三角恒等式的數(shù)值分段法分別對A、B兩點的經(jīng)緯度進行處理后,再代入式(3)進行計算,作為實驗組,如表5所示。
經(jīng)分析比較,直接使用PLC進行計算,10組數(shù)據(jù)中最大誤差到達675.6cm,最小誤差也有60.1cm。這樣的誤差量級,對于小區(qū)的長度影響極大,完全無法容忍。使用三角恒等式的數(shù)值分段法進行計算,10組數(shù)據(jù)中最大誤差為0.0046cm,最小誤差只有處于0.0012cm,屬于微米級誤差,對實際應用的影響可忽略不計。
表5 單精度浮點數(shù)處理后計算結(jié)果
以實際項目為背景,開發(fā)了基于西門子S7 -200 smart PLC的高精度小麥小區(qū)播種機。將目前國內(nèi)熱門的北斗定位,用于小麥小區(qū)播種機輔助播種,替代傳統(tǒng)受限較多的編碼器播種,確保小區(qū)長度的準確。該控制系統(tǒng)具有成本低、穩(wěn)定性高、通用性好、精度可靠和易維修等特點。本文介紹的基于三角恒等式的數(shù)值分段法,亦可應用于其他精播機。