Program Control Instruction

9.1 Master Control Reset Instruction

여러 출력형 명령어들은 보통 오버라이드 명령어라 불리며, 특정 조건이 충족될 경우 제어 로직의 일부 구간을 실행할 수 있는 방법을 제공합니다. 이러한 프로그램 제어 명령어들은 프로그램의 유연성과 스캔 효율을 향상시킵니다. 특정 시점에 사용되지 않는 프로그램의 일부는 건너뛸 수 있으며, 프로그램의 특정 영역에 있는 출력은 원하는 상태로 유지할 수 있습니다.

프로그램 제어 명령어는 로직 프로그램의 특정 블록을 활성화 또는 비활성화하거나, 프로그램 실행 위치를 한 부분에서 다른 부분으로 이동시키는 데 사용됩니다. 그림 9-1은 Allen-Bradley SLC 500 PLC와 그에 대응하는 RSLogix 소프트웨어의 Program Control 메뉴 탭을 보여줍니다. 프로그램 제어 명령어는 다음과 같이 요약할 수 있습니다:

JMP (Jump to Label) — 대응되는 label 명령어로 앞으로/뒤로 점프합니다.

LBL (Label) — label 위치를 지정합니다.

JSR (Jump to Subroutine) — 지정된 subroutine 명령어로 점프합니다.

RET (Return from Subroutine) — 현재 subroutine을 종료하고 이전 조건으로 되돌아갑니다.

SBR (Subroutine) — subroutine 프로그램을 지정합니다.

TND (Temporary End) — 프로그램 실행을 정지시키는 임시 종료를 의미합니다.

MCR (Master Control Reset) — 짝을 이루는 MCR 명령어 사이의 모든 비보존형(nonretentive) 출력 런(rung)을 리셋합니다.

SUS (Suspend) — 디버깅 및 시스템 트러블슈팅 조건을 지정합니다.

하드와이어된(master control relay) 마스터 컨트롤 릴레이는 릴레이 제어 회로에서 전체 회로의 입출력 전원 차단을 제공하는 데 사용됩니다. 그림 9-2는 일반적인 하드와이어 마스터 컨트롤 릴레이 회로를 보여줍니다. 이 회로에서는 마스터 컨트롤 릴레이 코일이 여자되지 않으면 MCR 접점의 부하 측으로 전력이 흐르지 않습니다.

PLC 제조업체는 명령어 세트의 일부로 마스터 컨트롤 릴레이 형태를 제공합니다. 이러한 명령어들은 하드와이어 마스터 컨트롤 릴레이와 유사하게 동작하며, 즉 명령어가 참이면 회로가 정상적으로 동작하고, 거짓이면 비보존형 출력은 꺼집니다. 그러나 이러한 명령어는 하드와이어가 아닌 프로그램 방식이므로, 안전상의 이유로 비상 I/O 전원 차단 기능을 제공하는 하드와이어 마스터 컨트롤 릴레이를 대체하는 용도로 사용해서는 안 됩니다.

Master Control Reset(MCR) 명령어는 마스터 컨트롤 릴레이와 유사하게 동작하는 출력 코일 명령어입니다. MCR 코일 명령어는 짝을 이루어 사용되며, 전체 회로를 제어하거나 회로의 선택된 런만 제어하도록 프로그래밍할 수 있습니다. 그림 9-3의 프로그램에서 MCR은 전체 회로를 제어하도록 프로그래밍되어 있습니다. 동작은 다음과 같이 요약할 수 있습니다:

• MCR 명령어가 거짓 또는 비여자 상태이면, 아래에 위치한 모든 비보존형(비래치) 런은 각 런의 로직이 참이더라도 비여자 상태가 됩니다.

• 모든 보존형(rententive) 런은 마지막 상태를 유지합니다.

• MCR 명령어는 사용자 프로그램 내에서 모든 비보존형 출력을 동시에 끌 수 있는 영역을 설정합니다.

• 보존형 명령어는 일반적으로 MCR 영역 내에 배치하지 않는 것이 좋습니다. MCR 영역에서는 명령어가 거짓이 되더라도 보존형 명령어가 마지막 활성 상태를 유지하기 때문입니다.

• 오프딜레이 타이머(off-delay timer)는 MCR 비여자 영역에서 타이밍을 시작합니다.

Allen-Bradley SLC 500 컨트롤러는 Master Control Reset 명령어를 사용하여 프로그램 내에 하나 또는 여러 개의 구역(zone)을 설정합니다. MCR 명령어는 래더 프로그램 내에서 특정 구역을 비활성 또는 활성화하기 위해 짝으로 사용되며, 주소를 가지지 않습니다. 그림 9-4는 MCR 울타리(fence) 구역이 참일 때의 프로그래밍을 보여줍니다. 동작은 다음과 같이 요약할 수 있습니다:

• MCR 구역은 조건부 MCR이 있는 시작 울타리 런과, 무조건부 MCR이 있는 종료 울타리 런에 의해 둘러싸입니다.

• 시작 런의 입력 A가 참이므로, 해당 MCR 구역이 존재하지 않는 것처럼 모든 출력은 각 런의 로직에 따라 동작합니다.

그림 9-5는 MCR 울타리 구역이 거짓일 때의 프로그래밍을 보여줍니다. 동작은 다음과 같이 요약할 수 있습니다:

• 시작 울타리의 MCR이 거짓이면, 구역 내 모든 런은 거짓으로 처리됩니다. 스캔은 입력을 무시하며 모든 비보존형 출력(즉, 출력 에너지 명령어, 온딜레이 타이머, 오프딜레이 타이머)을 비여자 상태로 만듭니다.

• 래치, 보존형 타이머, 카운터 등 모든 보존형 장치는 마지막 상태를 유지합니다.

• 시작 런의 입력 A가 거짓이므로 출력 A와 T4:1은 거짓이 되고, 출력 B는 마지막 상태를 유지합니다.

• 각 런의 입력 조건은 출력 조건에 아무런 영향을 미치지 않습니다.

