Programming Counters

8.1 Counter Instructions

프로그램된 카운터(counter)는 기계식 카운터와 동일한 기능을 수행할 수 있습니다. 그림 8-1은 간단한 기계식 카운터의 구조를 보여줍니다. 작동 레버가 한 번 움직일 때마다 카운터는 숫자를 하나 증가시키며, 작동 레버는 자동으로 원래 위치로 돌아갑니다. 측면에 있는 푸시버튼을 사용하여 카운터를 0으로 리셋할 수 있습니다.

그림 8-2와 같은 전자식 카운터는 카운트 업(count up), 카운트 다운(count down), 또는 업/다운 카운트 기능을 조합하여 사용할 수 있습니다. 산업에서 사용되는 대부분의 카운터는 업-카운터(up-counter)이지만, 다운-카운터 또는 업/다운-카운터가 필요한 다양한 응용도 존재합니다.

모든 PLC 제조업체는 자체 명령어 집합에 카운터 명령어를 제공합니다. 일반적인 카운터 응용 사례 중 하나는 그림 8-3과 같이 특정 지점을 지나가는 물체의 개수를 추적하는 것입니다. 카운터는 타이머와 유사하지만 내부 클록으로 동작하는 것이 아니라 외부 또는 프로그램 소스에 따라 카운트된다는 점이 다릅니다.

PLC의 래더( Ladder) 로직 프로그램에서 카운터를 표현하는 방법은 코일(coil) 형식과 블록(block) 형식 두 가지가 있습니다. 그림 8-4는 일반적인 코일 형식의 업-카운터 명령어를 보여줍니다. 업-카운터는 카운터 런(rung)이 false에서 true로 전이될 때마다 누적 값(accumulated value)을 1씩 증가시킵니다. 누적 카운트가 설정값(preset count)과 같아지면 카운터 출력이 여자(energize)되거나 1로 설정됩니다. 명령어에 포함된 요소는 다음과 같습니다:

Counter type

Counter address

Counter preset value

Accumulated count

카운터 리셋(reset) 명령어는 카운터 명령어와 함께 사용해야 합니다. 업-카운터는 항상 0으로 리셋됩니다. 다운-카운터는 0 또는 특정 설정값으로 리셋될 수 있습니다. 일부 제조업체는 리셋 기능을 일반 카운터 명령어에 포함시키며, 다른 제조업체는 별도의 리셋 명령어를 제공합니다. 그림 8-5는 리셋 명령어가 별도로 구성된 코일 형식 카운터 명령어를 보여줍니다. 프로그램에서는 카운터 리셋 코일(CTR)에게 해당 카운터(CTU)와 동일한 참조 주소를 부여합니다. 이 예에서는 CTR 런 조건이 true일 때 리셋 명령어가 활성화됩니다.

그림 8-6은 블록 형식의 카운터를 보여줍니다. 명령 블록은 카운터의 종류(업 또는 다운), 카운터의 설정값 및 누적 값(현재 값)을 표시합니다. 카운터에는 카운트 입력과 리셋 입력 두 가지 입력 조건이 있습니다.

모든 PLC 카운터는 입력 신호의 리딩 에지(leading edge)에서 동작하거나 카운트합니다. 카운트 입력이 off 상태에서 on 상태로 변화할 때 카운터는 증가 또는 감소합니다. 입력 조건이 on에서 off로 변하는 트레일링 에지에서는 동작하지 않습니다.

일부 제조업체는 리셋 런 또는 라인이 true일 때 카운터가 리셋되도록 하지만, 다른 제조업체는 false일 때 리셋되도록 합니다. 따라서 카운터 회로를 프로그래밍하기 전에 반드시 PLC 동작 매뉴얼을 확인하는 것이 좋습니다.

PLC 카운터는 일반적으로 보존(retentive) 기능을 가지며, 프로세서가 종료될 때의 카운터 값은 전원이 복구되면 다시 복원됩니다. 그러나 전원 복구 시 리셋 조건이 활성화되어 있다면 카운터는 리셋될 수 있습니다.

PLC 카운터는 설정값까지 카운트 업하거나 설정값까지 카운트 다운하도록 설계될 수 있습니다. 업-카운터는 카운터가 있는 런이 여자될 때마다 1씩 증가합니다. 다운-카운터는 해당 런이 여자될 때마다 1씩 감소합니다. 이러한 런 전이는 센서를 지나가는 부품이나 리미트 스위치를 작동시키는 이벤트 등 프로그램 내에서 발생하는 조건에 의해 생성될 수 있습니다. 프로그래머블 컨트롤러 카운터의 설정값은 운영자가 설정할 수도 있고 프로그램 판단에 따라 메모리 위치에 로드될 수도 있습니다.

그림 8-7은 업-카운터와 다운-카운터의 카운팅 순서를 보여줍니다. 카운터에 표시되는 값은 누적 값(accumulated value)이라고 합니다. 카운터는 누적 값이 설정값과 같거나 커질 때까지 증가 또는 감소하며, 이때 출력이 생성됩니다. 카운터 리셋은 항상 누적 값을 특정 값으로 리셋하기 위해 제공됩니다.

8.2 Up-Counter

