데이터 변환

프로그래밍에서 데이터 유형을 혼합하면 데이터 변환이 발생합니다. 래더 다이어그램을 프로그래밍할 때는 하나의 명령어 또는 식 내에서 파라메터의 데이터 유형을 혼합합니다.
명령어의 모든 피연산자에서 다음과 같은 데이터 유형을 사용하는 경우 명령어 실행 속도가 빨라지고 필요한 메모리가 줄어듭니다.
  • 동일한 데이터 유형.
  • 중간 데이터 유형:
    • 데이터 유형을 혼합하거나 최적의 데이터 유형이 아닌 태그를 사용하면 컨트롤러에서는 다음 규칙에 따라 데이터를 변환합니다.
      • 피연산자는 SINT, USINT, INT, UINT, DINT, UDINT, LINT, ULINT, REAL, LREAL의 데이터 유형 순위에 따라 변환되며 데이터 유형의 순위는 1(가장 낮음)부터 10(가장 높음)까지 있습니다.
        팁: 데이터 변환에 필요한 시간과 메모리를 줄이려면 명령어의 모든 피연산자에 대해 동일한 데이터 유형을 사용합니다.
SINT 또는 INT를 DINT로 변환하거나 DINT를 LINT로 변환
SINT 또는 INT 입력 소스 태그는 소스 태그에 대한 부호 확장을 통해 DINT 값으로 승격됩니다. SINT 또는 INT 값을 DINT 값으로 변환하는 명령어는 다음 변환 방법 중 하나를 사용합니다.
변환 방법
데이터 변환을 위한 배치 방법
부호 확장
32비트 또는 64비트가 될 때까지 기존 비트 왼쪽에 있는 각 비트 위치로 맨 왼쪽 비트(값의 기호)의 값 배치.
0 채우기
32비트 또는 64비트가 될 때까지 기존 비트 왼쪽에 0 채우기.
로직 명령어는 0 채우기를 사용합니다. 기타 모든 명령어는 부호 확장을 사용합니다.
다음은 부호 확장 및 0 채우기를 사용하여 값을 변환한 결과를 보여주는 예입니다.
변환 전 값
2#1111_1111_1111_1111
(-1)
부호 확장을 통해 변환된 값
2#1111_1111_1111_1111_1111_1111_1111_1111
(-1)
0 채우기를 통해 이 값으로 변환
2#0000_0000_0000_0000_1111_1111_1111_1111
(65535)
부호 확장을 통해 데이터를 변환하는 명령어에서 SINT 또는 INT 태그와 즉시 값을 사용하는 경우 다음 방법 중 하나를 사용하여 즉시 값을 처리합니다.
즉시 값을 10진 기수로 지정합니다.
10진수가 아닌 기수로 값을 입력하는 경우 즉시 값의 32비트를 모두 지정합니다. 그렇게 하려면 32비트가 될 때까지 맨 왼쪽 비트의 값을 상위의 모든 비트 위치에 입력합니다.
각 연산자에 대한 태그를 생성하고 명령어 전체에서 동일한 데이터 유형을 사용합니다. 상수 값을 할당하려면 다음 중 하나를 수행합니다.
태그 중 하나에 상수 값을 입력합니다.
값을 태그 중 하나로 이동시키는 MOV 명령어를 추가합니다.
MEQ 명령어를 사용하여 필요한 비트만 확인합니다.
다음은 즉시 값을 INT 태그와 혼합하는 두 가지 방법을 보여주는 예입니다. 이 두 가지 예에서는 1771 I/O 모듈의 비트를 검사하여 모든 비트가 제자리에 있는지 확인합니다. 1771 입/출력(I/O) 모듈의 입력 데이터 워드가 INT 태그이기 때문에 16비트 상수 값을 사용하는 것이 가장 쉽습니다.
중요:
  • INT 태그를 즉시 값과 혼합하는 경우 remote_rack_1:I.Data[0]가 INT 태그이므로 이를 비교하는 값도 INT 태그로 입력됩니다. INT 태그를 즉시 값과 혼합하는 경우 remote_rack_1:I.Data[0]가 INT 태그이므로 이를 비교하는 값도 INT 태그로 입력됩니다.
  • INT 태그를 즉시 값과 혼합하는 경우 remote_rack_1:I.Data[0]가 INT 태그이므로 이를 비교하는 값은 먼저 INT 태그인 int_0으로 이동됩니다. 그런 다음 EQU 명령어가 두 태그를 비교합니다.
