Przeglądaj źródła

测试解析经纬度

xuxinyi 3 miesięcy temu
rodzic
commit
1454098aea
1 zmienionych plików z 89 dodań i 0 usunięć
  1. 89 0
      gps_periph/Air530zGPS.lua

+ 89 - 0
gps_periph/Air530zGPS.lua

@@ -96,6 +96,95 @@ end
 -- [2025-08-08 19:39:40.603] [I]-[testUart.read bin] $GNRMC,113940.000,A,3221.43240,N,11922.55931,E,0.54,0.00,080825,,,A,V*03
 -- [2025-08-08 19:39:41.583] [I]-[testUart.read bin] $GNRMC,113941.000,A,3221.43247,N,11922.55928,E,0.00,0.00,080825,,,A,V*0C
 
+-- 定义RMC数据结构(使用Lua表模拟)
+local rmc_data = {
+    time = "",     -- 时间
+    state = "",    -- 定位状态
+    lat = "",      -- 纬度
+    NS = "",       -- 南北纬
+    lng = "",      -- 经度
+    WE = "",       -- 东西经
+    date = ""      -- 日期
+}
+
+-- 全局变量,模拟接收缓冲区和经纬度存储
+local rx_data = ""
+local air530_lat = ""
+local air530_lng = ""
+
+-- RMC数据解析函数
+function AnalysisRMC(pRecRMC)
+    print("AnalysisRMC")
+    
+    -- 初始化接收的数据结构
+    pRecRMC.time = ""
+    pRecRMC.state = ""
+    pRecRMC.lat = ""
+    pRecRMC.NS = ""
+    pRecRMC.lng = ""
+    pRecRMC.WE = ""
+    pRecRMC.date = ""
+    
+    -- 将字符串按逗号分割成字段表
+    local fields = {}
+    for field in string.gmatch(rx_data, "([^,]+)") do
+        table.insert(fields, field)
+    end
+    
+    -- 检查字段数量是否足够
+    if #fields < 10 then
+        print("RMC数据格式不正确,字段数量不足")
+        rx_data = ""  -- 清空接收缓存
+        return
+    end
+    
+    -- 解析时间 (第2个字段,索引从1开始)
+    pRecRMC.time = fields[2] or ""
+    print("时间: " .. pRecRMC.time)
+    
+    -- 解析定位状态 (第3个字段)
+    pRecRMC.state = fields[3] or ""
+    print("定位状态: " .. pRecRMC.state)
+    
+    -- 检查定位是否有效
+    if pRecRMC.state ~= "A" then
+        print("无效定位信息!")
+        rx_data = ""  -- 清空接收缓存
+        return
+    end
+    
+    -- 解析纬度 (第4个字段)
+    pRecRMC.lat = fields[4] or ""
+    print("纬度: " .. pRecRMC.lat)
+    air530_lat = pRecRMC.lat
+    
+    -- 解析南北纬 (第5个字段)
+    pRecRMC.NS = fields[5] or ""
+    print("南北纬: " .. pRecRMC.NS)
+    
+    -- 解析经度 (第6个字段)
+    pRecRMC.lng = fields[6] or ""
+    print("经度: " .. pRecRMC.lng)
+    air530_lng = pRecRMC.lng
+    
+    -- 解析东西经 (第7个字段)
+    pRecRMC.WE = fields[7] or ""
+    print("东西经: " .. pRecRMC.WE)
+    
+    -- 解析日期 (第10个字段)
+    pRecRMC.date = fields[10] or ""
+    print("日期: " .. pRecRMC.date)
+    
+    -- 清空接收缓存
+    rx_data = ""
+    print("接收缓存区已清空")
+end
+
+-- 示例用法
+-- rx_data = "$GNRMC,113941.000,A,3221.43247,N,11922.55928,E,0.00,0.00,080825,,,A,V*0C"
+-- AnalysisRMC(rmc_data)
+
+
 --[[
 函数名:read
 功能  :读取串口接收到的数据