HART-IP — 4-20mA + 디지털 통신
HART (Highway Addressable Remote Transducer) 는 4-20mA 아날로그 신호 위에 디지털 정보를 같이 실어 보내는 산업 계측 표준입니다. 이 게이트웨이는 HART 를 이더넷으로 감싼 HART-IP (TCP/UDP) 로 통신합니다.
화학 / 정유 / 발전 / 상하수 등 프로세스 산업 의 압력·유량·온도·레벨 트랜스미터에 가장 많이 쓰입니다.
등록 폼 입력값
| 입력 칸 | 무엇을 적나요 | 예시 |
|---|---|---|
| IP 주소 | HART-IP 게이트웨이 / 멀티플렉서 IP | 192.168.0.110 |
| 포트 | HART-IP 포트 | 5094 (표준) |
| 응답 타임아웃 (request-timeout) | 응답 대기 (ms) | 5000 |
| 폴링 주소 (polling-address) | HART 디바이스 주소 (0~63) | 0 (point-to-point) / 1~15 (멀티드롭) |
하나의 HART-IP 게이트웨이 뒤에 여러 트랜스미터가 멀티드롭으로 묶여 있다면 각 디바이스마다 폴링 주소를 다르게 지정해 별도 연결로 등록하시는 게 가장 깔끔합니다.
태그의 PLC 주소 표기
HART 는 명령 (Command) 으로 값을 가져옵니다. 자주 쓰이는 명령:
| HART 명령 | 의미 |
|---|---|
| Cmd 0 | 디바이스 식별 (제조사/모델/태그 — 메타용) |
| Cmd 1 | 1차 변수 (Primary Variable, PV) — 가장 많이 씀 |
| Cmd 2 | PV 의 mA 값 |
| Cmd 3 | 동적 변수 4종 (PV, SV, TV, QV) 한 번에 |
| Cmd 13 | 디바이스 태그 / 단위 / 상한·하한 |
게이트웨이에서는 cmd:<번호>:<필드> 형식으로 입력합니다.
| 표기 | 의미 |
|---|---|
cmd:1:PV | 1차 변수 (압력·유량 등) |
cmd:3:PV | Cmd 3 응답에서 PV 만 |
cmd:3:SV | 2차 변수 (Secondary Variable) |
cmd:3:TV | 3차 변수 |
cmd:3:QV | 4차 변수 |
cmd:2:CURRENT | 4-20mA 의 실제 mA |
cmd:13:TAG | 디바이스 태그 (문자열) |
cmd:13:UNIT | 단위 코드 |
HART 는 변수 자체 (4-20mA 의 무엇을 의미하는지) 는 디바이스 설정에서 정해집니다. 게이트웨이는 단지 “PV” 를 받아오므로, 그 PV 가 어떤 물리량인지는 트랜스미터의 형식 보조 (Cmd 13 unit) 또는 사용자가 태그 이름으로 명시하시면 됩니다.
데이터 형식 매칭
| HART 의 값 | 데이터 형식 | 형식 보조 |
|---|---|---|
| PV / SV / TV / QV (Float) | Float | REAL |
| mA (Cmd 2) | Float | REAL |
| 디바이스 태그 / 단위명 | String | STR[8] 등 |
| 상태 코드 / Field Device Status | Integer | (비움) |
HART 는 IEEE 754 32-bit 빅엔디언으로 실수를 보냅니다. 게이트웨이가 자동 디코딩하므로 사용자는 REAL 만 명시하시면 됩니다.
쓰기 (Write) 지원
HART 의 쓰기 명령은 위험 (트랜스미터의 레인지 / 단위 / 댐핑 / 영점 을 바꾸는 것) 하므로 신중히 쓰세요.
| 명령 | 의미 |
|---|---|
| Cmd 6 | 폴링 주소 변경 |
| Cmd 17 | 디바이스 메시지 (32 글자) |
| Cmd 18 | 디바이스 태그 / 디스크립터 / 날짜 |
| Cmd 35 | PV 의 상한 / 하한 (레인지) 변경 |
쓰기 표기 예: cmd:18:TAG, 값은 문자열로 보냅니다.
흔한 문제와 해결
| 증상 | 가능한 원인 | 해결 |
|---|---|---|
| “No response from device” | HART 게이트웨이만 응답하고 디바이스 미응답 | 멀티드롭 폴링 주소 확인 (0 vs 1~15) |
| Cmd 1 값이 0 으로 고정 | 트랜스미터가 fail-safe 모드 | 4-20mA 라인 단선 / 단락 점검 |
| “Cmd 3 not supported” | 구형 HART 디바이스 (rev 5 미만) | Cmd 1 만 사용. SV/TV/QV 는 못 씀 |
| 단위 코드가 숫자로 나옴 | HART 단위는 enum (1=°C, 32=Pa, …) | 계산식 / 매핑표로 사람-친화 단위로 변환 |
자주 쓰는 디바이스 별 실제 매핑 예
Rosemount 3051 (압력 트랜스미터)
가장 널리 쓰이는 차압 / 게이지압 트랜스미터. 4-20mA 의 PV 를 압력 (kPa, bar, psi 등) 으로 매핑.
| 태그 이름 | 주소 | 형식 | 비고 |
|---|---|---|---|
| 압력 (PV) | cmd:1:PV | Float | REAL |
| mA | cmd:2:CURRENT | Float | REAL — 라인 점검용 |
| 디바이스 태그 | cmd:13:TAG | String | TT-201 등 |
| 단위 코드 | cmd:13:UNIT | Integer | 1=in H2O, 7=kPa, 13=bar |
| 디바이스 상태 | cmd:48:STATUS | Integer | self-test 결과 |
Endress+Hauser Promass 80 (코리올리 유량계)
| 태그 이름 | 주소 | 형식 | 비고 |
|---|---|---|---|
| 유량 (PV) | cmd:3:PV | Float | kg/h |
| 밀도 (SV) | cmd:3:SV | Float | kg/m³ |
| 온도 (TV) | cmd:3:TV | Float | °C |
| 적산 유량 (QV) | cmd:3:QV | Float | kg |
Yokogawa EJX910A (다변량 트랜스미터)
| 태그 이름 | 주소 | 형식 | 비고 |
|---|---|---|---|
| 차압 | cmd:3:PV | Float | kPa |
| 정압 | cmd:3:SV | Float | kPa abs |
| 공정 온도 | cmd:3:TV | Float | °C |
| 보정 후 유량 | cmd:3:QV | Float | (디바이스 내부 계산) |
자주 쓰는 운영 패턴
패턴 1. 다중 멀티드롭 (한 게이트웨이에 8 트랜스미터)
| 태그 이름 | 주소 | 비고 |
|---|---|---|
| TT-101 PV | cmd:1:PV | (폴링 주소 1 로 별도 연결 등록) |
| TT-102 PV | cmd:1:PV | (폴링 주소 2 로 별도 연결 등록) |
폴링 주소 1~15 마다 PlantPulse 측에 별도 OPC 등록 (host:port 같지만 polling-address 만 다르게).
패턴 2. 단위 자동 표시
cmd:13:UNIT (단위 enum) 을 같이 받아 표시단에서 mapTable(unit) = "kPa" / "bar" / ... 변환. 트랜스미터 단위 변경 시 PlantPulse 등록 수정 없이도 표시 단위 자동 추적.
패턴 3. 라인 단선 검출
cmd:2:CURRENT (mA) 가 4 미만 또는 20 초과면 fail-safe 또는 단선 의심. 알람 룰에 추가.
다음 단계
- 태그 등록 의 [데이터 형식] / [형식 보조] 매칭표
- 고급 — REST API 의 HART-IP 자동화 예제