Modbus protocol

2024. 12. 28. 16:10·트러블슈팅/회사

하드웨어에서 데이터를 받아야하는 일이 생겼고 사용하는 프로토콜이 modbus라는 생소한 프로토콜을 사용하고 있었다.

1. Modbus란?

Modbus는 산업 자동화 및 제어 시스템에서 널리 사용되는 통신 프로토콜로 장치 간 데이터 교환을 간단하고 효율적으로 처리할 수 있도록 설계되었다.
Modbus는 표준화된 구조와 다양한 데이터 전송 방식(RTU, ASCII, TCP/IP)을 제공하여 다양한 환경에서 쉽게 적용 가능하다고 한다.

2. 특징

  1. 마스터-슬레이브 구조: 슬레이브가 각 센서이다!!!
    •     Modbus는 중앙 관리 시스템(마스터)과 여러 주변 장치(슬레이브) 간의 통신을 기반으로 한다.
    •     마스터는 데이터를 요청하고 슬레이브는 요청에 응답하는 방식으로 작동한다.
  2. 표준화된 데이터 구조
    •     데이터는 Coil, Discrete Input, Holding Register, Input Register와 같은 표준화된 구조로 관리된다.
    •     슬레이브 안에 각 메모리 맵이 하나씩 있고 요청을 할때 메모리 맵을 선택해서 조회해야한다.
    •     예를들어 0x01 -> coil status, 0x02 -> input status

  1. 다양한 전송 방식
    •     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는 직렬 통신을 기반으로 동작하는 경우가 많다.

  1. RS232
    •     별로
    •     1:1 통신만 가능하다.
    •     외부 환경에 의해 데이터가 깨지는 경우가 많다.
  2. RS422
    •     아주 좋다
    •     전이중 방식(송수신 동시에 가능).
    •     노이즈에 강하고 장거리 통신에 적합하다.
  3. 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
'트러블슈팅/회사' 카테고리의 다른 글
  • 코틀린에서 파이썬 코드 실행하기
  • modbus 데이터 가져오기
  • loki 적용하기
  • 로그 수집 및 에러 알림 만들기
jamin
jamin
  • jamin
    jamin
    jamin
  • 전체
    오늘
    어제
    • 전체 (82)
      • 트러블슈팅 (31)
        • 회사 (25)
        • 개인 (6)
      • 개념 저장소 (19)
        • coroutine (10)
        • spring reactive (9)
        • network (0)
      • 코딩 테스트 (31)
  • 태그

    백준
    다익스트라
    Kotlin
    coroutine
    그리디 알고리즘
    코딩테스트
    reactive
    sinks
    다이나믹 프로그래밍
    BFS
    mirroring mode
    error alram
    cluster mode
    경로압축
    JPA
    분리집합
    spring reactive
    누적합
    코테
    대용량 데이터
    dfs
    정렬
    수학
    DP
    spring boot
    log
    batch
    백준 23758
    그리디
    instancio
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
jamin
Modbus protocol
상단으로

티스토리툴바