Number Systems and Codes

3.1 Decimal System

PLC 또는 대부분의 디지털 컴퓨터를 다룰 때 다양한 수 체계와 디지털 코드에 대한 지식은 매우 유용합니다. 그 이유는 이러한 장치의 기본 요구 사항이 숫자를 표현하고, 저장하고, 처리하는 것이기 때문입니다. 일반적으로 PLC는 여러 형태의 이진수(binary numbers)를 사용하며, 이는 다양한 코드나 양을 표현하는 데 사용됩니다.

우리가 가장 익숙한 십진수(decimal) 체계는 밑(base)이 10입니다. 어떤 수 체계의 기수(radix) 또는 밑(base)은 그 체계에서 사용되는 서로 다른 기호나 숫자의 총 개수를 결정합니다. 예를 들어 10진수 체계에서는 0부터 9까지의 10개의 고유한 숫자(digits)를 사용합니다. 즉, 사용되는 기호의 총 개수는 밑과 동일하며, 가장 큰 값의 기호는 밑보다 1 작은 숫자입니다.

십진수의 값은 숫자를 구성하는 각 자리의 숫자와 그 자리 값(place value)에 의해 결정됩니다. 자리 값(가중치, weight)은 숫자의 오른쪽 끝에서부터 왼쪽으로 이동하면서 0, 1, 2 … 순서로 할당됩니다. 십진수에서는 각 자리의 가중치를 밑 10을 해당 자리의 지수만큼 거듭제곱한 값으로 표현할 수 있습니다. 따라서 자리 가중치는 1, 10, 100, 1000 등과 같습니다. 그림 3-1은 각 자리의 숫자에 해당 자리의 가중치를 곱한 뒤 이를 모두 더하여 십진수 값을 계산하는 방법을 나타냅니다.

이진수(binary) 체계는 2를 밑(base)으로 사용합니다. 사용 가능한 숫자는 0과 1뿐입니다. 디지털 회로에서는 두 개의 전압 레벨(예: 15 V와 0 V)을 구분하기가 쉽기 때문에 이를 이진수의 1과 0에 대응시킬 수 있습니다(그림 3-2). 따라서 이진수 체계는 PLC와 컴퓨터 시스템에 매우 쉽게 적용할 수 있습니다.

이진수 체계는 두 개의 숫자만 사용하므로, 이진수의 각 자릿값은 두 번의 변화를 거치면 그 다음 왼쪽 자리로 1이 올림(carry)됩니다. 표 3-1은 네 가지 대표적인 수 체계—십진수(base 10), 8진수(base 8), 16진수(base 16), 2진수(base 2)—를 비교해 보여줍니다. 모든 수 체계는 0부터 시작한다는 점에 유의하십시오.

이진수를 십진수로 변환하는 방법은 십진수 값을 계산하는 방법과 유사합니다. 이진수 자리의 가중치(weighted values)는 1, 2, 4, 8, 16, 32, 64 등입니다. 즉, 자리 가중치는 밑 2를 자리의 지수만큼 거듭제곱한 값입니다. 그림 3-3은 이진수 10101101을 십진수 173으로 변환하는 과정을 보여줍니다.

이진수의 각 숫자는 비트(bit)라고 합니다. PLC에서 프로세서-메모리 요소는 수백 또는 수천 개의 위치로 구성됩니다. 이러한 위치 또는 레지스터(register)는 워드(words)라고 하며, 각 워드는 이진수 비트 형태의 데이터를 저장할 수 있습니다. 워드가 저장할 수 있는 비트 수는 사용하는 PLC 시스템의 종류에 따라 다르며, 16-bit 또는 32-bit 워드가 가장 일반적입니다. 워드는 바이트(bytes)로도 구성될 수 있습니다. 8 bits는 1 byte이고, 2 byte 이상은 1 word를 구성합니다. 그림 3-4는 두 개의 바이트로 구성된 16-bit 워드를 나타냅니다. 최소 유효 비트(LSB)는 가장 작은 값을 나타내는 비트이며, 최대 유효 비트(MSB)는 가장 큰 값을 나타내는 비트입니다. 워드 내의 비트는 논리 1(ON) 또는 논리 0(OFF)의 두 상태 중 하나만 가질 수 있습니다.

