修复两个 BUG:

1. 文件浏览窗口现在使用 JSON 文件所在目录作为初始路径
2. 修复拖拽 JSON 文件打开工程功能

修改内容:
- mainwindow.cpp: addSourceFile/addIncludeDir/addLibrary 添加初始目录
- mainwindow.cpp: dropEvent 完善所有 UI 组件的加载
This commit is contained in:
虾哥
2026-04-09 23:32:13 -04:00
parent 8722b647d4
commit fff7509a92
6 changed files with 653 additions and 4 deletions

252
switch_def.c Normal file
View File

@@ -0,0 +1,252 @@
/**
* @file switch_def.c
* @brief 开关控制结构体实现
* @author 虾哥
* @date 2026-04-09
*/
#include "switch_def.h"
#include <string.h>
/**
* @brief 全局变压器控制实例
*
* 所有开关控制的全局实例
* 在系统启动时初始化为 0
*/
TRANS_CONTROL g_trans_control = {0};
/**
* @brief 初始化变压器控制结构
*
* 将所有开关状态清零
* 包括合闸命令、分闸命令、故障复位命令等
*
* @param ptr 指向 TRANS_CONTROL 结构体的指针
*/
void TransControl_Init(TRANS_CONTROL_PTR ptr)
{
// 参数检查
if (ptr == NULL)
{
return;
}
// 清空整个结构体内存
memset(ptr, 0, sizeof(TRANS_CONTROL));
}
/**
* @brief 合闸操作
*
* 设置指定开关的合闸命令
* 同时清除分闸命令,避免冲突
*
* @param ptr 指向 TRANS_CONTROL 结构体的指针
* @param sw 指向具体 SWITCH 成员的指针
*/
void Switch_Close(TRANS_CONTROL_PTR ptr, SWITCH* sw)
{
// 参数检查
if ((ptr == NULL) || (sw == NULL))
{
return;
}
// 检查开关是否在有效范围内
if ((uint8_t*)sw < (uint8_t*)ptr ||
(uint8_t*)sw >= (uint8_t*)ptr + sizeof(TRANS_CONTROL))
{
return;
}
// 设置合闸命令
sw->close_cmd = 1;
// 清除分闸命令,避免同时合分
sw->open_cmd = 0;
}
/**
* @brief 分闸操作
*
* 设置指定开关的分闸命令
* 同时清除合闸命令,避免冲突
*
* @param ptr 指向 TRANS_CONTROL 结构体的指针
* @param sw 指向具体 SWITCH 成员的指针
*/
void Switch_Open(TRANS_CONTROL_PTR ptr, SWITCH* sw)
{
// 参数检查
if ((ptr == NULL) || (sw == NULL))
{
return;
}
// 检查开关是否在有效范围内
if ((uint8_t*)sw < (uint8_t*)ptr ||
(uint8_t*)sw >= (uint8_t*)ptr + sizeof(TRANS_CONTROL))
{
return;
}
// 设置分闸命令
sw->open_cmd = 1;
// 清除合闸命令,避免同时合分
sw->close_cmd = 0;
}
/**
* @brief 故障复位操作
*
* 设置指定开关的故障复位命令
* 用于清除开关的故障状态
*
* @param ptr 指向 TRANS_CONTROL 结构体的指针
* @param sw 指向具体 SWITCH 成员的指针
*/
void Switch_Reset(TRANS_CONTROL_PTR ptr, SWITCH* sw)
{
// 参数检查
if ((ptr == NULL) || (sw == NULL))
{
return;
}
// 检查开关是否在有效范围内
if ((uint8_t*)sw < (uint8_t*)ptr ||
(uint8_t*)sw >= (uint8_t*)ptr + sizeof(TRANS_CONTROL))
{
return;
}
// 设置故障复位命令
sw->reset_cmd = 1;
}
/**
* @brief 获取开关状态
*
* 读取指定开关的当前状态
*
* @param sw 指向具体 SWITCH 成员的指针
* @return uint8_t 开关状态1=合位0=分位
*/
uint8_t Switch_GetStatus(SWITCH* sw)
{
// 参数检查
if (sw == NULL)
{
return 0;
}
return sw->status;
}
/**
* @brief 获取故障状态
*
* 读取指定开关的故障状态
*
* @param sw 指向具体 SWITCH 成员的指针
* @return uint8_t 故障状态1=故障0=正常
*/
uint8_t Switch_GetFaultStatus(SWITCH* sw)
{
// 参数检查
if (sw == NULL)
{
return 0;
}
return sw->fault_status;
}
/**
* @brief 设置开关状态
*
* 更新指定开关的实际状态
* 通常由硬件反馈更新
*
* @param sw 指向具体 SWITCH 成员的指针
* @param status 开关状态1=合位0=分位
*/
void Switch_SetStatus(SWITCH* sw, uint8_t status)
{
// 参数检查
if (sw == NULL)
{
return;
}
sw->status = status;
}
/**
* @brief 设置故障状态
*
* 更新指定开关的故障状态
* 通常由保护电路反馈更新
*
* @param sw 指向具体 SWITCH 成员的指针
* @param fault_status 故障状态1=故障0=正常
*/
void Switch_SetFaultStatus(SWITCH* sw, uint8_t fault_status)
{
// 参数检查
if (sw == NULL)
{
return;
}
sw->fault_status = fault_status;
}
/**
* @brief 清除所有命令
*
* 清除指定开关的所有控制命令
* 用于执行完操作后复位命令状态
*
* @param sw 指向具体 SWITCH 成员的指针
*/
void Switch_ClearCommands(SWITCH* sw)
{
// 参数检查
if (sw == NULL)
{
return;
}
sw->close_cmd = 0;
sw->open_cmd = 0;
sw->reset_cmd = 0;
}
/**
* @brief 打印开关信息(调试用)
*
* 输出指定开关的当前状态到调试终端
*
* @param name 开关名称(如 "1-QF1"
* @param sw 指向具体 SWITCH 成员的指针
*/
void Switch_PrintInfo(const char* name, SWITCH* sw)
{
// 参数检查
if ((name == NULL) || (sw == NULL))
{
return;
}
// 打印开关信息
printf("[%s] 状态=%d, 故障=%d, 合闸=%d, 分闸=%d, 复位=%d\r\n",
name,
sw->status,
sw->fault_status,
sw->close_cmd,
sw->open_cmd,
sw->reset_cmd);
}