CoderTools

Modbus 프로토콜 파서

Modbus RTU/ASCII/TCP 통신 분석, 변환 및 디버깅

데이터를 입력하세요

Modbus 프로토콜 참조

Modbus는 1979년 Modicon이 개발한 가장 널리 사용되는 산업용 통신 프로토콜입니다. 직렬 라인(RTU) 또는 이더넷(TCP/IP)을 통해 전자 장치 간의 통신을 가능하게 합니다. 이 도구는 전문 하드웨어나 소프트웨어 없이 Modbus 통신을 디버깅하고 분석하는 데 도움을 줍니다.

Modbus RTU 프레임 구조

Modbus RTU(Remote Terminal Unit)는 RS-232 또는 RS-485와 같은 직렬 연결을 통해 이진 형식으로 데이터를 전송합니다. 각 프레임에는 슬레이브 주소, 기능 코드, 데이터 및 오류 감지를 위한 16비트 CRC 체크섬이 포함됩니다. 컴팩트한 이진 형식은 대역폭이 제한된 환경에서 RTU를 효율적으로 만듭니다.

Slave ID
1 byte
Function
1 byte
Data
N bytes
CRC-16
2 bytes

Modbus RTU Frame Structure

Modbus TCP 프레임 구조

Modbus TCP는 RTU 프레임을 TCP/IP 패킷 내에 캡슐화하고 7바이트 MBAP(Modbus Application Protocol) 헤더를 사용합니다. 이 헤더에는 요청-응답 매칭을 위한 트랜잭션 ID, 프로토콜 식별자(Modbus의 경우 항상 0), 메시지 길이 및 유닛 ID가 포함됩니다. TCP 통신은 기본적으로 포트 502를 사용합니다.

Trans ID
2 bytes
Proto ID
2 bytes
Length
2 bytes
Unit ID
1 byte
Function
1 byte
Data
N bytes

Modbus TCP Frame Structure (MBAP Header + PDU)

일반 기능 코드

기능 코드는 Modbus 요청의 작업 유형을 정의합니다. 읽기 작업(01-04)은 코일 상태나 레지스터 값을 가져오고, 쓰기 작업(05, 06, 0F, 10)은 장치 데이터를 수정합니다. 각 기능 코드에는 특정 데이터 형식 요구 사항이 있습니다.

코드 기능 유형
0x01코일 읽기읽기
0x02이산 입력 읽기읽기
0x03홀딩 레지스터 읽기읽기
0x04입력 레지스터 읽기읽기
0x05단일 코일 쓰기쓰기
0x06단일 레지스터 쓰기쓰기
0x0F다중 코일 쓰기쓰기
0x10다중 레지스터 쓰기쓰기

Modbus의 바이트 순서

PLC 제조업체마다 32비트 및 64비트 값에 다른 바이트 순서를 사용합니다. 네 가지 일반적인 배열은: 빅 엔디안(ABCD) - 표준 네트워크 순서; 리틀 엔디안(DCBA); 미드빅 엔디안(BADC); 미드리틀 엔디안(CDAB)입니다. 잘못된 값을 읽을 때 다른 바이트 순서를 시도하여 올바른 해석을 찾으세요.

빅 엔디안 (ABCD)
A B C D
리틀 엔디안 (DCBA)
D C B A
미드빅 엔디안 (BADC)
B A D C
미드리틀 엔디안 (CDAB)
C D A B

CRC-16/Modbus 알고리즘

Modbus RTU는 오류 감지를 위해 다항식 0x8005와 초기값 0xFFFF를 사용하는 CRC-16을 사용합니다. CRC는 슬레이브 주소, 기능 코드 및 데이터 바이트에 대해 계산된 다음 하위 바이트 우선 순서로 추가됩니다. CRC가 잘못된 프레임은 수신자가 폐기해야 합니다.

다항식: 0x8005
초기값: 0xFFFF
입력 반전:
출력 반전:

실용적인 응용

  • 원시 패킷 데이터를 분석하여 PLC와 SCADA 시스템 간의 통신 오류 해결
  • 커미셔닝 중 16진수 데이터를 엔지니어링 단위로 변환하여 레지스터 값 확인
  • 전용 Modbus 마스터 소프트웨어 없이 장치 검증을 위한 테스트 명령 생성
  • 다른 제조업체의 장치를 통합할 때 바이트 순서 문제 디버깅

관련 도구

빠른 메뉴

최근 사용 도구 없음