State Machine이란?|설비 상태를 단계별로 관리하는 원리
State Machine이란?|설비 상태를 단계별로 관리하는 원리
메타디스크립션
State Machine은 설비의 동작 상태를 Idle, Ready, Running, Error 등으로 구분하고 정해진 조건에 따라 상태를 전환하는 제어 방식입니다. PLC에서 State Machine을 사용하는 이유와 Sequence Control과의 차이, 상태 전환조건 및 설계방법을 알아봅니다.
자동화 설비의 PLC 프로그램을 작성하다 보면 단순히 출력 몇 개를 ON/OFF하는 수준을 넘어 현재 설비가 어떤 상태인지 명확하게 관리해야 하는 경우가 많습니다.
설비가 정지 중인지, 운전 준비가 완료되었는지, 자동운전 중인지, 일시정지 상태인지 또는 Fault가 발생한 상태인지에 따라 PLC가 수행해야 하는 동작이 달라지기 때문입니다.
이처럼 설비의 동작을 여러 개의 State, 즉 상태로 구분하고 현재 상태와 조건에 따라 다음 상태로 전환하도록 만드는 프로그램 구조를 State Machine이라고 합니다.
State Machine을 사용하면 복잡한 설비에서도 현재 상태와 가능한 동작을 명확하게 구분할 수 있어 PLC 프로그램의 구조화와 유지보수에 도움이 됩니다.
State Machine이란 무엇일까?
State Machine은 시스템이 가질 수 있는 상태를 미리 정의하고 현재 State와 입력조건에 따라 다음 State로 전환하는 제어 구조입니다.
자동화 설비를 예로 들면 다음과 같은 상태를 정의할 수 있습니다.
Idle → Ready → Running → Complete
정상적인 운전뿐 아니라 다음과 같은 상태도 추가할 수 있습니다.
Paused
Error
Recovery
PLC는 현재 State가 무엇인지 기억하고 있으며 센서, 작업자 명령, 공정 완료, Alarm 등의 조건에 따라 다른 State로 이동합니다.
예를 들어 현재 상태가 Ready이고 Start 명령이 입력되었다면 Running으로 전환할 수 있습니다.
Ready + Start 명령 → Running
Running 상태에서 공정이 정상적으로 완료되면 Complete로 이동할 수 있습니다.
Running + 공정 완료 → Complete
반대로 Running 상태에서 Fault가 발생한다면 Error 상태로 이동하도록 구성할 수 있습니다.
Running + Fault 발생 → Error
이처럼 State Machine의 핵심은 현재 상태, 상태에서 수행할 동작, 다음 상태로 이동하기 위한 조건을 명확하게 정의하는 것입니다.
PLC에서는 어떤 State를 사용할까?
State의 종류는 설비에 따라 달라집니다.
간단한 자동화설비라면 다음과 같이 구성할 수 있습니다.
| State | 의미 | 주요 동작 |
|---|---|---|
| Idle | 대기 상태 | 운전 명령 대기 |
| Ready | 운전 준비 | 초기조건 확인 |
| Running | 자동운전 | 공정 Sequence 실행 |
| Paused | 일시정지 | 공정 일시 중단 |
| Complete | 작업 완료 | 완료 처리 |
| Error | 이상 상태 | 운전 제한·Alarm 처리 |
| Recovery | 복구 상태 | 장치 정상상태 복귀 |
모든 설비에 이러한 State가 필요한 것은 아닙니다.
단순한 장비에서는 Idle, Running, Error 정도만으로 충분할 수 있고 복잡한 생산설비에서는 Setup, Manual, Auto, Hold, Aborting 등 더 세분화된 상태가 필요할 수 있습니다.
따라서 State를 많이 만드는 것보다 각 상태가 명확한 의미와 역할을 가지도록 설계하는 것이 중요합니다.
State는 어떻게 변경될까?
State Machine에서는 아무 조건 없이 다음 상태로 이동하지 않습니다.
현재 State와 특정 조건을 함께 확인하여 다음 State를 결정합니다.
예를 들어 설비가 Idle 상태라고 가정해 보겠습니다.
작업자가 Auto Mode를 선택하고 모든 초기조건이 정상이라면 Ready 상태로 이동할 수 있습니다.
Idle + Auto Mode + 초기조건 정상 → Ready
Ready 상태에서 Start 버튼이 입력되면 Running으로 이동합니다.
Ready + Start → Running
Running 상태에서 생산이 완료되면 Complete로 이동합니다.
Running + 생산 완료 → Complete
반면 Running 상태에서 공정 Fault가 발생하면 정상적인 Complete 상태가 아니라 Error 상태로 이동하도록 만들 수 있습니다.
이러한 조건을 State Transition Condition이라고 볼 수 있습니다.
State Machine을 설계할 때는 어떤 State에서 어떤 State로 이동할 수 있는지를 명확하게 정의해야 합니다.
모든 State 사이를 자유롭게 이동하게 만들면 안 되는 이유
State Machine의 중요한 장점 중 하나는 허용된 상태 전환만 가능하도록 제한할 수 있다는 점입니다.
예를 들어 Error 상태에서 바로 Running 상태로 이동하도록 허용하면 Fault의 원인이 제대로 제거되지 않은 상태에서 설비가 다시 움직일 수 있습니다.
따라서 다음과 같은 경로를 만들 수 있습니다.
Error → Reset 확인 → Recovery → Ready → Running
이렇게 하면 Fault가 발생한 설비가 정상운전으로 복귀하기 전에 필요한 확인과 복구절차를 거치도록 만들 수 있습니다.
마찬가지로 Idle 상태에서 바로 Running으로 이동하는 것을 허용하지 않고 Ready 상태를 거치게 만들 수도 있습니다.
State Machine은 단순히 현재 상태를 표시하는 기능이 아니라 설비가 허용된 절차에 따라 상태를 변경하도록 제한하는 제어 구조라는 점이 중요합니다.
State Machine과 Sequence Control은 무엇이 다를까?
State Machine과 Sequence Control은 비슷해 보이지만 프로그램을 바라보는 관점이 조금 다릅니다.
Sequence Control은 주로 공정의 작업순서를 관리합니다.
예를 들어 제품 하나를 가공하는 과정이 다음과 같다고 가정해 보겠습니다.
제품 감지 → Clamp → 실린더 전진 → 가공 → 복귀 → 배출
각 공정을 Step으로 나누고 완료조건에 따라 다음 Step으로 진행하는 것이 Sequence Control입니다.
State Machine은 설비 전체가 현재 어떤 운전상태에 있는지를 관리하는 데 활용할 수 있습니다.
Idle → Ready → Running → Complete
그리고 Running State 내부에서 실제 제품 생산을 위한 Sequence가 실행되도록 구성할 수도 있습니다.
즉 개념적으로 다음처럼 구분할 수 있습니다.
| 구분 | State Machine | Sequence Control |
|---|---|---|
| 중심 개념 | 현재 설비 상태 | 공정 진행 단계 |
| 대표 예 | Idle, Ready, Running, Error | Clamp, 가공, 복귀, 배출 |
| 전환 기준 | 명령·상태·Fault 등 | Step 완료조건 |
| 주요 목적 | 운전상태 관리 | 순차 공정 관리 |
| 활용 관계 | 전체 운전모드 관리 | Running 내부 세부공정 관리 |
다만 실제 PLC 프로젝트에서는 State와 Step이라는 용어를 혼용하기도 합니다.
따라서 명칭 자체보다 각각의 변수와 로직이 설비 상태를 나타내는지, 공정 진행단계를 나타내는지 명확하게 구분하는 것이 중요합니다.
State Machine과 Interlock은 어떻게 연결될까?
State가 특정 단계에 있다고 해서 모든 장치가 자동으로 동작할 수 있는 것은 아닙니다.
예를 들어 설비가 Running 상태라도 공압이 부족하거나 Servo Fault가 발생했다면 특정 동작을 제한해야 할 수 있습니다.
이때 Interlock Logic을 함께 사용합니다.
State Machine은 현재 설비가 어떤 상태인지를 결정하고 Interlock은 해당 상태에서 특정 장치를 실제로 동작시킬 수 있는지를 확인합니다.
예를 들어 다음과 같이 구성할 수 있습니다.
State = Running
Motor Ready = TRUE
Safety 관련 운전 허용상태 정상
관련 Fault 없음
이러한 조건이 충족되었을 때 필요한 장치에 운전 명령을 전달하는 방식입니다.
따라서 State Machine과 Interlock은 서로 대체하는 기능이라기보다 함께 사용하여 프로그램의 구조를 명확하게 만드는 개념으로 볼 수 있습니다.
Fault가 발생하면 State는 어떻게 처리할까?
State Machine에서 중요한 상태 중 하나가 Error 또는 Fault State입니다.
설비가 Running 상태에서 중요한 Fault를 감지하면 Error 상태로 전환하도록 구성할 수 있습니다.
Running + Critical Fault → Error
Error 상태에서는 새로운 Sequence 진행을 중단하고 필요한 출력을 정지시키며 Alarm을 HMI에 표시할 수 있습니다.
다만 모든 Fault가 동일한 정지동작을 요구하는 것은 아닙니다.
어떤 Warning은 설비를 계속 운전하면서 작업자에게 알림만 제공할 수 있고 다른 Fault는 해당 장치만 정지해야 할 수 있습니다.
설비 전체를 정지해야 하는 Fault도 있을 수 있습니다.
따라서 State Machine을 설계할 때는 Fault의 중요도와 영향범위를 고려해야 합니다.
특히 사람의 안전과 관련된 비상정지 등의 기능은 일반 PLC의 Error State만으로 안전기능을 구현하는 개념으로 접근해서는 안 됩니다. 필요한 안전등급과 위험성 평가에 맞는 Safety PLC, Safety Relay 등의 적절한 안전시스템이 별도로 고려되어야 합니다.
Recovery State는 왜 필요할까?
설비가 Fault로 정지한 뒤 바로 Running 상태로 돌아가면 문제가 발생할 수 있습니다.
예를 들어 가공 중 실린더가 중간 위치에서 정지했다고 가정해 보겠습니다.
Fault 원인을 제거하고 Reset 버튼을 눌렀다고 곧바로 다음 Sequence를 실행하면 프로그램이 생각하는 상태와 실제 기계의 위치가 맞지 않을 수 있습니다.
이러한 문제를 관리하기 위해 Recovery State를 사용할 수 있습니다.
Recovery에서는 현재 센서 상태와 장치 위치를 확인하고 필요한 경우 실린더를 원위치로 복귀시키거나 Servo Homing 등의 복구작업을 수행할 수 있습니다.
복구가 정상적으로 완료되면 Ready 또는 Idle 상태로 이동하도록 구성합니다.
Error → Reset → Recovery → Ready
이렇게 하면 Fault Reset과 실제 기계 복구를 구분할 수 있습니다.
즉 Reset 버튼은 단순히 Alarm Bit를 지우는 기능이 아니라 설비가 정상적인 상태로 돌아갈 수 있는 절차를 시작하는 조건으로 활용할 수도 있습니다.
State Entry와 State Exit란 무엇일까?
State Machine을 구조적으로 설계할 때는 특정 State에 처음 들어왔을 때 한 번만 수행해야 하는 동작과 해당 State가 유지되는 동안 계속 수행해야 하는 동작을 구분하면 편리합니다.
예를 들어 Running State에 진입할 때 생산 시작시간을 한 번만 저장한다고 가정해 보겠습니다.
Running 상태는 수분 동안 유지될 수 있으므로 조건이 TRUE인 동안 매 Scan마다 시작시간을 다시 저장하면 최초 시작시간을 알 수 없게 됩니다.
따라서 다음과 같은 개념을 사용할 수 있습니다.
State Entry는 특정 State에 처음 진입했을 때 실행되는 처리입니다.
State Active는 해당 State가 유지되는 동안 수행하는 처리입니다.
State Exit는 현재 State에서 다른 State로 빠져나갈 때 수행하는 처리입니다.
이러한 구조는 PLC 제조사나 프로그래밍 언어에 따라 구현방법이 다르지만 개념을 이해해 두면 복잡한 State Machine을 설계할 때 도움이 됩니다.
State 값은 HMI에 표시하는 것이 좋다
State Machine을 사용한다면 현재 State를 HMI에서 확인할 수 있도록 구성하는 것이 유지보수에 유리합니다.
예를 들어 다음과 같이 표시할 수 있습니다.
Machine State : Running
Sequence Step : 40
Current Process : Product Inspection
이렇게 구성하면 설비가 멈췄을 때 작업자는 현재 PLC가 어떤 상태에 있는지 빠르게 확인할 수 있습니다.
State 번호만 5처럼 표시하기보다 Running, Error, Recovery처럼 의미를 함께 보여주는 것이 이해하기 쉽습니다.
또한 Error State라면 현재 발생한 Alarm과 Reset 가능 여부 등을 함께 표시하면 유지보수 시간을 줄이는 데 도움이 됩니다.
State Machine을 사용하면 프로그램이 왜 편해질까?
설비 규모가 커질수록 여러 조건이 서로 복잡하게 얽힐 수 있습니다.
State Machine 없이 Auto Mode, Start, Stop, Pause, Reset, Fault 등의 조건을 프로그램 곳곳에서 각각 처리하면 특정 상황에서 어떤 로직이 실행되는지 파악하기 어려워질 수 있습니다.
State를 명확하게 구분하면 현재 상태에서 필요한 프로그램만 실행하도록 구조화할 수 있습니다.
예를 들어 Running에서는 생산 Sequence를 실행하고 Error에서는 Fault 처리 로직을 실행하며 Recovery에서는 복구 프로그램을 실행하는 식입니다.
이렇게 하면 프로그램의 역할이 명확하게 분리되어 디버깅과 유지보수가 쉬워질 수 있습니다.
또한 새로운 상태가 필요할 때 기존 로직 전체를 수정하기보다 State와 전환조건을 추가하는 방식으로 프로그램을 확장하기도 편리합니다.
State Machine을 설계할 때 주의할 점
State Machine을 만들 때는 State의 개수를 무조건 늘리는 것이 좋은 것은 아닙니다.
Idle과 Standby가 실제로 동일한 동작을 하는데 이름만 다르게 만들어 놓으면 오히려 프로그램을 이해하기 어려워질 수 있습니다.
각 State는 명확한 목적과 전환조건을 가져야 합니다.
또한 현재 State에서 빠져나갈 수 없는 상황도 주의해야 합니다.
예를 들어 Ready에서 Running으로 이동하려면 Sensor A가 필요하지만 Sensor A가 구조적으로 Ready 상태에서는 절대로 ON될 수 없다면 설비는 Ready에 계속 머물게 됩니다.
이러한 상태를 흔히 논리적으로 빠져나갈 수 없는 상태 또는 Deadlock 문제로 볼 수 있습니다.
필요한 경우 각 State에 Timeout 감시를 적용하여 일정 시간 이상 정상적인 전환이 이루어지지 않으면 Alarm을 발생시키는 방법도 사용할 수 있습니다.
PLC가 재시작되었을 때 State를 어떻게 처리할지도 중요합니다.
전원 복구 후 이전 Running State를 무조건 유지하는 것이 적절한지, Idle이나 Recovery 상태에서 실제 기계 위치를 다시 확인해야 하는지는 설비 특성에 따라 결정해야 합니다.
State Machine 핵심 정리
State Machine은 설비의 운전상태를 여러 State로 구분하고 현재 상태와 조건에 따라 허용된 다음 상태로 전환하도록 만드는 제어 구조입니다.
자동화설비에서는 Idle, Ready, Running, Paused, Complete, Error, Recovery 등으로 상태를 나누어 사용할 수 있습니다.
Sequence Control이 제품 생산과 같은 세부 공정을 Step별로 진행시키는 데 초점을 둔다면 State Machine은 설비 전체의 운전상태를 체계적으로 관리하는 데 활용할 수 있습니다.
실제 PLC 프로그램에서는 State Machine 내부에 Sequence Control, Interlock Logic, Alarm Logic을 함께 구성할 수 있습니다.
특히 Fault가 발생했을 때 단순히 Alarm을 Reset하고 바로 운전을 재개하기보다 Error와 Recovery State를 구분하면 실제 기계 상태와 PLC 프로그램 상태를 다시 일치시키는 구조를 만들 수 있습니다.
결국 State Machine의 핵심은 PLC가 지금 무엇을 하고 있는지 명확하게 정의하고, 어떤 조건에서 무엇을 할 수 있으며 다음에는 어디로 이동할지를 체계적으로 관리하는 것입니다.




댓글 0
첫 댓글을 남겨보세요.