윤돌이

[PLC의 이해] 데이터 표현 방법-2 본문

스마트팩토리/PLC

[PLC의 이해] 데이터 표현 방법-2

Yoondori 2023. 2. 8. 22:51
728x90

데이터 타입

데이터는 그 데이터의 고유 성질을 나타내는 데이터 타입을 가지고 있습니다.


 기본 데이터 타입


XGI/XGR/XEC PLC에서는 20종의 기본 데이터 타입을 지원합니다.


▶ 데이터 타입 계층도


XGI/XGR/XEC PLC에서 사용되는 데이터 타입은 크게 ANY_NUM과 ANY_BIT로 구분됩니다.


① ANY_NUM으로 나타내면 LREAL, REAL, LINT, DINT, INT, SINT, ULINT, UDINT, UINT, USINT를 모
두 포함합니다.


② ANY_BIT로 표현되면 LWORD, DWORD, WORD, BYTE, BOOL 중 하나를 사용할 수 있습니다.


▶ 초기값


데이터의 초기값을 지정하지 않으면 자동적으로 아래와 같이 지정됩니다.

 

데이터 타입 초기값
LINT, DINT, INT, SINT 0
ULINT, UDINT, UINT, USINT 0
BOOL, BYTE, WORD, DWORD, LWORD 0
REAL, LREAL  0.0
TIME T#0s
DATE  D#1984-01-01
TIME_OF_DAY  TOD#00:00:00
DATE_AND_TIME  DT#1984-01-01-00:00:00
STRING  '' (empty string)

REAL:실수(32bit), LREAL(Long REAL): 실수(64bit), SREAL(Short REAL):실수(16bit)

INT:정수(16bit), LINT:정수(64bit) , DINT:정수(32bit), SINT:정수(8bit)BOOL: True(1) or False(0) 두가지의 값만을 가집니다.

 

 

변 수

변수란 프로그램 안에서 사용하는 데이터로서 값을 가지고 있습니다.

변수는 PLC의 입력이나 출력, 내부 메모리 등과 같이 변할 수 있는 대상을 가리킵니다.


▶ 변수의 표현
변수의 표현에는 2가지가 있습니다.


① 식별자에 의한 변수: 식별자에 의해 변수에 이름을 부여하는 것

사용자가 직접 지정하는 변수

영문자,한글,기호(시작 기호는 _등만 사용, 숫자로 시작하면 안 된다!)(% A)

→ 자동할당


② 직접변수: PLC의 입·출력 또는 기억 장소에 대하여 직접적으로 표현하는 것

%로 시작 — CPU에서 기본제공

EX) % M,%I,%Q,%R, (% W),%F,%U


식별자에 의한 변수는 다른 변수들과 구별하기 위하여 그 이름의 변수가 선언된 프로그램 안에서 유일해야 합니다.

직접 변수의 표현은 퍼센트 문자(%)를 시작으로 위치를 나타내는 접두어와 데이터의 크기를 나타내는 접두어 그리고 마침표로 분리되는 하나 이상의 부호 없는 정수의 순으로 표현할 수 있습니다. 

 

위치 접두어

번호 접두어 의미
1 I 입력위치(Input Location)
2 Q 출력위치(Output Location)
3 M 내부 메모리 중 M영역 위치(Memory Location)
4 R 내부 메모리 중 R영역 위치(Memory Location)
5 W 내부 메모리 중 W영역 위치(Memory Location)

크기 접두어

번호 접두어 의미
1 X 1 비트의 크기
2 None 1 비트의 크기
3 B 1 바이트(8 비트)의 크기
4 W 1 워드(16 비트)의 크기
5 D 1 더블 워드(32 비트)의 크기
6 L L 1 롱 워드(64 비트)의 크기

영문자, 기호 1BYTE(8bit)  한글 2BYTE(16bit)

 

 

표현 형식

%[위치 접두어][크기 접두어] n1.n2.n3

번호 I, Q M, R, W
n1 베이스 번호(0부터 시작) [크기 접두어]에 따른 n1번째 데이터
 (0부터 시작)
n2 슬롯 번호(0부터 시작) n1번째 데이터상의 n2번째 비트
(0부터 시작): 생략 가능
n3 [크기 접두어]에 따른 n3번째 데이터
(0부터 시작)
사용하지 않음

예시)

% QX3.1.4 또는 % Q3.1.4 3번 베이스의 1번 슬롯의 4번 출력(1 비트)


% IW2.4.1 2번 베이스의 4번 슬롯의 워드 단위로 1번 입력(16비트)


% MD48 48의 위치에 있는 더블 워드 단위의 메모리


% MW40.3 40의 위치에 있는 워드 단위의 메모리 중 3번 비트

 

0번 베이스 0번 슬롯에 꽂혀 있는 디지털 입력 모듈 

 

% IX0.0.0~%IX0.0.15 : 16개 비트 → % IW0.0.0

