Modbus TCP
Modbus 는 가장 오래되고 가장 널리 쓰이는 산업 통신 규약입니다. 거의 모든 계측기 / 인버터 / 일반 산업 장비가 Modbus 를 지원합니다.
이 게이트웨이는 Modbus TCP (이더넷) 와 Modbus UDP 를 지원합니다. 시리얼 (RS-485) 만 있는 장비는 Modbus 게이트웨이 (RS-485 → 이더넷) 를 거쳐야 합니다.
등록 폼 입력값
| 입력 칸 | 무엇을 적나요 | 예시 |
|---|---|---|
| IP 주소 | Modbus 슬레이브의 IP | 192.168.0.50 |
| 포트 | Modbus 포트 | 502 (표준) |
| 응답 타임아웃 (request-timeout) | 슬레이브 응답을 기다릴 최대 시간 (ms) | 5000 (5초) |
Modbus 는 사용자 / 비밀번호 개념이 없습니다. IP 가 닿으면 누구나 값을 읽을 수 있습니다.
태그의 PLC 주소 표기
Modbus 는 메모리 영역별로 다음 4 가지 종류가 있습니다.
| 영역 | 표기 시작 | 의미 |
|---|---|---|
| Holding Register | holding-register:N | 16-bit, 읽기/쓰기 — 가장 흔함 |
| Input Register | input-register:N | 16-bit, 읽기 전용 |
| Coil | coil:N | 1 비트, 읽기/쓰기 |
| Discrete Input | discrete-input:N | 1 비트, 읽기 전용 |
N 은 슬레이브 매뉴얼에 적힌 주소 번호입니다 (보통 1 부터 시작).
자료형까지 명시한 표기
같은 메모리 영역이라도 16-bit / 32-bit / 실수 / 문자열 등으로 해석이 다를 수 있어 자료형을 함께 적어줄 수 있습니다.
| 표기 | 의미 |
|---|---|
holding-register:1 | 그냥 16-bit 정수 (signed) |
holding-register:1:UINT | 16-bit 부호없는 정수 |
holding-register:1:DINT | 32-bit 정수 (메모리 두 칸 차지) |
holding-register:1:REAL | 32-bit 실수 (메모리 두 칸 차지) |
holding-register:1:LREAL | 64-bit 실수 (메모리 네 칸 차지) |
holding-register:100:STRING[10] | 100~109 의 ASCII 문자열 |
coil:1 | 코일 1번 (1 비트) |
자료형을 명시하지 않으면 16-bit 정수로 해석됩니다. 32-bit 이상 값이면 반드시 명시하세요.
데이터 형식 / 형식 보조
태그 등록 의 [데이터 형식] 과 [형식 보조] 칸은 다음과 같이 매칭하시면 편합니다.
| PLC 의 값 | 데이터 형식 | 형식 보조 | PLC 주소 예 |
|---|---|---|---|
| 코일 / 비트 입력 | Boolean | (비움) | coil:1 또는 discrete-input:1 |
| 16-bit 정수 | Integer | (비움) | holding-register:1 |
| 16-bit 부호없는 정수 | Integer | UI | holding-register:1:UINT |
| 32-bit 정수 | Integer | DW | holding-register:1:DINT |
| 32-bit 실수 (가장 흔함) | Float | REAL | holding-register:1:REAL |
| 64-bit 실수 | Double | LREAL | holding-register:1:LREAL |
| 문자열 N 글자 | String | STR[N] | holding-register:10:STRING[N] |
흔한 문제와 해결
| 증상 / 메시지 | 가능한 원인 | 해결 |
|---|---|---|
| “Read timeout” / 응답이 늦음 | 슬레이브 응답 지연, 케이블 / 방화벽 / 포트(502) 막힘 | ping, telnet <ip> 502 으로 도달성 확인. 응답 타임아웃을 늘려 시도 |
| 잘못된 주소 표기 (Invalid address) | 형식 오타 | holding-register:1 처럼 콜론 정확히 |
값이 항상 0 만 나옴 | 영역 종류 mismatch (holding 인데 input 으로 읽음 등) | 슬레이브 매뉴얼에서 “FC 03 / 04 / 01 / 02” 중 어느 것인지 확인 |
| 32-bit 실수가 깨져서 나옴 | 슬레이브의 byte / word 순서가 다름 | 슬레이브가 little-endian 이면 자료형을 :UDINT_LSWORD_FIRST 등으로 변경 |
byte 순서 문제는 슬레이브 제조사마다 달라 매뉴얼을 보거나 다른 도구 (Modbus Poll 등) 로 비교 검증하시는 게 가장 빠릅니다.
시뮬레이터로 시험해보기
PLC 가 없어도 Modbus 시뮬레이터로 동작 검증을 할 수 있습니다.
- [연결 추가] 시 카드 목록에서 시뮬레이터 → Modbus 시뮬레이터 를 선택하면 게이트웨이가 자동으로 시뮬레이터 프로세스를 띄우고 연결합니다.
- 별도의 외부 도구 없이 곧바로 holding register 에 가짜 값이 들어옵니다.
더 자세한 예제 / 자동화 등록
고급 — REST API 의 Modbus 예제를 참고하세요.