/** * @file switch_example.c * @brief 开关控制使用示例 * @author 虾哥 * @date 2026-04-09 * * 本文件演示如何使用 TRANS_CONTROL 结构体 * 包含初始化、合闸、分闸、故障复位等操作示例 */ #include "switch_def.h" #include /** * @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"); } }