M-Bus (미터링)
M-Bus (Meter-Bus) 는 EN 13757 으로 표준화된 유틸리티 미터링 전용 통신 규약입니다. 열량계 / 가스 미터 / 전력량계 / 수도 미터가 주력 시장입니다.
게이트웨이의 M-Bus 드라이버는 M-Bus over TCP (M-Bus master 게이트웨이를 통한 wireless 또는 wired 미터에서 TCP 로 변환된 형태) 를 지원합니다.
등록 폼 입력값
| 입력 칸 | 무엇을 적나요 | 예시 |
|---|---|---|
| IP 주소 | M-Bus 게이트웨이 IP | 192.168.0.150 |
| 포트 | M-Bus TCP 포트 | 10001 (Relay / Sentec / ETM 류 제조사 표준) |
| 보드레이트 (baudrate) | 게이트웨이 ↔ 미터 | 2400 (표준) / 9600 |
| 응답 타임아웃 (request-timeout) | 미터 응답 대기 (ms) | 5000 |
M-Bus 한 라인에는 최대 250 개 미터를 달 수 있습니다. 게이트웨이는 한 “연결” 에 여러 미터를 동시 등록할 수 있도록 미터 단위 주소 (primary 또는 secondary) 를 태그 측 표기에 포함합니다.
태그의 PLC 주소 표기
M-Bus 는 미터마다 다양한 “레코드” (instantaneous value, 누적값, 단위 등) 를 가집니다. 표기는 <미터선택>:<레코드> 두 부분으로 나뉩니다.
미터 선택
| 표기 | 의미 |
|---|---|
addr:5 | Primary address 5 |
select:12345678:KAM:01:04 | Secondary 선택 — <id>:<mfg>:<ver>:<med> |
select:12345678 | Secondary id 만 (mfg/ver/med 는 와일드카드 FF) |
mfg 는 3 자리 제조사 코드 (예: KAM = Kamstrup), ver 는 펌웨어 버전, med 는 미디엄 (1=Oil, 4=Heat, 7=Water 등).
레코드 (data block index)
미터의 응답에는 여러 데이터 블록 (DIB/VIB) 이 있고 순서대로 0, 1, 2, ... 인덱스가 붙습니다. 게이트웨이는 인덱스 + 서브필드 표기로 노출합니다.
| 표기 | 의미 |
|---|---|
1:0 | 데이터 블록 1 의 0 번 필드 (대개 “현재 값”) |
1:unit | 데이터 블록 1 의 단위 (문자열) |
1:tariff | 데이터 블록 1 의 tariff (요금 구분) |
1:storage | 데이터 블록 1 의 storage number |
전체 표기 예: addr:5:1:0 — primary 5 미터의 데이터 블록 1 의 값.
또는: select:12345678:KAM:01:04:3:0 — Kamstrup 열량계의 데이터 블록 3 의 값.
데이터 형식 매칭
| M-Bus 값 | 데이터 형식 | 형식 보조 |
|---|---|---|
| 누적값 / 측정값 (실수) | Float | REAL |
| 정수형 카운터 | Integer | DW (32-bit) 또는 (비움) |
| 단위 / 제조사 코드 | String | STR[8] |
| Tariff / Storage 번호 | Integer | (비움) |
M-Bus 미터는 BCD / 32-bit 정수 / 64-bit 정수 / IEEE 실수 등 다양한 인코딩을 섞어 씁니다. 드라이버가 DIB / VIB 헤더로 자동 디코딩 후 “물리값” 으로 노출하므로 대부분 Float : REAL 로 받으시면 됩니다.
흔한 문제와 해결
| 증상 / 메시지 | 가능한 원인 | 해결 |
|---|---|---|
| “Address not responding” | primary 가 미사용 / 충돌 | 게이트웨이 측 “M-Bus scan” 으로 실제 응답하는 primary 확인 |
| “Invalid secondary” | secondary 4 필드 (id/mfg/ver/med) 중 하나 오타 | 미터 라벨의 8자리 시리얼과 라벨에 적힌 mfg 3 글자 코드 재확인 |
| 값이 너무 큼 / 작음 (1000 배) | scaling 오류 | M-Bus 는 보통 자동 scaling. 그래도 이상하면 계산식 으로 보정 |
| “Timeout” 자주 발생 | 보드레이트 불일치 | 게이트웨이 ↔ 미터 보드레이트 통일 (대부분 2400) |
| 데이터 블록 번호 불명확 | 미터마다 순서가 다름 | 게이트웨이의 “M-Bus telegram view” 로 raw 응답을 보고 인덱스 매핑 |
한 라인에 미터가 5~10 개 이내라면 primary 가 단순합니다. 100+ 미터를 운영하거나 primary 가 동적으로 바뀌는 시스템이라면 secondary (시리얼 기반) 가 안정적입니다.
자주 쓰는 예시
열량계 (heat meter) 한 대의 표준 등록:
| 태그 이름 | 주소 | 데이터 형식 | 형식 보조 |
|---|---|---|---|
| 누적 열량 (kWh) | addr:5:1:0 | Float | REAL |
| 누적 유량 (m³) | addr:5:2:0 | Float | REAL |
| 순시 출력 (kW) | addr:5:3:0 | Float | REAL |
| 공급 온도 (°C) | addr:5:4:0 | Float | REAL |
| 환수 온도 (°C) | addr:5:5:0 | Float | REAL |
| 미터 일련번호 | addr:5:0:id | String | STR[8] |
더 자세한 예제 / 자동화 등록
고급 — REST API 의 M-Bus 예제를 참고하세요.