Files
mobile_comm/luatos/air780epm/module/Air780EPM/demo/vd960Air/config.lua
T
wangfq e8917e7041 fix(vd960Air): 修复上电反复复位, 打通测试服务器连接
现象: 上电后 Lua VM 报 uart_app.lua:28 attempt to index a boolean value
      → VM exit → 15s 后自动复位, 死循环, 永远走不到 MQTT 连接

根因(4 处叠加, 第 1 处致命):
1. config.lua 末尾漏 return —— require 对无返回值模块返回 true,
   local CFG = require "config" 后访问 CFG.CFG_xxx 直接报错
2. 全工程 10 处调用 mstick(), 但 LuatOS 并无此 API(正确为 mcu.ticks())
3. MQTT 服务器仍是合宙官方测试服 lbsmqtt.airm2m.com:1884
4. MQTT 鉴权用户名/密码硬编码为空串

修复:
1. config.lua 末尾加 return _G(配置项本就是全局变量);
   另: ClientID 的 mobile.imei() 加空值防护(or "unknown")
2. 新增 mstick.lua: 全局 mstick() = mcu.ticks() 封装(回退 os.time()*1000),
   原 10 处调用点零改动; main.lua 在 require "config" 之后 require "mstick"
3. 服务器改为 110.41.131.144:1883(明文非 TLS), 新增 CFG_MQTT_USER/PASS,
   mqtt_main 改为 auth(CLIENT_ID, CFG_MQTT_USER, CFG_MQTT_PASS, true)
4. .gitignore 放行 vd960Air/tools/ —— 官方 tools/ 忽略规则导致自检脚本
   无法入库(sim_frame_test.py 自 8/31 起一直未入库)

新增工具:
- tools/sim_load_test.lua: 离线加载+冒烟自检(lua5.3 + LuatOS API 桩 + 严格全局
  检查), 按 main.lua 真实顺序加载全部模块并冒烟调用关键函数, 用于抓取
  "require 返回值缺失""调用了不存在的 API"这类语法检查抓不到的运行时问题

验证:
- luac5.3 -p 全部 14 个 lua 文件通过
- 离线自检: 16 项断言 + 8 项冒烟全部通过
- Python 帧协议参考验证全部通过
- readme Markdown 表格列数 0 异常

文档: readme 补 §8 板级问题修复记录, 更新文件结构/待确认清单/计划表
2026-09-10 15:35:10 +08:00

65 lines
2.9 KiB
Lua

--[[
@module config
@summary vd960Air 配置: MQTT 服务器 / 设备标识 / 主题 / UART / 上报参数
@date 2026.08.31
@usage
vd960Air 是 Air8781P 整板(Air780EPM 核心模组)上的 LuatOS 应用,
作为 vd960DBN 车检器在有线网络失效时的 4G 兜底通道(方案 C: Air780 协议转换)。
协议依据:《DLD960_IoT_MQTT协议》V1.13(4G 通道适配方案 C,标准 JSON 命令面)
]]
-- ==================== MQTT 服务器 ====================
-- 测试服务器(2026-09-10 用户提供): 110.41.131.144:1883, admin/password
-- 注: 后续 vd960DBN 更新版本后,经 BLE 设置的服务器参数会同步下发覆盖此处(配置同步, P1)
-- ⚠ 商用环境须替换为平台实际地址; 密码不应长期写死在代码里(应走 §2.2 配置同步链路)
CFG_MQTT_HOST = "110.41.131.144"
CFG_MQTT_PORT = 1883
-- MQTT 鉴权(mqtt_main 调用 mqtt_client:auth; 空串表示匿名)
CFG_MQTT_USER = "admin"
CFG_MQTT_PASS = "password"
-- ==================== 设备标识 ====================
-- 设备序列码: 6 字节十六进制字符串(与 vd960DBN dev_serial 一致,有线/4G 同一设备)
CFG_DEV_SERIAL = "A1B2C3D4E5F6"
-- 产品信息(initialize 上报,协议 §5.1)
CFG_MODEL = "DLD960"
CFG_HW_VER = "1.0"
CFG_SW_VER = "1.0"
CFG_LOOP_VER = "" -- 地感 Loop 固件版本(0x4A 查询 P1 后填充)
CFG_LOOP_HW_VER = "" -- 地感 Loop 硬件版本
-- MQTT Topic(与《DLD960_IoT_MQTT协议》§1.2 一致)
CFG_TOPIC_UP = "dld960/" .. CFG_DEV_SERIAL .. "/dev" -- 设备上报
CFG_TOPIC_DOWN = "dld960/" .. CFG_DEV_SERIAL .. "/srv" -- 服务器下发
-- MQTT ClientID: 用 IMEI 保证唯一(与序列码解耦;鉴权待确认)
CFG_MQTT_CLIENT_ID = "vd960Air-" .. (mobile.imei() or "unknown")
-- ==================== UART(对接 vd960DBN) ====================
-- vd960DBN 侧: CH32V208 串口1(PB6=TX, PB7=RX)
-- 波特率: 115200(用户决策 2026-08-31,后续如需再调)
CFG_UART_ID = 1
CFG_UART_BAUD = 115200
-- 链路帧: 0x7F 帧字节流(方案 C,数据面透传 Loop 地感协议)
-- 0x7D 帧仅用于 DBN↔Air780 配置同步/握手(P1)
-- ==================== 上报节奏 ====================
CFG_HEARTBEAT_INTERVAL = 60 -- 心跳周期(秒,协议 §5.4 默认 60)
CFG_REPORT_ALWAYS = true -- MVP: 每收到 0xC0 帧都上报 loop_data;P1 按协议三档节流
-- ==================== 4G 特有字段注入 ====================
-- 用户决策 2026-08-31: 上行附加 link 对象 + initialize extra_info 含 imei/iccid
-- true = 上行 JSON 顶层注入 link 对象(见 link_info.lua)
CFG_LINK_ENABLE = true
-- ==================== 模块导出(必须, 不可删) ====================
-- ⚠ require "config" 时若文件无 return, Lua 返回 true;
-- 调用方 local CFG = require "config" 后访问 CFG.CFG_xxx 会报
-- "attempt to index a boolean value" ——2026-09-10 上电复位事故根因
-- 配置项以全局变量定义, 这里返回全局表供模块化访问
return _G