업-카운터(up-counter)는 출력 명령어로서, 명령어가 false에서 true로 전이될 때마다 누적 값(accumulated value)을 증가시키는 기능을 합니다. 따라서 입력 명령어의 false-to-true 전이를 카운트하고, 필요한 횟수에 도달했을 때 특정 동작을 트리거하는 데 사용할 수 있습니다. 업-카운터 출력 명령어는 카운트되는 이벤트가 발생할 때마다 누적 값을 1씩 증가시킵니다.

그림 8-8은 SLC 500 업-카운터(Count-Up Counter)에 대한 프로그램과 타이밍 다이어그램을 보여줍니다. 이 제어 응용 예는 누적 값이 7이 되었을 때 빨간색 파일럿 램프를 켜고 녹색 파일럿 램프를 끄도록 설계되었습니다. 프로그램 동작은 다음과 같이 요약할 수 있습니다.

• 작동 푸시버튼 PB1은 카운터가 카운트하는 off-to-on 전이 펄스를 제공합니다.

• 카운터의 설정값(preset value)은 7로 지정됩니다.

• 런(rung) 1에서 false-to-true 전이가 발생할 때마다 카운터의 누적 값이 1씩 증가합니다.

• 7개의 펄스나 카운트가 발생한 뒤, 설정값과 누적 값이 같아지면 출력 DN이 여자(energize)됩니다.

• 그 결과 런 2가 true가 되어 출력 O:2/0이 여자되고, 빨간 파일럿 램프가 켜집니다.

• 동시에 런 3은 false가 되어 출력 O:2/1이 탈자(de-energize)되고, 녹색 파일럿 램프가 꺼집니다.

• PB2 푸시버튼을 눌러 런 4가 true가 되면 카운터는 리셋되어 누적 값이 0으로 초기화됩니다.

• 런 4가 다시 false가 되면 카운트가 재개될 수 있습니다.

Allen-Bradley SLC 500의 카운터 파일은 파일 5입니다(그림 8-9). 각 카운터는 세 개의 16비트 워드(word)로 구성되며, 이를 통틀어 카운터 요소(counter element)라고 합니다. 세 데이터 워드는 제어 워드(control word), 설정값 워드(preset word), 누적값 워드(accumulated word)입니다. 세 워드는 모두 동일한 기본 주소(base address)를 공유하며, 이 주소가 바로 카운터 자체의 주소입니다. 최대 256개의 카운터 요소를 사용할 수 있습니다. 카운터 파일 5의 카운터 요소 3(C5:3)의 주소 구성은 다음과 같습니다.

C5 → 카운터 파일 5

:3 → 카운터 요소 3 (파일당 0–255 요소)

또한 개별 비트 주소는 다음과 같습니다:

C5:3/DN → 카운터 완료(done) 비트

C5:3/CU → 업 카운트 활성(enable) 비트

C5:3/CD → 다운 카운트 활성 비트

C5:3/OV → 오버플로우(overflow) 비트

C5:3/UN → 언더플로우(underflow) 비트

C5:3/UA → 누적 업데이트(update accumulator) 비트

그림 8-10은 Allen-Bradley SLC 500 컨트롤러의 카운터 테이블을 보여줍니다. 제어 워드는 다음 상태 제어 비트들로 구성됩니다.

Count-Up (CU) Enable Bit — 업 카운터에서 사용되며, 업 카운터 명령어가 true일 때 true가 됩니다. 명령어가 false이면 CU 비트도 false입니다.

Count-Down (CD) Enable Bit — 다운 카운터에서 사용되며, 다운 카운터 명령어가 true일 때 true가 됩니다. 명령어가 false이면 CD 비트도 false입니다.

Done (DN) Bit — 업 카운터와 다운 카운터 모두에서 누적 값이 설정값과 같거나 크면 true가 됩니다.

Overflow (OV) Bit — 카운터가 최대값 32,767을 넘어서면 true가 됩니다. 그 다음 카운트에서 카운터는 32,768로 래핑(wrap)되어 이후 false-to-true 전이마다 0을 향해 증가합니다.

Underflow (UN) Bit — 카운터가 32,768보다 아래로 감소하면 true가 됩니다. 그런 경우 카운터는 132,767로 래핑되며 이후 false-to-true 전이마다 0을 향해 감소합니다.

Update Accumulator (UA) Bit — 외부 HSC(high-speed counter)와 연동될 때만 사용됩니다.

8.2 Up-Counter

설정값(PRE) 워드는 카운터가 완료 비트(done bit)의 상태를 변경하기 위해 도달해야 하는 값을 지정합니다. 설정값은 카운터의 설정점이며, 그 범위는 2−32,768부터 1−32,767까지입니다. 이 값은 이진(binary) 형태로 저장되며, 음수 값은 2의 보수(2’s complement) 이진 형태로 저장됩니다.

누적값(ACC) 워드는 런(rung)이 false에서 true로 전이된 횟수에 기반한 현재 카운트 값입니다. 누적값은 업-카운터 명령어의 false-to-true 전이 시 1씩 증가하거나, 다운-카운터 명령어의 false-to-true 전이 시 1씩 감소합니다. 누적값의 범위는 설정값과 동일하게 2−32,768부터 1−32,767까지입니다. 누적값은 타이머와 달리 설정값에서 멈추지 않고 계속 증가 또는 감소합니다.