PLC 메모리는 바이트, 싱글 워드, 더블 워드 단위로 구성됩니다. 구형 PLC는 8-bit 또는 16-bit 메모리 워드를 사용하지만, Allen‑Bradley의 ControlLogix 플랫폼과 같은 최신 시스템은 32-bit 더블 워드를 사용합니다. 프로그래머블 컨트롤러의 메모리 크기는 저장할 수 있는 사용자 프로그램의 양과 관련됩니다. 예를 들어, 메모리 크기가 1 K word라면(그림 3-5), 1024개의 워드를 저장할 수 있으며, 16-bit 워드 기준 16,384 비트(1024 × 16), 32-bit 워드 기준 32,768 비트(1024 × 32)의 정보를 저장할 수 있습니다.

십진수를 이진수로 변환하려면 일련의 2로 나누기 연산을 수행해야 합니다. 그림 3-6은 십진수 47을 이진수로 변환하는 과정을 보여줍니다. 먼저 십진수를 2로 나누고, 나머지가 있으면 이를 이진수의 LSB에 기록합니다. 나머지가 없다면 LSB에 0을 기록합니다. 나눗셈의 몫을 다음 연산으로 가져와 이 과정을 몫이 0이 될 때까지 반복합니다.

이진수는 두 개의 숫자만 사용하지만, 십진수로 표현 가능한 모든 수량을 표현할 수 있습니다. 모든 PLC는 내부적으로 이진수 체계를 사용합니다. 프로세서는 디지털 장치이므로 0과 1, 즉 이진수만 이해할 수 있습니다.

따라서 컴퓨터 메모리는 일련의 이진 1과 0으로 구성됩니다. 그림 3-7은 Allen‑Bradley SLC 500 모듈식 섀시에서 사용되는 출력 상태 파일(output status file)을 보여주며, 이는 16-bit 워드로 구성된 단일 비트 그룹입니다. 섀시의 각 슬롯에는 16-bit 출력 파일 워드가 하나씩 할당됩니다. 각 비트는 하나의 출력 포인트의 ON/OFF 상태를 나타냅니다. 포인트 번호는 상단 행에서 오른쪽에서 왼쪽으로 0~15번까지 배정됩니다. 가장 오른쪽 열에는 출력 모듈 주소가 표시됩니다.

그림 3-7에서는 순차적으로 주소가 배정된 출력 상태 파일 워드를 보여 주지만, 실제로는 프로세서가 특정 슬롯에 출력 모듈을 발견했을 때만 해당 워드가 생성됩니다. 슬롯이 비어 있으면 워드는 생성되지 않습니다.

3.3 Negative Numbers

십진수에서는 양수일 경우 플러스(+) 기호를, 음수일 경우 마이너스(−) 기호를 사용합니다. 그러나 PLC와 같은 이진수 체계에서는 숫자의 부호를 표현하기 위해 이러한 기호를 사용할 수 없습니다. 이진수에서 숫자의 양수·음수를 표현하는 한 가지 방법은 MSB(최상위 비트) 쪽에 여분의 비트, 즉 부호 비트(sign bit)를 사용하는 것입니다. 부호 비트 위치에서 0은 양수를, 1은 음수를 나타냅니다(표 3-2).

디지털 시스템에서 음수를 표현하는 또 다른 방법은 이진수의 보수(complement)를 사용하는 것입니다. 이진수를 보수 형태로 만들기 위해서는 모든 1을 0으로, 모든 0을 1로 바꾸면 됩니다. 이를 1의 보수(1’s complement) 라고 합니다. 예를 들어, 1001의 1의 보수는 0110입니다.

