Files
VoiletCStudio/switch_def.c
虾哥 5a40d78200 添加开关控制结构体定义和示例代码
- switch_def.h: SWITCH 和 TRANS_CONTROL 结构体定义
- switch_def.c: 开关控制函数实现(初始化/合闸/分闸/复位)
- switch_example.c: 完整使用示例代码

包含所有开关:
- 1-QF (1-12, 14-16, 20) 共 16 个
- 2-QF (1-13, 16-18, 20, 30) 共 18 个
- 3-QF (1-5, 8-9, 11-14, 16-22) 共 18 个
- F1-QF (1-3) 共 3 个
- F2-QF (1-3) 共 3 个
- F3-QF (1-3) 共 3 个
- 4-QF (2-9, 21-26, 28, 31-41) 共 26 个
- 5-QF (2-6, 31-34) 共 9 个
- 6-QF (1-9) 共 9 个

总计:105 个断路器开关
2026-04-09 22:36:27 -04:00

253 lines
5.0 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* @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);
}