그림 8-11은 SLC 500 컨트롤러 명령어 집합에서 사용되는 업-카운터와 그 상태 비트(status bits)의 예를 보여줍니다. 카운터 주소는 C5:0부터 C5:255까지 이어집니다. 입력해야 할 정보는 다음과 같습니다:

Counter Number — 이 숫자는 카운터 파일에서 가져와야 합니다. 예시에서는 카운터 번호가 C5:0으로, 이는 카운터 파일 5의 카운터 0을 의미합니다. 이 카운터 주소는 다른 업-카운터와 중복해서 사용해서는 안 됩니다.

Preset Value — 설정값의 범위는 −32,768에서 +32,767까지입니다. 예시에서는 설정값이 10입니다.

Accumulated Value — 누적값도 −32,768에서 +32,767까지 가능합니다. 일반적으로 이 예와 같이 누적 워드에는 0을 입력합니다. 어떤 값을 입력하더라도, 리셋 명령어는 누적값을 0으로 초기화합니다.

그림 8-12는 RSLogix 툴바의 타이머/카운터 메뉴 탭을 보여줍니다. 이 탭을 선택하면 여러 종류의 타이머 및 카운터 명령어가 나타납니다. 처음 세 개는 7장에서 다룬 타이머 명령어입니다. 이어지는 두 개가 업-카운터(CTU)와 다운-카운터(CTD) 명령어입니다. CTU와 CTD 오른쪽에는 카운터와 타이머 모두에서 사용하는 리셋(RES) 명령어가 있습니다. 카운터 명령어는 다음과 같이 요약됩니다:

CTU (Count-Up) — false-to-true 전이마다 누적값을 증가시키며, 전원이 꺼졌다 켜져도 누적값을 유지합니다.

CTD (Count-Down) — false-to-true 전이마다 누적값을 감소시키며, 전원이 꺼졌다 켜져도 누적값을 유지합니다.

HSC (High-Speed Counter) — 고속 입력(high-speed input)에서 발생하는 고속 펄스를 카운트합니다.

그림 8-13은 모터가 10회 동작한 후 정지하도록 만든 PLC 카운터 프로그램을 보여줍니다. 프로그램 동작은 다음과 같이 요약됩니다:

• 업-카운터 C5:0은 모터의 off/on 동작 횟수를 카운트합니다.

• 카운터의 설정값은 10으로 지정됩니다.

• 카운터 완료 비트(done bit) Examine-off 명령어(XIO)는 모터 출력 명령어와 직렬로(programmed in series) 구성됩니다.

• 모터 출력 Examine-on 명령어(XIC)는 모터의 각 off/on 동작마다 카운터의 누적값(accumulated value)을 증가시키는 데 사용됩니다.

• 카운트가 10에 도달하면 카운터 완료 비트 Examine-off 명령어가 false가 되어 모터가 다시 기동되는 것을 방지합니다.

• 리셋(pushbutton) 스위치를 누르면 누적값이 0으로 리셋됩니다.

그림 8-14는 세 개의 업-카운터를 사용하는 캔( can) 계수 PLC 프로그램을 보여줍니다. 프로그램의 동작은 다음과 같이 요약할 수 있습니다:

• 카운터 C5:2는 최종 패키징을 위해 조립 라인(assembly line)에서 배출되는 캔의 총수를 카운트합니다.

• 각 패키지는 10개의 부품을 포함해야 합니다.

• 10개의 캔이 감지되면, 카운터 C5:1이 비트 B3/1을 설정하여 박스(box) 닫기 시퀀스를 시작합니다.

• 카운터 C5:3은 하루 동안 채워진 패키지 총수를 카운트합니다. (하루 최대 패키지 수는 300개입니다.)

• 푸시버튼은 매일 총 부품 수와 패키지 수를 0으로 다시 시작하는 데 사용됩니다.

One-Shot Instruction (1회성 명령)

그림 8-15는 카운터를 자동으로 클리어하거나 리셋하기 위해 자주 사용되는 원-숏(one-shot) 또는 전이형(transitional) 접점 회로의 프로그램을 보여줍니다. 이 프로그램은 트리거될 때 한 번의 프로그램 스캔 동안만 온(on) 상태가 유지되고 이후 오프(off)되는 출력 펄스를 생성하도록 설계됩니다. 원-숏은 순간 신호(momentary signal) 또는 일정 시간 동안 온 상태를 유지하는 신호 모두에서 트리거될 수 있습니다. 어떤 신호가 사용되든 원-숏은 입력 신호의 리딩-에지(leading-edge, off-to-on) 전이에 의해 트리거됩니다. 원-숏은 한 스캔 동안만 온 상태가 되고 곧바로 오프 상태가 됩니다. 트리거 신호가 다시 오프 상태로 돌아갈 때까지 오프 상태를 유지하며, 이후 다시 온 전이가 발생하면 원-숏이 다시 온 됩니다. 원-숏은 카운터와 타이머를 리셋하는 데 매우 적합한데, 이는 한 스캔 동안만 온 상태가 유지되기 때문입니다.