가장 일반적으로 사용되는 음수의 이진수 표현 방식은 2의 보수(2’s complement) 를 사용하는 것입니다. 2의 보수는 1의 보수를 만든 뒤, 여기에 1을 더하여 얻습니다. 이 방식은 표 3-3에 나타나 있습니다. 부호 비트가 0이면 양수, 1이면 음수를 의미합니다.

PLC는 2의 보수 방식을 사용함으로써 보다 쉽게 수학 연산을 수행할 수 있습니다. 2의 보수를 형성하는 과정에서 올바른 부호 비트가 자동으로 생성되며, PLC는 메모리에서 읽어들인 숫자의 MSB가 1일 경우 해당 값이 음수임을 즉시 알 수 있습니다. 키보드에서 음수를 입력하면 PLC는 이를 자동으로 2의 보수 형태로 저장합니다.

아래는 원래 이진수, 그 숫자의 1의 보수, 2의 보수, 그리고 십진수 값의 순서입니다.

3.4 Octal System

이진수 체계로 숫자를 표현하려면 십진수에 비해 훨씬 많은 자릿수가 필요합니다. 이진수 자리수가 너무 많아지면 읽거나 쓰기가 번거로워지므로, 이를 해결하기 위해 다른 관련된 수 체계가 사용됩니다.

8진수(octal) 체계는 밑(base)이 8인 수 체계로, 8개의 데이터 비트가 하나의 바이트(byte)를 구성하며 주소 지정이 가능하다는 점에서 사용됩니다. 그림 3-8은 I/O 모듈을 8진수 체계를 사용해 주소 지정하는 예를 보여줍니다. 8진수에서 사용되는 숫자는 0부터 7까지이며, 따라서 8과 9는 사용할 수 없습니다. Allen‑Bradley PLC-5 프로세서는 8진수를 기반으로 한 I/O 주소 체계를 사용하고, SLC 500 및 Logix 컨트롤러는 10진수 주소 체계를 사용합니다.

8진수는 큰 이진수를 다루는 편리한 방법입니다. 표 3-4에서 보여주듯이, 8진수 한 자리(octal digit)는 이진수 세 자리(3-bit)를 표현할 수 있습니다. 다른 모든 수 체계와 마찬가지로, 8진수의 각 자리는 그 위치에 따라 가중치(weighted decimal value)를 가집니다. 그림 3-9는 8진수 462를 십진수 306으로 변환하는 과정을 보여줍니다.

8진수는 이진수로 매우 쉽게 변환할 수 있습니다. 예를 들어, 8진수 462는 각각의 3-bit 그룹을 조합하여 이진수로 변환합니다(그림 3-10). 이 표기 방식의 단순함에 주목하십시오. 8진수 462는 그와 대응되는 이진수보다 훨씬 읽기 쉽고 쓰기 쉽습니다.

3.5 Hexadecimal System

16진수(hexadecimal, hex) 체계는 프로그램 가능한 컨트롤러에서 사용되는데, 이는 하나의 데이터 워드(word)가 16비트로 구성되며 두 개의 8비트 바이트(bytes)로 이루어져 있기 때문입니다. 16진수 체계는 밑(base)이 16이며, 십진수 10에서 15를 나타내기 위해 A부터 F까지의 기호를 사용합니다(표 3-5). 16진수는 많은 이진 비트의 상태를 컴퓨터 화면이나 PLC 프로그래밍 장치와 같은 제한된 공간에 효율적으로 표시할 수 있도록 해줍니다.

16진수를 십진수로 변환하는 기법은 이진수 또는 8진수 변환 방법과 동일합니다. 16진수 각 자릿값은 밑 16의 자리 가중치를 곱하여 계산합니다. 그림 3-11은 16진수 1B7을 십진수로 변환하는 과정을 보여줍니다.

16진수는 이진수로 매우 쉽게 변환할 수 있습니다. 각 16진수 자리에 대해 해당하는 4비트 이진수를 나란히 적는 방식으로 변환이 이루어집니다(그림 3-12).