일반적인 MCR 영역 제어의 적용 방식은 하나 이상의 고장 비트(fault bit)를 시작 펜스(start fence)의 일부로 확인하고, MCR 영역에서 고장 발생 시 디에너자이즈(de‑energize)하고자 하는 프로그램 부분을 해당 영역 안에 포함시키는 것입니다. 고장 조건이 감지되면, 그 영역 안에 있는 출력들은 자동으로 디에너자이즈됩니다.

타이머(timer)나 카운터(counter)와 같은 명령을 MCR 영역 안에서 시작하는 경우, 해당 영역이 비활성화되면 명령의 동작은 중지됩니다. 특히 TOF 타이머(TOF timer)는 MCR 영역이 false 상태일 때 활성화됩니다. MCR 영역이 포함된 프로그램을 트러블슈팅할 때는, 회로를 올바르게 수정하기 위해 어떤 런(rung)들이 MCR 영역 내부에 포함되는지 반드시 파악해야 합니다.

MCR로 제어되는 영역에는 시작을 정의하는 MCR 명령과 끝을 정의하는 MCR 명령, 이렇게 두 개의 MCR 명령만 포함되어야 합니다. MCR 영역을 서로 겹치게(overlap) 하거나 중첩(nest)해서는 안 됩니다. 추가적인 MCR 명령을 사용하거나, MCR 영역으로 점프하도록 점프(jump) 명령을 구성하는 경우 프로그램 동작과 기계 운전에 예기치 못한 문제나 손상을 초래할 수 있습니다.

9.2 Jump Instruction

PLC 프로그램에서는 특정 조건이 존재할 때 특정 프로그램 명령들을 건너뛰어야 하는 경우가 있습니다. 이러한 목적을 위해 사용되는 출력 명령이 점프(JMP) 명령입니다. 점프 명령이 사용되면, PLC는 점프된 런(rung)의 명령들을 실행하지 않습니다. 점프 명령은 특정 시점에서 기계 동작과 관련이 없는 명령들을 건너뛰기 위해 자주 사용됩니다. 또한 생산 과정에서 고장이 발생했을 때 프로그램의 특정 구역을 점프하도록 구성할 수도 있습니다.

일부 제조사는 점프 명령과 사실상 동일한 스킵(skip) 명령을 제공합니다.

그림 9-6의 프로그램은 Allen-Bradley SLC 500 프로그래머블 컨트롤러에서 점프 명령을 사용하는 예를 보여줍니다. 주소 Q2:0부터 Q2:255까지는 점프(JMP) 명령에 사용되는 주소입니다. 레이블(LBL) 명령은 점프 명령이 도달하는 대상입니다. 또한 점프 명령과 해당 레이블은 동일한 주소를 가져야 합니다. 프로세서가 점프하는 프로그램 영역은 프로그램 내에서 점프 명령과 레이블 명령이 위치한 곳에 의해 정의됩니다. 점프 코일이 에너자이즈(energize)되면, 점프와 레이블 명령 사이의 모든 로직은 우회되며, 프로세서는 LBL 명령 이후를 계속 스캔합니다.

프로그램의 동작은 다음과 같이 요약할 수 있습니다:

• 스위치가 열려 있을 때 점프 명령은 활성화되지 않습니다.

• 스위치가 열린 상태에서 PB를 누르면 세 개의 파일럿 램프(pilot light)가 모두 켜집니다.

• 스위치가 닫히면 점프(JMP) 명령이 활성화됩니다.

• 스위치가 닫힌 상태에서 PB를 누르면 파일럿 램프 PL1과 PL3만 켜집니다.

• PLC 프로그램 스캔 중 런(rung) 3은 건너뛰므로 PL2는 켜지지 않습니다.

그림 9-7은 프로그램에서 점프된 런(rung)들이 입력 및 출력 명령에 미치는 영향을 보여줍니다. 레이블 명령은 래더(radder) 런(rung)의 점프 대상 위치를 식별하는 데 사용되지만 로직 연속성에는 기여하지 않습니다. 실질적으로 레이블 명령은 항상 논리적으로 true로 간주됩니다. 프로그램 동작은 다음과 같이 요약할 수 있습니다:

• 런(rung) 4가 로직 연속성을 갖게 되면, 프로세서는 런 8로 점프하여 그 지점부터 메인 프로그램을 계속 실행합니다.

• 점프된 런 5, 6, 7은 프로세서에 의해 스캔되지 않습니다.

• 점프된 런의 입력 조건은 평가되지 않으며, 해당 런이 제어하는 출력은 이전 상태를 유지합니다.

• 점프 영역에 프로그램된 타이머(timer)나 카운터(counter)는 동작을 멈추며, 이 기간 동안 업데이트되지 않습니다. 따라서 이러한 명령은 점프된 섹션이 아닌 메인 프로그램 영역에 구성해야 합니다.

그림 9-8에서 볼 수 있듯이 동일한 레이블로 여러 점프 위치에서 점프할 수도 있습니다. 이 예에서는 두 개의 점프 명령이 주소 Q2:20을 갖고 있으며, 하나의 레이블 명령 역시 Q2:20 주소를 갖습니다. 스캔은 입력 A 또는 입력 D가 true인지에 따라 어느 점프 명령에서든 레이블 Q2:20으로 점프할 수 있습니다.

프로그램에서 뒤쪽 방향으로 점프하는 것도 가능하지만, 이를 과도하게 수행해서는 안 됩니다. 스캔이 루프(loop) 안에 너무 오래 머물지 않도록 주의해야 합니다. 프로세서에는 전체 프로그램 스캔의 최대 허용 시간을 설정하는 워치독 타이머(watchdog timer)가 있으며, 이 시간이 초과되면 프로세서는 고장을 표시하고 셧다운됩니다.