일부 PLC는 표준 A접점(NO) 및 B접점(NC) 명령어 외에도 전이형 접점 또는 원-숏 명령어를 제공합니다. 그림 8-16a에 표시된 off-to-on 전이 접점 명령어는 트리거 신호가 양의(off-to-on) 전이를 할 때 원-숏 펄스를 제공하도록 프로그램됩니다.( 트리거 신호가 off에서 on으로 변할 때 이 접점은 정확히 한 프로그램 스캔 동안 닫힙니다. 이 접점은 한 스캔 동안 논리 연속성을 허용한 후, 트리거 신호가 계속 on 상태를 유지하더라도 열림 상태가 됩니다.(Rising Edge Oneshot) 그림 8-16b의 on-to-off 전이 접점은, 트리거 신호가 on에서 off로 전이될 때 한 스캔 동안 논리 연속성을 허용한다는 점만 제외하면 off-to-on 전이 접점과 동일하게 동작합니다.(falling Edge Oneshot)

그림 8-17의 컨베이어 모터 PLC 프로그램은 업-카운터와 함께 프로그램된 원-숏(OSR) 전이형 접점 명령어의 적용 예를 보여줍니다. 카운터는 컨베이어에서 배출되는 케이스(case)의 개수를 카운트합니다. 케이스의 총 개수가 50에 도달하면 컨베이어 모터는 자동으로 정지합니다. 적재되는 트럭은 이 제품을 총 50개만 실을 수 있으며, 제품 종류에 따라 이 카운트 값은 변경할 수 있습니다. 프로그램의 동작은 다음과 같이 요약됩니다:

• 순간 동작(start) 버튼을 누르면 컨베이어 모터 M1이 구동됩니다.

• 케이스의 통과는 근접 스위치(proximity switch)에 의해 감지됩니다.

• 케이스가 근접 스위치를 지나갈 때마다 스위치의 false-to-true 전이가 발생하며, 이때 카운터의 누적값이 1씩 증가합니다.

• 카운트가 50에 도달하면 카운터의 완료 비트(done bit)가 상태를 변경하여 컨베이어 모터를 자동으로 정지시키고 카운터의 누적값을 0으로 리셋합니다.

• 컨베이어 모터는 누적 카운트를 잃지 않고 언제든지 수동으로 정지하거나 다시 기동할 수 있습니다.

• 카운터의 누적값은 카운트 리셋 버튼을 사용하여 언제든지 수동으로 리셋할 수 있습니다.

Allen-Bradley SLC 500 one-shot rising (OSR) 명령어는 한 번만 발생해야 하는 이벤트를 트리거하는 입력 명령어입니다. OSR 명령어는 래더( Ladder)에서 출력 명령어 바로 앞에 배치됩니다. OSR 명령어 앞에 있는 런(rung) 조건이 false에서 true로 전이되면 OSR 명령어도 true가 되지만 한 스캔 동안만 유지됩니다. 그림 8-18은 OSR 런의 동작을 보여주며, 다음과 같이 요약할 수 있습니다:

• OSR 원-숏 라이징(one-shot rising) 명령어는 리미트 스위치 입력 LS1이 false에서 true로 변할 때 카운터 리셋 명령어(RES)를 한 스캔 동안 true로 만들기 위해 사용됩니다.

• OSR에는 프로그램의 다른 어떤 부분에서도 사용되지 않는 불리언(Boolean) 비트(B3:0/0)가 할당됩니다.

• OSR 명령어는 반드시 출력 명령어 바로 앞에 위치해야 합니다.

• 리미트 스위치가 닫히면 LS1과 OSR 입력 명령어는 false에서 true로 전이됩니다. 이때 OSR 명령어는 런을 조건화하여 카운터 C5:1의 리셋 출력 명령어가 한 프로그램 스캔 동안 true가 되도록 합니다.

• 출력 리셋 명령어는 다시 false로 돌아가며, 입력에서 또 다른 false-to-true 전이가 발생할 때까지 연속된 스캔 동안 false 상태를 유지합니다.

• 리미트 스위치가 닫혀 있는 동안 OSR 비트는 1로 설정된 상태를 유지합니다.

• 리미트 스위치가 열리면 OSR 비트는 0으로 리셋됩니다.

OSR 명령의 적용 예로는 빠르게 표시되는 LED 값을 고정하는 기능이 있습니다. 그림 8-19는 출력 LED 디스플레이로 데이터를 보내기 위해 사용된 원샷(one-shot) 명령을 보여줍니다. 원샷은 타이머의 축적(accumulated) 시간이 빠르게 변하는 것을 고정하여 읽기 쉽고 안정적인 디스플레이가 가능하도록 합니다. 프로그램의 동작은 다음과 같습니다:

• 타이머 T4:1의 축적값(Accumulated value)은 이진화 10진수(BCD)로 변환되어 LED 디스플레이가 연결된 출력 워드 O:6으로 이동됩니다.

• 타이머가 동작 중일 때, SW(I:1/1)이 닫히면 축적 값은 빠르게 변화합니다.

• 순간 동작용 푸시버튼 PB(I:1/0)을 누르면 그 시점의 값이 고정되어 표시됩니다.

그림 8-20의 알람 모니터 PLC 프로그램은 7장에서 다룬 프로그래밍된 타이머 발진기(oscillator) 회로와 함께 사용되는 업카운터(up-counter)의 적용을 보여줍니다. 프로그램 동작은 다음과 같이 요약됩니다:

• 알람은 플로트 스위치 FS가 닫히면 트리거됩니다.

• 알람 조건이 트리거되고 아직 확인(acknowledge)되지 않은 경우, 중간에 알람 조건이 해제되더라도 램프는 점멸합니다.

• 선택 스위치 SS를 닫으면 알람이 확인됩니다.

• 알람 트리거 조건이 여전히 존재하지만 확인된 경우, 램프는 지속 점등 모드로 동작합니다.

8.3 Down-Counter

다운카운터(down-counter) 명령은 계수 이벤트가 발생할 때마다 1씩 카운트다운 또는 디크리먼트(decrement)합니다. 다운카운트 이벤트가 발생할 때마다 누적(accumulated) 값이 감소합니다. 일반적으로 다운카운터는 업카운터(up-counter)와 함께 사용되어 업/다운카운터를 구성합니다. 그림 8-21은 일반적인 블록 형식의 업/다운카운터 프로그램과 타이밍도(timing diagram)를 보여줍니다. 프로그램의 동작은 다음과 같이 요약될 수 있습니다:

• 업카운트 입력과 다운카운트 입력이 별도로 제공됩니다.

• 카운터의 설정값(preset value)이 3이고 누적 값이 0이라고 가정하면, 업카운트 입력(PB1)을 세 번 펄스하면 출력 램프는 꺼짐(off)에서 켜짐(on)으로 전환됩니다.

이 PLC 카운터는 설정값을 초과한 계수 횟수를 기록합니다. 그 결과, 업카운트 입력(PB1)을 세 번 더 펄스하면 축적 값은 6이 되지만 출력에는 변화가 없습니다.

• 이때 다운카운트 입력(PB2)을 네 번 펄스하면 축적 값은 2로 감소합니다(6 − 4). 그 결과, 축적 값이 설정값 아래로 떨어지므로 출력 램프는 켜짐에서 꺼짐으로 전환됩니다.

• 리셋 입력(PB3)을 어느 시점에서든 펄스하면 축적 값은 0으로 리셋되며 출력 램프는 꺼집니다.

다운카운터 명령이 항상 동일한 방식으로 카운트하는 것은 아닙니다. 일부 업카운터는 설정값까지만 카운트하고, 그 이후의 계수는 무시합니다. 다른 업카운터는 설정값을 초과한 계수까지 기록합니다. 반대로, 일부 다운카운터는 단순히 0까지 감소하며 그 이하로는 카운트하지 않습니다. 또 다른 다운카운터는 0 아래까지 감소한 뒤, PLC 카운터 명령에 설정할 수 있는 최대 설정값부터 다시 카운트다운하기도 합니다. 예를 들어, 최대 카운터 설정값이 999인 PLC 업/다운카운터는 다음과 같이 카운트업할 수 있습니다: 997, 998, 999, 000, 001, 002, … 동일한 카운터는 다음과 같이 카운트다운할 수 있습니다: 002, 001, 000, 999, 998, 997, …

업/다운카운터의 한 가지 적용 예는 주차장에 출입하는 차량 수를 카운트하는 것입니다.

그림 8-22는 이를 구현하기 위해 사용될 수 있는 전형적인 PLC 프로그램을 보여줍니다. 프로그램의 동작은 다음과 같이 요약될 수 있습니다:

• 차량이 입차하면, 입차 스위치가 업카운터 출력 명령을 트리거하여 축적 값이 1 증가합니다.

• 차량이 출차하면, 출차 스위치가 다운카운터 출력 명령을 트리거하여 축적 값이 1 감소합니다.

• 업카운터와 다운카운터는 동일한 주소 C5:1을 사용하므로, 두 명령의 축적 값과 설정값은 동일하게 유지됩니다.

• 축적 값 150이 설정값 150과 같아지는 순간, 완료 비트(done bit)에 의해 카운터 출력이 동작하여 ‘만차(Lot Full)’ 표시등이 점등됩니다.

• 축적 값을 리셋하기 위한 리셋 버튼이 제공되어 있습니다.

그림 8-23은 Allen-Bradley SLC 500 컨트롤러 명령 세트의 일부로 사용되는 다운카운터(count-down counter) 명령의 예를 보여줍니다. 이 명령에 입력해야 하는 정보는 업카운터(count-up counter) 명령과 동일합니다.

CTD 명령은 신호가 전이될 때마다 누적(accumulated) 값을 1씩 디크리먼트(decrement)합니다. 누적 값이 설정값(preset value) 이상이 되면 완료 비트(done bit)가 설정됩니다. CTD 명령은 축적 값과 상태 비트(status bits)를 리셋하기 위해 RES 명령을 필요로 합니다. RES 명령에 의해 누적 값이 0으로 리셋되기 때문에, CTD 명령은 이후 전이 시 음수 방향으로 카운트하게 됩니다. 만약 CTD 명령을 양의 설정값과 함께 단독으로 사용할 경우, 축적 값이 0에 도달하면 완료 비트는 리셋됩니다. 그 후 음수 방향으로 카운트할 때는 축적 값이 설정값에 도달할 수 없으므로 완료 비트는 다시 설정되지 않습니다. 그러나 설정값을 음수로 입력할 수 있으며, 이 경우 축적 값이 설정값보다 작아지면 완료 비트가 리셋됩니다.

그림 8-24는 PB1 푸시버튼을 누르면 카운터의 축적 값이 증가하고, PB2를 누르면 축적 값이 감소하는 업/다운카운터 프로그램을 보여줍니다. 업카운터 명령, 다운카운터 명령, 리셋 명령은 모두 동일한 주소를 사용합니다. 세 명령 모두 카운터 파일의 동일한 주소를 참조합니다. 입력 A가 false에서 true로 전이하면 축적 값에 1이 더해집니다. 입력 B가 false에서 true로 전이하면 축적 값에서 1이 빼집니다. 프로그램 동작은 다음과 같이 요약됩니다:

• CTU 명령이 true가 되면 C5:2/CU가 true가 되어 출력 A가 true가 됩니다.

• CTD 명령이 true가 되면 C5:2/CD가 true가 되어 출력 B가 true가 됩니다.

• 누적 값이 설정값 이상이면 C5:2/DN이 true가 되어 출력 C가 true가 됩니다.

• 입력 C가 true가 되면 두 카운터 명령이 모두 리셋됩니다. RES 명령에 의해 리셋되면 축적 값은 0으로 초기화되고 완료 비트도 리셋됩니다.

그림 8-25는 공정 중 항목을 지속적으로 모니터링하기 위해 사용되는 업/다운카운터 프로그램의 동작을 보여줍니다. 인피드(in-feed) 광전 센서는 시스템으로 들어오는 원재료를 카운트하고, 아웃피드(out-feed) 광전 센서는 기계에서 나오는 완제품을 카운트합니다. 인피드와 아웃피드 사이의 제품 수는 카운터의 축적 값으로 표시됩니다. 업 입력에 들어오는 카운트는 더해지고, 다운 입력에 들어오는 카운트는 빼집니다. 프로그램 동작은 다음과 같이 요약됩니다:

• 가동 전, 시스템에는 부품이 전혀 없으며 카운터는 수동으로 0으로 리셋됩니다.

• 운전이 시작되면 원재료가 인피드 센서를 지나며 각 부품마다 업카운트가 발생합니다.

• 가공 후, 아웃피드 센서에 감지된 완제품은 다운카운트를 발생시키므로 카운터의 축적 값은 공정 중인 부품 수를 지속적으로 나타냅니다.

• 이 응용에서는 카운터 설정값은 의미가 없습니다. 카운터 출력이 켜져 있든 꺼져 있든 중요하지 않으며, 출력 온-오프 논리는 사용되지 않습니다. 본문에서는 임의로 카운터 설정값을 50으로 설정하였습니다.

전이 신호를 안정적으로 카운트할 수 있는 최대 속도는 프로그램 스캔 시간(scan time)에 의해 결정됩니다. 신뢰할 수 있는 카운트를 위해서는 카운터 입력 신호가 한 스캔 시간 동안 유지되어야 합니다. 입력이 스캔 주기보다 더 빠르게 변하면 카운트가 누락되어 누적값이 신뢰할 수 없게 됩니다. 이런 상황에서는 고속 카운터 입력(high‑speed counter input) 또는 고속 적용을 위해 설계된 별도의 카운터 I/O 모듈을 사용해야 합니다.

8.4 Cascading Counters

응용에 따라 하나의 카운터 명령으로 허용되는 최대 계수값을 초과하는 이벤트를 카운트해야 할 수도 있습니다. 이를 달성하는 한 가지 방법은 두 개의 카운터를 서로 연결(cascading)하는 것입니다. 그림 8-26은 이 기법의 적용 예를 보여줍니다. 프로그램의 동작은 다음과 같이 요약될 수 있습니다:

• 첫 번째 카운터의 출력이 두 번째 카운터의 입력으로 프로그래밍됩니다.

• 두 카운터의 상태 비트(status bits)는 직렬로 프로그래밍되어 하나의 출력을 생성합니다.

• 이 두 카운터를 사용하면 두 배의 카운트를 측정할 수 있습니다.

또 다른 카운터 캐스케이딩 방법은 매우 큰 계수값을 저장해야 할 때 사용되기도 합니다. 예를 들어 250,000까지 카운트해야 하는 경우 두 개의 카운터만으로 이를 달성할 수 있습니다. 그림 8-27은 이를 위해 두 카운터가 어떻게 프로그래밍되는지 보여줍니다. 프로그램의 동작은 다음과 같이 요약될 수 있습니다:

• 카운터 C5:1의 설정값은 500이며, 카운터 C5:2의 설정값도 500입니다.

• 카운터 C5:1이 500에 도달할 때마다 완료 비트(done bit)가 카운터 C5:1을 리셋하고 카운터 C5:2를 1 증가시킵니다.

• 카운터 C5:1의 완료 비트가 500번 켜지고 꺼지면 출력 램프가 점등됩니다. 따라서 계수 입력의 전이가 500 × 500, 즉 250,000번 발생한 후 출력 램프가 켜집니다.

일부 PLC는 실시간 시계(real‑time clock)를 명령 세트의 일부로 포함하고 있습니다. 실시간 시계는 시각을 표시하거나 공정 운전에 관한 데이터를 기록(log)하는 데 사용됩니다. PLC 프로그램에서 시계를 구현하는 논리는 간단하며, 단일 타이머(timer) 명령과 카운터(counter) 명령만으로도 구성할 수 있습니다.

그림 8-28은 시(h)와 분(min)을 측정하는 타임‑오브‑데이(time‑of‑day) 시계를 생성하는 타이머‑카운터 프로그램을 보여줍니다. 프로그램의 동작은 다음과 같이 요약될 수 있습니다:

• 먼저 RTO 타이머 명령(T4:0)이 60초의 설정값으로 프로그래밍됩니다.

• T4:0 타이머는 60초 동안 타이밍을 수행한 후 완료 비트가 설정됩니다.

• 이 완료 비트는 001 런(rung)의 업카운터(C5:0)를 1 증가시킵니다.

• 다음 프로세서 스캔에서 타이머는 리셋되고 다시 타이밍을 시작합니다.

• C5:0 카운터는 설정값이 60으로 설정되어 있으며, 타이머가 지연시간을 완료할 때마다 카운트가 증가됩니다.

• C5:0 카운터가 설정값 60에 도달하면 완료 비트가 설정됩니다.

• 이 완료 비트는 002 런의 업카운터(C5:1)를 1 증가시키며, 이 카운터의 설정값은 24입니다.

• 카운터 C5:1이 설정값 24에 도달하면 완료 비트가 설정되어 스스로를 리셋합니다.

• 시간 표시(Time of day)는 각 카운터의 현재 값(축적 값)과 타이머의 현재 시간 값을 참조해 생성됩니다.

• 카운터 C5:1은 하루 24시간 군사시(military format) 기준의 시(hour)를 나타내며, 현재 분(minute)은 카운터 C5:0의 축적 값으로 표현됩니다.

• 타이머는 현재 축적 값으로 1분의 초(second)를 표시합니다.

24시간 시계는 어떤 사건의 시간을 기록하는 데 사용할 수 있습니다. 그림 8-29는 이 기법의 원리를 보여줍니다.

이 응용에서는 압력 스위치가 개방되는 시간을 기록하도록 되어 있습니다. 프로그램 동작은 다음과 같이 요약될 수 있습니다.

• 리셋 버튼을 누르고 시계를 현재 시각으로 설정하면 회로가 동작을 시작합니다.

• 이 동작으로 24시간 시계가 시작되며 설정 표시등이 켜집니다.

• 압력 스위치가 어느 순간이라도 개방되면 시계는 자동으로 정지하고 트립 표시등이 켜집니다.

• 이후 시계를 확인하여 압력 스위치가 개방된 시간을 알 수 있습니다.

8.5 Incremental Encoder-Counter Applications

그림 8-30에 제시된 증분식(optical incremental) 엔코더는 회전축이 돌아갈 때 일련의 구형파(square wave)를 생성합니다. 엔코더 디스크는 엔코더 축이 회전하면서 광(光)을 차단하여 구형파 출력 파형을 만들어 냅니다. 엔코더 출력에서 얻어지는 구형파의 개수는 요구되는 기계적 이동량에 대응하도록 설정할 수 있습니다. 예를 들어, 축 1회전을 100등분하려면 회전당 100개의 구형파 사이클을 제공하는 엔코더를 선택할 수 있습니다. 그 사이클을 카운터(counter)로 계수하면 축이 얼마나 회전했는지 알 수 있습니다.

그림 8-31은 물체를 일정 길이로 절단하는 예를 보여줍니다. 물체는 설정된 거리만큼 이송되며, 절단에 필요한 정확한 길이를 결정하기 위해 엔코더 펄스로 측정됩니다.

그림 8-32는 길이 측정에 사용되는 카운터 프로그램을 보여줍니다. 이 시스템은 컨베이어 위에서 이동하는 임의 길이의 바(bar) 소재의 총 길이를 누적합니다. 프로그램의 동작은 다음과 같이 요약될 수 있습니다.

• 컨베이어 구동 스프로킷의 톱니가 지나갈 때 이를 감지하는 자기 센서(magnetic sensor)에 의해 카운트 입력 펄스가 생성됩니다.

• 컨베이어가 1 ft 이동할 때 톱니 10개가 센서를 통과한다면, 카운터에 누적된 값은 0.1 ft 단위의 길이를 나타냅니다.

• 광전(photoelectric) 센서는 컨베이어의 기준 위치를 감시합니다. 이 센서가 동작하면 계수를 중단하므로, 카운터는 바 소재가 실제로 이동될 때만 값을 누적하게 됩니다.

• 리셋 버튼을 누르면 카운터가 초기화됩니다.

8.6 Combining Counter and Timer Functions

많은 PLC 응용에서는 카운터 기능과 타이머 기능을 함께 사용합니다. 그림 8-33은 타이머와 카운터가 모두 필요한 자동 적재(stacking) 프로그램을 보여줍니다. 이 공정에서는 컨베이어 M1이 금속판을 컨베이어 M2 위로 적재합니다. 광전 센서는 금속판 한 장이 M1에서 M2로 떨어질 때마다 PLC 카운터에 입력 펄스를 제공합니다. 금속판이 15장 적재되면 PLC 타이머에 의해 컨베이어 M2가 5초간 동작합니다. 프로그램의 동작은 다음과 같이 요약될 수 있습니다.

• 시작 버튼을 누르면 컨베이어 M1이 동작하기 시작합니다.

• 금속판이 15장 적재되면 M1은 정지하고 M2가 동작합니다.

• M2가 5초 동안 동작한 후 정지하며, 이후 시퀀스가 자동으로 반복됩니다.

• 타이머의 완료 비트(done bit)는 타이머와 카운터를 리셋하고 컨베이어 M1을 자동으로 다시 시작시키기 위한 순간 펄스를 제공합니다.

그림 8-34는 모터 락아웃(lock-out) 프로그램을 보여줍니다. 이 프로그램은 모터가 1시간 동안 5회 이상 트립(trip)한 경우 작업자가 모터를 다시 기동하지 못하도록 설계되어 있습니다. 프로그램의 동작은 다음과 같이 요약될 수 있습니다.

• 정상상태에서는 열동 계전기(OL: overload)의 A접점이 열려 있으나, 과전류가 감지될 때마다 순간적으로 닫힙니다.

• 모터가 과부하 상태로 정지할 때마다 모터 기동 회로는 5분간 락아웃(lock-out)됩니다.

• 모터가 1시간에 5회 이상 트립되면 모터 기동 회로는 영구적으로 락아웃되며, 리셋 버튼을 누르기 전까지 다시 기동할 수 없습니다.

• 영구 락아웃 상태가 존재할 때는 락아웃 표시등(pilot light)이 켜집니다.

그림 8-34는 모터 록아웃(lock-out) 프로그램을 보여줍니다. 이 프로그램은 모터가 1시간 동안 5회 이상 트립(trip)된 경우 기계 운전자가 모터를 다시 기동하지 못하도록 설계된 것입니다. 프로그램의 동작은 다음과 같이 요약할 수 있습니다.

  • 정상 개방형 과부하(OL, overload) 계전기 접점은 과부하 전류가 감지될 때마다 순간적으로 닫힙니다.
  • 모터가 과부하 조건으로 정지할 때마다 모터 기동 회로는 5분간 록아웃됩니다.
  • 모터가 1시간 동안 5회 이상 트립되면 모터 기동 회로는 영구적으로 록아웃되어 리셋 버튼이 눌릴 때까지 다시 기동할 수 없습니다.
  • 영구 록아웃 상태가 존재하는 동안 록아웃 표시등(pilot light)이 점등됩니다.

그림 8-35는 제품 부품 유량(flow) 프로그램을 보여줍니다. 이 프로그램은 특정 공정 지점을 1분 동안 통과하는 부품 수를 표시하도록 설계되었습니다. 프로그램의 동작은 다음과 같이 요약할 수 있습니다.

  • 기동 스위치가 닫히면 타이머와 카운터가 모두 활성화됩니다.
  • 부품 센서를 통과하는 각 부품마다 카운터에 펄스가 입력됩니다.
  • 계수가 시작되고 타이머는 1분(time interval)의 시간 계측을 시작합니다.
  • 1분이 지나면 타이머 완료(done) 비트가 카운터 런(rung)을 FALSE로 만듭니다.
  • 센서 펄스는 계속 들어오지만 PLC 카운터에는 영향을 주지 않습니다.
  • 지난 1분 동안의 부품 수는 카운터의 누적값(accumulated value)으로 표시됩니다.
  • 시퀀스는 기동 스위치를 순간적으로 열었다가 닫아 리셋됩니다.

매우 긴 시간 지연(time-delay) 기간이 필요한 경우, 타이머로 카운터를 구동하는 방식이 종종 사용됩니다. 예를 들어 1,000,000초의 타이밍이 필요한 경우, 하나의 타이머와 카운터만으로 이를 구현할 수 있습니다. 그림 8-36은 이러한 목적을 위해 타이머와 카운터가 어떻게 프로그래밍되는지를 보여줍니다. 프로그램의 동작은 다음과 같이 요약할 수 있습니다.

  • 타이머 T4:0의 설정값(preset value)은 10,000이며, 카운터 C5:0의 설정값은 100입니다.
  • 타이머 T4:0의 입력 접점이 10,000초 동안 닫힐 때마다 타이머 완료(done) 비트는 타이머 T4:0을 리셋하고 카운터 C5:0을 1 증가시킵니다.
  • 타이머 T4:0의 완료 비트가 100번 켜졌다 꺼지면 출력등(output light)이 점등됩니다.
  • 따라서 입력 접점이 닫힌 후 10,000 × 100, 즉 1,000,000초가 지나면 출력등이 켜지게 됩니다.