# 데이터 종류

두 가지 유형의 변수가 있습니다.

- 기본 변수
  값 한 개를 저장할 수 있는 변수 한 개.
- 사용자 데이터 종류 변수
  값 여러 개를 저장할 수 있는 변수 한 개(단일 변수로 취급되는 여러 개의 변수).

메모:

- 변수에 저장된 값(입력값)이 입력 범위(최소/최대값)를 벗어날 때의 작동은 다음을 참조하십시오.
  입력값이 입력 범위를 벗어난 경우의 동작

## 기본 변수

다음은 기본 변수 유형 목록입니다.

데이터 종류 | 설명
BOOL | 이 변수는 0이나 1을 저장합니다.
SINT, USINT, INT, UINT, DINT, UDINT, LINT, ULINT, BYTE | 이 변수는 정수값을 저장합니다. 부동 소수점 유형의 변수에 비해 처리가 빠릅니다.
WORD, DWORD, LWORD | 이 변수는 워드 유형 값을 저장합니다.
STRING, WSTRING | 이 변수는 텍스트 문자를 저장합니다.
REAL, LREAL | 이 변수는 부동 소수점 값을 저장합니다. REAL 변수는 정수 유형 변수보다 큰 값(계산값, 상수값 등)을 저장할 수 있습니다.
TIME, DATE, TIME_OF_DAY, DATE_AND_TIME | 이 변수는 시간값과 날짜 값을 저장합니다.

### SINT, USINT, INT, UINT, DINT, UDINT, LINT, ULINT, BYTE

데이터 종류 | 부호 있음 | 데이터 길이 | 데이터 범위
SINT | 2의 보수 | 8비트 | -128...127
USINT | - | 8비트 | 0...255
INT | 2의 보수 | 16비트 | -32768...32767
UINT | - | 16비트 | 0...65535
DINT | 2의 보수 | 32비트 | -2147483648...2147483647
UDINT | - | 32비트 | 0...4,294,967,295
LINT | 2의 보수 | 64비트 | -9,223,372,036,854,775,808...9,223,372,036,854,775,807
ULINT | - | 64비트 | 0...18,446,744,073,709,551,615
BYTE | - | 8비트 | 0...255

### WORD, DWORD, LWORD

데이터 종류 | 데이터 길이 | 데이터 범위
WORD | 16비트 | 0...65,535
DWORD | 32비트 | 0...4,294,967,295
LWORD | 64비트 | 0...18,446,744,073,709,551,615

### STRING, WSTRING

데이터 종류 | 설명
STRING | 최대 512바이트의 텍스트를 저장할 수 있습니다. 외부 변수를 사용할 때 문자열 인코딩은 변수의 [문자열 인코드] 속성으로 정의됩니다. 사용 가능한 문자열 인코드 값은 UTF8, UTF16, ShiftJIS, Code Page850, GB2312, BIG5, KSC5601, CodePage1251, CodePage874, CodePage1252입니다. 메모: 문자열 인코딩을 장비 속성에서도 구성할 수 있습니다. 변수 속성 설정이 장비 속성보다 우선합니다. 변수의 [문자열 인코드] 속성에서 [장비 설정 타입]을 선택하여 장비의 문자열 인코드 설정을 적용합니다. [문자열 인코드] 속성은 드라이버가 문자열 인코딩을 지원하는 경우에만 표시됩니다.
WSTRING | 최대 512 단어의 더블-바이트 텍스트를 저장할 수 있습니다. 외부 변수가 있는 WSTRING 데이터 형식만 사용할 수 있습니다. 문자열 인코딩은 UTF16으로 고정되어 있습니다. 변수 속성에서 [문자열 인코드] 설정을 변경할 수 없으며, 장비 속성의 인코딩은 무시됩니다.

메모:

- 변수가 [바이트수/워드수] 속성에 저장할 수 있는 바이트 수나 워드 수를 정의할 수 있습니다.

- NULL(0x00) 또는 [바이트수]로 텍스트 문자열의 끝을 인식합니다.

