PLC 상태 천이도 작성법 — 장치의 상태를 한 장에 그리고, 그리지 않은 조합을 표로 채운다

마지막 수정: 2026-09-24 / 분류: PLC 프로그래밍, 제어 로직 설계

상태 천이도는 장치 전체가 지금 어느 상태에 있고, 어느 버튼·어느 이상으로 어디로 옮겨 가는지를 한 장에 그리는 그림입니다. 사양에 없는 조합을 래더를 쓰는 사람이 정하게 두고 싶지 않은 PLC 제어 설계자를 위해 썼습니다.

자동으로 움직이는 도중에 기동을 한 번 더 눌렀더니 첫 공정의 플래그가 한 번 더 섰다. 플로차트의 정상 흐름에는 없는 조합이라 래더를 쓴 사람이 그 자리에서 정하고 있었습니다. 그림에 그릴 수 있는 것은 떠올린 화살표뿐입니다. 그리지 않은 조합은 상태 × 이벤트 표에서 한 칸씩 채웁니다.

반송 장치의 상태 천이도. 전원 투입으로 원점 미완료에서 시작한다. 원점 미완료에서 원점 복귀 버튼으로 원점 복귀 중으로, 원점 복귀 완료로 기동 대기로, 기동으로 운전 중으로 진행한다. 운전 중에서 일시 정지로 일시 정지 중으로, 일시 정지 중에서 기동으로 운전 중으로 돌아간다. 공정의 구분에 있고 사이클 정지 플래그가 있을 때 운전 중에서 기동 대기로 돌아간다. 원점 복귀 중에서 일시 정지로 원점 미완료로, 기동 대기에서 원점 복귀로 원점 복귀 중으로, 기동 대기에서 수동으로 전환으로 원점 미완료로 옮겨 간다. 안쪽 테두리 (이상 정지 중·비상정지 중 이외의 상태)에서 이상으로 이상 정지 중으로. 이상 정지 중에서 리셋으로, 이어서 움직일 수 있을 때는 기동 대기로, 그 외에는 원점 미완료로. 바깥쪽 테두리 (비상정지 중 이외의 상태)에서 비상정지로 비상정지 중으로. 비상정지를 해제하고 리셋해 동력이 들어오면 원점 미완료로.
반송 장치 (컨베이어로 나르고, 클램프로 고정하고, 로봇이 꺼낸다)의 상태를 7개로 나누고, 화살표에 옮겨 가는 계기 (버튼·처리 완료·이상)를 적었다. [ ]는 그때 옮겨 가는 조건, ( )는 보충. 테두리에서 나가는 화살표는 테두리 안의 어느 상태에서든 옮겨 간다는 뜻이다. 운전 중에 진행하는 공정 (워크 대기·반송·클램프·취출)은 별도의 플로차트로 그린다. 스마트폰에서는 그림을 옆으로 스크롤하거나 눌러서 연다.

1. 상태 천이도에는 장치 전체의 상태만 그리고, 공정은 플로차트로

상태 천이도에 그리는 것은 장치 전체의 상태입니다. 예의 그림은 7개이며, 운전 중에 진행하는 "워크 대기 → 반송 → 클램프 → 취출"은 그리지 않았습니다. 공정은 PLC 제어 플로차트 작성법에 공정 번호 (10·20·30…)와 다음으로 넘어가는 조건으로 그립니다. 공정까지 넣으면 이상이나 일시 정지처럼 어디서든 일어나는 이벤트의 화살표가 공정 수만큼 늘어나기 때문입니다.

두 장은 공정 번호로 이어집니다. 일시 정지 중에서 기동하면 멈춘 공정의 이어서부터, 원점 복귀 뒤에는 첫 공정부터입니다. 이어서 움직일 수 있는 이상의 리셋 뒤에는 멈춘 공정의 처음부터입니다.

PLC 제어 플로차트 작성법에서 "스텝 (상태)"이라고 부른 것은 이 글의 공정에 해당합니다. 상태가 이 예만큼 늘어나면 기동 대기나 이상 정지 중은 이 그림으로 옮깁니다. 플로차트의 이상 출구는 "이상 정지 중으로"라고만 쓰면 충분할 것입니다. 작업자가 매번 워크를 놓고 기동하는 장치라면 사이클 정지 플래그의 조건을 빼고, 공정의 구분에서 매번 기동 대기로 되돌립니다.

