{{위키데이터 속성 추적}}
'''프로그래머블 로직 컨트롤러'''({{llang|en|programmable logic controller}}, '''PLC''')는 산업 플랜트의 유지관리 및 자동 제어 및 모니터링에 사용하는 제어 장치이다. PLC는 입력을 프로그램에 의해 순차적으로 논리 처리하고 그 출력 결과를 이용해 연결된 외부장치를 제어한다. [[순차제어]](sequential control)에 사용되는 대표적 장치이다. PLC는 단독으로 쓰일 수도 있고, SCADA 등의 시스템과 함께 사용되기도 한다.

PLC는 산업현장에서 기계제어 등에 많이 사용한다. PLC는 여러개의 입력과 출력을 갖는다. 광범위한 온도범위에서도 동작해야 하고, 전기적 노이즈 및 진동과 충격에 강해야 한다. 제어를 위한 프로그램은 배터리 백업 및 비휘발성 메모리에 저장된다. 입력에 대해 실시간 처리 능력을 가짐으로써 정해진 시간의 입력 조건에 대해 출력은 정해진 시간 안에 반응한다.

원하는 기능은 주로 [[래더 다이어그램]]에 의해 프로그램되어 동작한다. 스위치등을 통해 입력신호가 들어가면 래더 다이어그램의 동작 기술에 의해 내부에서 처리되고 결과물은 최종적으로 출력코일에 나타난다. 출력된 제어 대상의 동작이 전체 시스템을 제어하게 된다.

래더 다이어그램에는 a-접점 스위치, b-접점 스위치, 타이머, 논리연산 명령어, 통신, 기타 다양한 기능을 갖는 기능 블럭에 의해 표현한다.

표현된 래더 다이어그램 프로그램은 처음부터 끝까지 CPU에 의해 순차적으로 해석되어 내부의 상태와 출력의 상태가 결정되고 변한다. 한번 전체가 처리되어 내부 상태와 출력이 결정되면, 각 출력포트에 변화 된 출력이 나타난다. 장치에 따라 초당 정해진 횟수만큼 처리되어 입력에 의해 내부 처리된 출력이 결정되고 외부 출력포트에 결과가 나타난다. 래더 다이어그램의 각 줄에 표현된 논리구조는 서로 연관성을 갖고 있어 컴퓨터 프로그램 코드처럼 처음 줄부터 차례대로 끝 줄까지 실행되는 것이 아니다. 각 줄이 서로 복합적으로 순서없이 서로 작용할 수 있으므로 전체까지 완전히 스캔하여 각 상태의 연관성에 의해 최종 상태가 결정된다. 따라서 한 스캔에 의해 전체 처리가 끝나야 어느 포트 든 상태를 알 수 있고, 출력에 반영된다.

PLC의 프로그램 표현은 [[:en:IEC 61131-3|IEC 61131-3]]에 의해 표준화되어있다.

== 구성요소 및 표현 ==

=== 표현 ===

래더 다이어그램 형태는 그림 형태의 표현이고, 이것을 문자로 표현하는 것을 [[니모닉]]이라고 한다.

=== 입출력부 ===
입출력부에 접속되는 외부기기는 푸쉬버튼스위치, 리밋스위치, 센서, 전자개폐기, 솔레노이드, 램프 등이다.

입출력 접속은 시스템 안정을 위해 내부의 동작전압(주로 5V)와 다른 전압을 사용한다.

다양한 회사와 제품들이 존재하므로 입출력 부는 어느 정도 규칙을 일치 시키는 경향이 있다. 따라서 다음과 같은 요구사항을 적용한다:
* 외부기기와 전기적 규격을 일치 시킨다.
* 외부기기의 접속이 용이하도록 물리적 구조를 갖는다.
* 입출력 상태를 눈으로 확인이 쉽도록 표시하는 LED을 부착한다.
* 외부기기와 내부 CPU의 영향을 적게하기 위해 포토커플러를 사용한다.

=== 스위치 종류 ===

스위치 요소는 물리적 입출력 단자 일수도 있지만 내부메모리에 의존하는 '상태'일수도 있다. 물리적 스위치 입력이나 디지털 출력일수도 있고, 내부에 어떤 상태를 저장하는 수단이기도 하다. 제품마다 물리적 입출력인지 내부 메모리 상태인지는 주로 시작 알파벳에 따라 결정된다.

스위치의 종류:
* a-접점 스위치 : 조작하지 않는 평상 시에 떨어져 있다가, 조작에 의해 연결된다.
* b-접점 스위치 : 조작하지 않는 평상 시에 붙어 있다가, 조작에 의해 떨어진다.

a-접점 스위치와 출력코일:
        P00
 |------[ ]------------------------------(P10)---|    

기능 : P00 조작 전 P10이 'OFF' 되어 있다가, P00를 조작하면 연결되고 P10이 'ON(SET)' 된다.