- 선택한 변수나 드라이버의 경우 [문자열 인코드]으로 문자 코드를 변환 할 수 없는 텍스트를 사용하면 문자열의 끝이 문자 코드로 인식됩니다.

- 워드 데이터에서 상위/하위 순서의 관계는 선택한 드라이버의 [문자열 모드]에 따라 다릅니다.

### REAL, LREAL

데이터 종류 | 데이터 길이 | 데이터 범위
REAL | 32비트 | +/-3.402823E38 ... +/-1.1754944E-38
LREAL | 64비트 | +/-4.19E-307 ... +/-1.67E308

메모:

- REAL 변수의 정밀도는 7자릿수로 제한됩니다. 데이터 정밀도가 요구되는 경우(비교 작업 등) 정수 변수를 사용하십시오.
  예
  예 1: 값 1.2345678의 경우, 결과 값은 8번째 자릿수가 삭제될 때의 근사값입니다(1.234567 뒤).
  예 2: REAL 변수에 저장된 값 0.1은 0.1000000014901161이 될 수 있습니다.

- 외부 REAL 변수를 사용할 때는 장치 구성의 Double Word Order 설정이 기기의 설정과 일치해야 합니다. 설정이 일치하지 않을 경우 외부 REAL 변수의 값이 제대로 표시되지 않습니다.

- 변수 값의 소수점으로는 마침표 (.) 를 사용합니다. 쉼표 (,) 는 소수점으로 사용할 수 없습니다.
  화면 편집 소프트웨어 또는 디스플레이 장치에서 변수 값의 소수점에 쉼표 (,) 를 사용하여 이러한 오류에서 보듯이 예기치 않은 결과가 발생하더라도 쉼표를 무시하면 됩니다.

### TIME, DATE, TIME_OF_DAY, DATE_AND_TIME

데이터 종류 | 설명 | 데이터 범위
TIME | 경과 시간을 날짜와 시간으로 저장할 수 있습니다. | - 24 d 20 h 31 m 23 s 648 ms ... 24 d 20 h 31 m 23 s 647 ms 메모: TIME 변수의 [초기 값]과 [입력 범위] 속성에 음수 값이 설정되어 있으면, 각 시간 단위마다 음수 기호가 표시됩니다. (예제: -24d -20:-31:-23.-648)
DATE | 날짜를 저장합니다. | SP5000 시리즈 Open Box(Windows 10 IoT Enterprise 모델), IPC 시리즈 또는 PC/AT를 사용하는 경우 1970/01/01 ... 2106/02/07 위의 모델을 제외한 모델 1970/01/01 ... 2038/01/19
TIME_OF_DAY | 시간을 저장합니다. | 00:00:00 ... 23:59:59
DATE_AND_TIME | DATE와 TIME_OF_DAY를 결합합니다. | SP5000 시리즈 Open Box(Windows 10 IoT Enterprise 모델), IPC 시리즈 또는 PC/AT를 사용하는 경우 1970/01/01 00:00:00 UTC ... 2106/02/07 06:28:15 UTC 위의 모델을 제외한 모델 1970/01/01 00:00:00 UTC ... 2038/01/19 03:14:07 UTC

메모:

- 이 변수를 사용할 때, 외부 장치에 있는 데이터 유형을 저장된 데이터 값과 일치시키십시오.
  외부 장치 범위에 있지 않은 값을 입력하면 입력한 값이 화면에 표시되지만 외부 장치 주소에 설정되지는 않습니다.

- 변수를 다른 데이이터 유형과 연관시키면 소스 변수값이 공통 결과 값에 덮어 씌워지는 경우가 가끔 있습니다.

  예를 들어 REAL 변수를 다음과 같이 정수 변수로 변환하는 경우, 123.4를 REAL 변수로 설정한 후 값을 INT 변수에 쓰면 결과는 123이 됩니다. REAL 변수값도 123으로 업데이트됩니다.

