하드웨어에서 데이터를 받아야하는 일이 생겼고 사용하는 프로토콜이 modbus라는 생소한 프로토콜을 사용하고 있었다.
1. Modbus란?
Modbus는 산업 자동화 및 제어 시스템에서 널리 사용되는 통신 프로토콜로 장치 간 데이터 교환을 간단하고 효율적으로 처리할 수 있도록 설계되었다.
Modbus는 표준화된 구조와 다양한 데이터 전송 방식(RTU, ASCII, TCP/IP)을 제공하여 다양한 환경에서 쉽게 적용 가능하다고 한다.
2. 특징
- 마스터-슬레이브 구조: 슬레이브가 각 센서이다!!!
- Modbus는 중앙 관리 시스템(마스터)과 여러 주변 장치(슬레이브) 간의 통신을 기반으로 한다.
- 마스터는 데이터를 요청하고 슬레이브는 요청에 응답하는 방식으로 작동한다.
- 표준화된 데이터 구조
- 데이터는 Coil, Discrete Input, Holding Register, Input Register와 같은 표준화된 구조로 관리된다.
- 슬레이브 안에 각 메모리 맵이 하나씩 있고 요청을 할때 메모리 맵을 선택해서 조회해야한다.
- 예를들어 0x01 -> coil status, 0x02 -> input status
- 다양한 전송 방식
- Modbus RTU: 직렬 통신 기반으로, 효율적인 데이터 패킷 전송
- Modbus ASCII: 데이터 패킷을 ASCII 형식으로 전송하여 가독성이 좋음
- Modbus TCP/IP: 이더넷 기반 통신을 지원하여 네트워크 통합
3. 주요 function Code
Modbus 통신의 핵심은 Function Code를 통해 요청 유형을 지정하는 것이다. Function Code는 데이터 읽기/쓰기 등의 작업을 정의한다.
Function | Code설명 |
01 | Coil 읽기 |
02 | Discrete Input 읽기 |
03 | Holding Register 읽기 |
04 | Input Register 읽기 |
05 | Single Coil 쓰기 |
06 | Single Register 쓰기 |
15 | Multiple Coils 쓰기 |
16 | Multiple Registers 쓰기 |
4. Serial 통신 종류
Modbus는 직렬 통신을 기반으로 동작하는 경우가 많다.
- RS232
- 별로
- 1:1 통신만 가능하다.
- 외부 환경에 의해 데이터가 깨지는 경우가 많다.
- RS422
- 아주 좋다
- 전이중 방식(송수신 동시에 가능).
- 노이즈에 강하고 장거리 통신에 적합하다.
- RS485
- 좋다, 가장 많이 쓴다:
- 반이중 방식 가능.
- 최대 32개의 장치가 하나의 버스에 연결 가능하여 다중 장치 환경에서 유용.
- 노이즈 저항성이 뛰어나고 안정적인 통신 제공.
직렬 통신의 주요 설정
데이터를 주고받는 기기 간에는 데이터의 형태를 사전에 약속해야 서로 통신이 가능하다.
- bps (Bits per Second): 데이터 전송 속도.
- 예: 9600bps는 1초에 9600비트를 전송.
- 데이터 길이: 데이터를 보내는 크기의 약속.
- 일반적으로 8비트 사용.
- 패리티 (Parity): 에러 검출을 위한 비트.
- 주로 사용되지 않음.
- 정지 비트 (Stop Bit): 데이터 프레임의 끝을 나타냄.
5. Modbus 패킷 구조
Modbus 통신에서 데이터 전송은 패킷이라는 단위로 이루어진다.
- RTU 요청(Request) 패킷:\
필드 설명 크기 Slave ID 통신할 슬레이브 장치의 ID 1 Byte Function Code 수행할 작업(예: 데이터 읽기) 1 Byte 시작 주소 데이터를 읽거나 쓸 시작 주소 2 Byte 데이터 개수 요청하려는 데이터의 크기 또는 개수 2 Byte CRC 에러 검출을 위한 값 2 Byte
- RTU 응답(Response) 패킷:
필드 설명 크기 Slave ID 응답을 보낸 슬레이브 장치의 ID 1 Byte Function Code 응답의 작업 유형 1 Byte 데이터 길이 응답 데이터의 길이 1 Byte 데이터 요청한 데이터 2 Byte * N (가변) CRC 에러 검출을 위한 값 2 Byte
참고
https://www.youtube.com/watch?v=jhRcq6bsJ84&list=PLz--ENLG_8TPJsTDyihX9_fdpLPFdd1xl
'트러블슈팅 > 회사' 카테고리의 다른 글
코틀린에서 파이썬 코드 실행하기 (2) | 2024.12.28 |
---|---|
modbus 데이터 가져오기 (1) | 2024.12.28 |
loki 적용하기 (0) | 2024.11.04 |
로그 수집 및 에러 알림 만들기 (0) | 2024.10.18 |
modbus 데이터 흐름 구조 (0) | 2024.10.15 |