정수를 REAL로 변환
컨트롤러에서는 REAL 값을 IEEE 단정도 부동 소수점 수 형식으로 저장합니다. 이 형식은 값의 부호에 1비트를, 가수에 23비트를, 지수에 8비트를 사용합니다(총 32비트). 동일한 명령어에 정수 태그(SINT, INT 또는 DINT)와 REAL 태그를 혼합하여 사용하면 컨트롤러에서는 명령어를 실행하기 전에 정수 값을 REAL 값으로 변환합니다.
  • SINT 또는 INT 값은 항상 동일한 REAL 값으로 변환됩니다.
  • 그러나 DINT 값은 동일한 REAL 값으로 변환되지 않을 수 있습니다.
  • REAL 값은 가수로 최대 24비트를 사용합니다(저장된 23비트와 '숨겨진' 비트 1개).
  • DINT 값은 값에 최대 32비트를 사용합니다(부호에 1비트, 값에 31비트).
DINT 값에 24비트를 초과하는 유효 비트가 필요한 경우 이 값은 동일한 REAL 값으로 변환되지 않을 수 있습니다. 이 경우 컨트롤러는 가장 가까운 짝수 값으로 반올림된 가장 높은 24비트를 저장합니다.
노트: Logix Designer 응용 프로그램은 컨트롤러 모델이 5x80 컨트롤러인지, 아니면 5x70 컨트롤러인지에 따라 숫자를 다르게 해석합니다. 예:
  • 5x70 컨트롤러의 경우 Logix Designer는 리터럴 2를 REAL로 해석합니다.
  • 5x80 컨트롤러의 경우 Logix Designer는 리터럴 2를 DINT로 해석합니다.
DINT를 SINT 또는 INT로 변환
DINT 값을 SINT 또는 INT 값으로 변환하기 위해 컨트롤러는 DINT의 상위 비트 부분을 잘라내고 해당 데이터 유형에 맞는 하위 비트를 저장합니다. 값이 너무 크면 변환 시 오버플로가 발생합니다.
DINT를 INT 및 SINT로 변환
변환 전 DINT 값
변환 후의 작은 값
16#0001_0081 (65,665)
INT
16#0081 (129)
SINT
16#81 (-127)
REAL을 SINT, INT 또는 DINT로 변환
REAL 값을 정수 값으로 변환하기 위해 컨트롤러는 소수 부분을 반올림하고 결과 데이터 유형에 맞는 비트를 저장합니다. 값이 너무 크면 변환 시 오버플로가 발생합니다.
숫자는 다음 예처럼 반올림됩니다.
소수 부분이 0.5보다 작으면 가장 가까운 정수로 내림합니다.
소수 부분이 0.5보다 크면 가장 가까운 정수로 올림합니다.
소수 부분이 0.5이면 가장 가까운 짝수 정수로 올림하거나 내림합니다.
REAL 값을 DINT 값으로 변환
변환 전 REAL 값
변환 후 DINT 값
-2.5
-2
-3.5
-4
-1.6
.2
-1.5
.2
-1.4
.1
1.4
1
1.5
2
1.6
2
2.5
2
3.5
4
의견을 작성 부탁드립니다.
이 자료에 대한 문의사항이나 요청사항이 있습니까? 여기에 요청사항을 작성 부탁드립니다.
Normal