- 외부 장치에서 DATE_AND_TIME 변수에 정숫값을 입력하면 저장된 값은 디스플레이 장치의 표준 시간대에 따라 오프셋됩니다. 따라서 정숫값 입력의 경우 날짜 / 시간 표시기로 표시되는 날짜와 시간은 표준 시간대에 따라 다릅니다.

SP5000 시리즈 Open Box(Windows 10 IoT Enterprise 모델), IPC 시리즈 또는 PC/AT

외부 장치에서 입력하는 정숫값 | UTC+0 (범위: 1970/01/01 00:00:00 ... 2106/02/07 06:28:15) | UTC+9 (범위: 1970/01/01 오전 9:00:00 ... 2106/02/07 15:28:15)
0 | 1970/01/01 00:00:00 | 2106/02/07 06:28:16
1 | 1970/01/01 00:00:01 | 2106/02/07 06:28:17
: | : | :
32399 | 1970/01/01 08:59:59 | 2106/02/07 15:28:15
32400 | 1970/01/01 09:00:00 | 1970/01/01 09:00:00
: | : | :
4294967295 | 2106/02/07 06:28:15 | 2106/02/07 06:28:15

위의 모델을 제외한 모델

외부 장치에서 입력하는 정숫값 | UTC+0 (범위: 1970/01/01 00:00:00 ... 2038/01/19 03:14:07) | UTC+9 (범위: 1970/01/01 오전 9:00:00 ... 2038/01/19 12:14:07)
0 | 1970/01/01 00:00:00 | 2038/01/19 03:14:08
1 | 1970/01/01 00:00:01 | 2038/01/19 03:14:09
: | : | :
32399 | 1970/01/01 08:59:59 | 2038/01/19 12:14:07
32400 | 1970/01/01 09:00:00 | 1970/01/01 09:00:00
: | : | :
2147483647 | 2038/01/19 03:14:07 | 2038/01/19 03:14:07

## 사용자 데이터 종류 변수

다음은 사용자 데이터 유형 변수의 유형입니다.

- 배열 변수
  단일 변수를 사용하여 동일한 데이터 유형의 여러 변수를 처리할 수 있습니다.
- 구조체 변수
  단일 변수를 사용하여 다양한 데이터 유형의 여러 변수를 처리할 수 있습니다.

메모: 배열 표시자 및 구조체 표시자도 변수로 간주됩니다.

### 변수 배열

배열은 데이터 종류이 동일한 변수의 모음입니다. 배열의 각 변수를 요소라고 합니다.

배열 변수 작동 방식을 이해하려면 변수를 상자 하나로 생각하십시오. 다음 다이어그램에 나온 대로 변수 Number는 값 하나를 포함하는 하나의 상자입니다.

배열은 각각 숫자가 연결되어 있는 일련의 상자로 볼 수 있습니다. 다음 다이어그램에서 배열 변수 Number에는 5개의 요소 0-4가 포함되어 있습니다. 5개 상자 각각에 변수값이 저장됩니다.

배열의 각 변수를 지정하려면 변수 이름 뒤에 대괄호 [ ]로 묶인 요소 번호를 지정합니다.

(예) 요소가 5개인 배열

요소 번호는 대개 0부터 시작하지만 양수나 음수 값으로도 시작할 수 있습니다.

(예) 요소 번호 -1로 시작하여 요소가 5개인 배열

다차원 배열은 다른 배열을 포함하는 배열입니다. 예를 들어 두 개의 DINT 배열이 포함된 배열은 2차원 배열입니다.

#### 각 차원의 요소 수 및 차원 설정

[프로젝트 익스플로러] 창의 [변수] → [모든 사용자 데이터 유형] → [배열]의 [치수] 열에서 배열 차원과 요소 수를 모두 설정합니다.

배열 디자인 단계는 다음을 참조하십시오.

디자인 단계 (변수, 배열, 구조체)

1차원 배열의 경우 배열의 요소만 지정합니다.

(예) 요소 수 = 3인 1차원 배열의 경우 "3"을 입력합니다.

