====== Modbus RTU Slave Address Mapping ====== 내부 절대 주소(I, Q, D 등)를 아래와 같이 MODBUS 주소 공간에 매핑하였습니다. * **Coil** : Bit 데이터 (I, Q, M 등) * **Holding Register** : Word / Double / Float 데이터 (D, T, C 등) {{ :cubloc2:modbusrtuaddressing:modbusaddressing.png?nolink |}} ===== 주소 체계 : 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 → Coil ''010001'' = ON * 예: ''C5'' 접점 ON → Coil ''011006'' = 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 주소를 요구하기도 합니다. [[..:index|← CUBLOC2 목차로 돌아가기]]