3.6 Binary Coded Decimal (BCD) System

BCD(binary coded decimal) 체계는 PLC에 입력되거나 PLC에서 출력되어야 하는 큰 숫자를 다루는 데 편리한 방법을 제공합니다. 앞에서 살펴본 여러 수 체계를 보면, 이진수와 십진수 사이를 쉽게 오갈 수 있는 간단한 방법은 없습니다. BCD는 사람이 쉽게 다룰 수 있는 십진수(decimal)와 장비가 쉽게 처리할 수 있는 이진수(binary)를 연결해주는 체계입니다. PLC의 썸휠 스위치와 LED 디스플레이는 BCD 체계를 사용하는 장치의 예입니다. 표 3-6은 십진수, 이진수, BCD, 16진수로 표현된 숫자 예를 보여줍니다.

BCD에서는 하나의 십진 숫자를 4비트로 표현합니다. 이 4비트는 0에서 9까지의 십진수를 나타내는 이진수 값입니다. 따라서 BCD에서 네 자리로 표현할 수 있는 최대 십진수는 9입니다. 십진수를 BCD로 변환하려면 각 십진 숫자를 해당 BCD 값으로 치환하면 됩니다. BCD 체계를 이진수와 구별하기 위해 단위 자리 오른쪽에 BCD 표시를 붙입니다. 그림 3-13은 십진수 7863의 BCD 표현을 보여줍니다.

썸휠 스위치는 BCD를 사용하는 입력 장치의 한 예입니다. 그림 3-14는 한 자리 BCD 썸휠을 보여줍니다. 썸휠에 부착된 회로 기판에는 각 비트의 가중치에 대응하는 연결 단자와 하나의 공통 단자가 있습니다. 사용자가 0에서 9 사이의 십진수를 설정하면, 썸휠 스위치는 이에 해당하는 4비트 BCD 데이터를 출력합니다. 예를 들어 숫자 8을 설정하면 입력 비트 패턴 1000이 출력됩니다. 이와 같은 네 자리 썸휠 스위치는 총 16개(4 × 4)의 PLC 입력을 제어하게 됩니다.

과학용 계산기를 사용하면 십진수, 이진수, 8진수, 16진수 간의 변환을 쉽게 수행할 수 있습니다. 또한 PLC는 변환 기능을 내장하고 있으며, 그림 3-15는 그 예를 보여줍니다. 입력에는 BCD에서 이진수로의 변환이 필요하며, 출력에는 이진수에서 BCD로의 변환이 필요합니다. PLC의 변환 명령은 소스 주소 N7:23의 이진 비트 패턴을 읽어 그와 동일한 십진 값을 갖는 BCD 비트 패턴을 목적지 주소 O:20에 생성합니다. 이 명령은 스캔될 때마다 실행되며, 조건이 참일 때 동작합니다.

많은 PLC는 데이터 모니터의 표시 형식을 변경할 수 있습니다. 예를 들어 Allen‑Bradley 컨트롤러의 진수(radix) 변경 기능은 데이터를 이진수, 8진수, 10진수, 16진수 또는 ASCII 형식으로 표시하도록 변경할 수 있습니다.

3.7 Gray Code

Gray 코드(Gray code)는 위치 가중치(position weighting)를 사용하지 않는 특수한 형태의 이진 코드입니다. 즉, 각 자릿수는 명확한 가중치를 갖지 않습니다. Gray 코드는 한 숫자에서 다음 숫자로 진행할 때 단 하나의 비트만 변경되도록 구성됩니다. 이러한 특성은 계수 회로에서는 다소 혼란을 줄 수 있으나, 인코더(encoder) 회로에는 매우 적합합니다. 예를 들어, 절대식 인코더(absolute encoder)는 회전 각 위치를 판단하기 위해 Gray 코드를 사용하는 위치 변환기(position transducer)입니다. Gray 코드는 각 “카운트(count)”—즉, 한 숫자에서 다음 숫자로 전환될 때—오직 하나의 숫자만 변경된다는 장점이 있습니다. 표 3-7은 Gray 코드와 이를 비교하기 위한 이진 등가(binary equivalent)를 나타냅니다.