2. 상태는 "계속되는 것", 화살표는 "일어난 것"으로 그린다

  1. 상태는 "계속되는 것", 화살표는 "일어난 것"으로 이름을 붙인다 상태의 이름은 한동안 계속되는 "~ 중" "~ 대기"로 합니다. 화살표의 이름은 한순간에 일어나는 "기동 (눌렀다)" "이상 (시간이 다 되었다)"입니다. "기동"이라는 이름의 상태를 만들면 누른 순간인지 움직이는 동안인지가 정해지지 않습니다.
  2. 처리를 하고 있는 상태와 기다리고 있는 상태를 나눈다 회색의 원점 복귀 중은 처리가 끝나면 스스로 기동 대기로 옮겨 갑니다. 흰색의 기동 대기는 사람이 기동을 누를 때까지 계속 기다립니다. 원점 복귀 중의 끝은 절차가 마지막 단 (원점 복귀 플로차트 (샘플)이라면 bHomeDone을 ON 하는 단)까지 진행된 것입니다.
  3. "어느 상태에서든"의 화살표는 테두리에서 한 줄만 긋는다 이상은 5개 상태 중 어디서든 일어납니다. 5줄을 긋는 대신 이상 정지 중과 비상정지 중 이외의 5개를 둘러싼 테두리에서 이상 정지 중으로 한 줄을 긋습니다. 화살표를 전부 그은 그림은 한 줄이 빠져 있어도 아무도 알아채지 못합니다.
  4. 전원을 넣으면 어디서 시작하는지를 화살표로 그린다 예의 그림에서는 전원 투입의 검은 점에서 원점 미완료로 긋고 있습니다. 정전 뒤에는 워크가 도중에 남아 있고, 축이 어디에 있는지도 확실하지 않기 때문입니다. 상태를 가진 변수를 정전 뒤에도 값이 남는 범위에 두면, 운전 중에 정전된 장치는 아무도 기동을 누르지 않았는데 움직이기 시작합니다.
  5. 같은 이벤트에서 두 줄을 낼 때는 조건이 겹치지 않도록 쓴다 이상 정지 중의 리셋은 행선지가 둘입니다. 이어서 움직일 수 있는 (제어 사양서 작성법의 E01·E02) 경우는 기동 대기로, 그 외에는 원점 미완료로입니다. 두 조건이 동시에 성립할 수 있으면 어느 쪽으로 옮겨 갈지는 프로그램에 쓴 순서로 조용히 정해집니다.
  6. 모드는 별도의 축으로 하고, 전환했을 때의 행선지를 상태마다 정한다 예의 그림은 자동 모드의 상태입니다. 수동으로 전환했을 때 원점 미완료와 이상 정지 중은 그대로 수동으로 움직일 수 있고, 기동 대기에서는 원점 미완료로 옮깁니다. 준비 작업에서 장치의 어디를 움직였는지 알 수 없으므로, 자동으로 되돌리기 전에 원점 복귀 1회로 다시 확인하기 위해서입니다.

3. 상태 × 이벤트 표로 그리지 않은 조합을 채운다

그림의 화살표는 전원 투입 외에 14줄입니다. 표로 만들면 7개 상태 × 10개 이벤트로 70칸이며, 그림의 화살표를 옮겨 적어도 채워지는 것은 25칸입니다. 나머지 45칸은 그림에는 나오지 않습니다. 원점 미완료에서 기동을 누르면, 움직이는 도중에 기동을 한 번 더 누르면, 을 한 칸씩 정하게 됩니다.

칸에 쓰는 것은 다음 5가지이며, "받아들이지 않음"과 "일어날 수 없음"은 다릅니다. 받아들이지 않는 칸은 입회 검사에서 버튼을 눌러 아무 일도 일어나지 않는 것을 확인합니다. 일어날 수 없는 칸은 눌러서 시험할 수 없습니다. 만약 일어나면 프로그램의 오류로서 이상 정지입니다.

