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를 효율적으로 만듭니다.
1 byte
1 byte
N bytes
2 bytes
Modbus RTU Frame Structure
Modbus TCP 프레임 구조
Modbus TCP는 RTU 프레임을 TCP/IP 패킷 내에 캡슐화하고 7바이트 MBAP(Modbus Application Protocol) 헤더를 사용합니다. 이 헤더에는 요청-응답 매칭을 위한 트랜잭션 ID, 프로토콜 식별자(Modbus의 경우 항상 0), 메시지 길이 및 유닛 ID가 포함됩니다. TCP 통신은 기본적으로 포트 502를 사용합니다.
2 bytes
2 bytes
2 bytes
1 byte
1 byte
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)입니다. 잘못된 값을 읽을 때 다른 바이트 순서를 시도하여 올바른 해석을 찾으세요.
CRC-16/Modbus 알고리즘
Modbus RTU는 오류 감지를 위해 다항식 0x8005와 초기값 0xFFFF를 사용하는 CRC-16을 사용합니다. CRC는 슬레이브 주소, 기능 코드 및 데이터 바이트에 대해 계산된 다음 하위 바이트 우선 순서로 추가됩니다. CRC가 잘못된 프레임은 수신자가 폐기해야 합니다.
실용적인 응용
- 원시 패킷 데이터를 분석하여 PLC와 SCADA 시스템 간의 통신 오류 해결
- 커미셔닝 중 16진수 데이터를 엔지니어링 단위로 변환하여 레지스터 값 확인
- 전용 Modbus 마스터 소프트웨어 없이 장치 검증을 위한 테스트 명령 생성
- 다른 제조업체의 장치를 통합할 때 바이트 순서 문제 디버깅