목차
Modbus RTU Slave Address Mapping
내부 절대 주소(I, Q, D 등)를 아래와 같이 MODBUS 주소 공간에 매핑하였습니다.
- Coil : Bit 데이터 (I, Q, M 등)
- Holding Register : Word / Double / Float 데이터 (D, T, C 등)
주소 체계 : 0-base와 1-base
- 0-base (0부터 시작) : 주로 내부 주소용으로 쓰입니다. 반드시 펑션코드와 같이 쓰여야 정확한 억세스 위치를 알 수 있습니다.
- 1-base (1부터 시작) : HMI, SCADA 등에서는 주로 1-base (00001, 40001 등)로 표시됩니다. 펑션코드없이 주소만으로 메모리 영역을 구분할 수 있습니다.
예 (1-base 기준):
- 00001 → Coil (디지털 입출력)
- 10001 → Discrete Input (디지털 입력)
- 30001 → Input Register (아날로그 입력값)
- 40001 → Holding Register (일반 데이터 레지스터)
즉, 주소의 앞자리 숫자만 보고도 어떤 메모리 영역인지 바로 구분할 수 있습니다.
이중 CUBLOC2에서는 Coil과 Holding Register만 사용합니다.
- 00001 → Coil (디지털 입출력)
- 40001 → Holding Register (일반 데이터 레지스터)
Coil (Bit 영역)
CUBLOC2의 비트 데이터(I, Q, M 등)는 Modbus Coil 주소로 매핑됩니다. 타이머(T), 카운터(C)는 내부적으로 32bit 데이터이지만, 접점으로 사용할 경우 완료 상태(Done Bit)가 Coil 영역에 별도 매핑됩니다.
| 주소 (1-base) | 내부 주소 (0-base) | 영역 | 설명 |
|---|---|---|---|
| 000001 ~ 000016 | 0 ~ 15 | I | Physical Input (Read Only) |
| 000017 ~ 000032 | 16 ~ 31 | Q | Physical Output |
| 000101 ~ 000228 | 100 ~ 227 | S | Special Relay (Read Only) |
| 001001 ~ 001731 | 1000 ~ 1731 | X | Expansion Input (Read Only) |
| 002001 ~ 002731 | 2000 ~ 2731 | Y | Expansion Output |
| 004001 ~ 006048 | 4000 ~ 6047 | M | Internal Relay |
| 007001 ~ 009048 | 7000 ~ 9047 | R | Retain Bit (Read Only) |
| 010001 ~ 011000 | 10000 ~ 10999 | T | Timer Done Bit |
| 011001 ~ 012000 | 11000 ~ 11999 | C | Counter Done Bit |
- I, X, R, S 영역은 읽기 전용(Read Only) 입니다.
- T, C 영역은 내부 32bit 타이머/카운터의 완료 상태(Contact 상태) 를 나타냅니다.
- 예:
T0접점 ON → Coil010001= ON - 예:
C5접점 ON → Coil011006= ON
Holding Register (Word 영역)
모든 Word 및 32bit 데이터는 Holding Register(4xxxx)에 매핑되며, 5~6 digit 표기로 통일합니다.
| 주소 (1-base) | 내부 주소 (0-base) | 영역 | 타입 | 설명 |
|---|---|---|---|---|
| 400001 ~ 408000 | 0 ~ 7999 | D | 16bit | 일반 데이터 |
| 409001 ~ 409100 | 9000 ~ 9099 | SD | 16bit | 시스템 데이터 |
| 410001 ~ 412000 | 10000 ~ 11999 | T | 32bit | 타이머 현재값 |
| 415001 ~ 417000 | 15000 ~ 16999 | C | 32bit | 카운터 현재값 |
| 420001 ~ 436000 | 20000 ~ 35999 | DD | 32bit | 더블워드 |
| 440001 ~ 456000 | 40000 ~ 55999 | DF | Float | 실수 데이터 |
- SD (시스템 데이터) 영역은 읽기 전용(Read Only) 입니다.
- T, C 영역은 현재값(Current Value)을 의미하며, 접점 상태는 Coil 영역의 T/C 주소를 사용합니다.
Retain 영역 (정전시 유지)
Retain 영역(RD, RDD, RDF)은 Modbus에서 읽기 전용(Read Only) 입니다.
| 주소 (1-base) | 내부 주소 (0-base) | 영역 | 타입 | 설명 |
|---|---|---|---|---|
| 460001 ~ 460100 | 60000 ~ 60099 | RD | 16bit | Retain (Read Only) |
| 460301 ~ 460500 | 60300 ~ 60499 | RDD | 32bit | Retain Double (Read Only) |
| 460501 ~ 460700 | 60500 ~ 60699 | RDF | Float | Retain Float (Read Only) |
32bit 데이터 표현
32bit 데이터는 2개의 Holding Register를 사용합니다.
하위 워드 (Low Word) → 낮은 주소 상위 워드 (High Word) → 다음 주소
예:
DD0 = [420001, 420002]
주의 사항 : HMI(또는 SCADA)는 대부분 1-base 주소를 사용하지만, 일부 장비나 설정에 따라 0-base 주소를 요구하기도 합니다.
