https://codinghago.tistory.com/78
EPEC CODESYS의 Data Type들과 사용법 2.
https://codinghago.tistory.com/77 EPEC CoDeSys 코드시스 사용법 1.📍 CoDeSys란? CoDeSys는 국제 사업 표준 ICE 61131-3에 딸라 컨트롤러 애플리케이션을 프로그래밍하기 위한 통합 개발 환경이다. 1️⃣ CODESYS
codinghago.tistory.com
📍 CODESYS의 Operators
CODESYS의 Operator들에는 크게 8가지가 있다. Boolean Operator, Analog Operator, Compare Operator, Shift and rotate Operator, Real Operator, Logarithmic Operator, Trigonometric Operator, Select Operator이다.
그럼 하나씩 살펴 보자 !!
1️⃣ Boolean Operators
Boolean Operators는 AND, OR, XOR이 있다.
2️⃣ Analog Operators
Analog Operators는 ADD, SUB, MUL, DIV, MOD이 있다.
3️⃣ Compare Operators
Compare Operators는 EQ, LT, GT, LE, GE 이 있다.
비교연산자는 IF 조건문에 비교연산자를 많이 사용한다.
✅ EQ (Equal, 같음)
Result := (A = B); (* A와 B가 같으면 Result는 TRUE *)
✅ LT (Less Than, A < B)
Result := (A < B); (* A가 B보다 작으면 Result는 TRUE *)
✅ GT (Greater Than, A > B)
Result := (A > B); (* A가 B보다 크면 Result는 TRUE *)
✅ LE (Less or Equal, A <= B)
Result := (A <= B); (* A가 B보다 작거나 같으면 TRUE *)
✅ GE (Greater or Equal, A >= B)
Result := (A >= B); (* A가 B보다 크거나 같으면 TRUE *)
4️⃣ Shift and Rotate Operators
Shift and Rotate Operators 는 SHL, SHR, ROL, ROR 이 있다. Shift and rotate Operators는 비트를 좌우로 이동하거나 회전하는 기능을 한다. PLC에서 데이터 처리, 비크 마스킹, 효율적인 연산 수행을 할 때 유용하게 사용된다.
✅ SHL (Shift Left), SHR (Shift Right)
비트를 왼쪽, 오른쪽으로 이동시키는 연산자. ❗빈자리는 0으로 채워진다.
예제)
VAR
Value : BYTE := 8; (* 00001000 (2진수) = 8 *)
ResultSHL : BYTE;
ResultSHR : BYTE;
END_VAR
ResultSHL := SHL(Value, 2); (* 왼쪽으로 2비트 이동 *)
ResultSHR := SHR(Value, 2); (* 오른쪽으로 2비트 이동 *)
결과 :
- SHL(Value, 2) → 00100000 (32)
- SHR(Value, 2) → 00000010 (2)
✅ ROL (Rotate Left), ROR(Rotate Right)
비트를 왼쪽, 오른쪽으로 회전시키는 연산자. ❗ 빈자리는 기존 비트 값으로 채워진다.(회전방식)
Codesys에서 비트 회전(ROL, ROR)의 의미
비트 회전(Rotate) 연산은 비트들을 왼쪽(ROL) 또는 오른쪽(ROR)으로 이동시키되, 이동된 비트가 반대쪽 끝으로 다시 들어오는 것을 의미함.
👉 즉, 비트가 끊어지지 않고 한 바퀴 도는 형태로 이동됨.
예제)
VAR
Value : BYTE := 8; (* 00001000 (8) *)
ResultROL : BYTE;
ResultROR : BYTE;
END_VAR
ResultROL := ROL(Value, 2); (* 왼쪽으로 2비트 회전 *)
ResultROR := ROR(Value, 2); (* 오른쪽으로 2비트 회전 *)
결과 :
- ROL(Value, 2) → 00100001 (회전된 값)
- ROR(Value, 2) → 10000010 (회전된 값)
5️⃣ Real Operators
Real Operators는 ABS, TRUNC, EXPT, SQRT 이 있다. CODESYS에서 Real Operators는 수학연산을 수행하는 주요 함수들을 의미한다. PLC에서 수치 계산, 제어 로직, 센서 데이터 처리 등에 활용된다.
✅ ABS (절대값, Absolute Value)
음수를 양수로 변환하고 양수는 그대로 유지하는 함수
VAR
Value1 : INT := -25;
Value2 : REAL := -10.5;
Result1 : INT;
Result2 : REAL;
END_VAR
Result1 := ABS(Value1); (* -25 → 25 *)
Result2 := ABS(Value2); (* -10.5 → 10.5 *)
결과 :
- Result1 = 25
- Result2 = 10.5
✅ TRUNC (소수점 이하 절삭, Truncate)
소수점을 제거하고 정수 부분만 반환하는 함수
VAR
Value1 : REAL := 15.89;
Value2 : REAL := -23.76;
Result1 : INT;
Result2 : INT;
END_VAR
Result1 := TRUNC(Value1); (* 15.89 → 15 *)
Result2 := TRUNC(Value2); (* -23.76 → -23 *)
결과 :
- Result1 = 15
- Result2 = -23
✅ EXPT (거듭제곱, Exponential Power)
X의 제곱을 계산하는 함수
VAR
Base : REAL := 3.0;
Exponent : REAL := 4.0;
Result : REAL;
END_VAR
Result := EXPT(Base, Exponent); (* 3^4 → 81 *)
결과 :
- Result = 81
✅ SQRT (제곱근, Square Root)
X의 제곱근을 계산하는 함수
VAR
Value : REAL := 16.0;
Result : REAL;
END_VAR
Result := SQRT(Value); (* √16 → 4 *)
결과 :
- Result = 4
6️⃣ Logarithmic Operators (지수 함수)
Logarithmic Operators 는 EXP, LN, LOG 이 있다.
✅ EXP (자연 지수 함수, Exponential Function)
e(≈2.718)의 거듭제곱을 계산하는 함수
VAR
Value : REAL := 2.0;
Result : REAL;
END_VAR
Result := EXP(Value); (* e^2 ≈ 7.389 *)
결과 :
- Result ≈ 7.389
✅ LN (자연 로그 함수, Natural Logarithm)
자연 로그(ln, loge)를 계산하는 함수
- LN(X): loge(X) 반환 (밑이 e인 로그)
- X는 0보다 커야 함 (X > 0)
VAR
Value : REAL := 7.389;
Result : REAL;
END_VAR
Result := LN(Value); (* ln(7.389) ≈ 2 *)
결과 :
- Result ≈ 2
✅ LOG (상용 로그 함수, Logarithm Base 10)
밑이 10인 로그(log10)를 계산하는 함수
- LOG(X): log10(X) 반환
- X는 0보다 커야 함 (X > 0)
VAR
Value : REAL := 1000.0;
Result : REAL;
END_VAR
Result := LOG(Value); (* log10(1000) = 3 *)
결과 :
- Result = 3
7️⃣ Trigonometric Operators (삼각 함수)
Trigonometric Operators 는 SIN, COS, TAN, ASIN, ACOS, ATAN 이 있다.
PLC에서 각도 연산, 위치 제어, 물리 모델링, 센서 데이터 변환등에 활용된다.
✅ SIN (사인 함수, Sine)
X(라디안)의 사인(Sine) 값을 반환
- X는 라디안(Radians) 단위여야 함 (도(Degrees) 단위가 아님)
- 주기적 움직임(진동, 회전 등)에서 자주 사용됨
VAR
Angle : REAL := 1.5708; (* π/2 라디안 ≈ 90도 *)
Result : REAL;
END_VAR
Result := SIN(Angle); (* sin(π/2) = 1 *)
결과 :
- Result = 1.0
✅ COS (코사인 함수, Cosine)
X(라디안)의 코사인(Cosine) 값을 반환
- X는 라디안(Radians) 단위여야 함
VAR
Angle : REAL := 3.1416; (* π 라디안 ≈ 180도 *)
Result : REAL;
END_VAR
Result := COS(Angle); (* cos(π) = -1 *)
결과 :
- Result = 3
✅ TAN (탄젠트 함수, Tangent)
X(라디안)의 탄젠트(Tangent) 값을 반환
- X = π/2, 3π/2 등에서는 정의되지 않음 (∞가 됨)
VAR
Angle : REAL := 0.7854; (* π/4 라디안 ≈ 45도 *)
Result : REAL;
END_VAR
Result := TAN(Angle); (* tan(π/4) = 1 *)
결과 :
- Result = 1.0
✅ ASIN (아크사인, Arcsine, 역사인)
사인 값이 X일 때, 원래 각도를 라디안으로 반환
- X의 범위: -1 ≤ X ≤ 1
VAR
Value : REAL := 0.5;
Result : REAL;
END_VAR
Result := ASIN(Value); (* arcsin(0.5) ≈ π/6 ≈ 0.5236 라디안 *)
결과 :
- Result ≈ 0.5236 (≈ 30도)
✅ ACOS (아크코사인, Arccosine, 역코사인)
코사인 값이 X일 때, 원래 각도를 라디안으로 반환
- X의 범위: -1 ≤ X ≤ 1
VAR
Value : REAL := 0.5;
Result : REAL;
END_VAR
Result := ACOS(Value); (* arccos(0.5) ≈ π/3 ≈ 1.047 라디안 *)
결과 :
- Result ≈ 1.047
✅ ATAN (아크탄젠트, Arctangent, 역탄젠트)
탄젠트 값이 X일 때, 원래 각도를 라디안으로 반환
- 모든 실수 X 값에서 사용 가능
VAR
Value : REAL := 1.0;
Result : REAL;
END_VAR
Result := ATAN(Value); (* arctan(1) ≈ π/4 ≈ 0.7854 라디안 *)
결과 :
- Result ≈ 0.7854 (≈ 45도)
8️⃣ Select Operators
Select Operators 는 MIN, MAX, SEL, MUX 이 있다.
✅ MIN (최소값 반환, Minimum)
- MIN(A, B): A와 B 중 작은 값을 반환
- 두 개의 숫자를 비교하여 더 작은 값 선택
VAR
A : INT := 25;
B : INT := 10;
Result : INT;
END_VAR
Result := MIN(A, B); (* 10이 더 작으므로 Result = 10 *)
결과 :
- Result = 10
✅ MAX (최대값 반환, Maximum)
- MAX(A, B): A와 B 중 큰 값을 반환
- 두 개의 숫자를 비교하여 더 큰 값 선택
VAR
A : INT := 25;
B : INT := 10;
Result : INT;
END_VAR
Result := MAX(A, B); (* 25가 더 크므로 Result = 25 *)
결과 :
- Result = 25
✅ SEL (조건에 따라 값 선택, Select)
- SEL(Condition, A, B): 조건(Condition)이 FALSE면 A, TRUE면 B 반환
- IF 문 없이 조건에 따라 값을 선택할 때 유용
VAR
Condition : BOOL := TRUE;
ValueA : INT := 100;
ValueB : INT := 200;
Result : INT;
END_VAR
Result := SEL(Condition, ValueA, ValueB); (* Condition이 TRUE이므로 Result = 200 *)
결과 :
- Result = 200
✅ MUX (멀티플렉서, 다중 입력 선택)
- MUX(Index, Value0, Value1, ..., ValueN): Index 값에 따라 특정 입력을 선택
- 여러 개의 입력 중 Index(순번)에 해당하는 값을 반환
VAR
Index : INT := 2;
Result : INT;
END_VAR
Result := MUX(Index, 10, 20, 30, 40); (* Index = 2 → 세 번째 값 선택 *)
결과 :
- Result = 30
'CODESYS' 카테고리의 다른 글
EPEC CODESYS의 Data Type들과 사용법 2. (0) | 2025.02.06 |
---|---|
EPEC CoDeSys 코드시스 사용법 1. (0) | 2025.02.06 |