이진 코드에서는 한 번의 “카운트”에 최대 네 자리까지 바뀔 수 있습니다. 예를 들어, 이진수 0111에서 1000(십진수 7에서 8)으로 전환될 때 네 자리 모두가 변경됩니다. 이러한 변화는 특정 디지털 회로에서 오류가 발생할 가능성을 증가시킵니다. 이러한 이유로 Gray 코드는 오류를 최소화하는 코드(error-minimizing code)로 간주됩니다. 하나의 비트만 변경되므로, Gray 코드의 전환 속도는 BCD와 같은 코드보다 상당히 빠릅니다.

Gray 코드는 로봇, 공작기계, 서보메커니즘(servomechanism)의 동작을 정밀하게 제어하기 위한 위치 인코더(position encoder)에 사용됩니다. 그림 3-16은 각 위치 변화를 감지하기 위해 4비트 Gray 코드를 사용하는 광학식 인코더(optical encoder) 디스크를 나타냅니다. 이 예에서 인코더 디스크는 회전축에 부착되어 있으며, 축의 위치를 파악하는 데 사용되는 디지털 Gray 코드 신호를 출력합니다. 고정 배열의 포토다이오드(photo diode)들은 인코더 경로의 각 행(row)에 있는 셀들로부터 반사되는 빛을 감지합니다. 반사된 빛의 양에 따라 각 셀은 이진 1 또는 0에 해당하는 전압을 출력하게 됩니다. 따라서 디스크의 각 행마다 서로 다른 4비트 단어(word)가 생성됩니다.

3.8 ASCII Code

ASCII는 American Standard Code for Information Interchange의 약자이며, 숫자뿐만 아니라 문자도 포함하는 영숫자 코드(alphanumeric code)입니다. ASCII 코드로 접근할 수 있는 문자에는 10개의 숫자, 알파벳의 소문자 26개와 대문자 26개, 그리고 표준 타자기에서 볼 수 있는 약 25개의 특수 문자가 포함됩니다. 표 3-8은 ASCII 코드의 일부 목록을 보여줍니다. 이 코드는 PLC CPU를 영숫자 키보드(alphanumeric keyboard)와 프린터와 인터페이스하는 데 사용됩니다.

컴퓨터 키보드에서 누르는 키 입력은 컴퓨터가 처리할 수 있도록 직접 ASCII로 변환됩니다. 컴퓨터 키보드의 키를 누를 때마다, 해당 키가 나타내는 영숫자, 기능 또는 제어 데이터(control data)를 표현하기 위해 7비트 또는 8비트 단어(word)가 컴퓨터 메모리에 저장됩니다. ASCII 입력 모듈은 외부 장치로부터 전달된 ASCII 코드 입력 정보를 PLC가 처리할 수 있는 영숫자 정보로 변환합니다. 통신 인터페이스는 RS-232 또는 RS-422 프로토콜(protocol)을 통해 수행됩니다. ASCII 파일을 송수신할 수 있으며 운영자 인터페이스(operator interface)를 구성하는 데 사용할 수 있는 모듈도 제공됩니다. 사용자는 BASIC 언어로 프로그램을 작성하며, 이 프로그램은 래더 로직(ladder logic)과 결합되어 실행됩니다.

3.9 Parity Bit

일부 PLC 통신 시스템에서는 데이터 전송의 정확성을 확인하기 위해 하나의 이진수(binary digit)를 사용합니다. 예를 들어, PLC 간 데이터가 전송될 때 어떤 이진수가 1에서 0으로 실수로 변경될 수 있습니다. 이는 순간적 이상(transient), 잡음(noise), 또는 전송 네트워크의 일부에서 발생한 고장으로 인해 일어날 수 있습니다. 패리티 비트(parity bit)는 단어(word)가 이동되는 동안 발생할 수 있는 오류를 검출하는 데 사용됩니다.

