[PLC] 상태 머신(State Machine) 방식으로 시퀀스 구현하기
상태 머신은 주어진 시간에 유한한 수의 상태 중 하나에 있을 수 있는 머신을 추상화한 것으로, 각 상태에는 상태 전환(transitions)과 동작(actions)이 있습니다. 동작은 기계가 시스템과 상호 작용하는 수단(실린더, 모터 등을 구동)인 반면, 상태 전환는 한 상태에서 다른 상태로 이동하기 위해 만족해야 하는 특정 조건입니다.
상태 머신은 절차적 동작을 프로그래밍할 때 사용할 수 있는 PLC 프로그래밍 방법 중 하나입니다. 이 방법론을 사용하면 복잡한 프로세스를 더 작고 단순한 여러 상태 기계로 분할하여 전체 프로세스를 프로그래밍 할 수 있습니다.
이 글에서는 미쯔비시 사의 MELSEC PLC 명령어 기반으로 래더 다이어그램을 기술하겠습니다.
작업 프로세스의 한 단계를 의미하는 스텝은 아래와 같은 형태로 래더 다이어그램으로 구현됩니다. (클릭 시 확대 가능)
이 템플릿은 상태 머신에 대한 래더 로직의 일반 구조를 다룹니다. 먼저 현재 단계 번호가 특정 단계와 동일한지 확인합니다. 일부 프로그래머는 각 스텝을 나타내는 데 비트 메모리를 활용하지만 개인적으로 여기서는 워드 메모리(위 그림에서 D0에 해당)를 활용하여 스텝번호를 저장하는 방식으로 기술합니다.
현재 스텝이 활성화된 경우, 프로그램은 이 단계의 작업에 필요한 인터록 및 조건 등을 확인합니다다. 병렬 분기에서는 현 스텝에서 다른 스텝으로 이동하기 위한 모든 조건을 확인합니다. 스텝번호를 유지하기 위해 워드 메모리를 사용하므로 해당 값을 변화시켜 원하는 스텝번호로 쉽게 이동 가능합니다.
위 개념을 적용하여 간단한 제품 혼합기 작업 프로세스를 모델링 및 구현해 보겠습니다.
혼합기는 두 개의 제품 밸브(밸브 A 및 B), 믹서(모터 A) 및 배수 밸브(밸브 C)로 구성됩니다. 작업은 시작 푸시 버튼을 눌러 시작해야 하며, 이 버튼을 누르면 상위 센서가 탱크가 가득 찼음을 나타낼 때까지 두 제품 밸브가 모두 열립니다. 탱크를 채운 후 믹서는 10초간 작동되며, 그 후 저수위 센서가 꺼질 때까지 배수 밸브를 열어 두어야 합니다. 이 프로세스를 상태 머신 다이어그램으로 표현하면 아래와 같습니다.
상태 머신 다이어그램을 구축하는 것은 단계와 상태전환을 도식화하며, 나타날 수 있는 불일치를 예측하는 데 유용하게 사용됩니다. 혼합기 상태 머신은 혼합물의 초기 상태, 탱크 채우기, 혼합 및 배수를 다루어야 합니다. 모든 전환 조건은 기계가 진행되는 데 필요한 조건이어야 하며, 각 개별 단계의 작업은 시스템과 상호 작용하기 위한 출력 및 논리 명령을 포함합니다.
이제 상태 머신의 일반 템플릿을 활용하여 래더의 각 단계, 해당 작업 및 전환을 프로그래밍할 차례입니다. 아래는 템플릿에 해당하는 래더입니다.
초기 단계(0단계)에는 작업(기계가 유휴 상태임)이 없고 시작 명령이라는 하나의 조건만 있습니다.
시작 명령은 기계를 충전 단계(1단계)로 유도하고 센서에서 상한 신호가 수신될 때까지 두 제품 밸브(작업)를 열도록 명령하여 다음 단계(2단계)로의 전환을 처리합니다.
2단계에서는 믹서 모터 출력이 예상 기간 동안 켜져 있어야 합니다. 10초의 타이머는 기계 상태를 2단계에서 3단계로 이동하는 전환 조건입니다.
마지막 단계는 전환 조건(낮은 수준의 센서 신호가 꺼짐)이 달성될 때까지 배수 밸브를 여는 것(동작)으로 구성됩니다. 이 전환으로 인해 프로세스가 완료되고 시작 버튼을 누를 때까지 기계가 유휴 상태로 돌아갑니다. 즉, 기계를 초기 단계(Step 0)로 이동합니다.
상태 머신을 활용한 방법은 시퀀스를 PLC로 구현하기 위한 간단한 방법 중 하나입니다. 실제로 현장에 적용할 경우 맞닥트리게 되지만 위 이론에서 드러나지 않는 맹점이 존재합니다. 초기 상태인 스텝 0에서 스텝 1로 진입하기 위해 기계가 초기상태에 있어야 하는 점을 기억하실 겁니다. 만약 기계가 초기상태에 있지 않다면 어떻게 될까요? 위 시퀀스는 시작조차 할 수 없습니다. 이 문제를 해결하기 위해서는 초기상태로 돌리는 시퀀스도 필요하게 됩니다. 하지만 여기서 또 다른 문제가 발생합니다. 예를 들어, 혼합 시퀀스를 구동하는 중에 비상정지나 기타 정책에 의해 장비 현재 스텝번호를 초기화해야 하는 경우도 있습니다. 이 경우, 초기상태로 되돌리는 시퀀스(일반적으로 원점복귀라 함)를 먼저 실행한 뒤 혼합 시퀀스를 다시 시작해야 할 것입니다. 만약 기구가 초기상태가 아닌 경우라도 혼합 시퀀스를 가동할 수 있어야 한다면 어떻게 될까요? 이 문제를 해결하기 위해서는 스텝 0단계에서 기계의 현 상태에 부합하는 스템 번호를 찾아 해당 스텝으로 이동해 주는 분기문이 여러개 필요하게 됩니다. 이렇게 되면 초기의 프로그램 간결함은 오염되기 마련입니다.
만약 구현된 장비가 동작 중 이상으로 인해 멈춘 경우, 장비 내 소재를 모두 제거하고 초기상태(원점복귀)를 실행해야 재가동이 가능하다고 한다면 대부분 상태 머신 구현 방법인 경우가 많습니다. 따라서 상태 머신 구현 방법론을 사용할 때는 이러한 단점을 잘 이해하고, 사용자에게 미리 고지해야 구현 방법론을 변경할 지 여부를 결정할 수 있을 것입니다.
댓글
댓글 쓰기