Modbus 함수 코드 레퍼런스

자주 쓰는 Modbus RTU function code, 요청 형식, exception response를 한 페이지에서 검색하고 비교할 수 있습니다.

함수/예외 코드 조회

function code, HEX 값, 대상 객체, exception 이름을 검색하세요. 대소문자/공백/기호를 무시하고 필터링합니다.

빠른 필터
- -

Modbus 함수 코드 표

코드 HEX 이름 대상 접근 일반 요청 사용 예
010x01Read CoilsCoilsReadstart address + quantity디지털 출력(코일) 상태 읽기
020x02Read Discrete InputsDiscrete inputsReadstart address + quantity디지털 입력 상태 읽기
030x03Read Holding RegistersHolding registersReadstart address + quantity쓰기 가능한 holding register 읽기
040x04Read Input RegistersInput registersReadstart address + quantity입력 register(읽기 전용 값) 읽기
050x05Write Single CoilCoilWriteaddress + value코일 1개 쓰기
060x06Write Single RegisterHolding registerWriteaddress + valueholding register 1개 쓰기
070x07Read Exception StatusStatus byteReadfunction only비교적 드문 serial line 상태 조회
080x08DiagnosticsDiagnosticsRead/Writesub-function + data진단/루프백 처리
110x0BGet Comm Event CounterCounterReadfunction onlyserial line 이벤트 카운터 조회
120x0CGet Comm Event LogEvent logReadfunction onlyserial line 이벤트 로그 조회
150x0FWrite Multiple CoilsCoilsWritestart address + quantity + byte count + data여러 코일 쓰기
160x10Write Multiple RegistersHolding registersWritestart address + quantity + byte count + data여러 holding register 쓰기
170x11Report Server IDServer identificationReadfunction only레거시 serial line 장치 식별
200x14Read File RecordFile recordReadsub-request reference + length드물게 쓰는 파일 레코드 읽기
210x15Write File RecordFile recordWritesub-request reference + data드물게 쓰는 파일 레코드 쓰기
220x16Mask Write RegisterHolding registerWriteaddress + AND mask + OR mask비트 마스크 기반 단일 레지스터 갱신
230x17Read/Write Multiple RegistersHolding registersRead/Writeread range + write range읽기/쓰기를 한 트랜잭션으로 결합
240x18Read FIFO QueueFIFO queueReadFIFO pointer address서버 FIFO 큐 데이터 읽기
430x2BEncapsulated Interface TransportMEI / device identificationReadMEI type + data장치 식별/MEI 전송

Modbus 예외 코드 표

코드 HEX 이름 의미 흔한 원인
010x01Illegal Function장치가 해당 function code를 지원하지 않음펌웨어가 지원하지 않는 function code 사용
020x02Illegal Data Address요청 주소가 유효 범위를 벗어남레지스터 맵 기준 주소/오프셋/객체 타입 불일치
030x03Illegal Data Value요청 값 또는 개수가 허용 범위를 벗어남수량/값 제한 위반
040x04Server Device Failure요청 처리 중 장치 내부 오류 발생장치 내부 오류 또는 일시적 고장
050x05Acknowledge요청은 수락되었지만 처리 시간이 더 필요함시간이 오래 걸리는 처리 명령
060x06Server Device Busy장치가 바빠서 지금 처리할 수 없음장치가 다른 작업 처리 중
080x08Memory Parity Error메모리 패리티/무결성 오류장치 메모리 무결성 문제
100x0AGateway Path Unavailable게이트웨이 경로 사용 불가게이트웨이 라우팅/네트워크 세그먼트 문제
110x0BGateway Target Device Failed to Respond게이트웨이가 대상 장치 응답을 받지 못함대상 서버 오프라인 또는 응답 경로 문제

Modbus function code란?

Modbus function code는 PDU의 1바이트 연산 코드로, 서버가 어떤 객체를 어떤 방식으로 처리할지 지정합니다.

자주 쓰는 Modbus RTU 함수 코드

현장 장비에서는 01, 02, 03, 04, 05, 06, 15, 16 함수가 가장 많이 사용됩니다. 코일/레지스터 읽기·쓰기를 처리합니다.

Modbus exception code

요청 처리 실패 시 Modbus는 exception response를 반환하며, 예외 코드로 실패 원인을 표현합니다.

예외 응답: function code + 0x80

RTU 예외 응답에서는 원래 function code에 0x80을 더한 값이 반환됩니다. 예: 0x03 요청 오류 응답은 0x83.

Function 03과 04 차이

Function 03은 holding register를, Function 04는 input register를 읽습니다. 유효 주소는 장치 레지스터 맵을 따릅니다.

Function 06과 16 차이

Function 06은 단일 holding register를 쓰고, Function 16은 연속된 여러 register를 한 번에 씁니다.

Modbus RTU 요청/예외 프레임 예시

Function 03 예시

요청 프레임

01 03 00 00 00 02 C4 0B

01은 서버/슬레이브 주소, 03은 Read Holding Registers, 0000은 시작 주소, 0002는 개수, C4 0B는 CRC low/high 바이트입니다.

Function 06 예시

요청 프레임

01 06 00 01 00 64 D9 E1

레지스터 0x0001에 값 0x0064를 씁니다. D9 E1은 CRC low/high 바이트입니다.

예외 응답 예시

응답 프레임

01 83 02 C0 F1

0x83은 function 0x03의 예외 응답이며, 0x02는 Illegal Data Address를 의미합니다.

FAQ

Modbus function code 03은 무엇인가요?

Function 03은 서버/슬레이브의 holding register를 읽습니다.

Modbus function 03과 04는 어떻게 다른가요?

Function 03은 holding register, Function 04는 input register를 읽습니다. 실제 주소는 장치 문서를 확인해야 합니다.

Modbus function code 16은 무엇인가요?

Function 16(0x10)은 여러 holding register를 한 요청으로 씁니다.

Exception code 02는 무엇을 의미하나요?

Exception code 02는 Illegal Data Address로, 주로 잘못된 레지스터 범위를 요청했을 때 발생합니다.

Function 0x03의 예외 응답이 왜 0x83인가요?

Modbus 예외 응답은 원래 function code의 bit7을 세팅합니다. 그래서 0x03은 0x83이 됩니다.

관련 도구