패리티(parity)란 전송되는 각 문자(character)가 하나의 추가 비트를 포함하는 체계를 의미합니다. 이 비트가 패리티 비트이며, 문자 내의 1과 0의 개수에 따라 0 또는 1이 될 수 있습니다. 일반적으로 홀수 패리티(odd parity)와 짝수 패리티(even parity) 두 가지 방식이 사용됩니다. 홀수 패리티는 패리티 비트를 포함하여 문자 내의 이진 1의 총수가 홀수가 되도록 하는 방식이며, 짝수 패리티는 이진 1의 총수가 짝수가 되도록 하는 방식입니다. 표 3-9는 홀수 패리티와 짝수 패리티의 예를 보여줍니다.

십진수에서 앞의 세 조건은 더하기와 같기 때문에 쉽지만, 마지막 조건은 약간 다릅니다. 십진수에서는 1 + 1 = 2입니다. 이진수에서 2는 10으로 표기됩니다. 따라서 이진수에서는 1 + 1 = 0이 되며, 다음 상위 자리값으로 1이 캐리(carry)됩니다. 더 큰 이진수를 더할 때에는, 다음 예에서 보이는 것처럼 발생한 1들이 상위 자리 열로 이월됩니다.

산술 기능에서 뺄셈으로 결합되는 초기 수량은 피감수(minuend)와 감수(subtrahend)입니다. 뺄셈 과정의 결과는 차(difference)라고 하며, 다음과 같이 표시됩니다:

A (피감수)

− B (감수)

C (차)

더 큰 이진수를 뺄 때에는 필요한 경우 인접한 열에서 차용(borrow)하면서 열별로 뺄셈을 수행합니다. 인접한 열에서 차용하면 두 자리가 되며, 즉 0이 1을 차용하면 10이 됩니다.

이진수도 음수가 될 수 있습니다. 이 계산 절차는 십진수와 동일하며, 큰 값에서 작은 값을 뺀 뒤 그 결과 앞에 음수 부호를 붙입니다.

1의 보수(1’s complement)를 사용하여 수를 빼는 절차는 다음과 같습니다:

Step 1 감수(subtrahend)를 1의 보수로 변경한다.

Step 2 두 숫자를 더한다.

Step 3 마지막 캐리를 제거한 후 그 캐리를 숫자에 더한다(end-around carry).

결과의 마지막에 캐리(carry)가 있으면 그 결과는 양수입니다. 캐리가 없으면 결과는 음수이며, 앞에 마이너스 부호를 붙여야 합니다.

2의 보수(2’s complement)를 사용한 뺄셈에서는 두 수를 빼는 대신 2의 보수를 더합니다. 이때 결과에서 캐리가 1이면 양수이고, 캐리가 0이면 음수가 되며 마이너스 부호가 필요합니다.

이진수의 곱셈은 십진수와 같은 방식으로 수행됩니다. 이진수를 곱할 때 발생할 수 있는 경우는 네 가지뿐입니다.

여러 자리의 숫자를 곱할 때에는 다음 예에서와 같이 부분 곱(partial product)을 만들고 이를 더합니다.

한 이진수를 다른 이진수로 나누는 과정 또한 예에서 보이는 것처럼 십진수와 동일한 절차를 따릅니다.

비교기(comparator)의 기본 기능은 두 양의 상대적 크기를 비교하는 것입니다.

PLC 데이터 비교(data comparison) 명령은 두 단어(word) 또는 레지스터(register)에 저장된 데이터를 비교하는 데 사용됩니다.

경우에 따라 장치는 응용 프로그램에서 사용되는 다른 데이터 값이나 설정점(set point), 예를 들어 타이머(timer) 또는 카운터(counter) 값보다 작거나, 같거나, 크냐에 따라 제어될 필요가 있습니다. 기본 비교(compare) 명령은 다음과 같습니다:

A = B (A equals B)

A > B (A is greater than B)

A < B (A is less than B)