연산식(Expression) 활용
※ 샘플에 사용된 CHG 연산식은 X-SCADA AI 최신 버전에서 사용가능합니다.
X-SCADA AI의 연산식(Expression) 기능을 활용하여 실제 디바이스 장치의 태그 값을 연산 및 가공하여 응용할 수 있습니다.
가상 태그의 연산식 설정에서 다른 태그를 참조하여 구현할 수 있습니다.
연산식을 활용하면 스크립트를 몰라도 간단한 사칙연산부터 Math 함수와 다양한 연산자들을 활용해 데이터를 통계적으로 계산 및 처리할 수 있습니다.
1. 연산식에 활용할 태그 추가하기
1) 연산식에 활용할 여러 태그들을 추가한다.

 
2) 연산식을 설정할 태그를 선택한 뒤 속성(Properties) > 연산식(Expression)을 설정한다.
· 다른 태그를 참조할 때는 #{태그명}을 사용 (자기 자신은 참조 불가능)
· 연산식에 Math 함수나 산술 연산자, 관계 연산자, CHG 연산식 등 사용 가능
 
● X-SCADA 활용 연산식
함수  | 
내용  | 
예시  | 
CHG(태그명)  | 
· 태그 값이 변경(Change)되었는지 확인 · 반환값 : 디지털 형식 (true(값 변경 O)/false(값 변경 X))  | 
CHG(analog_1) == true ? true : false  | 
DST(실태그명)  | 
· 장치에서 값을 읽었는지(받았는지) 확인 · 반환값 : 디지털 형식 (true(값 읽기 X)/false(값 읽기 O))  | 
DST(analog_1) DST(digital_1) DST(string_1)  | 
DVL(실태그명)  | 
· 장치에서 값을 읽은 여부와 관계없이 태그값 반환  | 
DVL(analog_1) DVL(digital_1) DVL(string_1)  | 
DVL(실태그명, XX)  | 
· 장치에서 값을 읽은 경우 태그값 반환, 읽지 못한 경우 XX 반환 ※ XX는 태그값 타입(종류)과 일치해야 함  | 
DVL(analog_1, 100) DVL(digital_1, false) DVL(string_1, "Fail")  | 
DVL(실태그명, XX, YY)  | · 장치에서 값을 읽은 경우 YY 반환, 읽지 못한 경우 XX 반환 · "DST(실태그명) ? XX : YY" 와 동일 ※ XX, YY는 태그값 타입(종류)과 일치해야 함  | DVL(analog_1, 100, 200) DVL(analog_1, false, true) DVL(digital_1, "disconnected", "connected")  | 
● Math 함수
함수  | 
내용  | 
예시  | 
예시결과  | 
Math.random()  | 
0 ~ 1 사이의 난수값  | 
var a = Math.random  | 
0.7564 ···.  | 
Math.PI  | 
원주율  | 
var a = Math.PI  | 
3.14159265 ···.  | 
Math.E  | 
자연상수  | 
var a = Math.E  | 
2.718281828  | 
Math.pow(x,y)  | 
x의 y제곱  | 
var a = Math.pow(2,2)  | 
4  | 
Math.sqrt(x)  | 
제곱근  | 
var a = Math.sqrt(9)  | 
3  | 
Math.exp(x)  | 
거듭제곱  | 
var a = exp(2)  | 
7.389056098  | 
Math.log(x)  | 
자연로그  | 
var a = Math.log(10)  | 
2.302585092  | 
Math.log10(x)  | 
상용로그  | 
var a = Math.log10(10)  | 
1  | 
Math.sin(x)  | 
싸인  | 
var a = Math.sin(10.0)  | 
- 0.5440211108  | 
Math.cos(x)  | 
코싸인  | 
var a = Math.cos(10.0)  | 
- 0.8390715290  | 
Math.tan(x)  | 
탄젠트  | 
var a = Math.tan(10.0)  | 
0.6483608274  | 
Math.min(x,y,...)  | 
인자 중 최소값  | 
var a = Math.max(1,8,4)  | 
8  | 
Math.max(x,y,...)  | 
인자 중 최대값  | 
var a = Math.min(1,8,4)  | 
1  | 
Math.round(x)  | 
가까운 값  | 
var a = Math.round(7.7)  | 
8  | 
Math.abs(x)  | 
무조건 절대 값  | 
var a = Math.abs(-7.7)  | 
7.7  | 
Math.ceil(x)  | 
무조건 올림 값  | 
var a = Math.ceil(7.7)  | 
8  | 
Math.floor(x)  | 
무조건 내림 값  | 
var a = Math.floor(7.7)  | 
7  | 
● 연산자
구분  | 
연산자  | 
내용  | 
산술연산자  | 
+  | 
더하기  | 
산술연산자  | 
-  | 
빼기  | 
산술연산자  | 
*  | 
곱하기  | 
산술연산자  | 
/  | 
나누기  | 
산술연산자  | 
%  | 
나누기(나머지)  | 
관계연산자  | 
a == b  | 
a와 b의 값이 같음  | 
관계연산자  | 
a != b  | 
a와 b의 값이 같지않음  | 
관계연산자  | 
a < b  | 
a가 b보다 작음  | 
관계연산자  | 
a <= b  | 
a가 b보다 작거나 같음  | 
관계연산자  | 
a > b  | 
a가 b보다 큼  | 
관계연산자  | 
a >= b  | 
a가 b보다 크거나 같음 | 
논리연산자 (AND연산자)  | A&&B  | A와 B 모두 참일 때 true 반환  | 
논리연산자 (OR연산자)  | A||B  | A와 B 중 하나라도 참일 때 true 반환  | 
논리연산자 (NOT연산자)  | !A  | A가 참이면 false, 거짓이면 true 반환 (반전)  | 
조건연산자 (삼항연산자)  | 조건 ? 값1 : 값2  | 조건이 참일 때 "값1" 수행, 거짓일 때 "값2" 수행  | 
2. X-SCADA AI Designer를 활용해 화면 작화하기
1) 텍스트(Text), 이미지(Image) 등을 활용해 아래와 같이 화면을 작화한다.

2) 바인딩 태그(Binding Tag), 동작(Actions) > 클릭 – 태그값 설정(Click – Tag Value) 등을 설정하여 태그 값을 모니터링 및 제어하도록 설정한다.
· 자세한 설정은 첨부한 프로젝트 파일(.xix)을 다운로드 받아 X-SCADA AI Designer로 열면 확인 가능

3. X-SCADA AI Viewer로 연산식 동작 확인하기
1) 설정한 프로젝트 저장 후 X-SCADA AI Viewer로 실행하여 연산식이 의도한대로 동작하는지 확인한다.