앞으로 점프하는 기능은 입력 로직 조건에 따라 PLC 래더 로직의 일부 블록을 건너뛰게 한다는 점에서 MCR 명령과 유사합니다. 그러나 두 명령의 가장 큰 차이점은 명령이 실행되었을 때 출력이 처리되는 방식입니다. MCR 명령은 비보존(nonretentive) 출력은 false 상태로 만들고, 보존(retentive) 출력은 마지막 상태를 유지합니다. 반면 JMP 명령은 모든 출력을 마지막 상태로 유지합니다. 마스터 컨트롤 리셋(MCR) 영역 안으로 점프해서는 절대 안 됩니다. 그렇게 하면 LBL 명령에서 시작하여 MCR 종료 명령까지 구성된 명령들이 시작 MCR 명령의 상태와 무관하게 항상 MCR 영역이 true인 것처럼 평가되기 때문입니다.

PLC 프로그래밍에서 서브루틴(subroutine)의 사용은 매우 유용한 도구입니다. 때때로 길고 방대한 하나의 프로그램을 만드는 것보다 여러 개의 서브루틴으로 구성하는 것이 더 효과적일 때가 있습니다. 프로그램을 서브루틴으로 작성하면 각 서브루틴을 개별적으로 기능 테스트할 수 있으며, 이후 그림 9-9에서와 같이 메인 프로그램에서 이 서브루틴들을 호출할 수 있습니다.

메인 프로그램에서 서브루틴이 호출되면, 프로그램은 메인 프로그램의 흐름에서 벗어나 특정 기능을 수행하기 위해 서브루틴으로 이동한 후 다시 메인 프로그램으로 복귀하게 됩니다. 한 기계의 동작 중 특정 구간이 여러 번 반복되어야 하는 경우, 서브루틴은 중복된 프로그래밍을 크게 줄여줍니다. 그러한 런(rung)들의 순서를 한 번 서브루틴에 작성해두고 필요할 때마다 호출할 수 있기 때문입니다.

서브루틴의 개념은 모든 프로그래머블 컨트롤러에서 동일하지만, 서브루틴을 호출하고 종료하는 방식은 PLC 제조사에 따라 서로 다른 명령을 사용합니다. 그림 9-10에 나타난 Allen-Bradley PLC에서 사용되는 서브루틴 관련 명령은 점프 투 서브루틴(Jump to Subroutine, JSR) 출력 명령, 서브루틴(Subroutine, SBR) 입력 명령, 그리고 리턴(Return, RET) 출력 명령입니다.

서브루틴 명령들은 다음과 같이 요약될 수 있습니다.

Jump to Subroutine (JSR) — JSR 명령은 스캔을 명령에 지정된 프로그램 파일로 점프시키는 출력 명령입니다. 이 명령에는 지정할 매개변수가 하나뿐입니다. 이 출력 명령의 런 조건이 true가 되면, 프로세서는 지정된 서브루틴 파일로 점프합니다. 각 서브루틴은 고유한 파일 번호(10진수 3–255)를 가져야 합니다.

Subroutine (SBR) — SBR 명령은 서브루틴 파일의 첫 번째 런에 위치하는 첫 번째 입력 명령입니다. 이 명령은 해당 프로그램 파일이 서브루틴임을 식별해 줍니다. 이 파일 번호는 프로그램이 점프해야 할 대상을 지정하기 위해 JSR 명령에서 사용됩니다. SBR 명령은 항상 true이며, 사용이 선택 사항이긴 하나 사용하는 것이 권장됩니다.

Return (RET) — RET 명령은 서브루틴 파일의 끝을 표시하는 출력 명령입니다. 이 명령은 스캔을 메인 프로그램으로 되돌려, 프로그램이 JSR 명령을 실행했던 그다음 명령부터 다시 진행하도록 합니다. RET 명령이 없으면 파일의 끝에서 자동으로 메인 프로그램으로 복귀합니다. 서브루틴의 끝 이전에 있는 RET 명령은 조건부가 될 수 있으며, 이 경우 해당 런이 true일 때만 서브루틴의 나머지 부분이 생략됩니다.

점프 투 서브루틴(JSR), 서브루틴(SBR), 그리고 리턴(RET) 명령은 컨트롤러가 서브루틴 파일을 실행하도록 지시하는 데 사용됩니다. 그림 9-11은 점멸 파일럿 램프를 서브루틴으로 구성한 자재 컨베이어 시스템을 보여줍니다.

프로그램의 동작은 다음과 같이 요약될 수 있습니다:

• 컨베이어 위의 중량이 설정값을 초과하면 솔레노이드(solenoid)가 디에너자이즈되고 파일럿 램프 PL1이 점멸하기 시작합니다.

• 중량 센서 스위치가 닫히면 JSR이 활성화되어 프로세서 스캔이 서브루틴 U:3으로 점프합니다.

• 서브루틴 프로그램이 스캔되며 파일럿 램프 PL1이 점멸합니다.

• 중량 센서 스위치가 열리면 프로세서는 더 이상 서브루틴 영역을 스캔하지 않으며 파일럿 램프 PL1은 정상적인 점등 상태로 돌아갑니다.

Allen-Bradley SLC 500 컨트롤러에서 메인 프로그램은 프로그램 파일 2에 위치하며, 서브루틴(subroutine)은 프로그램 파일 번호 3부터 255까지에 할당됩니다. 각 서브루틴은 고유한 파일 번호를 지정하여 별도의 프로그램 파일로 작성해야 합니다. 그림 9-12는 서브루틴을 설정하는 절차를 보여주며, 다음과 같이 요약할 수 있습니다:

• 서브루틴이 호출되어야 하는 래더 위치를 확인합니다.

• 각 위치마다 서브루틴 파일을 생성합니다. 각 서브루틴 파일은 SBR 명령으로 시작해야 합니다.

• 서브루틴이 호출되는 래더 위치마다, 해당 서브루틴 파일 번호를 지정한 JSR 명령을 프로그램합니다.

• RET 명령은 선택 사항입니다.

– 서브루틴 프로그램의 끝에 도달하면 메인 프로그램으로 자동 복귀합니다.

– 프로그램 파일의 끝까지 실행되지 않도록 서브루틴을 조기에 종료하고 싶을 때는 조건부 리턴(RET) 명령을 사용할 수 있습니다.

