# 主菜单层级定义(声明式源) # 规则:缩进即层级,每级 2 空格;`#` 开头为注释;空行忽略。 # 行尾可选 ` #P` = 该叶子需密码(密码页按所输密码授权:查看密码→只读 / 修改密码→可修改);无尾注 = 不需密码页(直接进,只读)。 # 密码值:Drivers/BSP/UI/ui_pwd_def.h 编译期配置(查看/修改各一个,改值 = 重新编译)。 # 行尾可选 ` #page=<模块名>` = 该叶子绑定一个内容页实例(UI 页面原型化的页面注册表): # 模块名 = Drivers/BSP/UI/ui_page_<模块名>.c,其描述符符号须为 ui_page_<模块名>_desc。 # 声明了 #page 但实例文件缺失/符号不符 → 生成器报错(不产出半成品表)。 # 未被任何叶子 #page 引用的 ui_page_*.c 同样报错(写了却从不生效的死代码)。 # 注:密码页**不是**节点绑定的(任何 #P 叶子都进同一页),故由下方 @password 指令单独声明。 # 指令(整份文件级,写在注释行里): # # @password=<模块名> = 需密码叶子统一进的内容页模块名(省略 = 无密码页)。 # 改菜单/改页面绑定只需编辑本文件,然后重跑: # python tools/menu_gen/gen_menu.py # 产物:Drivers/BSP/UI/ui_menu_tab.c / ui_menu_tab.h # Drivers/BSP/UI/ui_page_registry.c / ui_page_registry.h(节点→页面注册表,自动生成) # 生成器并自动把新增的 ui_page_*.c 写进 MDK-ARM/STM32F407-Demo.uvprojx 与 # simulator/CMakeLists.txt 两处显式列表(双端注册),无需手工编辑注册文件。 # @password=password 主界面 装置信息 #page=device_info 实时数据 交流量 #page=ac 直流量 #page=dc 遥信量 #page=yx 参数定值 整定 参数 #P #page=view_param 定值 #P #page=view_set 控制字 #P #page=view_word 软压板 #P #page=view_plate 查看 参数 #page=view_param 定值 #page=view_set 控制字 #page=view_word 软压板 #page=view_plate 三遥设置 遥测死区 #P #page=deadband 遥测系数 #P #page=calib 遥信类型 #P 遥信防抖 #P 双点遥信 #P 装置维护 时钟设置 #P #page=clock 强制复归 #P #page=reset 手动录波 #P #page=wave_manual 清除记录 #P #page=clear 通讯参数 通讯设置 #P #page=comm 网口设置 #P #page=net_cfg SNTP设置 #P 记录查询 SOE记录 #page=soe 事故记录 #page=accident 操作记录 #page=oper 保护告警 #page=alarm 保护启动 #page=start 遥控记录 #page=yk 自检记录 #page=selftest 运行记录 #page=runlog 运行报告 #page=runreport 录波回放 #page=wave_play