if finalize_config:
used_range_macros = sorted(set(entry["range_macro"] for entry in self.tx_limit_entries))
self.used_ranges = used_range_macros
config_data = {
"used_ranges_count": len(used_range_macros),
"used_ranges": used_range_macros
}
try:
with open( self.config_file_path, 'w', encoding='utf-8') as f:
json.dump(config_data, f, indent=4, ensure_ascii=False)
print(f" 已添加 'used_ranges' 到 config: { self.config_file_path}")
print(f" 共 {len(used_range_macros)} 个唯一 RANGE 宏被使用:")
for macro in used_range_macros:
print(f" - {macro}")
self.last_config = str(self.config_file_path)
except Exception as e:
print(f" 写入 config 失败: {e}")
else:
print(" 跳过 used_ranges 生成 (finalize_config=False)")执行成功C:\Users\admin\PyCharmMiscProject\.venv\Scripts\python.exe F:\excle_to_clm\excel_to_clm.py
配置文件已加载: F:\excle_to_clm\config\config.json
已定位目标 C 文件: F:\excle_to_clm\input\wlc_clm_data_6726b0.c
输出目录: F:\output
成功加载 channel_set_map (共 1 项): {'RANGE_2G_20M_1_11': 1}
'Cover' → 清洗后: 'Cover'
未匹配到 'Cover' 的模式,跳过...
'版本历史' → 清洗后: '版本历史'
未匹配到 '版本历史' 的模式,跳过...
'2.4G功率表(版本1.0)' → 清洗后: '2.4G功率表版本1.0'
匹配成功!'2.4G功率表(版本1.0)' → [2G] 配置
找到表头行: 第 4 行
开始向上查找 '认证功率',扫描第 0 ~ 3 行...
发现合并单元格含 '证功率': '认证功率' → G4
解析 CH 行(第 6 行),限定列范围: Col 6 ~ 18
发现 CH1 @ Col6
发现 CH2 @ Col7
发现 CH3 @ Col8
发现 CH4 @ Col9
发现 CH5 @ Col10
发现 CH6 @ Col11
发现 CH7 @ Col12
发现 CH8 @ Col13
发现 CH9 @ Col14
发现 CH10 @ Col15
发现 CH11 @ Col16
发现 CH12 @ Col17
发现 CH13 @ Col18
成功提取 CH1-13 共 13 个信道
无法识别物理模式: 'Mode'
无法识别物理模式: 'Mode'
解析复合模式 '11AC/AX 20M' → ['11AC', '11AX']
解析复合模式 '11AC/AX 20M' → ['11AC', '11AX']
解析复合模式 '11AC/AX 20M' → ['11AC', '11AX']
解析复合模式 '11AC/AX 20M' → ['11AC', '11AX']
解析复合模式 '11AC/AX 20M' → ['11AC', '11AX']
解析复合模式 '11AC/AX 20M' → ['11AC', '11AX']
解析复合模式 '11AC/AX 20M' → ['11AC', '11AX']
解析复合模式 '11AC/AX 20M' → ['11AC', '11AX']
解析复合模式 '11AC/AX 20M' → ['11AC', '11AX']
解析复合模式 '11AC/AX 20M' → ['11AC', '11AX']
解析复合模式 '11AC/AX 20M' → ['11AC', '11AX']
解析复合模式 '11AC/AX 40M' → ['11AC', '11AX']
解析复合模式 '11AC/AX 40M' → ['11AC', '11AX']
解析复合模式 '11AC/AX 40M' → ['11AC', '11AX']
解析复合模式 '11AC/AX 40M' → ['11AC', '11AX']
解析复合模式 '11AC/AX 40M' → ['11AC', '11AX']
解析复合模式 '11AC/AX 40M' → ['11AC', '11AX']
解析复合模式 '11AC/AX 40M' → ['11AC', '11AX']
解析复合模式 '11AC/AX 40M' → ['11AC', '11AX']
解析复合模式 '11AC/AX 40M' → ['11AC', '11AX']
解析复合模式 '11AC/AX 40M' → ['11AC', '11AX']
解析复合模式 '11AC/AX 40M' → ['11AC', '11AX']
无法识别物理模式: '说明:
1、Boardlimit填写各信道均满足EVM要求的最大功率;根据实际情况调整表格,如存在不同chain不一样的情况,则分开填写。
2、认证功率中填写各信道的认证功率限制;注意空间流,TXBF等信息需对应。
3、实发功率会根据Boardlimit和认证 power取小,生成DUT实发功率。实发功率表根据实际情况增减。'
📊 已采集第 7 行 → 11b 20M, 11 个信道, 使用宏: RATE_SET_2G_20M_11b
📊 已采集第 7 行 → 11b 20M, 11 个信道, 使用宏: RATE_SET_2G_HT_20M_11b
📊 已采集第 7 行 → 11b 20M, 11 个信道, 使用宏: RATE_SET_2G_HT_20M_EXT_11b
📊 已采集第 7 行 → 11b 20M, 11 个信道, 使用宏: RATE_SET_2G_HT_20M_EXT4_11b
📊 已采集第 8 行 → 11g 20M, 11 个信道, 使用宏: RATE_SET_2G_20M_11g
📊 已采集第 8 行 → 11g 20M, 11 个信道, 使用宏: RATE_SET_2G_HT_20M_11g
📊 已采集第 8 行 → 11g 20M, 11 个信道, 使用宏: RATE_SET_2G_HT_20M_EXT_11g
📊 已采集第 8 行 → 11g 20M, 11 个信道, 使用宏: RATE_SET_2G_HT_20M_EXT4_11g
跳过空行: 第 9 行(无任何有效功率值)
跳过空行: 第 10 行(无任何有效功率值)
跳过空行: 第 11 行(无任何有效功率值)
跳过空行: 第 12 行(无任何有效功率值)
跳过空行: 第 13 行(无任何有效功率值)
📊 已采集第 14 行 → 11n 20M, 11 个信道, 使用宏: RATE_SET_2G_HT_20M_11n
📊 已采集第 14 行 → 11n 20M, 11 个信道, 使用宏: RATE_SET_2G_HT_20M_EXT_11n
📊 已采集第 14 行 → 11n 20M, 11 个信道, 使用宏: RATE_SET_2G_HT_20M_EXT4_11n
跳过空行: 第 15 行(无任何有效功率值)
跳过空行: 第 16 行(无任何有效功率值)
跳过空行: 第 17 行(无任何有效功率值)
跳过空行: 第 18 行(无任何有效功率值)
跳过空行: 第 19 行(无任何有效功率值)
跳过空行: 第 20 行(无任何有效功率值)
📊 已采集第 21 行 → 11AC 20M, 11 个信道, 使用宏: RATE_SET_2G_HT_20M_11AC
📊 已采集第 21 行 → 11AC 20M, 11 个信道, 使用宏: RATE_SET_2G_HT_20M_EXT_11AC
📊 已采集第 21 行 → 11AC 20M, 11 个信道, 使用宏: RATE_SET_2G_HT_20M_EXT4_11AC
📊 已采集第 21 行 → 11AX 20M, 11 个信道, 使用宏: RATE_SET_2G_HT_20M_11AX
📊 已采集第 21 行 → 11AX 20M, 11 个信道, 使用宏: RATE_SET_2G_HT_20M_EXT_11AX
📊 已采集第 21 行 → 11AX 20M, 11 个信道, 使用宏: RATE_SET_2G_HT_20M_EXT4_11AX
跳过空行: 第 22 行(无任何有效功率值)
跳过空行: 第 23 行(无任何有效功率值)
跳过空行: 第 24 行(无任何有效功率值)
跳过空行: 第 25 行(无任何有效功率值)
跳过空行: 第 26 行(无任何有效功率值)
跳过空行: 第 27 行(无任何有效功率值)
跳过空行: 第 28 行(无任何有效功率值)
跳过空行: 第 29 行(无任何有效功率值)
跳过空行: 第 30 行(无任何有效功率值)
跳过空行: 第 31 行(无任何有效功率值)
📊 已采集第 32 行 → 11BE 20M, 11 个信道, 使用宏: RATE_SET_2G_HT_20M_11BE
📊 已采集第 32 行 → 11BE 20M, 11 个信道, 使用宏: RATE_SET_2G_HT_20M_EXT_11BE
📊 已采集第 32 行 → 11BE 20M, 11 个信道, 使用宏: RATE_SET_2G_HT_20M_EXT4_11BE
跳过空行: 第 33 行(无任何有效功率值)
跳过空行: 第 34 行(无任何有效功率值)
跳过空行: 第 35 行(无任何有效功率值)
跳过空行: 第 36 行(无任何有效功率值)
跳过空行: 第 37 行(无任何有效功率值)
跳过空行: 第 38 行(无任何有效功率值)
跳过空行: 第 39 行(无任何有效功率值)
跳过空行: 第 40 行(无任何有效功率值)
跳过空行: 第 41 行(无任何有效功率值)
跳过空行: 第 42 行(无任何有效功率值)
跳过空行: 第 43 行(无任何有效功率值)
跳过空行: 第 44 行(无任何有效功率值)
📊 已采集第 46 行 → 11n 40M, 7 个信道, 使用宏: RATE_SET_2G_HT_40M_11n
📊 已采集第 46 行 → 11n 40M, 7 个信道, 使用宏: RATE_SET_2G_HT_40M_EXT_11n
📊 已采集第 46 行 → 11n 40M, 7 个信道, 使用宏: RATE_SET_2G_HT_40M_EXT4_11n
跳过空行: 第 47 行(无任何有效功率值)
跳过空行: 第 48 行(无任何有效功率值)
跳过空行: 第 49 行(无任何有效功率值)
跳过空行: 第 50 行(无任何有效功率值)
跳过空行: 第 51 行(无任何有效功率值)
跳过空行: 第 52 行(无任何有效功率值)
📊 已采集第 53 行 → 11AC 40M, 7 个信道, 使用宏: RATE_SET_2G_HT_40M_11AC
📊 已采集第 53 行 → 11AC 40M, 7 个信道, 使用宏: RATE_SET_2G_HT_40M_EXT_11AC
📊 已采集第 53 行 → 11AC 40M, 7 个信道, 使用宏: RATE_SET_2G_HT_40M_EXT4_11AC
📊 已采集第 53 行 → 11AX 40M, 7 个信道, 使用宏: RATE_SET_2G_HT_40M_11AX
📊 已采集第 53 行 → 11AX 40M, 7 个信道, 使用宏: RATE_SET_2G_HT_40M_EXT_11AX
📊 已采集第 53 行 → 11AX 40M, 7 个信道, 使用宏: RATE_SET_2G_HT_40M_EXT4_11AX
跳过空行: 第 54 行(无任何有效功率值)
跳过空行: 第 55 行(无任何有效功率值)
跳过空行: 第 56 行(无任何有效功率值)
跳过空行: 第 57 行(无任何有效功率值)
跳过空行: 第 58 行(无任何有效功率值)
跳过空行: 第 59 行(无任何有效功率值)
跳过空行: 第 60 行(无任何有效功率值)
跳过空行: 第 61 行(无任何有效功率值)
跳过空行: 第 62 行(无任何有效功率值)
跳过空行: 第 63 行(无任何有效功率值)
📊 已采集第 64 行 → 11BE 40M, 7 个信道, 使用宏: RATE_SET_2G_HT_40M_11BE
📊 已采集第 64 行 → 11BE 40M, 7 个信道, 使用宏: RATE_SET_2G_HT_40M_EXT_11BE
📊 已采集第 64 行 → 11BE 40M, 7 个信道, 使用宏: RATE_SET_2G_HT_40M_EXT4_11BE
跳过空行: 第 65 行(无任何有效功率值)
跳过空行: 第 66 行(无任何有效功率值)
跳过空行: 第 67 行(无任何有效功率值)
跳过空行: 第 68 行(无任何有效功率值)
跳过空行: 第 69 行(无任何有效功率值)
跳过空行: 第 70 行(无任何有效功率值)
跳过空行: 第 71 行(无任何有效功率值)
跳过空行: 第 72 行(无任何有效功率值)
跳过空行: 第 73 行(无任何有效功率值)
跳过空行: 第 74 行(无任何有效功率值)
跳过空行: 第 75 行(无任何有效功率值)
跳过空行: 第 76 行(无任何有效功率值)
[Band=2G] 累计 2.4G 信道范围: CH1 – CH11
成功从 '2.4G功率表(版本1.0)' 添加 88 条压缩后 TX 限幅条目
当前累计 2.4G 信道范围: CH1 – CH11
'5G功率表(版本1.0)' → 清洗后: '5G功率表版本1.0'
匹配成功!'5G功率表(版本1.0)' → [5G] 配置
找到表头行: 第 3 行
开始向上查找 '认证功率',扫描第 0 ~ 2 行...
发现合并单元格含 '证功率': '认证功率' → L3
解析 CH 行(第 5 行),限定列范围: Col 11 ~ 35
在指定区域内未找到任何 CHx 列
从 '5G功率表(版本1.0)' 未收集到有效数据
'6G功率表 (版本1.0)NSS=1' → 清洗后: '6G功率表版本1.0NSS=1'
匹配成功!'6G功率表 (版本1.0)NSS=1' → [6G] 配置
找到表头行: 第 3 行
开始向上查找 '认证功率',扫描第 0 ~ 2 行...
发现合并单元格含 '证功率': '认证功率' → P3
解析 CH 行(第 5 行),限定列范围: Col 15 ~ 39
在指定区域内未找到任何 CHx 列
从 '6G功率表 (版本1.0)NSS=1' 未收集到有效数据
'6G功率表 (版本1.0)NSS=2' → 清洗后: '6G功率表版本1.0NSS=2'
匹配成功!'6G功率表 (版本1.0)NSS=2' → [6G] 配置
找到表头行: 第 3 行
开始向上查找 '认证功率',扫描第 0 ~ 2 行...
发现合并单元格含 '证功率': '认证功率' → P3
解析 CH 行(第 5 行),限定列范围: Col 15 ~ 39
在指定区域内未找到任何 CHx 列
从 '6G功率表 (版本1.0)NSS=2' 未收集到有效数据
'6G功率表 (版本1.0)NSS=4' → 清洗后: '6G功率表版本1.0NSS=4'
匹配成功!'6G功率表 (版本1.0)NSS=4' → [6G] 配置
找到表头行: 第 3 行
开始向上查找 '认证功率',扫描第 0 ~ 2 行...
发现合并单元格含 '证功率': '认证功率' → P3
解析 CH 行(第 5 行),限定列范围: Col 15 ~ 39
在指定区域内未找到任何 CHx 列
从 '6G功率表 (版本1.0)NSS=4' 未收集到有效数据
'Sheet1' → 清洗后: 'Sheet1'
未匹配到 'Sheet1' 的模式,跳过...
正在执行 generate_outputs()...
自动分类结果:
├─ Normal 模式(不含 HT): 4 条
└─ HT 模式(含 HT): 84 条
正在设置监管 fallback 范围: RANGE_2G_20M_1_11
已绑定监管 fallback: RANGE_2G_20M_1_11 → CHANNEL_SET_1
检测到变更,将更新文件: F:\output\tx_limit_table.c
已写入 → F:\output\tx_limit_table.c
已生成: F:\output\locale_default.c
生成 locale 文件 → locale_default.c
已生成: F:\output\clm_macros.h
生成宏定义头文件 → clm_macros.h
已添加 'used_ranges' 到 config: F:\excle_to_clm\config\config.json
共 7 个唯一 RANGE 宏被使用:
- RANGE_2G_20M_11_11
- RANGE_2G_20M_1_1
- RANGE_2G_20M_1_11
- RANGE_2G_20M_2_10
- RANGE_2G_40M_3_3
- RANGE_2G_40M_4_8
- RANGE_2G_40M_9_9
已成功将精简后的 channel_set_map 写回配置文件: {'RANGE_2G_20M_1_11': 1}
所有输出文件生成完成。
输出路径: F:\output
功率表名称: DEFAULT (DEFAULT)
进程已结束,退出代码为 0
但是实际config文件却没有写入
最新发布