다차원 배열의 경우 [치수] 필드에서 각 차원의 요소 수를 쉼표(,)로 구분하여 지정합니다.

(예) 첫 번째 차원에 요소가 3개(시작 번호 = 0), 두 번째 차원에 요소가 4개(시작 번호 = 0)인 2차원 배열의 경우 "3,4"를 입력합니다.

이 배열 정의는 아래와 같이 배열 변수 Var1을 만드는 데 사용됩니다.

메모: 요소의 시작 번호를 0이 아닌 다른 값으로 설정하려면 요소 수 대신 시작 및 마지막 요소 번호를 두 개의 마침표(..)로 구분하여 입력합니다. 그러면 [데이터 형 개수] 필드에서 총 요소 수가 계산됩니다.

(예) 첫 번째 차원에 요소 0부터 3개의 요소가 있고 두 번째 차원에 요소 3부터 4개의 요소가 있는 2차원 배열을 설정하려면 "3,3..6"을 입력합니다.

입력 후 "3..6"은 4개의 요소로 변환되고 배열 차원은 요소 번호 3부터 시작됩니다.

이 배열로 아래와 같이 배열 변수 Var1이 만들어집니다.

#### 배열의 간접 주소 지정

간접 주소 지정은 배열에서 연속 값 범위 내의 변수 값에 액세스하고, 메모리 소모를 최소화하고, 값을 밀리초 내에 업데이트할 수 있는 가장 빠른 방법입니다.

배열의 간접 주소 지정의 경우 변숫값이나 개체의 속성값으로 배열 요소 번호를 지정하여 배열의 요소를 동적으로 지정합니다.

- 변숫값으로 간접 지정하려면:
  배열 요소 번호를 지정하는 대괄호 [] 안에 “(변수명).Value”을 입력합니다.
  (예) Var2[Var1.Value].Value: 이것은 배열 요소 번호가 변수 Var1의 값을 사용하여 간접적으로 지정된 배열 변수 Var2의 값입니다.
- 개체의 속성값으로 간접 지정하려면:
  배열 요소 번호를 지정하는 대괄호 [] 안에 "$GraphicalObject" 다음에 "(개체 이름).(속성 이름)"을 입력합니다.
  (예) Var2[$GraphicalObject.NumericDisplay1.CurrentValue].Value: 이것은 배열 요소 번호 값이 숫자 표시 개체의 현재 값인 Numeric Display1을 사용하여 간접적으로 지정된 배열 변수 Var2의 값입니다.

메모:

배열 요소 번호를 개체의 속성값으로 간접 지정할 때는 개체 이름 앞에 "$GraphicalObject"를 입력합니다.
입력 지원 기능에 따라 입력 또는 소스 속성 필드에 "$"를 입력한 후 옵션 목록에서 "$GraphicalObject"를 선택하면 문자열을 쉽게 입력할 수 있습니다.

배열의 간접 주소 지정은 다음을 지원합니다.

- [표현식] 컨버터에서 사용할 수 있습니다.
  (예: Array11[DINT1.value+2], Array21[Int2[Int3[Int1+1]]], Array31[Int1*4-(Int2+Int4/4)])

- 모든 변수 데이터 종류에 대해 최대 5개 수준의 중첩이 지원됩니다.
  (예: Array11[Array22[DINT1.value],DINT02.value])

### 구조체 변수

구조체는 여러 변수 모음을 저장하는 변수입니다. 구조체의 각 변수를 요소라고 합니다. 요소의 데이터 종류은 어떠한 타입이든 가능합니다.

다른 구조체 또는 배열을 요소로 추가하여 중첩된 구조체를 생성할 수 있습니다.

구조체는 요소마다 각각의 상자와 연결되어 있는 일련의 상자로 볼 수 있습니다.

다음 다이어그램에서 배열 변수 DATA에는 3개의 요소가 들어 있습니다. 3 개 상자 각각에 변수값이 저장됩니다.

## 입력값이 입력 범위를 벗어난 경우의 동작

