====== 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]]