모드버스
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
모드버스는 1970년대 후반에 개발된 통신 프로토콜로, 프로그래머블 로직 컨트롤러(PLC)와의 통신을 위해 설계되었다. 이더넷, 직렬 통신, Modbus Plus 등 다양한 통신 방식을 지원하며, 각 장치에 고유한 주소를 할당하여 통신한다. Modbus는 PDU(Protocol Data Unit)와 ADU(Application Data Unit)를 사용하여 통신하며, 기능 코드와 데이터 모델을 정의하여 데이터 접근을 제어한다. Modbus 프로토콜은 Modbus over Serial Line, Modbus TCP 등 여러 버전이 있으며, RTU, ASCII, TCP/IP 등 다양한 전송 방식을 지원한다. 대한민국에서는 스마트 팩토리, 빌딩 자동화 등 다양한 분야에서 활용되며, 4차 산업혁명 시대에 맞춰 스마트 시티 구축에도 기여하고 있다.
더 읽어볼만한 페이지
- 산업용 이더넷 - 이더넷/IP
이더넷/IP는 산업 자동화를 위한 산업용 네트워크 프로토콜로, UDP, TCP 기반 메시징과 유니캐스트, 멀티캐스트, 브로드캐스트 통신을 지원하며 ODVA에서 관리하는 CIP 네트워크 중 하나이다. - 산업용 이더넷 - EtherCAT
EtherCAT은 산업 자동화를 위해 개발된 이더넷 기반 통신 프로토콜로, 빠른 사이클 타임, 높은 대역폭 활용률, 정밀한 장치 간 동기화 및 다양한 네트워크 토폴로지 지원을 특징으로 한다. - 산업 컴퓨팅 - CAN 버스
CAN 버스는 1983년 로버트 보쉬 유한회사에서 개발된 차량 내 통신 네트워크 프로토콜로, 자동차, 농업 장비 등 다양한 분야에서 전자 제어 장치 간의 통신을 가능하게 한다. - 산업 컴퓨팅 - 이더넷/IP
이더넷/IP는 산업 자동화를 위한 산업용 네트워크 프로토콜로, UDP, TCP 기반 메시징과 유니캐스트, 멀티캐스트, 브로드캐스트 통신을 지원하며 ODVA에서 관리하는 CIP 네트워크 중 하나이다. - 네트워크 프로토콜 - UUCP
UUCP는 유닉스 시스템 간 파일 복사, 원격 명령 실행, 이메일 및 유즈넷 뉴스 전송을 위한 프로토콜 및 프로그램 모음으로, 초기 인터넷 확장에 중요한 역할을 했으나 TCP/IP 기반 서비스 보편화로 사용이 감소했다. - 네트워크 프로토콜 - 프레임 릴레이
프레임 릴레이는 LAN 간 또는 WAN 종단점 간 데이터 전송을 위한 고속 패킷 교환 방식 통신 프로토콜로, X.25 프로토콜을 간소화하여 속도를 높이고, 영구 가상 회선을 통해 안정적인 연결을 제공하며, 서비스 품질 설정을 통해 프레임 우선순위를 지정할 수 있었으나, 현재는 다른 기술에 밀려 사용이 감소하고 있다.
모드버스 | |
---|---|
개요 | |
![]() | |
약어 | 모드버스 |
목적 | 시리얼 통신 프로토콜 |
개발자 | 모디콘 (1979–1997) 슈나이더 일렉트릭 (1997–2004) 모드버스 조직, Inc. (2004년부터) |
발표일 | 1979년 |
기반 | 해당 없음 |
영향 | 해당 없음 |
OSI 모델 계층 | 애플리케이션 계층 |
포트 | 해당 없음 |
RFC | 해당 없음 |
하드웨어 | 해당 없음 |
2. 프로토콜 설명
Modbus는 클라이언트-서버 모델(과거에는 마스터-슬레이브(Master-Slave) 모델이라고 불렸음)을 기반으로 하며, OSI 모델의 응용 계층(7계층) 프로토콜이다.
Modbus 표준은 다음을 포함한다.
- 이더넷을 통한 TCP/IP
- 광범위한 표준, 기술(EIA/TIA-232-E, EIA-422, EIA/TIA-485-A, 광섬유, 무선 주파수 등)을 사용하는 비동기 직렬 통신
- MODBUS PLUS, 고속 토큰 전달 네트워크
Modbus 통신을 지원하기 위해 많은 모뎀과 게이트웨이는 독점적인 설계를 통합하며, ISM 무선 대역, 단문 메시지 서비스(SMS) 또는 General Packet Radio Service(GPRS)와 같은 유선 또는 무선 통신을 사용한다.
2. 1. PDU 및 ADU
모드버스 프로토콜은 PDU(Protocol Data Unit)와 ADU(Application Data Unit)를 정의한다. PDU의 최대 크기는 253바이트이다. 모드버스는 빅 엔디안(Big-Endian) 표현을 사용한다. 즉, 16비트 값(예: 0x1234)을 전송할 때 상위 바이트(0x12)를 먼저 전송하고 하위 바이트(0x34)를 전송한다. 기능 코드는 1~255 사이의 값을 가지며, 128~255는 예외 응답을 위해 사용된다.PDU와 ADU의 구조는 다음과 같다.[1]
- PDU = 기능 코드 + 데이터
- ADU = 추가 주소 + PDU + 오류 검사
ADU는 공식적으로 ''모드버스 프레임''이라고도 불린다.[1]
2. 2. Modbus 트랜잭션 및 PDU
모드버스는 클라이언트-서버 모델을 기반으로 통신한다. 클라이언트는 특정 작업을 요청하는 트랜잭션을 시작하고, 서버는 요청을 받아 처리한 후 응답한다. 예를 들어, 마이크로컨트롤러 유닛(MCU)이 RS-485 버스와 같은 유선 네트워크를 통해 모드버스로 센서에 연결하여 데이터를 읽는 경우, MCU는 클라이언트, 센서는 서버 역할을 한다.[1] 이전에는 클라이언트를 마스터, 서버를 슬레이브라고 불렀다.모드버스 트랜잭션은 다음과 같이 진행된다.[1][2]
단계 | 설명 |
---|---|
1 | 클라이언트가 PDU(프로토콜 데이터 유닛) 요청(기능 코드 + 데이터)을 보낸다. |
2 | 서버는 요청을 받아 기능 코드를 분석하고, 데이터 필드의 주소와 값을 확인하여 해당 기능 코드에 맞는 작업을 수행한다. 오류가 없으면 PDU 응답(기능 코드 + 데이터)을 보내고, 오류가 발생하면 예외 응답(예외 기능 코드 + 예외 코드)을 보낸다. |
3 | 클라이언트는 응답을 받고 트랜잭션을 종료한다. |
모드버스는 다음과 같은 세 가지 PDU 유형을 정의한다.[1]
- MODBUS 요청 PDU (mb_req_pdu): 기능 코드(1바이트) + 요청 데이터(n바이트)
- MODBUS 응답 PDU (mb_rsp_pdu): 기능 코드(1바이트) + 응답 데이터(n바이트)
- MODBUS 예외 응답 PDU (mb_excep_rsp_pdu): 예외 기능 코드(1바이트) + 예외 코드(1바이트)
요청 및 응답 데이터 필드의 크기는 기능 코드에 따라 달라지며, 변수 값, 데이터 오프셋, 하위 기능 코드 등을 포함한다.[1] 예외 기능 코드는 원래 기능 코드에 0x80을 더한 값으로, 최상위 비트(MSB)가 1로 설정된다. 예외 코드는 MODBUS 예외 코드 표에 정의되어 있다.
PDU의 최대 크기는 253바이트이다. 데이터 인코딩은 빅 엔디안 방식을 사용하여 주소와 데이터 필드를 표현한다. 16비트 값의 경우 최상위 바이트가 먼저 전송된다.[1]
2. 3. Modbus 데이터 모델
Modbus는 네 가지 주요 유형의 테이블을 기반으로 데이터 모델을 정의한다.[4]주요 테이블 | 접근 | 크기 | 특징 |
---|---|---|---|
이산 입력 | 읽기 (R) | 1 비트 (0–1) | 켜짐/꺼짐 값 읽기 |
코일 (이산 출력) | 읽기/쓰기 (R/W) | 1 비트 (0–1) | 켜짐/꺼짐 값 읽기/쓰기 |
입력 레지스터 | 읽기 (R) | 16 비트 단어 (0–65,535) | 측정 및 상태 읽기 |
홀딩 레지스터 | 읽기/쓰기 (R/W) | 16 비트 단어 (0–65,535) | 구성 값 읽기/쓰기 |
모드버스는 실행할 기능의 코드를 제공하는 1바이트 ''기능 코드''를 사용한다. 기능 코드는 정수 값으로, 1에서 255까지의 범위를 가지며, 128에서 255까지의 범위는 예외 응답을 위한 것이다.
3. 기능 코드
PDU의 데이터 필드는 0에서 65535까지의 주소를 갖는다. PDU의 데이터 필드는 비어 있을 수 있으며, 이 경우 크기가 0이다. 서버는 어떠한 정보도 요청하지 않으며 기능 코드는 실행할 기능을 정의한다. 실행 과정에서 오류가 발생하지 않으면, 서버에서 클라이언트로 전송되는 ADU 응답의 데이터 필드에는 요청된 데이터가 포함된다. 오류가 발생하면 서버는 예외 코드로 응답한다.[2]
클라이언트와 서버 간의 Modbus 트랜잭션[2][6]
Modbus는 3가지 PDU 유형을 정의한다.[2]
:mb\_req\_pdu = 기능 코드 (1 바이트) + 요청 데이터 (n 바이트)
:''요청 데이터'' 필드의 크기는 기능 코드에 따라 다르며 변수 값, 데이터 오프셋 및 하위 기능 코드와 같은 값을 포함한다.[2]
:mb\_rsp\_pdu = 기능 코드 (1 바이트) + 응답 데이터 (n 바이트)
:mb\_req\_pdu와 마찬가지로, ''응답 데이터'' 필드의 크기는 기능 코드에 따라 다르며 변수 값, 데이터 오프셋 및 하위 기능 코드와 같은 값을 포함한다.[2]
:mb\_excep\_rsp\_pdu = 예외 기능 코드 (1 바이트) + 예외 코드 (1 바이트)
:''예외 기능 코드'' = 기능 코드 (1 바이트) + 0x80. (기능 코드와 같지만 MSB가 1)
:mb\_excep\_rsp\_pdu의 예외 코드(1 바이트)는 MODBUS 예외 코드 표에 정의되어 있다.
Modbus는 4가지 주요 유형의 테이블을 기반으로 데이터 모델을 정의한다.[3]
주요 테이블 | 접근 | 크기 | 특징 |
---|---|---|---|
이산 입력 | 읽기 (R) | 1 비트 (0–1) | 켜짐/꺼짐 값 읽기 |
코일 (이산 출력)[4] | 읽기/쓰기 (R/W) | 1 비트 (0–1) | 켜짐/꺼짐 값 읽기/쓰기 |
입력 레지스터 | 읽기 (R) | 16 비트 단어 (0–65,535) | 측정 및 상태 읽기 |
홀딩 레지스터 | 읽기/쓰기 (R/W) | 16 비트 단어 (0–65,535) | 구성 값 읽기/쓰기 |
각 주요 테이블에 대해, 프로토콜은 65536개의 데이터 항목을 개별적으로 선택할 수 있도록 하며, 이러한 항목의 읽기 또는 쓰기 작업은 트랜잭션 기능 코드에 따라 달라지는 데이터 크기 제한까지 여러 개의 연속적인 데이터 항목에 걸쳐 설계되었다.[3]
모드버스는 세 가지 유형의 기능 코드를 정의한다.[2]
3. 1. 공용 기능 코드
Modbus는 공용, 사용자 정의, 예약된 세 가지 유형의 기능 코드를 정의한다.[2] 주요 공용 기능 코드는 다음과 같다.기능 유형 | 기능 이름 | 기능 코드 | 설명 | ||
---|---|---|---|---|---|
데이터 접근 | 비트 접근 | 물리적 이산 입력 | 이산 입력 읽기 | 2 | |
내부 비트 또는 물리적 코일 | 코일 읽기 | 1 | |||
단일 코일 쓰기 | 5 | ||||
복수 코일 쓰기 | 15 | ||||
16비트 접근 | 물리적 입력 레지스터 | 입력 레지스터 읽기 | 4 | ||
내부 레지스터 또는 물리적 출력 레지스터 | 복수 홀딩 레지스터 읽기 | 3 | |||
단일 홀딩 레지스터 쓰기 | 6 | ||||
복수 홀딩 레지스터 쓰기 | 16 | ||||
복수 레지스터 읽기/쓰기 | 23 | ||||
마스크 쓰기 레지스터 | 22 | ||||
FIFO 큐 읽기 | 24 | ||||
파일 레코드 접근 | 파일 레코드 읽기 | 20 | |||
파일 레코드 쓰기 | 21 | ||||
진단 | 예외 상태 읽기 | 7 | 시리얼 전용 | ||
진단 | 8 | 시리얼 전용 | |||
통신 이벤트 카운터 가져오기 | 11 | 시리얼 전용 | |||
통신 이벤트 로그 가져오기 | 12 | 시리얼 전용 | |||
서버 ID 보고 | 17 | 시리얼 전용 | |||
장치 식별 정보 읽기 | 43 | ||||
기타 | 캡슐화된 인터페이스 전송 | 43 |
참고: 일부 소스에서는 표준과 다른 용어를 사용한다. 예를 들어 "단일 코일 쓰기" 대신 "단일 코일 강제"가 있다.[5]
3. 2. 예외 응답
서버가 요청을 처리할 수 없는 경우, 예외 응답을 반환한다. 예외 응답 메시지는 예외 기능 코드와 예외 코드를 포함한다.[1]- 예외 기능 코드: 기능 코드 + 0x80 (기능 코드의 최상위 비트(MSB)를 1로 설정)
- 예외 코드: MODBUS 예외 코드 표에 정의되어 있음.
예를 들어, 기능 코드가 0x03이라면, 예외 기능 코드는 0x83이 된다.
4. Modbus 프로토콜 버전
Modbus는 다양한 버전의 프로토콜이 존재한다.
- 이더넷을 통한 TCP/IP
- 광범위한 표준, 기술(EIA/TIA-232-E, EIA-422, EIA/TIA-485-A, 광섬유, 무선 주파수 등)을 사용하는 비동기 직렬 통신
- MODBUS PLUS, 고속 토큰 전달 네트워크.
널리 사용되는 Modbus RTU, Modbus ASCII, Modbus TCP 외에도 다양한 Modbus 프로토콜 변형이 있다.
- '''Modbus Plus''' (''Modbus+'', ''MB+'', 또는 ''MBP'')는 슈나이더 일렉트릭의 독점 프로토콜이지만, 특허가 아닌 미공개 프로토콜이며, 다른 변형과 달리 여러 클라이언트 간의 피어 투 피어 통신을 지원한다.[8] Modbus Plus[9]는 Modbus의 변형이 아니며, 토큰 전달을 포함하는 다른 통신 프로토콜이다. 빠른 고급 데이터 링크 제어(HDLC)와 유사한 토큰 회전을 처리하기 위해 전용 보조 프로세서가 필요하다. 1Mbit/s의 연선 케이블을 사용하며 각 노드에 변압기 절연을 포함하여 전압/레벨 트리거 방식이 아닌 전이/엣지 트리거 방식을 사용한다.
- '''Pemex Modbus'''는 표준 Modbus의 확장으로, 과거 데이터 및 유량 데이터를 지원한다. Pemex(페멕스) 석유 및 가스 회사의 공정 제어용으로 설계되었지만 광범위하게 채택되지는 않았다.
- '''Enron Modbus'''는 엔론 (Enron)에서 개발한 표준 Modbus의 또 다른 확장으로, 32비트 정수 및 부동 소수점 변수와 과거 및 유량 데이터를 지원한다.[10]
데이터 모델 및 함수 호출은 위에 나열된 처음 네 가지 변형(Modbus RTU, Modbus ASCII, Modbus TCP, Modbus Plus)에서 동일하다. 캡슐화만 다릅니다. 그러나 변형 간의 상호 운용성은 지원되지 않으며 프레임 형식도 다릅니다.
Modbus 프로토콜에는 시리얼 포트용 버전과 이더넷 및 기타 인터넷 프로토콜 제품군을 지원하는 네트워크용 버전이 있다. Modbus 장치의 대부분은 시리얼 EIA-485 물리 계층에서 통신한다.[13]
TCP/IP (예: 이더넷) 연결에서는, 더 새로운 Modbus/TCP를 사용한다. 여기에서는 체크섬을 하위 계층에 맡긴다.
4. 1. Modbus over Serial Line
Modbus over Serial Line은 OSI 모형의 데이터 링크 계층을 통해 통신하는 직렬 통신 방식이다. 마스터-슬레이브 프로토콜을 기반으로 하며, 하나의 마스터와 최대 247개의 슬레이브 간 통신을 지원한다. 슬레이브는 1에서 247 사이의 고유 주소를 가지며, 마스터는 주소가 필요 없다.[4] 마스터만이 통신을 시작할 수 있으며, 슬레이브는 마스터의 요청 없이는 데이터 전송이나 작업을 수행하지 않는다. 슬레이브 간 직접 통신은 불가능하다.[4]
마스터는 ''유니캐스트'' 또는 ''브로드캐스트'' 방식으로 슬레이브에 요청을 보낸다. 유니캐스트 방식에서는 특정 주소의 슬레이브에 요청을 보내고 응답을 받는다.[4] 브로드캐스트 방식에서는 주소 0을 사용하여 모든 슬레이브에 요청을 보내지만, 슬레이브는 응답하지 않는다.[4]
Modbus over Serial Line PDU는 다음과 같이 구성된다.
Modbus 직렬 라인 PDU = 주소 + PDU + CRC(또는 LRC)
PDU = 기능 코드 + 데이터
- 주소: 슬레이브 주소
- PDU: Modbus 애플리케이션 프로토콜의 PDU와 동일
- CRC/LRC: 오류 검사 필드. ''모드버스 RTU'' 또는 ''모드버스 ASCII'' 버전에 따라 달라짐.
물리 계층에서 Modbus over Serial Line은 RS485 또는 RS232를 통해 통신한다. TIA/EIA-485 2선 인터페이스가 가장 널리 사용되지만, RS485 4선 인터페이스나 TIA/EIA-232-E(RS232)도 사용될 수 있다. 단, TIA/EIA-232-E는 점대점 단거리 통신으로 제한된다.[4] Modbus over Serial Line은 ''RTU'' 및 ''ASCII''의 두 가지 전송 모드를 가지며, 이는 ''모드버스 RTU'' 및 ''모드버스 ASCII'' 프로토콜 버전에 해당한다.[4]
4. 1. 1. Modbus RTU
Modbus RTU (원격 터미널 유닛)는 Modbus에서 가장 일반적으로 사용되는 구현 방식으로, 프로토콜 통신을 위해 데이터의 압축된 이진 표현을 사용한다. RTU 형식은 데이터의 신뢰성을 보장하기 위해 오류 검사 메커니즘으로 순환 중복 검사(CRC) 체크섬을 사용하여 명령/데이터를 따른다.[1] Modbus RTU 메시지는 문자 간의 지연 없이 연속적으로 전송되어야 하며, 유휴(무음) 기간으로 프레임(분리)된다. 각 바이트(8비트) 데이터는 11비트로 전송된다.- 1 시작 비트
- 8비트 데이터/메시지, 최하위 비트가 먼저 전송됨
- 1 패리티 비트
- 1 정지 비트
Modbus RTU 프레임은 다음과 같다.
슬레이브 주소 | 기능 코드 | 데이터 | CRC |
---|---|---|---|
1 바이트 | 1 바이트 | 0 – 252 바이트 | 2 바이트: CRC 낮은 바이트와 CRC 높은 바이트 |
CRC 계산은 널리 CRC-16-MODBUS로 알려져 있으며, 다항식은 ''x''16 + ''x''15 + ''x''2 + 1이다(일반적인 16진수 대수 다항식은 8005
이고 반전된 것은 A001
이다).
16진수 Modbus RTU 프레임의 예: 01 04 02 FF FF B8 80
(01
에서 FF
까지 5바이트에 대한 CRC-16-MODBUS 계산은 80B8
을 제공하며, 이는 최하위 바이트가 먼저 전송된다).
전송 중 프레임 무결성을 보장하기 위해 두 프레임 간의 시간 간격은 최소 3.5개의 문자 전송 시간 이상이어야 하며, 두 연속 문자 간의 시간 간격은 1.5개 문자 전송 시간을 초과해서는 안 된다. 예를 들어, 기본 데이터 전송 속도인 19200 bit/s에서 3.5(t3.5) 및 1.5(t1.5) 11비트 문자의 전송 시간은 다음과 같다.
더 높은 데이터 전송 속도의 경우 Modbus RTU는 t1.5에 대해 고정값 750 μs를, t3.5에 대해 1.750 ms를 사용하는 것을 권장한다.
4. 1. 2. Modbus ASCII
Modbus영어 ASCII는 프로토콜 통신에 ASCII 문자를 사용한다. ASCII 형식은 LRC(Longitudinal Redundancy Check) 체크섬을 사용한다. Modbus영어 ASCII 메시지는 콜론(":")으로 시작하고 줄 바꿈(CR/LF)으로 끝난다.Modbus영어 ASCII 프레임은 다음을 포함한다.[12]
이름 | 길이 (바이트) | 기능 |
---|---|---|
시작 | 1 | 콜론 : (ASCII 값 3A16) |
주소 | 2 | 스테이션 주소 |
기능 | 2 | "코일 읽기"와 같은 기능 코드 표시 |
데이터 | n × 2 | 메시지 유형에 따라 데이터 + 길이가 채워짐 |
LRC | 2 | 체크섬 (LRC) |
종료 | 2 | 캐리지 리턴 + 라인 피드 (CR/LF) 쌍 (ASCII 값 0D16 및 0A16) |
주소, 기능, 데이터 및 LRC는 ASCII 16진수 인코딩 값이며, 8비트 값(0–255)은 0–9 및 A–F 범위의 두 개의 ASCII 문자로 인코딩된다. 예를 들어 값 122 (7A16)는 두 개의 ASCII 문자 "7"과 "A"로 인코딩되어 두 바이트 55
(3716, "7"의 ASCII 값) 및 65
(4116, "A"의 ASCII 값)로 전송된다.
LRC는 8비트 값(시작 및 종료 문자 제외)의 합을 계산하여 부정(2의 보수)하고 8비트 값으로 인코딩하여 계산한다. 예를 들어 주소, 기능 및 데이터가 247, 3, 19, 137, 0 및 10인 경우 합계(416)의 2의 보수는 −416이고, 이 값을 8 비트로 자르면 96 (256 × 2 − 416 = 6016)이 되며, 다음과 같은 17개의 ASCII 문자 프레임이 생성된다: :F7031389000A60␍␊
. LRC는 체크섬으로만 사용하도록 지정된다. 전송된 문자 대신 인코딩된 데이터에서 계산되기 때문에 패리티 비트를 사용하여 단일 비트 오류를 찾는 데 사용할 수 있는 '종단' 특성을 사용할 수 없다.[12]
4. 2. Modbus TCP
Modbus TCP는 TCP/IP 네트워크를 통해 통신하는 데 사용되는 모드버스 변형으로, 포트 502를 통해 연결된다.[6] 하위 계층에서 이미 체크섬 보호 기능을 제공하므로 체크섬 계산이 필요하지 않다. Modbus TCP 명명법은 시리얼 라인 프로토콜을 통한 Modbus와 동일하며, Modbus 명령을 전송하는 모든 장치는 '클라이언트'이고 응답은 '서버'에서 온다.[6]Modbus TCP의 ADU는 Modbus 조직에서 공식적으로 '''Modbus TCP/IP ADU'''라고 부르며, 다른 쪽에서는 '''Modbus TCP 프레임'''이라고도 부른다.[1] MODBUS TCP/IP ADU는 MBAP 헤더, 기능 코드, 데이터로 구성된다. 여기서 MBAP는 MODBUS Application Protocol 헤더를 나타내며, TCP/IP에서 MODBUS 응용 프로그램 데이터 유닛을 식별하는 데 사용되는 전용 헤더이다.
MBAP 헤더의 구성 필드는 다음과 같다.
이름 | 길이(바이트) | 기능 |
---|---|---|
트랜잭션 식별자 | 2 | 서버와 클라이언트 간의 메시지 동기화를 위해 |
프로토콜 식별자 | 2 | Modbus/TCP의 경우 0 |
길이 필드 | 2 | 이 프레임에 남아 있는 바이트 수 |
유닛 식별자 | 1 | 서버 주소(사용하지 않는 경우 255), 시리얼 라인을 통한 Modbus에서 슬레이브 주소처럼 처리됨 |
''유닛 식별자''는 Modbus TCP to Modbus RTU 게이트웨이와 같이 여러 Modbus 장치의 복합체인 Modbus TCP 장치에 사용된다. 이러한 경우, 유닛 식별자는 게이트웨이 뒤에 있는 장치의 서버 주소이다.
MODBUS TCP/IP ADU/Modbus TCP 프레임 형식은 다음과 같다.
트랜잭션 식별자 | 프로토콜 식별자 | 길이 | 유닛 식별자 | 기능 코드 | 데이터 |
---|---|---|---|---|---|
2바이트 | 2바이트 | 2바이트 | 1바이트 | 1바이트 | n바이트 |
예시: 12 34 00 00 00 06 01 03 00 01 00 01
0x12
및0x34
: 트랜잭션 ID = 0x1234 (2바이트)로, Modbus TCP 클라이언트/서버 간에 식별될 "고유 번호"로 사용된다. 트랜잭션 ID의 상위 바이트는 0x12이고 하위 바이트는 0x34이다.0x00
및0x00
: 프로토콜 식별자 상위 바이트 및 하위 바이트0x00
및0x06
: 길이 상위 바이트 및 하위 바이트. 길이는 6바이트이며, 장치 식별자 (슬레이브 주소) (1바이트), 기능 코드 (1바이트), 읽을 레지스터 주소의 상위 바이트 (1바이트), 읽을 레지스터 주소의 하위 바이트 (1바이트) 및 데이터 (2바이트 = 읽을 레지스터 수의 상위 바이트와 하위 바이트)를 포함한다.0x01
: 장치 식별자 (슬레이브 주소)0x03
: 기능 코드 (여러 홀딩 레지스터 읽기)0x00
및0x01
: 읽을 레지스터 주소의 상위 바이트 및 하위 바이트. 이 경우 읽을 레지스터 주소는0x0001
이다.0x00
및0x01
: 읽을 레지스터 수의 상위 바이트 및 하위 바이트. 이 경우 읽을 레지스터 수는0x0001
이다. (즉, 1개의 레지스터)
4. 2. 1. 기타 Modbus 프로토콜 버전 (TCP/IP)
- '''Modbus TCP''' 또는 '''Modbus TCP/IP'''는 TCP/IP 네트워크를 통해 통신하는 데 사용되는 Modbus 변형이며, 포트 502를 통해 연결된다.[6] 하위 계층에서 이미 체크섬 보호 기능을 제공하므로 체크섬 계산이 필요하지 않다.
Modbus TCP 명명법은 시리얼 라인 프로토콜을 통한 Modbus와 동일하며, Modbus 명령을 전송하는 모든 장치는 '클라이언트'이고 응답은 '서버'에서 온다.[6]
Modbus TCP의 ADU는 Modbus 조직에서 공식적으로 '''Modbus TCP/IP ADU'''라고 부르며[6] 다른 쪽에서는 '''Modbus TCP 프레임'''이라고도 부른다.[1]
MODBUS TCP/IP ADU = MBAP 헤더 + 기능 코드 + 데이터
여기서 MBAP는 MODBUS Application Protocol 헤더를 나타내며, TCP/IP에서 MODBUS 응용 프로그램 데이터 유닛을 식별하는 데 사용되는 전용 헤더이다.
MBAP 헤더는 다음과 같은 필드를 포함한다.
이름 | 길이(바이트) | 기능 |
---|---|---|
트랜잭션 식별자 | 2 | 서버와 클라이언트 간의 메시지 동기화를 위해 |
프로토콜 식별자 | 2 | Modbus/TCP의 경우 0 |
길이 필드 | 2 | 이 프레임에 남아 있는 바이트 수 |
유닛 식별자 | 1 | 서버 주소(사용하지 않는 경우 255), 시리얼 라인을 통한 Modbus에서 슬레이브 주소처럼 처리됨 |
'''유닛 식별자'''는 여러 Modbus 장치의 복합체인 Modbus TCP 장치(예: Modbus TCP to Modbus RTU 게이트웨이)와 함께 사용된다. 이러한 경우, 유닛 식별자는 게이트웨이 뒤에 있는 장치의 서버 주소이다.
MODBUS TCP/IP ADU/Modbus TCP 프레임 형식은 다음과 같다.
트랜잭션 식별자 | 프로토콜 식별자 | 길이 | 유닛 식별자 | 기능 코드 | 데이터 |
---|---|---|---|---|---|
2바이트 | 2바이트 | 2바이트 | 1바이트 | 1바이트 | n바이트 |
- '''Modbus over TCP/IP''', '''Modbus over TCP''', 또는 '''Modbus RTU/IP''' – Modbus TCP와 달리, Modbus RTU와 마찬가지로 페이로드에 체크섬이 포함된 변형이다.
- '''Modbus over UDP''' – 일부에서는 TCP의 오버헤드를 제거하기 위해 IP 네트워크에서 UDP를 통한 Modbus 사용을 실험했다.[7]
4. 3. 기타 Modbus 프로토콜 버전
널리 사용되는 Modbus RTU, Modbus ASCII, Modbus TCP 외에도 다양한 Modbus 프로토콜 변형이 있다.- '''Modbus Plus''' (''Modbus+'', ''MB+'', 또는 ''MBP'') – 슈나이더 일렉트릭(Schneider Electric)의 독점 프로토콜이지만, 특허가 아닌 미공개 프로토콜이며, 다른 변형과 달리 여러 클라이언트 간의 피어 투 피어 통신을 지원한다.[8] 이름에도 불구하고, Modbus Plus[9]는 Modbus의 변형이 아니다. 이는 토큰 전달을 포함하는 다른 통신 프로토콜이다. 빠른 고급 데이터 링크 제어(HDLC)와 유사한 토큰 회전을 처리하기 위해 전용 보조 프로세서가 필요하다. 1Mbit/s의 연선 케이블을 사용하며 각 노드에 변압기 절연을 포함하여 전압/레벨 트리거 방식이 아닌 전이/엣지 트리거 방식을 사용한다. Modbus Plus를 컴퓨터에 연결하려면 일반적으로 산업 표준 아키텍처(ISA), 주변 구성 요소 상호 연결(PCI), 또는 PC 카드(PCMCIA) 버스용으로 제작된 카드가 필요하다. Modbus Plus는 일반적으로 슈나이더의 파트너에게만 제공되는 사용자 지정 칩셋을 사용하여 구현된다.
- '''Pemex Modbus''' – 표준 Modbus의 확장으로, 과거 데이터 및 유량 데이터를 지원한다. Pemex(페멕스) 석유 및 가스 회사의 공정 제어용으로 설계되었지만 광범위하게 채택되지는 않았다.
- '''Enron Modbus''' – 엔론(Enron)에서 개발한 표준 Modbus의 또 다른 확장으로, 32비트 정수 및 부동 소수점 변수와 과거 및 유량 데이터를 지원한다. 데이터 유형은 표준 주소를 사용하여 매핑된다.[10] 과거 데이터는 데이터 저장 방식에 대한 미국 석유 협회(API) 산업 표준을 충족하는 데 사용된다.
데이터 모델 및 함수 호출은 위에 나열된 처음 네 가지 변형에서 동일하다. 캡슐화만 다릅니다. 그러나 변형 간의 상호 운용성은 지원되지 않으며 프레임 형식도 다릅니다.
5. JBUS 매핑
JBUS는 1985년 프랑스 회사인 르노 오토메이션과 메를린 제린이 PLC 제조업체인 에이프릴 오토메이츠를 위해 정의한 프로토콜로, 모드버스와 밀접하게 관련되어 있다. 1994년 AEG 슈나이더 오토메이션이 에이프릴 PLC 시리즈를 인수하면서 구식이 되었지만, JBUS라는 이름은 여전히 사용되고 있다.
JBUS는 모드버스와 유사하게 기능 코드 1, 2, 3, 4, 5, 6, 15, 16을 지원하여 모든 엔티티를 지원하지만, 번호 매기기 방식이 다르다. JBUS의 번호 매기기 방식은 다음과 같다.
6. 제한 사항
- 모드버스는 1970년대 후반에 프로그래머블 로직 컨트롤러와의 통신을 위해 설계되었기 때문에, 데이터 형식의 수가 당시 PLC가 이해할 수 있는 수준으로 제한되어 있다. 대용량 바이너리 객체는 지원되지 않는다.
- 노드가 데이터 객체에 대한 설명을 찾을 수 있는 표준적인 방법이 없다. 예를 들어, 레지스터 값이 30도에서 175도 사이의 온도를 나타낸다는 것을 알 수 없다.
- 모드버스는 클라이언트/서버(이전에는 마스터/슬레이브) 프로토콜이므로, 필드 장치가 이벤트 핸들러 메커니즘으로 데이터를 가져올 수 있는 방법이 없다(이더넷 TCP/IP를 통한 경우, 오픈-엠버스라고 함). 클라이언트 노드는 각 필드 장치를 정기적으로 폴링하여 데이터의 변경 사항을 찾아야 하기 때문이다. 이는 대역폭이 비쌀 수 있는, 예를 들어 낮은 비트율의 무선 링크와 같은 애플리케이션에서 대역폭과 네트워크 시간을 소모한다.
- 모드버스는 하나의 데이터 링크에서 247개의 장치로 주소가 제한되어 있어, 상위 스테이션에 연결될 수 있는 필드 장치의 수를 제한한다(이 또한 이더넷 TCP/IP는 예외).
- 모드버스 프로토콜 자체는 무단 명령이나 데이터 가로채기에 대한 보안을 제공하지 않는다.
- Modbus의 전송은 연속적이어야 한다. 따라서 원격 통신 장치는 데이터를 버퍼링하고 전송에 갭이 생기지 않도록 해야 한다.
7. 대한민국에서의 활용 및 전망
대한민국에서는 스마트 팩토리, 빌딩 자동화, 에너지 관리 시스템 등 다양한 분야에서 Modbus가 활용되고 있다. 특히, 4차 산업혁명 시대에 발맞춰 스마트 시티 구축에도 중요한 역할을 하고 있다. 정부와 기업들은 Modbus와 같은 개방형 프로토콜을 활용하여 다양한 시스템 간의 상호 운용성을 확보하고, 데이터 기반의 효율적인 운영을 추구하고 있다.
네트워크에서 Modbus 통신을 지원하기 위해 많은 모뎀과 게이트웨이는 유선 또는 무선 통신을 사용하며, ISM 무선 대역, 단문 메시지 서비스(SMS) 또는 일반 패킷 무선 서비스(GPRS)와 같은 구현도 가능하다.
8. 같이 보기
참조
[1]
서적
Control Techniques Drives and Controls Handbook
https://app.knovel.c[...]
Institution of Engineering and Technology
2009
[2]
웹사이트
Modbus FAQ
https://modbus.org/f[...]
Modbus Organization, Inc.
2012-11-01
[3]
웹사이트
About Modbus Organization
https://modbus.org/a[...]
Modbus Organization, Inc.
2012-11-08
[4]
웹사이트
Modpoll Modbus Master Simulator
https://www.modbusdr[...]
2023-10-13
[5]
서적
Practical Modern Scada Protocols: Dnp3, 60870.5 and Related Systems
https://books.google[...]
Newnes
2004
[6]
웹사이트
Crash Course: Client/Server/Master/Slave
https://www.prosoft-[...]
2022-10-17
[7]
웹사이트
Java Modbus Library - About
http://jamod.sourcef[...]
2017-02-07
[8]
웹사이트
What is the difference between Modbus and Modbus Plus?
https://www.se.com/c[...]
Schneider Electric
2017-02-07
[9]
웹사이트
Modbus Plus - Modbus Plus Network - Products overview - Schneider Electric United States
https://www.se.com/u[...]
Schneider-electric.com
2014-01-03
[10]
웹사이트
Simply Modbus - About Enron Modbus
https://www.simplymo[...]
Simply Modbus
2017-02-07
[11]
웹사이트
Modbus Organization Replaces Master-Slave with Client-Server (press release)
https://modbus.org/d[...]
2023-07-11
[12]
간행물
Critical Infrastructure Protection III
Springer
2009-03-23
[13]
문서
Technote 27 - Modbus/RS485 Questions
http://www.obvius.co[...]
Obvius Holdings LLC
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com