EP.2-2 비교 연산과 조건문

EP.2-2 비교 연산과 조건문: 프로그램의 인터록 설계 | 제어 엔지니어 구조 분석

Phase 2: Operations & Control Logic

EP.2-2 비교 연산과 조건문 — 프로그램의 인터록

판단하고, 거르고, 분기하는 지능형 로직의 핵심

비교 연산자

PLC의 CMP 명령어처럼, 두 값을 비교하여 참(1) 또는 거짓(0)의 전기 신호를 만듭니다. 이 신호는 명령어 포인터(IP)가 다음에 실행할 메모리 주소를 갈아타게 만드는 물리적 스위치가 됩니다.

  • == (같다): if (a == 10) (※ 주의: =는 대입, ==는 비교!)
  • != (다르다): 비상 정지 신호가 OFF가 아닐 때 주로 사용
  • && (AND / 직렬): 모든 접점이 닫혀야 가동 승인
  • || (OR / 병렬): 어느 하나라도 눌리면 즉시 차단
"가드 로직(Guard Logic)"

현장 제어에서 가장 위험한 것은 '정의되지 않은 신호'입니다. 명확한 정상(0)과 위험(1, 2) 외의 모든 수치를 예외로 처리하여 시스템을 보호해야 합니다.

#include <stdio.h>

int main() {
    int status, signal;

    printf("[시스템 체크] 상태를 입력하세요 (0:정상, 1:비상, 2:과부하): ");
    scanf_s("%d", &status);

    if (status == 1 || status == 2) {
        // 1단계 차단: 확실한 에러 상황
        printf("!!! [EMERGENCY] 시스템 강제 중단 (비상/과부하) !!!\n");
    } else if (status == 0) {
        // 2단계 진입: 명확한 정상 상황
        printf("정상 가동 중입니다. 제어 신호를 입력하세요: ");
        scanf_s("%d", &signal);

        // 세부 판단 로직 (중첩 인터록)
        if (signal % 2 == 0) {
            printf(">>> [STATUS: RUN] 릴레이 ON\n");
        } else {
            printf(">>> [STATUS: WAIT] 홀수 신호 대기 중\n");
        }
    } else {
        // 예외 처리: 정의되지 않은 제3의 신호 차단
        printf("??? [UNKNOWN] 알 수 없는 신호입니다. 시스템 대기 유지.\n");
    }
    return 0;
}

▲ 실습 결과: 0, 1, 2 이외의 숫자 입력 시 안전하게 예외 처리되는 모습

switch문: 다중 채널 셀렉터 스위치

입력값이 정수 형태로 딱딱 끊어질 때(운전 모드, 에러 번호 등)는 if문보다 switch문이 훨씬 직관적입니다. 이는 하드웨어의 로터리 셀렉터 스위치를 소프트웨어로 구현한 것과 같습니다.

switch (mode) {
    case 1:
        printf("[MANUAL] 수동 운전 모드입니다. 조이스틱을 사용하세요.\n");
        break; // 채널 탈출

    case 2:
        printf("[AUTO] 자동 운전 모드입니다. 센서 감지를 시작합니다.\n");
        break;

    case 3:
        printf("[SEMI] 반자동 모드입니다. 단계별 승인이 필요합니다.\n");
        break;

    default: // 명확하지 않은 명령 차단기
        printf("[ERROR] 정의되지 않은 모드 번호(%d)입니다. 안전을 위해 대기합니다.\n", mode);
        break;
}

▲ 실습 결과: 선택한 모드 번호에 따라 채널이 즉각적으로 분기되는 화면

3. 실습 검증: 나머지(%) 연산을 활용한 인터록

전달받은 신호가 짝수인지 홀수인지 판단하여 릴레이를 제어합니다. ALU가 낚아챈 나머지 값을 조건문의 스위치로 활용하는 실전 기법입니다.

// 2로 나눈 나머지가 0이면 '짝수'라는 논리
if (number % 2 == 0) {
    printf("입력하신 %d는(은) [짝수]입니다. 릴레이 ON!\n", number);
}
else {
    printf("입력하신 %d는(은) [홀수]입니다. 경보 발생!\n", number);
}

▲ 실습 결과: 입력값에 따라 [릴레이 ON] 또는 [경보 발생]이 출력되는 흐름

© 2026 ZIN PARK · MASTERING CONTROL ENGINEERING SERIES
"명확하지 않은 명령을 거르는 것이 안전 제어의 시작이다."

댓글

이 블로그의 인기 게시물

EP.0 코딩의 첫걸음 — 전기를 어떻게 연결할 것인가?

EP.0-1 천공카드

EP.1-1트랜지스터