선택적 SBR 명령은 헤더(header) 명령으로서 입력되는 파라미터를 저장합니다. 이 기능을 사용하면 실행 전에 선택된 값을 서브루틴으로 전달하여, 서브루틴이 데이터에 대한 수학적 또는 논리적 연산을 수행하고 그 결과를 메인 프로그램으로 반환할 수 있습니다. 예를 들어, 그림 9-13에 나타난 프로그램에서는 입력 A가 true일 때 스캔이 메인 프로그램 파일에서 프로그램 파일 4로 점프합니다. 스캔이 프로그램 파일 4로 점프할 때 N7:30의 데이터가 N7:40으로 전달됩니다. 그리고 스캔이 프로그램 파일 4에서 메인 프로그램으로 복귀할 때 N7:50의 데이터가 N7:60으로 전달됩니다.

서브루틴 중첩(nesting)은 메인 프로그램에서 하나의 서브루틴으로 흐름을 이동시키고, 다시 또 다른 서브루틴으로 이어지도록 프로그램 흐름을 구성하는 방식으로, 그림 9-14에 나타나 있습니다. 중첩된 서브루틴은 복잡한 프로그래밍을 더 쉽게 만들어 주며, 하나의 서브루틴에서 다른 서브루틴으로 진입하기 위해 반복적으로 메인 프로그램으로 복귀할 필요가 없기 때문에 프로그램 동작을 더 빠르게 할 수 있습니다.

그러나 중첩된 서브루틴을 프로그래밍할 경우 스캔 시간 문제가 발생할 수 있습니다. 서브루틴이 스캔되는 동안에는 메인 프로그램이 스캔되지 않기 때문입니다. 메인 프로그램 스캔이 지나치게 지연되면, 출력이 요구되는 시점보다 늦게 동작할 수 있습니다. 이러한 상황은 즉시 입력(immediate input) 또는 즉시 출력(immediate output) 명령을 사용하여 중요한 I/O를 갱신함으로써 방지할 수 있습니다.

9.4 Immediate Input and Immediate Output Instructions

즉시 입력(immediate input) 및 즉시 출력(immediate output) 명령은 정상적인 프로그램 스캔을 중단하고, 입력 이미지 테이블 파일을 현재 입력 데이터로 갱신하거나 출력 모듈 그룹을 현재 출력 이미지 테이블 데이터로 갱신합니다. 이러한 명령은 시간에 민감한 I/O 데이터에만 사용하도록 의도되었습니다.

즉시 입력(IIN) Allen-Bradley PLC‑5 명령은 I/O 업데이트가 수행되기 전에 입력 조건을 읽는 데 사용됩니다. 이 동작은 명령이 실행될 때 프로그램 스캔을 중단합니다. 즉시 입력 명령이 실행된 후에는 정상적인 프로그램 스캔이 다시 시작됩니다. 이 명령은 I/O 스캔보다 먼저 갱신이 필요한 중요한 입력 장치와 함께 사용됩니다.

프로그램 스캔이 즉시 입력(immediate input) 명령에 도달하면, 그림 9-15 에 나타난 것처럼 스캔이 중단되고 지정된 워드의 비트들이 업데이트됩니다. 즉시 입력은 관련된 중요 입력 장치의 명령이 프로그램의 중간이나 끝 부분에 위치할 때 가장 유용합니다. 프로그램의 앞부분에서는 I/O 스캔이 이미 수행된 직후이므로 즉시 입력이 필요하지 않습니다. 즉시 입력 명령은 비트 업데이트를 빠르게 수행하지만, 스캔 중단이 발생하므로 전체 프로그램 스캔 시간이 증가합니다. 프로그램 동작은 다음과 같이 요약할 수 있습니다:

• 스캔이 참(True) 상태의 IIN 명령에 도달하면 스캔이 중단됩니다.

• 프로세서는 IIN 명령에서 지정된 위치의 입력 이미지 테이블(input image table) 내 16비트를 업데이트합니다.

• IIN 명령의 두 자리 주소는 랙 번호(첫 번째 자리)와 I/O 그룹 번호(두 번째 자리)로 구성되며, 즉시 업데이트가 필요한 입력을 포함하는 위치를 나타냅니다.

즉시 출력(IOT, immediate output) Allen-Bradley PLC-5 명령은 I/O 업데이트 전에 출력 장치 상태를 업데이트하는 데 사용되는 출력 에너자이즈(output energize) 명령의 특수 버전입니다. 즉시 출력은 I/O 스캔 이전에 업데이트가 필요한 중요 출력 장치에 사용됩니다. 프로그램 스캔이 즉시 출력 명령에 도달하면 스캔이 중단되고 지정된 워드의 비트가 업데이트됩니다. 즉시 출력 명령의 동작은 그림 9-16 에 나타나며 다음과 같이 요약됩니다:

• 프로그램 스캔이 참(True) 상태의 IOT 명령에 도달하면 스캔이 중단되고, 명령에 지정된 워드 주소의 출력 이미지 테이블(output image table)의 데이터가 실제 출력 장치로 전송됩니다.

• 이 예에서는 IOT 명령이 출력 에너자이즈 명령 뒤에 위치합니다.

• 따라서 출력 이미지 테이블 워드가 먼저 업데이트되고, 그 다음 데이터가 실제 출력 장치로 전송됩니다.

Allen-Bradley SLC 500 PLC의 즉시 I/O 명령은 PLC-5보다 몇 가지 개선이 되어 있습니다. SLC 500의 명령인 마스크가 포함된 즉시 입력(IIM, immediate input with mask)과 마스크가 포함된 즉시 출력(IOM, immediate output with mask)은 프로그램 작성자가 16비트 중 어떤 비트를 입력 모듈에서 입력 이미지 테이블로(또는 출력 이미지 테이블에서 출력 모듈로) 복사할지 지정할 수 있게 합니다. 나머지 비트는 영향을 받지 않습니다. 또한 SLC 500 명령은 하나의 입력 모듈에서 여러 데이터 워드를 입력하거나, 하나의 출력 모듈로 여러 데이터 워드를 출력할 수 있습니다.

