Files
VoiletCStudio/switch_example.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

155 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_example.c
* @brief 开关控制使用示例
* @author 虾哥
* @date 2026-04-09
*
* 本文件演示如何使用 TRANS_CONTROL 结构体
* 包含初始化、合闸、分闸、故障复位等操作示例
*/
#include "switch_def.h"
#include <stdio.h>
/**
* @brief 主函数示例
*
* 演示完整的开关控制流程
*
* @return int 程序执行结果
*/
int main(void)
{
// ================================
// 1. 初始化变压器控制结构
// ================================
TransControl_Init(&g_trans_control);
printf("变压器控制结构初始化完成\r\n");
// ================================
// 2. 1-QF1 合闸操作
// ================================
printf("\r\n=== 1-QF1 合闸 ===\r\n");
Switch_Close(&g_trans_control, &g_trans_control.qf1_1);
Switch_PrintInfo("1-QF1", &g_trans_control.qf1_1);
// ================================
// 3. 1-QF2 合闸操作
// ================================
printf("\r\n=== 1-QF2 合闸 ===\r\n");
Switch_Close(&g_trans_control, &g_trans_control.qf1_2);
Switch_PrintInfo("1-QF2", &g_trans_control.qf1_2);
// ================================
// 4. 2-QF1 合闸操作
// ================================
printf("\r\n=== 2-QF1 合闸 ===\r\n");
Switch_Close(&g_trans_control, &g_trans_control.qf2_1);
Switch_PrintInfo("2-QF1", &g_trans_control.qf2_1);
// ================================
// 5. 3-QF1 分闸操作
// ================================
printf("\r\n=== 3-QF1 分闸 ===\r\n");
Switch_Open(&g_trans_control, &g_trans_control.qf3_1);
Switch_PrintInfo("3-QF1", &g_trans_control.qf3_1);
// ================================
// 6. 1-QF14 故障复位操作
// ================================
printf("\r\n=== 1-QF14 故障复位 ===\r\n");
Switch_Reset(&g_trans_control, &g_trans_control.qf1_14);
Switch_PrintInfo("1-QF14", &g_trans_control.qf1_14);
// ================================
// 7. 批量操作示例:合上 1 侧所有开关
// ================================
printf("\r\n=== 批量合上 1 侧所有开关 ===\r\n");
Switch_Close(&g_trans_control, &g_trans_control.qf1_1);
Switch_Close(&g_trans_control, &g_trans_control.qf1_2);
Switch_Close(&g_trans_control, &g_trans_control.qf1_3);
Switch_Close(&g_trans_control, &g_trans_control.qf1_4);
Switch_Close(&g_trans_control, &g_trans_control.qf1_5);
Switch_Close(&g_trans_control, &g_trans_control.qf1_6);
Switch_Close(&g_trans_control, &g_trans_control.qf1_7);
Switch_Close(&g_trans_control, &g_trans_control.qf1_8);
Switch_Close(&g_trans_control, &g_trans_control.qf1_9);
Switch_Close(&g_trans_control, &g_trans_control.qf1_10);
Switch_Close(&g_trans_control, &g_trans_control.qf1_11);
Switch_Close(&g_trans_control, &g_trans_control.qf1_12);
Switch_Close(&g_trans_control, &g_trans_control.qf1_14);
Switch_Close(&g_trans_control, &g_trans_control.qf1_15);
Switch_Close(&g_trans_control, &g_trans_control.qf1_16);
Switch_Close(&g_trans_control, &g_trans_control.qf1_20);
printf("1 侧所有开关已合闸\r\n");
// ================================
// 8. 直接访问结构体成员示例
// ================================
printf("\r\n=== 直接访问结构体成员 ===\r\n");
// 直接设置合闸命令
g_trans_control.qf2_20.close_cmd = 1;
printf("2-QF20 合闸命令已设置\r\n");
// 直接读取状态
uint8_t status = g_trans_control.qf2_20.status;
printf("2-QF20 当前状态:%d\r\n", status);
// 直接设置故障状态
g_trans_control.qf3_8.fault_status = 1;
printf("3-QF8 故障状态已设置\r\n");
// ================================
// 9. 状态检查示例
// ================================
printf("\r\n=== 状态检查 ===\r\n");
if (Switch_GetStatus(&g_trans_control.qf1_1) == 1)
{
printf("1-QF1 在合位\r\n");
}
else
{
printf("1-QF1 在分位\r\n");
}
if (Switch_GetFaultStatus(&g_trans_control.qf3_8) == 1)
{
printf("3-QF8 有故障\r\n");
}
else
{
printf("3-QF8 正常\r\n");
}
// ================================
// 10. 清除命令示例
// ================================
printf("\r\n=== 清除命令 ===\r\n");
Switch_ClearCommands(&g_trans_control.qf1_1);
printf("1-QF1 所有命令已清除\r\n");
Switch_PrintInfo("1-QF1", &g_trans_control.qf1_1);
printf("\r\n=== 示例程序执行完成 ===\r\n");
return 0;
}
/**
* @brief 中断服务程序示例
*
* 模拟硬件中断处理开关状态
* 在实际应用中,这会是真正的中断处理函数
*/
void HWINT_IRQHandler(void)
{
// 检查 1-QF1 是否故障
if (g_trans_control.qf1_1.fault_status == 1)
{
// 自动分闸
Switch_Open(&g_trans_control, &g_trans_control.qf1_1);
printf("中断1-QF1 故障,已自动分闸\r\n");
}
}