이벤트 \ 상태원점 미완료원점 복귀 중기동 대기운전 중일시 정지 중이상 정지 중비상정지 중
원점 복귀 (버튼)→ 원점 복귀 중/→ 원점 복귀 중////
원점 복귀 완료×→ 기동 대기×××××
기동"원점 복귀가 끝나지 않았습니다"라고 표시/재개 위치에 갖춰져 있다 → 운전 중
갖춰져 있지 않다 → "재개 위치에 있지 않습니다"라고 표시
/→ 운전 중 (멈춘 공정의 이어서부터)//
일시 정지/→ 원점 미완료 (복귀를 그만둔다)/→ 일시 정지 중///
사이클 정지///플래그를 세운다플래그를 세운다//
공정의 구분×××플래그 있음 → 기동 대기
플래그 없음 → 그대로 다음 워크를 기다린다
×××
이상→ 이상 정지 중→ 이상 정지 중→ 이상 정지 중→ 이상 정지 중→ 이상 정지 중다른 번호의 이상이 새로 나면 이력에 더한다 (이어서부터는 움직일 수 없게 된다)새로 난 이상을 이력에 더한다
리셋/////원인이 남아 있다 → /
이어서 움직일 수 있다 → 기동 대기
그 외 → 원점 미완료
해제하기 전 → /
뗀 뒤 동력이 들어왔다 → 원점 미완료
뗀 뒤 3초 안에 들어오지 않는다 → "동력이 들어오지 않음"이라고 표시
비상정지→ 비상정지 중→ 비상정지 중→ 비상정지 중→ 비상정지 중→ 비상정지 중→ 비상정지 중/
수동으로 전환수동으로 움직일 수 있다→ 이상 정지 중→ 원점 미완료→ 이상 정지 중→ 이상 정지 중수동으로 움직일 수 있다모드만 전환한다

"공정의 구분"은 첫 공정 (워크 대기)에서 다음 워크를 기다리는 동안 성립하는, 운전 중에만 있는 조건입니다. 기동 대기에서의 기동은 첫 공정이라면 원위치, 이어서부터라면 멈춘 공정 처음의 조건이 갖춰져 있을 때만 받아들입니다. 사이클 정지 플래그는 기동 대기·이상 정지 중·비상정지 중에 들어갔을 때 지웁니다. 이상 행은 이상 목록의 E01~E04이며, 비상정지 (E05)는 비상정지 행입니다.

칸을 채울 때 헤매는 것은 다음과 같은 곳입니다.

표는 Excel로 만들고, 판 번호를 붙여 사양서에 넣습니다. 데이터 유효성 검사 목록에 "/,×"를 넣고 오류 메시지를 표시하지 않는 설정으로 하면 "→ 기동 대기"라고도 입력할 수 있습니다. 공란은 조건부 서식의 수식 =ISBLANK(B2)로 빨갛게 칠해 둡시다. 이벤트를 하나 더했다면 행을 더해 7칸을 모두 채우지 않으면 그림과 표와 래더가 어긋납니다.

4. 상태와 이벤트를 골라내고, 정상 화살표를 그은 뒤 표로 채운다

  1. 상태를 써낸다 조작반의 램프와 화면에 내고 싶은 운전 상태에서 골라냅니다. 상태로 삼는 것은 조작자의 버튼·이상·원점 복귀 완료처럼 별도의 처리로 드나드는 것입니다. 센서 조건으로 차례차례 진행하는 반송·클램프는 공정이므로, 화면에 "반송 중"이라고 내더라도 플로차트로 돌립니다.
  2. 이벤트를 골라낸다 조작반의 버튼과 스위치, 처리 완료, 운전 중에만 보는 조건, 이상에서 골라냅니다. 이상 목록의 이상은 한 행으로 묶고, 비상정지만 별도의 행입니다. 부저 정지처럼 어느 상태에서든 같은 일을 하는 조작은 표에 넣지 않습니다.
  3. 정상 화살표를 긋고, 어디서든 일어나는 것을 테두리로 한다 전원 투입에서 운전 중까지와, 멈추고 돌아오는 길을 먼저 긋습니다. 이상과 비상정지는 테두리에서 한 줄.
  4. 표로 만들어 공란을 채운다 그림의 화살표를 옮겨 적은 뒤, 나머지 칸을 /·×·문자로 채우는 단계입니다. 스스로 정할 수 없는 칸은 공란으로 남기고, 누구에게 물으면 정해지는지 (고객·기계 설계·안전 담당)를 옆에 적어 둡니다.