마스크 포함 즉시 입력(IIM) 명령은 그림 9-17 에 나타나 있습니다. IIM 명령은 특정 슬롯(slot)의 특정 워드에 할당된 입력에 대해 동작합니다. IIM 런(rung)이 참이 되면 프로그램 스캔이 중단되고, 특정 입력 슬롯의 데이터가 마스크를 통과하여 입력 데이터 파일로 전송됩니다. 이 데이터는 IIM 명령 뒤의 래더 명령에서 사용될 수 있습니다. 명령에는 다음과 같은 파라미터가 입력됩니다:

Slot 업데이트할 데이터를 포함하는 슬롯과 워드를 지정합니다. 예: I:3.0 은 슬롯 3, 워드 0의 입력을 의미합니다.

Mask 16진 상수(hex constant) 또는 레지스터 주소를 지정합니다. 마스크에서 비트 값이 1이면 소스 데이터가 목적지로 전달되고, 0이면 전달이 차단됩니다.

Length 슬롯당 한 워드 이상을 전송할 때 사용됩니다.

해당 명령의 프로그램 동작은 다음과 같이 요약됩니다:

• IIM 명령은 I:1.0 의 데이터를 읽고 마스크를 통과시킵니다.

• 마스크는 하위 네 비트만 입력 레지스터 I:1.0 으로 이동하도록 허용합니다.

• 이를 통해 프로그램 작성자는 프로그램 전체에서 사용할 입력의 일부만 선택적으로 업데이트할 수 있습니다.

마스크 포함 즉시 출력(IOM) 명령은 그림 9-18 에 나타나 있습니다. IOM 명령은 특정 슬롯의 특정 워드에 할당된 실제 출력에 대해 동작합니다. IOM 런이 참이면 프로그램 스캔이 중단되고, 명령에 지정된 슬롯의 모듈로 출력 데이터가 업데이트됩니다. 이 데이터는 IOM 명령 다음의 래더 명령에서 사용됩니다. 입력되는 파라미터는 IIM 명령과 거의 동일합니다.

프로세서와 로컬 섀시(local chassis) 간의 통신은 원격 섀시(remote chassis) 간 통신보다 훨씬 빠릅니다. 로컬 I/O 스캔은 프로그램 스캔과 동기식(synchronous)으로 이루어지고 통신이 병렬(parallel)로 수행되는 반면, 원격 I/O 스캔은 프로그램 스캔과 비동기식(asynchronous)이며 통신이 직렬(serial) 방식으로 이루어지기 때문입니다. 이러한 이유로 빠르게 동작하는 장치는 로컬 섀시에 배선하는 것이 좋습니다.

9.5 Forcing External I/O Addresses

포스(force) 기능은 본질적으로 수동 오버라이드(manual override) 제어 기능입니다. 포싱을 사용하면 PLC 사용자가 실제 필드 장치의 상태와 관계없이 프로그래밍 장치의 키보드를 통해 외부 입력 또는 출력을 강제로 켜거나 끌 수 있습니다. 이 기능은 고장 난 필드 장치가 수리될 때까지 기계나 공정을 계속 운전할 수 있게 해주며, 시운전이나 트러블슈팅 시 아직 구현되지 않은 프로그램 일부의 동작을 시뮬레이션하는 데도 유용합니다.

입력 포싱은 입력 이미지 테이블(input image table) 파일의 비트를 조작하므로, 해당 비트를 사용하는 프로그램 전체에 영향을 미칩니다. 입력 포싱은 입력 스캔 직후 수행됩니다. 입력 주소를 포스한다는 것은 특정 I/O 주소의 명령 상태 비트를 강제로 on 또는 off 상태로 만드는 것입니다.

그림 9-19 는 입력을 on 으로 포스하는 방법을 보여줍니다. 프로그램 동작은 다음과 같이 요약됩니다:

• 프로세서는 실제 입력 리미트 스위치 I:1/3 의 상태를 무시합니다.

• 리미트 스위치 I:1/3 이 off(0 또는 false)임에도 프로세서는 이를 on(1 또는 true) 상태로 간주합니다.

• 프로그램 스캔은 이 상태를 기록하고, 프로그램은 강제로 설정된 상태를 기준으로 실행됩니다.

• 즉, 프로그램은 실제로 리미트 스위치가 닫혀 있는 것처럼 동작합니다.

출력 포싱은 지정된 출력 단자에만 영향을 주며, 출력 이미지 테이블 파일 비트는 영향을 받지 않으므로 프로그램 자체는 영향을 받지 않습니다. 출력 포싱은 출력 이미지 테이블 파일이 업데이트되기 직전에 수행됩니다. 출력 주소를 포스하면 해당 출력 단자만 on 또는 off 상태로 강제됩니다. 이때 해당 주소의 출력 명령 상태 비트는 일반적으로 영향을 받지 않습니다.

그림 9-20 은 출력을 on 으로 포스하는 방법을 보여줍니다. 프로그램 동작은 다음과 같이 요약됩니다:

• 프로세서는 솔레노이드 출력 O:2/5 의 실제 상태를 무시합니다.

• 프로그래밍 장치는 출력 포스 데이터 파일(output force data file)에 포스 상태를 설정하고, 출력 이미지 테이블 파일에서는 사용자 로직이 해당 출력을 off 로 설정하고 있더라도 PLC는 솔레노이드 출력 O:2/5 를 on 시킵니다.

• 출력 O:2/6 은 포스 명령이 출력 O:2/5의 상태 비트에는 영향을 주지 않기 때문에 off 상태를 유지합니다.

• 모든 PLC 브랜드가 동일하게 동작하는 것은 아닙니다. 예를 들어 GE Fanuc 컨트롤러에서 출력 포스를 사용하면 동일한 주소를 가진 접점들도 해당 상태로 함께 변경됩니다.

전통적인 릴레이 제어 시스템에서는 실제 입력을 무시하려면 하드와이어 점퍼를 설치해야 했습니다. 그러나 PLC 제어에서는 입력 데이터 테이블 값을 on 또는 off로 강제할 수 있으므로 이러한 점퍼가 필요 없습니다. 포스 기능을 사용하면 외부 입력 회로의 실제 상태를 무시하고 데이터를 강제로 변경할 수 있으며, 출력 데이터 파일 비트도 강제로 on 또는 off 시킬 수 있습니다.

