Modbus Data Model & Function Code
Modbus는 Client(Master)가 요청하고 Server(Slave)가 응답하는 단순한 구조의 산업용 프로토콜 이다.
장비 안의 데이터는 4가지 영역으로 나뉘어 있고 어떤 영역을 읽을지 쓸지는 Function Code로 정한다
1. 데이터 모델

- Coil : 크기 - 1 bit , 권한 - Read / Write , 주소 (관례) - 0xxxx (00001~) , 예시 - 모터 기동 / 정지 출력
- Discrete Input : 크기 - 1 bit , 권한 - Read , 주소 (관례) - 1xxxx (10001~) , 예시 - 리밋 스위치 , 비상정지 버튼 상태
- Input Register : 크기 - 16 bit , 권한 - Read , 주소 (관례) - 3xxxx (30001~) , 예시 - 온도 , 압력 측정값
- Holding Register : 크기 - 16 bit , 권한 - Read / Write , 주소 (관례) - 4xxxx (40001~) , 예시 - 설정값(Set Point)
A. 4개 영역이 장비 안에서 진짜 따로 있는지 , 같은 메모리를 나눠쓰는지는 제조사 마다 다르다
[40001 같은 주소는 사람이 보기편하게 붙인 관례이고 실제 Packet에는 0부터 시작하는 Offset이 들어간다. 40001 → 0x0000 , 40010 → 0x0009]
[이 1 차이 때문에 값이 한칸씩 밀려서 읽히는 실수가 진짜 자주 나온다. 매뉴얼 에서 주소가 1부터인지 0부터인지 꼭 확인해야 된다]
2. Function Code
- Code 01 : Hex - 0x01 , 이름 - Read Coils , 대상 - Coil
- Code 02 : Hex - 0x02 , 이름 - Read Discrete Inputs , 대상 - Discrete Input
- Code 03 : Hex - 0x03 , 이름 - Read Holding Registers , 대상 - Holding Register
- Code 04 : Hex - 0x04 , 이름 - Read Input Registers , 대상 - Input Register
- Code 05 : Hex - 0x05 , 이름 - Write Single Coil , 대상 - Coil [ON = 0xFF00 , OFF = 0x0000]
- Code 06 : Hex - 0x06 , 이름 - Write Single Register , 대상 - Holding Register
- Code 15 : Hex - 0x0F , 이름 - Write Multiple Coils , 대상 - Coil
- Code 16 : Hex - 0x10 , 이름 - Write Multiple Registers , 대상 - Holding Register
A. 한번에 읽을수 있는 양 : FC 03 , 04는 최대 125개 Register , FC 01 , 02는 최대 2000개 Coil
B. 한번에 쓸수 있는 양 : FC 16은 최대 123개 Register , FC 15는 최대 1968개 Coil
[읽기는 01 ~ 04 , 쓰기는 05 , 06 , 15 , 16 이라서 산업용 Firewall에서 Function Code로 쓰기만 막는 설정도 할수 있다.]
3. Exception 응답
요청을 처리 못하면 Function Code에 0x80을 더해서 응답하고 뒤에 Exception Code 1 Byte가 붙는다. [예 : 0x03 → 0x83]
A. 01 Illegal Function : 장비가 지원하지 않는 Function Code
B. 02 Illegal Data Address : 없는 주소
C. 03 Illegal Data Value : 잘못된 값 (개수 초과 등)
D. 04 Server Device Failure : 장비 내부 오류
[현장에서 02가 뜨면 거의 주소 Offset 문제다]
'OT·산업보안 > 프로토콜·보안' 카테고리의 다른 글
| 모드버스 TCP(Modbus TCP) 패킷 구조 와 보안 취약점 (0) | 2026.10.29 |
|---|---|
| 모드버스(Modbus) 프로토콜 정의 및 통신 방식 (0) | 2026.10.23 |
