본문 바로가기

보안/산업 제어

산업제어 시스템 프로토콜 modbus 분석

[그림1] 일반적인 IT 프로토콜

출처:http://www.tcpipguide.com/

[그림1]은 일반적인 IT 프로토콜로 통일 되어 있지만 산업제어시스템에서는 상황이 다르다. 각 업체마다 다 다른 프로토콜을 만들었다. 그래서 장비간에 표준화를 못 시켰다.

그 대신 0,1 데이터 전달만 되는 매우 단순한 구조의 프로토콜로 이루어져있다.

 

빌딩 자동화 프로토콜은 주로 난방,환기,에어컨과 같은 응용 프로그램을 실행하는 제어 시스템의 부분들 간의 통신이 가능하다. 이 범주에서 사용되는 프로토콜에는 BACnet , C-Bus, Modbus, ZigBee, Z-wave 등이 있다.

 

프로토콜 설명은 더보기에..

더보기

BACnet(A Data Communication Protocol for Building Automation and Control Network):빌딩 자동제어 및 제어 네트워크의 표준 프로토콜

C-Bus:조명 및 기타 전자기기 등을 제어 할수 있는 마이크로 프로세서 기반의 통합제어시스템

Modbus:자동화 디바이스간 통신을 위한 산업용 프로토콜

ZigBee:소형,저전력 디지털 라디오를 이용한 개인통신망을 구성하여 통신하기 위한 표준 기술

Z-wave:가정용 자동화에 사용되는 무선 통신 프로토콜

Modbus 란?

Modbus는 자동화 디바이스간 통신을 위해 1979년에 개발된 산업용 프로토콜입니다. Modbus는 원래 시리얼 통신을 위해 고안된 어플리케이션 계층 프로토콜이었으나, 점차 시리얼, TCP/IP 및 UDP에서도 구현하도록 사용이 확대되었다.

현재 Modbus는 다양한 현대의 네트워크에서 간단하고 안정적이며 효율적인 통신을 구현하기 위해 일반적으로 사용되는 ICS 프로토콜이다.

Modbus는 응용 프로그램 계층 메시징 프로토콜이다. OSI 모델의 레벨 7에 배치되어 , 다양한 유형의 통신 버스 또는 통신 매체를 통해 연결된 장치 간에 클라이언트/서버 통신을 제공한다.

 

[그림2] modbus Application

출처:http://www.oreilly.com/

왼쪽: 시리얼 (RS-232 또는 RS-485)을 통한 Modbus 통신

오른쪽: 이더넷을 통한 통신에 동일한 응용 프로그램 계층 프로토콜이 사용

Modbus는 시리얼 통신을 하는데 이는 명령을 내리면 바로 디바이스에게 전달하는 형태이다. 

 

[그림3] modbus 관계

MODBUS-TCP 통신규격에는 마스터슬레이브 역할이 나누어져 있다.

슬레이브(서버)는 마스터(Client)가 요청하는 데이터에 대한 응답을 해주며 TCPPORT나 PLC 등이 위치해 있다.

마스터(클라이언트)에는 상위기기에서 요청하는 동작만을 하는 수동적인 위치해 있으며 상업용터치 HMI기기 또는 PC와 같은 상위 기기가 위치이다. 즉 마스터(클라이언트)쪽에서는 원하는 데이터를 읽어오거나, 원하는 데이터를 기입하는 등 적극적으로 슬레이브(서버) 기기를 다루어 주어야 한다

 

[그림4-1]범용 MODBUS(RTU,ASCII)프레임 구조

 

범용 MODBUS로 tcp 구조가 없는구조이다.

여기서 가장 중요한 부분은 [그림4]에서 밑줄 쳐진 Function code 와 Data이다.

function code는 명령어 코드

data는 function coded의 실질적 데이터

addition addres는 서버 대상을 말한다

[그림 4-2] MODBUS-TCP 프레임 구조

MODBUS-TCP( 또는 MODBUS-TCP/IP)는 Ethernet 상에서 실행되는 TCP 인터페이스를 가진 Modbus RTU 프로토콜이다. Modbus 메시지 구조는 데이터 전송 매체와는 독립적이며, 데이터를 구성하고 해석하기 위한 규칙을 정의하는 Application 프로토콜이다.

MBAP(Modbus Application Protocol) Header는 총 7바이트를 시작으로 Function code, Data 순으로 이루어져 있다.

헤더의 7바이트는 다음과 같이 이루어져 있다.

  • Transaction ID: client(마스터)가 각 Request마다 고유하게 식별하도록 설정 한 2바이트로 마스터가 최초 0x0000값 부터 통신시작 시 1씩 증가시키며 slave(서버)는 그 값을 그대로 복사해서 사용(서버에 의해 echo)된다. 쿼리 및 응답에 대해 한쌍으로 작업이 이루어졌는지 확인하는 부분이다.
  • Protocol ID: client(마스터)가 설정한 2바이트로 항상  0x0000의 고정값을 사용한다
  • Length: Unit ID 부터 data 까지의 길이를 나타내며 2바이트 이다
  • Unit ID: TCP/IP가 아닌 serial line 이나 다른 버스에 연결되는 Remote slave를 식별하기 위해 설정하는 1바이트 식별자로 server에 의해 echo 된다.

 

 

function code

[그림 5] Function code (자주 쓰이는 코드 빨간 표시)

Function code는 Modebus 프로토콜에서 제공하는 명령어 집합 코드이다.

Function code를 이용하여 슬레이브 Memory(Coil,Register)에 값을 읽어오거나 쓸수 있는 서비스이다

Function code는 1~127 사이의 값을 사용하지만 TCPPORT에서는 실질적으로 사용하는 서비스이기 때문에 1,2,4,5,6,15,16 값을 지원 한다

 

 

 

 

 

참조

https://www.ni.com/ko/shop/labview/introduction-to-modbus-using-labview.html

https://kuwhawha.tistory.com/286

http://www.adm-tech.co.kr/technologies/modbus.php

반응형

'보안 > 산업 제어' 카테고리의 다른 글

modbus 서버 및 클라이언트 실습  (1) 2024.02.21
Osint를 통한 ICS 실습  (0) 2024.02.19
산업제어 시스템 이란  (0) 2024.01.25