출력을 강제로 off 하면, 래더 로직이 해당 출력을 참으로 만들더라도 컨트롤러가 그 출력을 에너자이즈하지 못하도록 할 수 있습니다. 반대로 출력 런이 false 상태여도 출력을 강제로 on 시킬 수도 있습니다.

그림 9-21 은 I:1/3 비트가 on 으로 포스된 데이터 테이블의 포스 버전을 보여줍니다. 포스 설정은 파일을 오프라인으로 모니터링할 때도 가능하며, 온라인 모니터링 중에는 프로세서의 어떤 모드에서도 활성화 또는 비활성화할 수 있습니다. RSLogix 500 소프트웨어에서의 절차는 다음과 같습니다:

  1. 포싱할 로직이 포함된 프로그램 파일을 엽니다.
  2. 마우스 오른쪽 버튼으로 포스할 I/O 비트를 클릭합니다.
  3. 나타나는 메뉴에서 Go to Data Table 또는 Force On 또는 Force Off 를 선택합니다.
  4. 나타난 데이터 테이블에서 Forces 버튼을 클릭합니다.
  5. 데이터 테이블의 포스 버전이 나타나며 선택한 비트가 강조 표시됩니다. 해당 비트를 마우스 오른쪽 버튼으로 클릭합니다.
  6. 나타나는 메뉴에서 선택한 비트를 on 또는 off 로 포스할 수 있습니다.

포스 기능을 사용할 때는 주의가 필요합니다. 잘못 사용하면 시스템 주변에서 작업하는 사람에게 상해를 입히거나 장비 손상이 발생할 수 있습니다. 따라서 포스 기능은 회로 및 기계 장비의 동작을 완전히 이해하는 숙련된 인원만 사용해야 합니다(그림 9-22). 특정 입력 또는 출력을 포스했을 때 기계 동작에 어떤 영향이 있을지 반드시 이해해야 합니다. 또한 포스가 I/O 점에만 적용되는지, 아니면 사용자 로직과 I/O 점 모두에 적용되는지도 반드시 확인해야 합니다. 대부분의 프로그래밍 장치 및 PLC CPU는 포스가 활성 상태임을 사용자에게 경고하기 위한 표시 기능을 제공합니다.

회전 장비가 포함된 상황에서는 포스 명령이 매우 위험할 수 있습니다. 예를 들어, 유지보수 인력이 전원이 차단된 모터의 일반 점검을 수행하는 동안 누군가 모터 출력에 포스를 걸어 버리면 기계가 갑자기 에너자이즈될 수 있습니다. 이 때문에 I/O 랙에는 하드와이어 마스터 제어 회로가 필요합니다. 하드와이어 회로는 I/O 시스템에 공급되는 전원을 물리적으로 차단하여 마스터 제어가 off일 때 어느 입력 또는 출력도 에너자이즈될 수 없도록 보장합니다.

9.6 Safety Circuitry

충분한 비상 회로가 제공되어야 컨트롤러나 제어되는 기계 또는 공정의 동작을 부분적으로 또는 완전히 정지시킬 수 있습니다. 이러한 회로는 컨트롤러 외부에 하드와이어로 구성되어야 하며, 이는 컨트롤러 전체가 고장 나는 경우에도 독립적이고 신속한 셧다운이 가능하도록 하기 위함입니다.

그림 9-23 은 PLC 설치에서의 일반적인 안전 배선 요구사항을 보여줍니다. 이 설치의 안전 요구사항은 다음과 같이 요약할 수 있습니다:

• 메인 디스커넥트 스위치(main disconnect switch)가 유입 전원 라인에 설치되어 전체 프로그래머블 컨트롤러 시스템의 전원을 제거할 수 있도록 합니다.

• 메인 전원 디스커넥트 스위치는 작업자와 유지보수 인력이 신속하고 쉽게 접근할 수 있는 위치에 있어야 합니다. 이상적으로는 PLC 인클로저 외부에 설치하여 인클로저를 열지 않고 접근할 수 있어야 합니다.

• 전원을 차단하는 것 외에도 컨트롤러가 제어하는 기계나 공정에서 작업하기 전에 모든 다른 전원(공압, 유압)도 반드시 디에너자이즈(de-energize), 잠금(lock out), 태그(tag) 처리해야 합니다.

• 절연 변압기(isolation transformer)는 컨트롤러를 메인 전원 분배 시스템으로부터 절연하고 전압을 120 VAC 로 낮추는 데 사용됩니다.

• 비상 컨트롤러 셧다운을 위한 편리한 방법을 제공하기 위해 하드와이어 마스터 제어 릴레이(master control relay)가 포함됩니다. 마스터 제어 릴레이는 여러 위치에 비상 정지 스위치를 설치할 수 있게 해주므로 안전 측면에서 중요합니다.

• 오버트래블 리미트 스위치(overtravel limit switch) 또는 버섯형 비상 정지(pushbutton)는 직렬로 배선되어 있으며, 이 중 하나만 열려도 마스터 제어가 디에너자이즈됩니다.

• 이는 입력 및 출력 장치 회로의 전원을 제거합니다. 단, 프로세서 모듈의 진단 표시등을 관찰할 수 있도록 컨트롤러 전원 공급에는 계속 전원이 공급됩니다.

• 마스터 제어 릴레이는 디스커넥트 스위치의 대체 장치가 아닙니다. 모듈 교체, 출력 퓨즈 교체 또는 장비 작업 시에는 반드시 메인 디스커넥트 스위치를 끄고 잠금 장치를 적용해야 합니다.

