모드버스 기능 코드와 프레임 형식 정리
모드버스 마스터가 보내고 받는 내용을 한 페이지로 정리했습니다. 각 기능은 무료 온라인 도구 WebModbus(웹 모드버스)로 실제 장치에서 바로 시험할 수 있고, 소개는 모드버스 온라인에 있습니다.
데이터 모델
- 코일: 1비트, 읽기/쓰기 (읽기 01, 쓰기 05·15).
- 디스크리트 입력: 1비트, 읽기 전용 (02).
- 홀딩 레지스터: 16비트, 읽기/쓰기 (읽기 03, 쓰기 06·16·22·23).
- 입력 레지스터: 16비트, 읽기 전용 (04).
통신 프레임의 주소는 0부터 시작합니다. 장치 매뉴얼은 00001, 10001, 30001, 40001처럼 1부터 센 표기를 쓰는 경우가 많아서, 레지스터 40001은 요청에서 주소 0입니다.
기능 코드
- 01 (0x01) 코일 읽기: 한 번에 최대 2000개.
- 02 (0x02) 디스크리트 입력 읽기: 최대 2000개.
- 03 (0x03) 홀딩 레지스터 읽기: 최대 125개.
- 04 (0x04) 입력 레지스터 읽기: 최대 125개.
- 05 (0x05) 코일 하나 쓰기:
0xFF00이 ON,0x0000이 OFF. - 06 (0x06) 레지스터 하나 쓰기: 16비트 값 하나.
- 07 (0x07) 예외 상태 읽기: 시리얼 전용.
- 08 (0x08) 진단: 시리얼 전용. 서브 기능 0은 보낸 데이터를 그대로 돌려받는 루프백입니다.
- 11 (0x0B) 통신 이벤트 카운터, 12 (0x0C) 통신 이벤트 로그: 시리얼 전용.
- 15 (0x0F) 코일 여러 개 쓰기: 최대 1968개.
- 16 (0x10) 레지스터 여러 개 쓰기: 최대 123개.
- 17 (0x11) 서버 ID 보고: 시리얼 전용.
- 22 (0x16) 레지스터 마스크 쓰기: 결과 = (현재 값 AND 및 마스크) OR (또는 마스크 AND NOT 및 마스크).
- 23 (0x17) 레지스터 읽기/쓰기: 한 번의 요청에서 쓰기를 먼저, 읽기를 나중에 합니다.
- 43 / 14 (0x2B / 0x0E) 장치 식별 읽기: 제조사 이름, 제품 코드, 버전.
예외 코드
요청을 처리하지 못한 장치는 기능 코드에 0x80을 더한 값과 예외 코드 하나로 응답합니다.
- 01 지원하지 않는 기능.
- 02 잘못된 데이터 주소: 주소나 범위가 올바르지 않습니다. 매뉴얼 주소가 1부터인지 먼저 확인해 보세요.
- 03 잘못된 데이터 값: 값이나 개수가 범위를 벗어났습니다.
- 04 서버 장치 오류: 처리 중 장치에 오류가 생겼습니다.
- 06 서버 장치 사용 중: 잠시 뒤에 다시 시도합니다.
- 0A / 0B 게이트웨이 경로 사용 불가 / 대상 장치 응답 없음: 게이트웨이 뒤의 장치에서 나타납니다.
프레임 형식
- RTU: 바이너리,
슬레이브 ID · 기능 · 데이터 · CRC-16(낮은 바이트가 먼저, 다항식0xA001). 프레임 사이에 3.5문자 시간의 정적이 필요합니다. - ASCII:
:로 시작하고 16진수 문자와 LRC 체크섬이 이어지며 CR LF로 끝납니다. - TCP: 7바이트 MBAP 헤더(트랜잭션 ID, 프로토콜 ID 0, 길이, 유닛 ID) 뒤에 기능과 데이터가 옵니다. CRC가 없고 기본 포트는 502입니다.
직접 해 보기
WebModbus를 열고 요청 창을 만든 뒤 F8로 슬레이브 ID, 기능 코드, 주소, 개수를 정합니다. 테스트 센터에서는 원시 프레임을 보낼 수 있고 CRC/LRC는 자동으로 붙습니다. 자세한 설명은 사용 가이드를 보세요.
← WebModbus 열기 · 모드버스 온라인 · 가이드 · 개인정보 처리방침