[PLC] 프로그래밍 - SFC Conversion 기법 (2)

이번에는 SFC를 래더 로직으로 변환하는 방법 중, 좀 더 정석에 가까운 방법을 소개합니다. 아래와 같이 실린더 하나를 제어하는 상황을 가정해 봅시다.


PLC 배선은 아래와 같이 되어 있다고 가정합니다.



동작 명세는 아래와 같습니다.

- 실린더가 동작대기 상태에 있으며, 녹색 램프가 점등되어 있습니다.
- Start 버튼을 누르면 동작을 시작하고 적색 램프를 점등합니다.
- 실린더를 전진하고 전진 센서가 감지되면 실린더를 후진합니다.
- 실린더가 후진되면 다시 동작대기로 돌아갑니다.
- Stop 버튼을 누르면 동작대기 상태에서 정지됩니다.


위 내용을 SFC로 표현하면 아래와 같습니다.



S1 ~ S3는 상태(State)를 의미하며, 시스템의 특정한 시점의 상태를 의미합니다. T1-2는 S1=>S2로 상태전이(Transition)을 의미합니다. 마찬가지로 T2-3은 S2=>S3으로, T3-0은 S3=>초기화 상태전이를 의미합니다.

위 SFC 다이어그램을 래더 로직으로 변환할 때 아래 순서를 지켜서 구현해야 합니다.


여러 SFC 구현방법 중, 프로그램 길이가 가장 길어지는 구현법이긴 하지만, 다른 구현방법들이 가지고 있는 단점이나 문제점 등을 모두 보완할 수 있는 방법이기 때문에 정석적 방법이라 말씀드릴 수 있습니다. 

우선 초기조건(Initial Conditions)에 해당하는 래더 로직은 아래와 같습니다.


시작버튼을 누르면 동작 활성화 코일이 ON되고 정지버튼을 누를 때까지 자기유지됩니다.

다음은 상태전이(Transitions)에 해당하는 래더 로직입니다.


대기상태(S1)에서 동작활성화 코일이 ON되면 상태전이(S1=>S2) 활성화.
실린더전진(S2)에서 실린더 전진센서 감지시 상태전이(S2=>S3) 활성화.
실린더후진(S3)에서 실린더 후진센서 감지시 상태전이(S3=>초기화) 활성화

다음은 상태(States)에 해당하는 래더 로직입니다.


위 코드는 시스템이 초기화 상태일때(상태를 갖지 않을 때) 대기상태(S1)으로 만들어주는 역할을 합니다. 아래는 나머지 상태에 관한 래더입니다.


상태 S2는 진입용 상태전이(T1-2)를 통해 상태 코일(State_2)이 활성화되고, 자기유지(Seal-In)를 통해 코일을 유지합니다. 그리고 탈출용 상태전이(T2-3)를 통해 자기유지를 OFF하면서 전이대상인 상태 S3 코일을 활성화 하는 식입니다.

다음은 출력부에 해당하는 래더 로직입니다.


각 상태에 해당하는 PLC 출력을 매핑(mapping) 시켜주는 역할입니다.

지금까지의 순서대로 래더를 작성하면, 상태전이는 PLC 스캔당 한번만 동작하게 되므로 연쇄상태전이가 발생되어 출력부에 해당하는 코드가 실행누락되는 것을 막을 수 있습니다.


끝.

댓글

이 블로그의 인기 게시물

[PLC] PLC 아날로그 입출력 기본

전력(kW) 계산하기 (직류, 교류 단상, 교류 삼상)

공압 속도 제어: 미터인 vs 미터아웃

[PLC] 채터링 현상과 입력 필터

제너 다이오드에 저항을 연결하는 이유

[python] 파이썬 pyplot 2차원 그래프 샘플 코드

[PLC] 래더 다이어그램과 PLC

공압회로 기호

[PLC] PLC 입출력 타입 - 싱크 & 소스 (Sink & Source)

3선 결선식 센서의 타입 PNP, NPN