마스터 제어 릴레이는 디에너자이즈될 때 기계 I/O 장치에 공급되는 전원을 차단하여 모든 기계 동작을 억제할 수 있어야 합니다. 이 하드와이어 방식의 전자기적 구성요소는 전자 부품(하드웨어 또는 소프트웨어)에 의존해서는 안 됩니다. 마스터 제어 릴레이 회로의 스위치를 포함하여 어떤 부품도 고장날 수 있습니다. 이러한 스위치가 고장날 경우 대부분 개방(open)되어 안전한 전원 차단 상태가 되지만, 만약 스위치가 쇼트(short)되면 더 이상 안전 기능을 제공하지 못하게 됩니다. 그러므로 이러한 스위치는 필요한 순간에 기계 동작을 정지시킬 수 있도록 정기적으로 테스트해야 합니다. 이 회로의 기능을 무력화하는 변경을 절대 해서는 안 됩니다. 그렇지 않으면 심각한 부상이나 기계 손상이 발생할 수 있습니다.

Safety PLC는 일반적으로 제3자 인증기관으로부터 국제 표준의 엄격한 안전 및 신뢰성 요구사항을 충족하는 것으로 인증됩니다. 표준 PLC와 Safety PLC 모두 제어 기능을 수행할 수 있지만, 표준 PLC는 처음부터 내고장성(fault tolerant) 또는 페일세이프(fail‑safe) 기능을 갖추도록 설계된 것이 아닙니다. 이것이 근본적인 차이입니다.

표준 PLC와 Safety PLC의 차이점은 다음과 같습니다:

• 표준 PLC는 프로그램을 실행하는 하나의 마이크로프로세서, 프로그램을 저장하는 플래시 메모리(Flash), 계산을 수행하는 RAM, 통신을 위한 포트, 그리고 기계 감지 및 제어를 위한 I/O를 갖습니다. 반면, Safety PLC는 중복된(redundant) 마이크로프로세서, 워치독 회로(watchdog circuit)에 의해 지속적으로 모니터링되는 플래시와 RAM, 그리고 동기식 감지 회로(synchronous detection circuit)를 갖습니다. 중복(redundancy)은 동일 장치의 이중화를 의미하며, 전기 회로에서 하나의 고장으로 인해 발생할 수 있는 위험을 부분적 또는 완전한 중복을 통해 최소화합니다.

• 표준 PLC 입력은 입력 회로 기능을 내부적으로 테스트할 방법이 없습니다. 반대로 Safety PLC는 각 입력마다 입력 회로를 테스트하기 위한 내부 출력 회로를 포함하고 있습니다. 입력은 런타임 동안 매우 짧은 주기로 High 및 Low 상태로 구동되어 기능을 검증받습니다.

• Safety PLC는 안전 제어 시스템을 위해 특별히 설계된 전원공급장치와 컨트롤러와 I/O 모듈 사이의 중복 백플레인(backplane) 회로를 사용합니다.

안전 요소는 PLC 프로그램의 일부로 반드시 고려되어야 합니다. 어떤 응용 분야이든, PLC 프로그램의 안전성은 인력과 하드웨어 측면에서 얼마나 많은 시간과 고민이 반영되었는가에 의해 결정됩니다.

한 가지 고려사항은 그림 9-25 와 같이 출력 코일 명령에 참조되는 프로그램 접점 대신 모터 스타터의 보조 실인(auxiliary seal‑in) 접점을 사용하는 것입니다. 현장에서 생성되는 스타터 보조 접점 상태를 프로그램에 사용하는 것은 배선 및 하드웨어 측면에서 더 많은 비용이 들지만, 모터의 실제 상태를 프로세서에 긍정적으로 피드백하기 때문에 더 안전합니다.

예를 들어, 과부하(OL) 상태에서 스타터의 OL 접점이 열린다고 가정합니다. 이 경우 스타터 코일에 공급되는 전원이 차단되므로 모터는 작동을 멈춥니다. 만약 프로그램이 출력 코일 명령을 참조한 examine‑on 접점을 실인 회로로 사용하고 있었다면, 프로세서는 모터에 전원이 차단된 사실을 알 수 없습니다. 그리고 OL이 리셋되면 모터는 즉시 재시동되며, 이는 잠재적으로 위험한 상황을 만들 수 있습니다.

또 다른 안전 고려사항은 정지(Stop) 버튼의 배선 방식과 관련됩니다. 정지 버튼은 일반적인 운전 기능일 뿐 아니라 안전 기능으로도 간주됩니다. 따라서 모든 정지 버튼은 그림 9-26 과 같이, on 상태를 검사하는 프로그램 명령과 연결된 정상 닫힘(NC) 접점으로 배선해야 합니다. 정상 열림(NO) 접점을 사용하여 off 상태를 검사하도록 프로그램하면 논리 동작은 동일하게 만들 수 있지만 안전성은 떨어집니다.

예를 들어 후자의 구성을 사용했는데, 어떤 원인으로 버튼과 입력점 사이의 회로가 끊어졌다고 가정해 보겠습니다. 이 경우 정지 버튼을 아무리 눌러도 PLC 로직은 절대로 정지 명령에 반응할 수 없습니다. 입력이 true가 될 수 없기 때문입니다. 정지 버튼 회로의 전원을 잃는 경우에도 마찬가지입니다.

반면 정상 닫힘(NC) 배선을 사용하면, 정지 기능이 필요하지 않은 한 입력점은 항상 전원을 받습니다. 정지 회로 배선에 고장이 발생하거나 회로 전원이 끊어지면 이는 의도적인 정지와 동일한 효과를 갖게 되어 안전이 확보됩니다.

9.7 Selectable Timed Interrupt

선택 가능 시간 인터럽트(selectable timed interrupt, STI) 명령은 메인 프로그램 파일의 스캔을 시간 기반으로 자동 중단하여 지정된 서브루틴 파일을 스캔하도록 할 때 사용됩니다. Allen-Bradley SLC 500 컨트롤러의 경우, 프로그램 파일이 실행되는 시간 기준(time base)과 선택 가능 시간 인터럽트 파일로 할당되는 프로그램 파일은 데이터 파일의 상태(status) 섹션에 있는 S:30 과 S:31 워드에 저장된 값에 의해 결정됩니다. S:30 의 값은 10밀리초 단위로 1에서 32,767까지의 시간 기준을 저장합니다. S:31 은 선택 가능한 인터럽트 파일로 지정할 프로그램 파일 번호를 저장하며, 이는 3에서 999 사이의 어떤 프로그램 파일도 될 수 있습니다. 시간 기준 워드에 0을 입력하면 선택 가능 시간 인터럽트가 비활성화됩니다.