변수에 저장할 값이 범위(최소/최대값)를 벗어나면 다음과 같이 처리됩니다.

- 값이 외부 장치에서 범위를 초과할 경우
- 값 변경 작업 [Loop]으로 인해 값이 범위를 초과할 경우
- 값 변경 작업 [Stop]으로 인해 값이 범위를 초과할 경우
- 값 변경 [Set] 작업, 간접적으로 지정된 값 또는 표현식 컨버터 작업으로 인해 값이 범위를 초과할 경우
- 레시피로 인해 값이 범위를 초과할 경우

메모:

- 값 변경 작업에 대한 자세한 내용은 값 변경을 참조하십시오.

### 값이 외부 장치에서 범위를 초과할 경우

데이터 종류 | 설명
STRING, WSTRING | 맞출 수 있는 문자를 저장합니다.
위의 사항 이외 | 입력 범위를 초과하는 부분의 값은 입력 범위의 맨 아래부터 계산되어 저장됩니다. 예) 부호 없는 8비트 변수(값 범위: 0...255) 예 1: 256을 저장하려고 시도할 경우 0이 변수에 저장됩니다. (상한값이 1을 초과하면 하한값 0이 저장됩니다.) 예 2: 257을 저장하려고 시도할 경우 1이 변수에 저장됩니다. (상한값이 2를 초과하면 두 번째 하한값 1이 저장됩니다.)

### 값 변경 작업 [Loop]으로 인해 값이 범위를 초과할 경우

입력 범위를 초과하는 부분의 값은 입력 범위의 맨 아래부터 계산되어 저장됩니다.

(예): 부호 없는 8비트 변수(값 범위: 0...255)

예 1: 256을 저장하려고 시도할 경우 0이 변수에 저장됩니다. (상한값이 1을 초과하면 하한값 0이 저장됩니다.)

예 2: 257을 저장하려고 시도할 경우 1이 변수에 저장됩니다. (상한값이 2를 초과하면 두 번째 하한값 1이 저장됩니다.)

### 값 변경 작업 [Stop]으로 인해 값이 범위를 초과할 경우

데이터 종류 | 설명
STRING, WSTRING | 맞출 수 있는 문자를 저장합니다.
위의 사항 이외 | 다음은 상한값이나 하한값으로 반올림됩니다. BOOL 1/0 SINT 127/-128 USINT, BYTE 255/0 INT 32767/-32768 UINT, WORD 65535/0 DINT 2147483647/-2147483648 UDINT, DWORD 4294967295/0 LINT 9223372036854775807/-9223372036854775808 ULINT, LWORD 18446744073709551615/0 REAL, LREAL 속성 설정에 따라 다릅니다. TIME 2147483647/-2147483648 DATE/TIME_OF_DAY, DATE_AND_TIME 4294967295/0

### 값 변경 [Set] 작업, 간접적으로 지정된 값 또는 표현식 컨버터 작업으로 인해 값이 범위를 초과할 경우

값이 정의되지 않았습니다.

### 레시피로 인해 값이 범위를 초과할 경우

데이터 종류 | 설명
BOOL, REAL, LREAL | 값이 정의되지 않았습니다.
LINT, ULINT, LWORD | 다음은 상한값이나 하한값으로 반올림됩니다. LINT 9223372036854775807/-9223372036854775808 ULINT, LWORD 18446744073709551615/0
STRING, WSTRING | 맞출 수 있는 문자를 저장합니다.
위의 사항 이외 | 입력 범위를 초과하는 부분의 값은 입력 범위의 맨 아래부터 계산되어 저장됩니다. (예): 부호 없는 8비트 변수(값 범위: 0...255) 예 1: 256을 저장하려고 시도할 경우 0이 변수에 저장됩니다. (상한값이 1을 초과하면 하한값 0이 저장됩니다.) 예 2: 257을 저장하려고 시도할 경우 1이 변수에 저장됩니다. (상한값이 2를 초과하면 두 번째 하한값 1이 저장됩니다.)