修复两个 BUG:
1. 文件浏览窗口现在使用 JSON 文件所在目录作为初始路径 2. 修复拖拽 JSON 文件打开工程功能 修改内容: - mainwindow.cpp: addSourceFile/addIncludeDir/addLibrary 添加初始目录 - mainwindow.cpp: dropEvent 完善所有 UI 组件的加载
This commit is contained in:
252
switch_def.c
Normal file
252
switch_def.c
Normal 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);
|
||||
}
|
||||
Reference in New Issue
Block a user