선택 가능 시간 인터럽트 프로그래밍은 이벤트 기반이 아닌 시간 기반으로 실행해야 하는 프로그램 부분이 있을 때 사용됩니다. 예를 들어, 정확도를 위해 일정한 간격으로 반복 실행해야 하는 계산이 필요한 프로그램이 있을 수 있습니다. 이러한 계산은 선택 가능 시간 인터럽트 파일에 해당 프로그램을 배치하여 수행할 수 있습니다. 이 명령은 또한 주기적 윤활이 필요한 공정(process) 응용 분야에도 사용할 수 있습니다.

즉시 입력(immediate input) 및 즉시 출력(immediate output) 명령은 특정 프로그램 부분을 시간 기반으로 업데이트하기 위해 선택 가능 시간 인터럽트 파일에 배치되는 경우가 많습니다. 예를 들어, 고속 라인에서 라인을 지나가는 항목들이 센서를 통과하는 속도가 프로그램 스캔 시간보다 빠를 때 사용될 수 있습니다. 이 방식으로 항목은 하나의 프로그램 스캔 동안 여러 번 스캔될 수 있으며, 스캔이 끝나기 전에 적절한 동작을 수행할 수 있습니다.

선택 가능 시간 비활성화(selectable timed disable, STD) 명령은 일반적으로 선택 가능 시간 활성화(selectable timed enable, STE) 명령과 함께 사용되어 STI 인터럽트가 발생할 수 없는 영역을 생성합니다. 그림 9-27 은 STD 및 STE 명령의 사용 예를 보여주며 다음과 같이 요약할 수 있습니다:

• 이 프로그램에서는 STI 명령이 활성 상태라고 가정합니다.

• 런 6 과 12 의 STD 및 STE 명령은 런 7 에서 11 사이에서는 STI 서브루틴 실행이 발생하지 않도록 포함되어 있습니다.

• STD 명령(런 6)은 STI 활성 비트(enable bit)를 리셋하고, STE 명령(런 12)은 활성 비트를 다시 설정합니다.

• 첫 패스 비트(first pass bit) S:1/15 와 런 0 의 STE 명령은 전원 사이클 이후 STI 기능이 초기화되도록 하기 위해 포함됩니다.

9.8 Fault Routine

Allen-Bradley SLC 500 컨트롤러에서는 특정 서브루틴 파일을 결함 루틴(fault routine)으로 지정할 수 있습니다. 결함 루틴을 사용하면 프로그래밍 오류가 발생했을 때 프로세서가 어떻게 반응할지를 결정할 수 있습니다. 결함 루틴으로 지정되는 프로그램 파일은 상태(status) 파일의 S:29 워드에 저장된 값에 의해 결정됩니다. S:29 워드에 0을 입력하면 결함 루틴은 비활성화됩니다.

프로세서 결함(processor fault)을 일으키는 주요 결함(major fault)에는 복구 가능(recoverable) 결함과 복구 불가능(nonrecoverable) 결함의 두 종류가 있습니다. 프로세서가 주요 결함을 감지하면 결함 루틴을 찾습니다. 결함 루틴이 존재하면 해당 루틴이 실행되며, 루틴이 존재하지 않으면 프로세서는 셧다운됩니다.

결함 루틴이 존재하고 결함이 복구 가능한 경우에는 결함 루틴이 실행됩니다. 반면 결함이 복구 불가능한 경우에는 결함 루틴이 한 번 스캔된 후 프로세서가 셧다운됩니다. 어느 경우든 결함 루틴은 정돈된(질서 있는) 셧다운을 가능하게 해줍니다.

9.9 Temporary End Instruction

임시 종료(temporary end, TND) 명령은 프로그램을 단계적으로 디버깅하거나, 현재 프로그램 파일 또는 서브루틴의 나머지 부분을 조건부로 생략할 때 사용하는 출력 명령입니다. 런(rung) 조건이 참이 되면 이 명령은 프로그램 스캔을 즉시 중단하고, I/O 를 업데이트한 뒤 메인 프로그램 파일의 런 0에서 스캔을 다시 시작합니다.

그림 9-28 은 프로그램 트러블슈팅에서 TND 명령의 사용 예를 보여줍니다. TND 명령을 사용하면 프로그램은 해당 명령까지 실행된 후 멈춥니다. 이후 새로운 부분을 디버깅할 때 TND 명령을 프로그램 내에서 점진적으로 옮겨가며 사용할 수 있습니다. 또한 TND 명령은 무조건적으로(unconditionally) 넣을 수도 있고, 디버깅 필요에 따라 조건부로 실행되도록 구성할 수도 있습니다.

9.10 Suspend Instruction

일시 중단(suspend, SUS) 명령은 시스템 트러블슈팅 및 프로그램 디버깅 중 특정 조건을 포착하고 식별하는 데 사용됩니다. 그림 9-29 는 래더 논리 런에 삽입된 SUS 명령을 보여줍니다. 명령의 동작은 다음과 같이 요약할 수 있습니다:

• SUS 명령을 프로그램할 때 서스펜드 ID 번호를 입력해야 합니다(이 예에서는 100 사용).

• 런이 참이 되면 SUS 출력 명령은 컨트롤러를 서스펜드 모드로 전환시키며, PLC는 즉시 스캔 사이클을 종료합니다.

• 모든 래더 논리 출력은 디에너자이즈되지만, 서스펜드 명령이 실행될 당시의 상태 파일(status files) 데이터는 그대로 유지됩니다.

• SUS 명령이 실행되면 지정된 서스펜드 ID 번호(100)가 S:7 레지스터에 기록됩니다.

• 서로 다른 서스펜드 ID를 갖는 여러 SUS 명령을 프로그램 안에 포함할 수 있으며, S:7 값을 읽어 어떤 SUS 명령이 PLC 를 정지시켰는지 확인할 수 있습니다.

• 상태 파일 S:8에는 SUS 명령이 실행될 당시 실행 중이던 프로그램 파일 번호가 기록됩니다.