5. PLC에서는 상태를 하나의 변수로 갖고, 1 스캔에 한 번만 옮긴다

  1. 상태는 하나의 변수에 번호로 갖는다 정수 변수 하나에 상태 번호를 넣습니다. 상태마다 플래그를 가지면 두 개가 동시에 서는 것을 구조상 막을 수 없기 때문입니다. 정전 뒤에 값이 남지 않는 범위의 변수는 전원을 넣으면 0이 되므로 원점 미완료를 0번으로 합니다.
  2. 천이는 스캔 처음의 상태로 판정하고, 1 스캔에 한 번만 옮긴다 판정은 스캔 처음에 복사해 둔 상태로 합니다. 위에서부터 차례로 "기동 대기에서 기동이면 운전 중"을 나열하면, 아래 행이 방금 고쳐 쓴 운전 중을 보고 다시 진행하기 때문입니다. 다음 상태는 마지막에 한꺼번에 쓰며, ST의 CASE 문이라면 실행되는 분기는 1 스캔에 하나입니다.
  3. "어디서든"의 천이는 각 상태의 천이 뒤에 쓴다 각 상태의 천이 → 이상 → 비상정지 순서로 씁니다. 나중에 쓴 대입이 남으므로 같은 스캔에서 기동과 비상정지가 겹쳐도 비상정지가 이깁니다. 그림의 테두리 화살표는 프로그램에서도 각각 한 곳입니다.
  4. 들어갔을 때 한 번만 하는 처리와 계속 내는 출력을 나눈다 들어갔을 때의 처리는 번호가 바뀐 스캔에서만 합니다. 이상 정지 중에 들어가면 이력에 번호를 남긴다는 것을 매 스캔 하면 이력이 스캔 수만큼 늘어나기 때문입니다. 램프나 표시처럼 상태만으로 정해지는 출력은 "빨강은 이상 정지 중이나 비상정지 중"처럼 출력 하나에 식 하나로 만듭니다.
  5. 일어날 수 없는 번호에 오면 이상 정지로 한다 ELSE에서는 이상 정지 중으로 옮기고 번호를 화면에 냅니다. ELSE에 아무것도 쓰지 않거나 기동 대기로 되돌리면 다른 회로에서의 쓰기나 오타가 숨겨지기 때문입니다. 표의 × 칸이 일어났을 때도 마찬가지입니다.
  6. 버튼은 누른 순간을 이벤트로 하고, 비상정지와 이상은 성립하는 동안 본다 버튼은 상승 에지의 1 스캔만 봅니다. ON인 동안 받는 구조라면 기동을 누른 채 워크를 놓은 순간 움직이기 시작하기 때문입니다. 비상정지와 이상은 반대로 성립하는 동안 매 스캔 보고, 누른 채 전원을 넣어도 비상정지 중으로 옮겨 갈 수 있게 합니다.

6. 사이클 정지의 표시·워크 대기의 취급·비상정지의 역할에서 걸려 넘어진다

7. 표에서 ×가 아닌 58칸이 그대로 입회 검사의 시험 항목이 된다

표에서 ×가 아닌 58칸이 그대로 시험 항목이 됩니다. → 칸은 옮겨 간 곳의 상태와 들어갔을 때의 처리를, / 칸은 버튼을 눌러 아무 일도 일어나지 않는 것을 확인합니다. 이상과 비상정지는 운전 중뿐 아니라 테두리 안의 모든 상태에서 일으켜 봅시다. 원점 복귀 중의 시간 초과나 일시 정지 중의 비상정지는 시험에서 빠지기 쉬운 조합입니다.

한 칸씩 확인했다면 조작 두 개를 이어서 한 조합도 시험합니다. 사이클 정지를 누른 뒤 일시 정지하고 기동했을 때 플래그가 남아 있어 공정의 구분에서 기동 대기로 멈추는가. 운전 중에 전원을 껐다 다시 켰을 때 원점 미완료에서 시작해 아무것도 움직이지 않는가 (안전 릴레이가 수동 리셋이라면 비상정지 중). 표를 한 칸씩 확인하기만 해서는 이런 순서의 오류를 찾을 수 없습니다.

공정의 플로차트를 그리는 에디터

  • Flowchart Editor — 운전 중에 진행하는 공정 (워크 대기·반송·클램프·취출)을 공정 번호와 다음으로 넘어가는 조건으로 그립니다. 상태 천이도 자체를 그리는 기능은 없습니다.

설치도 등록도 필요 없이 브라우저만으로 쓸 수 있습니다.

관련 글

yk.builds