更新参数管理模块代码生成逻辑;

This commit is contained in:
2024-11-04 01:39:56 +08:00
parent 3d1a9e2b1d
commit 06c331080e
5 changed files with 120 additions and 10 deletions

4
.vscode/launch.json vendored
View File

@@ -11,7 +11,7 @@
"program": "source/main.py",
"console": "integratedTerminal",
"args": [
"test/param_input.xlsx",
"test/CBB_Param/param_input.xlsx",
"-t=CBB_Param",
"-d=PV_INV30",
]
@@ -24,7 +24,7 @@
"console": "integratedTerminal",
"args": [
// "${command:pickArgs}",
"test/光伏逆变器2.1_通信地址表_V01.xlsx",
"test/PV_Inverter/光伏逆变器2.1_通信地址表_V33.xlsx",
"-t=COMM_ARM",
"-d=PV_INV30"
],

4
.vscode/tasks.json vendored
View File

@@ -13,7 +13,7 @@
"type": "shell",
"command": "de_encrypt",
"args": [
"test/光伏逆变器2.1_通信地址表_V01.xlsx",
"${command:pickArgs}",
],
"problemMatcher": [],
@@ -34,7 +34,7 @@
"type": "shell",
"command": "rm",
"args": [
"test/光伏逆变器2.1_通信地址表_V01_dec.dec",
"${command:pickArgs}",
],
"problemMatcher": [],

View File

@@ -0,0 +1,23 @@
# 文本选择器规则
## 简介
1. 为实现基于模板文件生成代码的功能, 需要实现一套模板文件解析规则;
2. 代码生成过程中, 解析数据表格获得代码数据, 解析模板文本获得代码实现的样式, 通过将代码样式中需要的信息填入代码数据, 完成代码生成;
3. 模板文本包含以下内容:
1. 一般文本: 在代码生成中保持原样;
2. 生成内容: 通过解析内部字符串, 对数据进行替换;
1. 单行生成内容; `{{}}`
2. 多行生成内容; `<<>>`
1. 包含一段代码, 通过`ast`模块解析实现更复杂的代码生成;
## 解析规则
- 数据选择器: `variable[.member][:index][#function]`
1. 变量指定(`variable`): 确定需要替换的变量信息
2. 成员选择(`.member`): 取得数据的成员信息
3. 索引选择(`:index`): 序列数据的内容指定;
4. 键选择(`@key`): 字典数据的内容指定;
3. 函数后处理(`#function`): 依次解析函数名, 通过pandas或自定义函数实现生成文本的后处理;

View File

@@ -9,13 +9,32 @@
'''
import numpy as np
from pandas import DataFrame
from pandas import Series, DataFrame
def code_cbb_param(sheet: DataFrame) -> str|None:
""" 参数页代码生成 """
pass
def code_cbb_params(sheets: dict[str, DataFrame]) -> str|None:
""" 完整参数模块配置代码生成 """
pass
param_pages = []
for name, sheet in sheets.items():
""" 解析表格文件页为代码结构体 """
print(sheet.head())
page_meta = sheet.iloc[:9, 3:4].T.reset_index()
page_meta.columns = sheet.iloc[:9, 2:3].T.reset_index().loc[0]
page_data = sheet.iloc[10:, :].reset_index(drop=True)
page_data.columns = sheet.iloc[9,:]
param_page = {
'name': name,
'info': page_meta.loc[0],
'data': page_data
}
param_pages.append(param_page)
for info in param_pages:
""" 依据结构体生成参数页代码 """
file_name = f"param_{info['name'].lower()}_defination.h"
file_text =
def file_header():

View File

@@ -0,0 +1,68 @@
/*
* =====================================================================================
*
* Filename: {{info@name#lower}}
*
* Description:
*
* Version: 1.0
* Created: {{`time.ctime()`}}
* Revision: none
* Compiler: gcc
*
* Author: Linghtiin
* Organization: Topscomm
*
* =====================================================================================
*/
#ifndef __PARAM_{{info@name#upper}}_DEFINATION_H__
#define __PARAM_{{info@name#upper}}_DEFINATION_H__
#include <stdint.h>
#include <stddef.h>
#define {{info@name#upper}}_PARAM_NUM ({{info@data.shape:0}})
<<for >>
#define {{info@name#upper}}_PARAM_{{info@data#upper}}_SIZE (4)
#define COMM_PARAM_REMOTE_PORT_SIZE (sizeof(uint16_t))
#define COMM_PARAM_INTERACTIVE_CYCLE_4G_SIZE (sizeof(uint16_t))
#define COMM_PARAM_GPRS_COM_OVER_TIME_SIZE (sizeof(uint16_t))
#define COMM_PARAM_CAN_ENABLE_SIZE (sizeof(uint8_t))
#define COMM_PARAM_CAN_DEV_ID_SIZE (sizeof(uint16_t))
#define COMM_PARAM_CAN_PARALLEL_NUM_SIZE (sizeof(uint16_t))
#define COMM_PARAM_COM_OVER_TIME_SIZE (sizeof(uint16_t))
#define COMM_PARAM_LOG_LEVEL_SIZE (sizeof(uint8_t))
#define COMM_PARAM_LOG_OUTPUT_SIZE (sizeof(uint8_t))
#define COMM_PARAM_LOG_CHANNEL_SIZE (sizeof(uint8_t))
#define COMM_PARAM_LOG_FILE_SIZE_SIZE (sizeof(uint16_t))
#define COMM_PARAM_LOG_FILE_CNT_SIZE (sizeof(uint16_t))
#define COMM_PARAM_LOG_UDP_PORT_SIZE (sizeof(uint16_t))
#define COMM_PARAM_LOG_UDP_ETH_IP_SIZE (4)
#define COMM_PARAM_PLC_CHECK_COMM_PERIOD_SIZE (sizeof(uint16_t))
typedef struct
{
uint8_t remote_ip[COMM_PARAM_REMOTE_IP_SIZE]; /* 主站IP */
uint16_t remote_port; /* 主站端口号 */
uint16_t interactive_cycle_4g; /* 4G交互周期 */
uint16_t gprs_com_over_time; /* 4G通信超时阈值 */
uint8_t can_enable; /* CAN使能 */
uint16_t can_dev_id; /* CAN并机ID */
uint16_t can_parallel_num; /* CAN并机数量 */
uint16_t com_over_time; /* 通信故障判定时间 */
uint8_t log_level; /* 日志级别 */
uint8_t log_output; /* 日志输出模式 */
uint8_t log_channel; /* 日志监控通道 */
uint16_t log_file_size; /* 日志文件大小 */
uint16_t log_file_cnt; /* 日志文件数量 */
uint16_t log_udp_port; /* 日志网络端口 */
uint8_t log_udp_eth_ip[COMM_PARAM_LOG_UDP_ETH_IP_SIZE]; /* 日志网络地址 */
uint16_t plc_check_comm_period; /* 载波通信超时判断周期 */
} comm_param_t;
#endif /* ----- #ifndef __PARAM_{{info@name#upper}}_DEFINATION_H__ ----- */