更新参数管理模块代码生成逻辑;
This commit is contained in:
4
.vscode/launch.json
vendored
4
.vscode/launch.json
vendored
@@ -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
4
.vscode/tasks.json
vendored
@@ -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": [],
|
||||
|
||||
23
sample/text_selector_rules.md
Normal file
23
sample/text_selector_rules.md
Normal 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或自定义函数实现生成文本的后处理;
|
||||
|
||||
@@ -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():
|
||||
68
source/CBB/templates/param_defination.templet
Normal file
68
source/CBB/templates/param_defination.templet
Normal 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__ ----- */
|
||||
Reference in New Issue
Block a user