(W는 16개의 bit로 이루어졌다는 것을 알아야 합니다)

 

 

(B(BYTE)는 8개의 bit로 이루어졌으며 W(Word)는 2개의 Byte 즉 16개의 bit로 이루어져 있음)

% IW0.0.1 → % IX0.0.16 ~31 →% IB0.0.2~3

 

즉 이 예시에서 % IW0.0.0은 0~15까지의 bit로 이루어져 있고 0~1까지의 Byte로 이루어져 있다.

따라서 % IW0.0.1의 경우 16~31까지의 bit , 즉 2~3까지의 Byte로 이루어져 있음을 표현한다.

 

▶ 변수의 선언

프로그램 구성 요소(즉 프로그램, 펑션, 펑션 블록)는 그 구성 요소에서 사용할 변수를 선언할 수 있는 선언 부분을 가지고 있습니다.
프로그램 구성 요소에서 변수를 사용하기 위해서는 우선 사용할 변수를 선언해야 합니다. 변수의 선언에서 설정해야 할 사항은 다음과 같습니다.

 

 변수 종류: 변수를 어떻게 선언할 것인가를 설정합니다.

 

변수 종류 내용
VAR 읽고 쓸 수 있는 일반적인 변수
VAR_RETAIN 정전 유지 변수
VAR_CONSTANT 읽기만 할 수 있는 변수
VAR_EXTERNAL VAR_GLOBAL로 선언된 변수를 사용하기 위한 선언

- VAR의 경우 일반적으로 변수를 선언할 때 사용합니다.

 

-VAR_RETAIN의 경우 정전 유지 변수로 전원이 꺼졌다 켜져도 데이터가 저장되도록 합니다

-> RETAIN변수를 제외한 모든 변수들은 휘발성으로 전원이 꺼지면 데이터가 초기값으로 돌아갑니다.

-VAR_CONSTANT는 읽기만 할 수 있는 변수입니다

 

-VAR_EXTERNAL의 경우 VAR_GLOBAL로 선언된 변수를 사용하기 위한 선언입니다. 

 

VAR_EXTERNAL로 선언을 하여야 GLOBAL에서 변수를 가져와서 사용할 수 있습니다.

PLC 프로그램 내에서 여러 개의 SCAN프로그램을 제작할 경우 모든 변수는 스캔프로그램 내에서만 사용가능하지만 GLOBAL변수로 선언하면 모든 SCAN 프로그램에서 사용가능합니다.

 

② 데이터 타입: 변수의 데이터 타입을 지정합니다.


③ 메모리 할당: 변수가 차지할 메모리를 할당합니다.
자동 (블랭크): 컴파일러가 변수의 위치를 자동으로 지정 (내부 데이터)

-메모리를 할당하지 않아도 자동으로 메모리가 할당된다.
사용자 정의: 사용자가 직접변수 (% I 또는 % Q)를 사용하여 강제로 위치를 지정

 

④ 초기값 (Initial Value) 지정: 변수의 초기값을 지정합니다. 지정하지 않으면의 default 초기값으로 지정됩니다.

 

PLC의 전원이 끊긴 후에도 데이터의 값을 유지할 필요가 있는 변수는 정전 유지(Retention)의 기능이 제공되는 VAR_RETAIN을 써서 선언할 수 있으며 다음의 규칙을 따릅니다.

-> 정전 유지 변수는 시스템의 웜 리스타트 시 그 값이 유지됩니다.
-> 시스템의 콜드 리스타트 시에는 사용자가 정의한 초기값이나 기본 초기값으로 초기화됩니다

 

⑥ VAR_RETAIN으로 선언되지 않은 변수는 콜드 리스타트나 웜 리스타트 어느 경우에도 사용자가 정의한 초기값이나 기본 초기값으로 초기화됩니다.
(참고)
변수 선언 시 % I와 % Q로 강제 할당한 변수는 변수종류를 VAR_RETAIN, VAR_CONSTANT로 선언할 수 없습니다.

-> 기본적으로 모든 데이터는 휘발성 데이터로 전원이 꺼지면 데이터가 모두 초기화됨.


⑦ 변수는 기본 데이터 타입을 인자로 갖는 어레이로 선언하여 사용할 수 있습니다. 어레이 변수로 선언할 때에는 인자로 사용할 데이터의 타입과 어레이의 크기를 설정하여야 합니다. 단,  기본 데이터 타입 중에 STRING 데이터 타입은 인자로 설정할 수 없습니다.


⑧ 변수 선언의 유효 영역(Scope), 즉 변수를 사용할 수 있는 영역은 그 변수가 선언된 프로그램 구성 요소에 한합니다. 따라서 다른 프로그램 구성 요소에서 선언된 변수는 사용할 수 없습니다. 글로벌 변수로 선언된 변수는 이와 달리 모든 곳에서 VAR_EXTERNAL 선언에 의해 변수 접근이 가능합니다.

 

