|
|
@@ -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
|
|
|
功能 :读取串口接收到的数据
|