现象: 上电后 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 板级问题修复记录, 更新文件结构/待确认清单/计划表
49 lines
1.8 KiB
Lua
49 lines
1.8 KiB
Lua
--[[
|
||
@module main
|
||
@summary vd960Air — Air8781P(Air780EPM) 4G 模块 LuatOS 应用入口(方案 C MVP)
|
||
@version 0.3.1
|
||
@date 2026.09.10
|
||
@usage
|
||
vd960DBN 车检器在有线网络失效时的 4G 兜底通道(方案 C: Air780 协议转换):
|
||
|
||
1、UART1 对接 vd960DBN(CH32V208 串口1 PB6/PB7),0x7F 帧字节流透传;
|
||
2、0x7F 帧解析 → 0xC0 传感 → loop_data JSON(标准,注入 link)→ MQTT dld960/{sn}/dev;
|
||
3、car_state/loop_state 沿检测 → event_report(ACK + 5s×3 重发,对齐 DBN 语义);
|
||
4、下行: report_config 时钟校准 + event_report ACK;业务命令转换 P1;
|
||
5、initialize(extra_info imei/iccid + link)/ heartbeat 周期上报;
|
||
6、网络看门狗 + 4G 网卡(官方组件)。
|
||
]]
|
||
PROJECT = "vd960Air"
|
||
VERSION = "001.999.000"
|
||
|
||
-- 在日志中打印项目名和项目版本号
|
||
log.info("main", PROJECT, VERSION)
|
||
|
||
-- ==================== 加载配置 ====================
|
||
require "config"
|
||
|
||
-- ============ 统一毫秒时基(全局 mstick(), 必须早于业务模块) ============
|
||
-- 修复 2026-09-10: 工程原调用 mstick() 但 LuatOS 无此 API, 上板必报 nil
|
||
require "mstick"
|
||
|
||
-- ==================== 网络环境检测看门狗 ====================
|
||
require "network_watchdog"
|
||
|
||
-- ==================== 网卡驱动(仅 4G) ====================
|
||
require "netdrv_device"
|
||
|
||
-- ==================== 串口应用(UART1 <-> vd960DBN,0x7F 帧) ====================
|
||
require "uart_app"
|
||
|
||
-- ==================== 设备业务(initialize/heartbeat/poll) ====================
|
||
local app_iot = require "app_iot"
|
||
app_iot.init()
|
||
|
||
-- ==================== MQTT 客户端(单路, 主题 dld960/{sn}/srv + dev) ====================
|
||
require "mqtt_main"
|
||
|
||
-- 用户代码已结束---------------------------------------------
|
||
-- 结尾总是这一句
|
||
sys.run()
|
||
-- sys.run()之后不要加任何语句!!!!!因为添加的任何语句都不会被执行
|