변수의 선언 예

변수 이름 변수형 데이터 타입 초기값 메모리 할당
I_VAL VAR INT 1234 -
BIPOLAR VAR_RETAIN REAL - -
LIMIT_SW VAR BOOL - %IX1.0.2
GLO_SW VAR_EXTERNAL DWORD - -
READ_BUF VAR ARRAY OF INT[10] - -

▶ 예약 변수

예약 변수는 시스템에서 미리 선언한 변수들로서 플래그로 사용됩니다.

사용자가 이 변수 이름으로 변수 선언을 할 수는 없습니다.

이 예약 변수를 사용할 때에는 변수 선언 없이 사용합니다.

 

이후 프로그램을 직접 사용하면서 확인하시면 될 것 같습니다. 플래그가 엄청 많아서...

예를 들면 1초 타이머, 상시 ON 등 프로그래밍하는 데에 있어 편히 사용할 수 있게 만들어둔 변수(플래그)를 말합니다.

 

 

▶ 프로그램

프로그램 종류로는 사용자 펑션, 사용자 펑션 블록, 프로그램이 있습니다.

 

-> 사용자 펑션


사용자 펑션은 내부에 상태를 보관하고 있는 데이터를 갖지 않습니다. 즉 입력이 일정하면 출력 값도 일정해야만 사용자 펑션이 됩니다.

사용법

  1. 사용자 펑션의 내부 변수는 초기값을 가질 수 없습니다.
  2. 사용자 펑션은 변수를 VAR_EXTERNAL로 선언하여 사용할 수 없습니다.
  3. 사용자 펑션 안에서는 직접변수들을 사용할 수 없습니다.
  4. 사용자 펑션은 프로그램 구성 요소에서 호출하여 사용합니다.
  5. 사용자 펑션을 호출하는 프로그램 구성 요소에서 사용자 펑션으로의 데이터 전달은 입력을 통하여 실 행합니다.
  6. 사용자 펑션 안에서는 사용자 펑션 블록이나 프로그램을 호출할 수 없습니다.
  7. 사용자 펑션은 그 사용자 펑션 이름과 하나의 출력 데이터 타입 변수 이름이 같습니다.

이 변수는 하나의 사용자 펑션을 만들 때 자동적으로 생성되며 사용자 펑션에서 결괏값을 이 변수에 넣어서 출력시킵니다.


->사용자 펑션 블록

  • 사용자 펑션 블록은 출력이 여러 개가 될 수 있습니다.
  • 사용자 펑션 블록은 내부에 데이터를 가질 수 있습니다.
  • 사용자 펑션 블록은 사용하기 전에 변수를 선언하는 것처럼 인스턴스를 선언하여야 합니다. 인스턴스라는 것은 사용자 펑션 블록에서 사용하는 변수들의 집합입니다. 사용자 펑션 블록은 내부에서 사용하는 변수뿐 아니라 출력 값도 자체에서 보관하여야 하므로 데이터 메모리를 가지고 있어야 하는데 바로 그것이 인스턴스입니다.
  • 프로그램도 사용자 펑션 블록의 일종이라고 볼 수 있으며, 프로그램 역시 인스턴스를 선언하여야 합니다.
  • 사용자 펑션 블록 안에서는 직접 변수를 사용할 수 있습니다. 
  • 사용자 펑션 블록은 글로벌 변수로 선언되고 사용자정의(AT)로 강제 배치된 직접변수는 VAR_EXTERNAL로 선언하여 사용할 수 있습니다.
  • 사용자 펑션 블록 안에서는 프로그램을 호출할 수 없습니다.

->프로그램

  • 프로그램은 사용자 펑션 블록과 같이 인스턴스를 선언하여 사용합니다.
  • 프로그램 안에서는 직접 변수를 사용할 수 있습니다.
  • 프로그램에는 입/출력변수가 없습니다.
  • 프로그램에는 사용자 펑션 및 사용자 펑션 블록을 호출할 수 있습니다.

펑션과 펑션블록은 프로그램을 다루면서 이해하는 게 익히기 편합니다.

글로는 복잡한 게 많고 다 담을 수도 없어서.

 

다음시간에는 메모리에 대해서 조금 더 자세하게 알아볼게요

메모리가 어느 정도 이해가 안 되면 LD를 짜거나 동작확인할 때 어려움이 많아서 :)

 

공부하시느라 고생 많으십니다! 질문사항이나 추가해줬으면 하는 것은

댓글 남겨주시면 참고, 답장드리겠습니다.

728x90

'스마트팩토리 > PLC' 카테고리의 다른 글

[PLC의 이해] 데이터 표현 방법  (2) 2023.02.03
[PLC의 이해] XGI란  (0) 2023.01.29
[PLC의 이해] 동작이해  (0) 2023.01.27
Comments