프로그램에서 사용되는 변수는 사전에 VAR 과 END_VAR사이에 선언해주어야 합니다.
다음은 변수 선언 예입니다.
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
프로그램에서 변경되지 않는 수를 상수라고 합니다. 상수는 다음과 같이 선언합니다.
VAR CONSTANT Setpoint : INT := 75; END_VAR
또 다른 중요한 한정자는 RETAIN입니다. RETAIN변수는 웜부팅시 그 값을 유지합니다.
VAR RETAIN Stored_value : WORD; END_VAR
IEC 61131-3에서 가장 주목할 만한 기능은 변수를 선언 할 수 있다는 것입니다. 이렇게 선언된 변수는 해당 POU 내에서만 사용할 수 있습니다. 다른 POU에 같은 이름의 변수가 있어도, 서로 다른 영역에 저장되므로 충돌 위험이 없습니다.
그런데 때로는 모든 POU에서 하나의 변수에 접근하고 싶은 경우도 있습니다. 이럴때는 전역변수를 선언하고 사용하면 됩니다.
VAR_GLOBAL ItemCount : UINT; AlarmLight : BOOL; END_VAR
CODESYS에서 전역 변수는 POU 내부가 아닌 별도의 정해진 공간에 선언해야 합니다.
입력용 변수는 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
위 코드를 블록도로 표현하면 다음과 같습니다.
변수에 넣을 수 있는 값을 한정짓게 하는 표현입니다.
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
이런식으로 서로 다른 값을 리턴하도록 할 수 있습니다.
다음과 같은 형식으로 베열을 선언합니다.
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