계산식(공식) 적용
영문 명칭으로 포뮬라 (Formula) 라고 부르기도 합니다.
PLC 가 보내주는 raw 값을 그대로 쓰지 않고 단위 변환 / 영점 보정 / 스케일 조정 을 하고 싶을 때 사용합니다.
흔한 사례:
- 압력 센서가 정수
1638을 보내는데 실제로는163.8 kPa인 경우 →${VALUE}*0.1 - 섭씨 → 화씨 변환 →
${VALUE}*1.8+32 - mV → V 변환 →
${VALUE}/1000
어디에 입력하나요
태그 등록 / 수정 폼의 [계산식] 칸에 수식을 적습니다. 등록 즉시 다음 수집 주기에 변환된 값이 화면에 보입니다.
- 비워두면 raw 값 그대로 사용됩니다.
- 한 번 입력해두면 이후 매 수집마다 자동 적용됩니다.
기본 사용법
${VALUE} 가 PLC 에서 막 읽어온 raw 값을 의미합니다.
| 하고 싶은 일 | 계산식 | 입력 → 출력 |
|---|---|---|
| 그대로 쓰기 | (비움) | 100 → 100 |
| 10 배로 키우기 | ${VALUE}*10 | 5 → 50 |
| 10 분의 1 로 줄이기 (정수→소수) | ${VALUE}*0.1 | 1638 → 163.8 |
| 1000 으로 나누기 (mV → V) | ${VALUE}/1000 | 3300 → 3.3 |
| 더하기 (섭씨 → 켈빈) | ${VALUE}+273.15 | 25 → 298.15 |
| 빼기 (영점 보정) | ${VALUE}-100 | 1024 → 924 |
| 화씨 변환 | ${VALUE}*1.8+32 | 25 → 77.0 |
| 제곱 | ${VALUE}*${VALUE} 또는 ${VALUE}^2 | 5 → 25 |
| 제곱근 | sqrt(${VALUE}) | 144 → 12.0 |
| 분당회전수 → Hz | ${VALUE}/60 | 1800 → 30.0 |
다른 태그의 값을 참조
다른 태그의 마지막 값을 ${태그ID} 형식으로 가져올 수 있습니다. 영점값을 별도 태그로 관리하거나, 보정 계수를 따로 두는 패턴에서 편리합니다.
| 하고 싶은 일 | 계산식 |
|---|---|
| 다른 태그를 영점으로 빼기 | ${VALUE}-${TAG_ZERO} |
| 두 태그 합산 | ${VALUE}+${TAG_OFFSET} |
| 보정 (gain × x + offset) | ${VALUE}*${TAG_GAIN}+${TAG_OFFSET} |
여기서 TAG_ZERO, TAG_OFFSET, TAG_GAIN 은 다른 태그의 태그 ID 입니다. 미리 다른 태그로 등록되어 있어야 합니다.
${TAG_ZERO} 라고 적었는데 그 태그가 한 번도 수집된 적 없으면 계산이 실패합니다 (해당 태그의 상태에 “계산식 변수값 없음” 류 에러). 게이트웨이가 한 번 돌고 나면 자동으로 정상화되니 잠시 기다리시면 됩니다.
사용 가능한 함수
산수 계산뿐 아니라 자주 쓰는 수학 함수도 사용할 수 있습니다.
| 종류 | 표기 | 예시 |
|---|---|---|
| 사칙연산 | +, -, *, / | ${VALUE}+1 |
| 거듭제곱 | ^ | ${VALUE}^2 (= 제곱) |
| 괄호 | (, ) | (${VALUE}+10)*2 |
| 제곱근 | sqrt(...) | sqrt(${VALUE}) |
| 세제곱근 | cbrt(...) | cbrt(${VALUE}) |
| 자연로그 | ln(...) | ln(${VALUE}) |
| 상용로그 (밑10) | log(...) | log(${VALUE}) |
| 사인/코사인/탄젠트 (라디안) | sin, cos, tan | sin(${VALUE}) |
| 역삼각 | asin, acos, atan | atan(${VALUE}) |
| 쌍곡 | sinh, cosh, tanh | tanh(${VALUE}) |
| 상수 | pi, e | ${VALUE}*pi/180 (각도 → 라디안) |
각도(degree) 입력을 라디안으로 변환하려면 *pi/180 을 곱하세요. 예: sin(${VALUE}*pi/180).
적용되는 데이터 형식
계산식은 숫자형 (Float, Double, Integer, Long) 태그에만 적용됩니다.
String,Boolean태그에는 계산식이 무시되고 raw 값 그대로 나옵니다.- 보정 후 결과가 정수 범위를 넘는다면
Float또는Double로 데이터 형식을 바꿔주세요.
실수하기 쉬운 점
| 잘못된 패턴 | 왜 문제인가요 | 올바른 패턴 |
|---|---|---|
VALUE * 0.1 | ${...} 표기 빠짐 | ${VALUE}*0.1 |
${VALUE}*0,1 | 콤마 사용 (한글 키보드 실수) | ${VALUE}*0.1 (점 사용) |
if(${VALUE}>0, ...) | 조건문 미지원 | 조건이 필요하면 별도 시스템에서 처리 |
${VALUE} & 0xFF | 비트 연산 미지원 | 산술로 가능한 형태로 변경 |
자주 묻는 질문
Q. 계산식이 적용되었는지 어떻게 확인하나요?
태그의 [현재 값] 칸에 표시되는 값이 변환된 값 입니다. raw 값을 보고 싶다면 같은 주소를 계산식 없이 다른 태그로 따로 등록해 비교하세요.
Q. 단위 변환을 두 가지 (예: 섭씨와 화씨) 동시에 보내고 싶어요
같은 PLC 주소를 가리키는 태그를 두 개 만들고 한쪽은 그대로, 다른 한쪽은 ${VALUE}*1.8+32 같은 변환식을 넣어주시면 됩니다.
Q. 결과가 NaN / Infinity 으로 나와요
- 0 으로 나누는 경우 →
Infinity - 음수의 제곱근 →
NaN
PLC 의 raw 값 범위가 예상과 다를 가능성이 큽니다. 계산식 없이 raw 값을 먼저 확인해보세요.
Q. 더 복잡한 가공이 필요해요 (조건 분기 / 다중 변수 / 외부 데이터)
계산식만으로는 어렵습니다. PlantPulse 플랫폼의 후처리 단 또는 별도 데이터 가공 도구 (Node-RED 등) 를 함께 사용하시는 것을 권장드립니다. 애플리케이션 관리 페이지의 Node-RED 항목 참고.
전체 함수 / 변수 레퍼런스가 필요하다면 고급 — Formula 레퍼런스 페이지를 참고하세요.