1. انتخاب بر اساس ورودی
// انتخاب عملیات بر اساس ورودی فعال int activeInput = -1; for (int i = 0; i < 8; i++) { if (I0[i].Value) { activeInput = i; break; } } switch (activeInput) { case 0: SetQ(0, 0); break; case 1: SetQ(0, 1); break; case 2: SetQ(0, 2); break; case 3: SetQ(0, 3); break; case 4: SetQ(0, 4); break; case 5: SetQ(0, 5); break; default: // هیچ ورودی فعال نیست for (int i = 0; i < 6; i++) { ResetQ(0, i); } break; }
2. انتخاب بر اساس حالت سیستم
// تعیین حالت بر اساس ورودیها if (I0[0].Value && I0[1].Value) { currentState = RUNNING; } else if (I0[2].Value) { currentState = ERROR; } else if (I0[3].Value) { currentState = MAINTENANCE; } switch (currentState) { case IDLE: // حالت آماده به کار for (int i = 0; i < 6; i++) { ResetQ(0, i); } break; case RUNNING: // حالت در حال کار SetQ(0, 0); // موتور اصلی SetQ(0, 1); // پمپ break; case ERROR: // حالت خطا HAL_GPIO_WritePin(LED_ERROR_GPIO_Port, LED_ERROR_Pin, GPIO_PIN_SET); for (int i = 0; i < 6; i++) { ResetQ(0, i); } break; case MAINTENANCE: // حالت تعمیر SetQ(0, 5); // چراغ تعمیر break; default: break; }
3. انتخاب بر اساس تایمر
// انتخاب عملیات بر اساس وضعیت تایمر int activeTimer = -1; for (int i = 0; i < 5; i++) { if (T[i].Q) { activeTimer = i; break; } } switch (activeTimer) { case 0: // تایمر ۰ تمام شده SetQ(0, 0); break; case 1: // تایمر ۱ تمام شده SetQ(0, 1); break; case 2: // تایمر ۲ تمام شده SetQ(0, 2); break; case 3: // تایمر ۳ تمام شده SetQ(0, 3); break; case 4: // تایمر ۴ تمام شده SetQ(0, 4); break; default: // هیچ تایمری تمام نشده break; }
4. انتخاب بر اساس خطای ارتباطی
// انتخاب عملیات بر اساس نوع خطا int errorType = 0; if (COM1_Error) errorType = 1; else if (COM2_Error) errorType = 2; switch (errorType) { case 0: // بدون خطا HAL_GPIO_WritePin(LED_ERROR_GPIO_Port, LED_ERROR_Pin, GPIO_PIN_RESET); break; case 1: // خطای COM1 HAL_GPIO_WritePin(LED_ERROR_GPIO_Port, LED_ERROR_Pin, GPIO_PIN_SET); SetQ(0, 0); // فعال کردن هشدار break; case 2: // خطای COM2 HAL_GPIO_WritePin(LED_ERROR_GPIO_Port, LED_ERROR_Pin, GPIO_PIN_SET); SetQ(0, 1); // فعال کردن هشدار break; default: break; }
