EP.1-7 데이터 타입
Phase 1 Finale: Hardware-Software Interface
EP.1-7 데이터 타입 — 전기의 그릇
8비트 부터 32비트 까지, 데이터의 규격화
왜 그냥 '숫자'라고 안 하고 타입을 나누는가?
PLC를 설계할 때 1비트 접점(Bit)에 숫자 100(Word)을 강제로 집어넣으려 하면 데이터가 깨집니다. 컴퓨터 메모리도 마찬가지입니다. 우리가 데이터를 저장할 때, 그 크기에 딱 맞는 '그릇'을 예약해야 메모리를 낭비하지 않고 정확하게 연산할 수 있습니다. 데이터 타입은 메모리에 미리 예약하는 '배선 영역의 넓이'입니다.
그릇의 규격: 비트(Bit)가 결정하는 용량
데이터 타입은 결국 '몇 개의 비트를 묶어서 하나의 그릇으로 쓸 것인가'의 약속입니다.
① 정수형 그릇 (Integer Types)
- char (8bit / 1byte): 아주 작은 종이컵입니다. 주로 문자 하나를 담습니다.
- short (16bit / 2byte): PLC의 1 Word (D레지스터)와 같은 크기입니다.
- int (32bit / 4byte): 현대 컴퓨터의 표준 양동이입니다. 약 ±21억까지 담습니다.
- long long (64bit / 8byte): 거대한 드럼통입니다. 천문학적인 숫자를 다룰 때 씁니다.
② 실수형 그릇 (Floating Point)
- float (32bit): PLC의 REAL 타입입니다. 숫자를 '유효숫자'와 '소수점 위치'로 쪼개 담는 눈금 실린더입니다. 아날로그 센서값을 다룰 때 필수입니다.
그릇의 성격: Signed vs Unsigned (부호의 유무)
전기가 양방향으로 흐를지, 한 방향으로만 흐를지를 결정하는 스위치입니다.
- Signed (부호 있음): 최상위 1비트를 +/- 표시용 스위치로 사용합니다. 센터 제로(Center Zero) 메타기처럼 양방향(마이너스 영역 포함)을 측정합니다.
- Unsigned (부호 없음): 부호 스위치까지 숫자를 담는 데 씁니다. 마이너스가 필요 없는 카운터나 절대 위치값에서 그릇 용량을 2배로 늘려주는 마법을 부립니다.
오버플로우(Overflow): 그릇이 넘칠 때의 대참사
PLC에서 16비트 카운터가 32,767을 넘으면 갑자기 -32,768로 튀는 현상이 바로 이것입니다. 그릇은 정해져 있는데 데이터가 넘치면 숫자가 뒤집히거나 옆집 메모리를 침범합니다.
char cup = 127;
cup = cup + 1; // 종이컵에 물을 더 부으면?
// 결과: -128 (데이터가 넘쳐 부호 비트를 건드림)
cup = cup + 1; // 종이컵에 물을 더 부으면?
// 결과: -128 (데이터가 넘쳐 부호 비트를 건드림)
왜 -0이 아니라 -128인가?
이진수
1000 0000을 보고 마이너스 0이라 생각할 수 있지만, 컴퓨터는 2의 보수 방식을 사용합니다.
+0과 -0을 따로 두어 메모리를 낭비하는 대신,
-0 자리에 숫자 하나를 더 담기로 약속했습니다. 덕분에 8비트로 -128부터 +127까지 256개의 숫자를 빈틈없이 꽉 채워 관리합니다.
문자의 실체: char와 ASCII 코드
컴퓨터는 문자를 모릅니다. char 타입은 8비트 그릇에 담긴 숫자를 보고 ASCII 코드표를 대조해 문자로 보여줄 뿐입니다.
- 숫자 65를 담으면 → 'A'
- 숫자 48을 담으면 → '0' (문자로서의 제로)
문자열(String)과 NULL(0)
문자열은 연속된 레지스터(D100, D101...)에 문자를 채우는 방식입니다. PLC 통신 끝에 00H를 넣듯, C언어 문자열 끝에도 반드시 NULL(0) 신호가 있어야 합니다. 이 '0'이 없으면 CPU는 데이터가 끝난 줄 모르고 옆집 메모리까지 계속 읽어가는 대참사가 발생합니다.
데이터 타입 최종 대조표
| C언어 타입 | 크기 (Bit) | PLC 비유 | 표현 범위 (Signed 기준) |
|---|---|---|---|
| bool | 1 bit | Bit (M, X, Y) | 0(OFF) 또는 1(ON) |
| char | 8 bit | Byte / ASCII | -128 ~ 127 |
| short | 16 bit | 1 Word (D) | -32,768 ~ 32,767 |
| int | 32 bit | 2 Word (D Double) | 약 ±21억 |
| float | 32 bit | REAL (실수) | 소수점 포함 아날로그 데이터 |
엔지니어의 황금률
"데이터 타입은 메모리에 예약하는 배선 영역이다." 마이너스가 없는 제어값이라면 무조건 Unsigned를 붙여 그릇 용량을 2배 확보하고, 정밀도가 생명인 아날로그 값은 float 데이터 타입을 사용하십시오.

댓글
댓글 쓰기