b-접점 스위치와 출력코일:
        P00
 |------[/]------------------------------(P10)---|    

기능 : P00를 조작 전 P10이 'ON' 되어 있다가, P00조작하면 연결이 끊어지고 P10은 'OFF(reset)' 된다.

=== 기능 요소 ===

* 타이머 (ON 타이머, OFF 타이머)
* 적산 타이머
* 업다운 카운터, 업카운터, 다운카운터
* 리트리거블
* 모노 스테이블

* PID 제어 모듈

== 래더 다이어그램의 프로그램 논리 예 ==

=== 논리 AND ===

<pre>
 ------[ ]--------------[ ]----------------( )
    보안키잠금     문손잡이            문열림
</pre>
기능 (논리) : 문열림 <= 보안키잠금 [[논리곱|AND]] 문손잡이

=== 논리 AND-NOT ===

<pre>
 ------[ ]--------------[/]----------------( )
     문닫힘    내부보안잠금장치      문열림
</pre>
기능 (논리) : 문열림 <= 문닫힘 [[논리곱|AND]] [[부정|NOT]] 내부보안잠금장치

=== 논리 OR ===

<pre>
  --|-------[ ]--------+-----------------( )
    |    외부열림      |                 열림
    |                  |
    |-------[ ]--------|
         내부열림
</pre>
기능 (논리) : 열림 <= 외부열림 [[논리합|OR]] 내부열림

== 기본 기능 동작 ==

=== 자기유지회로 (self holding) ===

스위치가 눌렸다가 떨어지면 어느 상태가 계속 유지 되도록 한다.
<pre>
  --+----[ ]---+-----------------( )
    |    시작  |                  출력
    |          |
    +----[ ]---+
         출력
</pre>
시작 스위치에 의해 스위치가 눌렸다 떨어져도 한번 출력된 상태가 되먹임되어 출력 상태가 계속 유지된다. '시작'과 '출력'은 논리 OR로 연결되므로 시작 스위치가 열려도 '출력' 상태가 '연결'상태로 계속 유지된다.


==== 시작/멈춤 예 ====

<pre>
 1  +----[ ]-----+-----[/]------------( )
     |    시작   |    멈춤            동작
     |           |
    +-----[ ]----+
     |     동작
     |
  2  |-----[ ]------------------------( )
     |     동작                          모터
 </pre>
기능 (논리) :

1 : 동작 <= ( 시작 [[logical OR|OR]] 출력) [[logical AND|AND]] ( [[logical NOT|NOT]] 멈춤)

2 : 모터 <= 동작

모터 조작을 안전하게 비상시에 대비해서 설계한다면:
<pre>
  2  |----[/]-------[/]-----+---[ ]--+---------( )
     | 비상멈춤   멈춤      |  시작  |        모터
     |                      |        |
     |                      +---[ ]--+
     |                          동작
</pre>

=== 복합논리 ===
<pre>
  1   |----[ ]---------|------[ ]------|----( )
      |  스위치        |  고온센서     |    A/C
      |                |               |
      |                |------[ ]------|
      |                         습도센서
      |
  2   |----[ ]-----[/]---------------------( )
      |    A/C    히터                      냉방
</pre>

1 : A/C = 스위치 [[logical AND|AND]] ( 고온 [[logical OR|OR]] 습도 )

2 : 냉방 = A/C [[logical AND|AND]] ( [[logical NOT|NOT]] 히터 )

열1에서 냉방장치 스위치를 작동시키면, 고온 이거나 다습할 때 A/C을 켜진다. A/C가 작동되고 히터가 작동하지 않으면 냉방장치가 가동된다.

==통신==
컴퓨터 프로그램과 PLC 장치와의 업로드 및 다운로드를 위해 일반적으로  [[RS-232]] 규격이 적용된다.

== 같이 보기 ==
* [[제어시스템]]
* [[산업제어시스템]]([[:en:Industrial control system]], '''ICS''')
* [[분산제어시스템]]([[:en:Distributed control system]], '''DCS''')
* [[래더 프로그래밍]]

== 외부 링크 ==
* [https://web.archive.org/web/20160305103400/http://www.hrd.go.kr/EL/contents/093/01/module.htm 자동화 PLC 제어응용]
* {{언어링크|en}} [http://webstore.iec.ch/webstore/webstore.nsf/Artnum_PK/47556 Standard 61131-3 on IEC website]
== 각주 ==
{{각주}}
*(LS산전- XGB-XBCDR40SU)https://www.ls-electric.com/ko/product/view/P01119
*(LS산전-MASTER-K30S)https://www.ls-electric.com/ko/product/category/CCC001005

{{전거 통제}}

[[분류:전기공학]]
[[분류:제어공학]]
[[분류:기계공학]]
[[분류:컴퓨터 공학]]
[[분류:산업 컴퓨팅]]