====== 7. 변수 선언 ======
프로그램에서 사용되는 변수는 사전에 VAR 과 END_VAR사이에 선언해주어야 합니다.
{{ :codesysmanual:variable.png?nolink |}}
다음은 변수 선언 예입니다.
VAR
Start : BOOL := TRUE;
Alarm : BOOL;
MV : REAL := 48.5;
Temp_ref : INT := 70;
Denomination : STRING := ‘Degrees’;
Light : Color := Yellow;
Time1 : TOD;
Time2 : TIME := time#70m_30s;
Date1 : DATE := DATE#2007‐06‐18;
END_VAR
여러개 변수를 한번에 선언할 수 있습니다.
VAR
Value_1, Value_2, Value_3 : INT;
END_VAR
===== 7.1 상수 선언 =====
프로그램에서 변경되지 않는 수를 상수라고 합니다. 상수는 다음과 같이 선언합니다.
VAR CONSTANT
Setpoint : INT := 75;
END_VAR
===== 7.2 RETAIN 선언 =====
또 다른 중요한 한정자는 RETAIN입니다. RETAIN변수는 웜부팅시 그 값을 유지합니다.
VAR RETAIN
Stored_value : WORD;
END_VAR
===== 7.3 전역 변수 =====
IEC 61131-3에서 가장 주목할 만한 기능은 변수를 선언 할 수 있다는 것입니다. 이렇게 선언된 변수는 해당 POU 내에서만 사용할 수 있습니다. 다른 POU에 같은 이름의 변수가 있어도, 서로 다른 영역에 저장되므로 충돌 위험이 없습니다.
그런데 때로는 모든 POU에서 하나의 변수에 접근하고 싶은 경우도 있습니다. 이럴때는 전역변수를 선언하고 사용하면 됩니다.
VAR_GLOBAL
ItemCount : UINT;
AlarmLight : BOOL;
END_VAR
CODESYS에서 전역 변수는 POU 내부가 아닌 별도의 정해진 공간에 선언해야 합니다.
{{ :codesysmanual:globalvariable2.png?nolink |}}
{{ :codesysmanual:globalvariable.png?nolink |}}
===== 7.4 INPUT 또는 OUTPUT 변수 =====
입력용 변수는 VAR_INPUT, 출력용 변수는 VAR_OUTPUT으로 선언할 수 있습니다. VAR_IN_OUT은 입출력 겸용 변수입니다.
FUNCTIONBLOCK CTU
VAR_INPUT (* 입력 변수 선언 *)
CU : BOOL;
RESET : BOOL;
PV : WORD;
END_VAR
VAR_OUTPUT (* 출력 변수 선언 *)
Q : BOOL;
CV : WORD;
END_VAR
VAR (* 로컬 변수 선언 *)
M : BOOL;
END_VAR
:
: (* 프로그램 코드 *)
:
END_FUNCTION_BLOCK
위 코드를 블록도로 표현하면 다음과 같습니다.
{{ :codesysmanual:ctu.png?nolink |}}
===== 7.5 한정자 =====
변수에 넣을 수 있는 값을 한정짓게 하는 표현입니다.
TYPE
HoleNumber : INT (−800..200);
END_TYPE
열거형 한정자도 사용할 수 있습니다.
TYPE
Color : (Green, Yellow, Red);
END_TYPE
이렇게 선언하면 "Green"값에는 값 0이 자동으로 할당됩니다. "Yellow"는 정수 1을 사용하고 "Red"는 정수 2를 사용합니다.
TYPE
Color : (Green := 11, Yellow:= 31, Red:= 51);
END_TYPE
이런식으로 서로 다른 값을 리턴하도록 할 수 있습니다.
===== 7.6 배열 =====
다음과 같은 형식으로 베열을 선언합니다.
TYPE
배열명1 : ARRAY [하한..상한] OF 변수형;
배열명2 : ARRAY [하한1..상한1, 하한2..상한2] OF 변수형;
END_TYPE
하한과 상한은 반드시 정수로 써주어야 합니다.
아래와 같이 선언하면 세가지 데이터 유형이 선언됩니다.
TYPE One_dim: ARRAY [0..9] OF USINT; END_TYPE
TYPE Two_dim: ARRAY [1..2, 1..5] OF INT; END_TYPE
TYPE Three_dim: ARRAY [0..3, 0..3, 0..3] OF REAL; END_TYPE
* 1 차원 배열 10 개 요소
* 2 * 5 = 10 개 요소가있는 2 차원 배열
* 3 차원 4 * 4 * 4 = 64 요소가있는 배열
[[codesysmanual:index|CODESYS 와 ComfilePi]]