:: 진공에 대해 알려주마.

모드버스 본문

진공/노하우

모드버스

하이백 2020. 4. 1. 21:19

http://www.modbus.org/

 

설비에서의 MODBUS

모두버스는 장치간의 통신을 원할히 하기 위해 제공되는 표준 프로토콜 이다. 하나의 네크워크에 여러 종류의 장치들이 사용 된다고 하면 각각의 장치에 맞는 배선과 통신 프로그램을 사용해야 한다. 이러한 불편함을 최소화하기 위하여 장치 메이커들이 모여 발표한 많은 표준 통신규격 중에 가장 대표적인 규격이 모두버스 이다.

설비에서는 장치에서 필요로 하는 정해진 프로토콜만을 사용한다. 현재의 온도를 읽거나 출력값을 쓰거나 하는 것이다. 특히 PLC와의 통신은 더욱 규격화되어 있어 하나의 함수만 잘 구성하면 변경 없이 사용하는 장점이 있다. 

이번에는 별도로 입력을 담당하는 모듈을 여러개 사용하여 장치를 제어하는 프로그램을 만들다 보니 디바이스 드라이버부터 다시 구성해야 했다. 그래서 이것저것 잊었던 기초자료를 수집하던 중 모드버스에 대해서 아주 잘 설명한 사이트를 발견하였다. 여러분도 참고하시라.

바다야크의 "MODBUS-RTU 프로토콜 쉽게 이해하기" 
https://badayak.com/entry/MODBUS-RTU-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0

 

모드버스

장치 간의 통신(주로 PC가 PLC값을 읽기 위한)을 위해 당시에는 최신 기술인 시리얼 통신을 기반으로 표준화된 통신 규약이다. 이후 Ethernet까지 지원하게 되었다.

당시 사용하던 용어를 간단히 정리해 보면 요즘 이야기하는 bit와 analog의 값을 저렇게 표현하였다. 당시에는 표준말이었던 것 같은데 요즘에는 bit, word로 불린다.

 

Coil과 register

  • Coil = bit = digital = 0/1 = discrete channel (하나의 비트 값을 표시한다.)
  • Register = 16bit = word = analog = 0000~FFFF = continuous channel (1 word를 읽고 쓴다.)

 

모드버스 통신

모드버스 통신 방식에는 RTU, ASCII, TCP 등이 있다. 

  • MODBUS RTU (Remote Terminal Unit)
  • MODBUS ASCII (RTU명령을 ASCII Code화)
  • MODBUS TCP (TCP/IP 지원)

ASCII는 RTU의 규격을 바이트 단위로 ASCII화 하여 전송한다. 추정하기로는 RTU처럼 hexa code로 값을 전송하면 일부 문자를 control character로 인식하여 발생하는 문제를 해결하고자 hexa code를 ASCII Table에 대응하여 문제를 회피하고자 만들어진 것으로 보인다.

통신 규격은 동일하며 장치 간 통신을 위한 hexa code의 RTU, ASCII 그리고 TCP/IP를 지원하기 위한 TCP가 있다. 결과 핵심이 되는 명령이나 회신되는 내용은 동일하다.

모드버스는 많은 장치에서 사용하고 있으나 특히 PC-PLC통신에서 더 많이 사용된다. 모드버스 자체가 PC가 PLC를 access 하기 위해 만들어졌을뿐더러 PLC와 HMI(Human-Man Interface)의 통신이 모드버스를 이용한다. 결국 많은 PLC에서 모드버스를 지원하고 HMI뿐 아니라 PC에서도 모드버스 규격을 이용하여 PLC에 접근하여 데이터를 읽고 쓸 수가 있다.

실제로 PLC의 메모리에 접근하기 위해서는 전용 드라이버 라이브러리를 이용하는 것이 훨씬 빠른 속도를 가진다. 모드버스는 보편화된 만큼 많은 기능과 단순한 방식이라 상대적으로 느리다. 

 

PLC Access map (통신회신은 이외에도 다양하게 구축할 수 있다)

위와 같이 접근이 가능하다. HMI가 PLC메모리에 접근이 가능한 Modbus-485 방식을 사용하면 서로 다른 HMI Maker가 PLC값을 화면에 표시할 수 있다. 요즘에는 EtherNet 지원하는 장치가 많아지고 있으며 IP Address와 장치 ID만 설정하면 쉽게 값을 가져올 수 있다.

업계에서는 더 많은 정보를 더 빠르게 확인하고자 한다. 그래서 전용의 모듈과 통신 매체 그리고 저장과 전송을 하고자 고사양을 필요로 한다. 

 

명령어 형식

PC와 장치 혹은 장치와 장치 간의 통신을 위해서는 정해진 형식의 프레임으로 송신, 수신을 하게 된다. 그 형식이 표준으로 정해져 있으며 이 규격만 따르면 어떠한 장치와도 통신이 가능한 것이다.

그 규격은 다음과 같다.
https://en.wikipedia.org/wiki/Modbus#Frame_formats

여기에서 Address, Function, Data, CRC, LRC 등의 용어만 알면 규격을 이해하는데 어려움이 없을 것이다.

START ADDRESS FUNCTION DATA CRC/LRC END

 

모드버스 구성도

RS-485를 사용하는 이유는 RS-485가 하나의 회선에 여려 개의 장치를 연결할 수 있는 장점이 있어서 일 것이다. 지금이야 EtherNet이 대세를 이루지만 당시에는 여러 개의 장치를 묶어 값을 가져올 수 있는 방법이 제한적이었을 것이다. 

장치를 여러 개 묶어 Address만 서로 다르게 하여 해당 장치의 원하는 값만 가져올 수 있다는 것은 굉장히 매력적이다. 장치가 어떻게 구성되어 있든 특별한 구성없이 원하는 장치의 원하는 값을 가져올 수 있는 것이다. 단지 Address만 지정하면 된다.

PC에서는 장치번호와 장치내 주소만 알면 데이터를 주고 받을수 있다.

 

그리고 HMI에서도 같은 방식으로 장치의 값을 주고받을 수 있다. HMI에서는 장치 ID와 Register의 주소만 알면 bit값이든 word값이든 가져와 화면에 표시할 수 있다. 물론 HMI에서 화면 구성을 구성하고 이미지에 주소를 설정해야 한다. 화면에서 구성이 끝나면 바로 장치와 통신이 가능하다. 

RS-485를 이용한 PLC, HMI(Proface) 구성

 

'진공 > 노하우' 카테고리의 다른 글

PHENOMENON 001  (0) 2020.08.20
센서 그리고 자동제어  (0) 2020.04.06
RS-232 시리얼 통신  (8) 2019.12.08
PC에서 PLC ACCESS 하기 (2)  (16) 2019.12.02
PC에서 PLC ACCESS 하기 (1)  (13) 2019.09.19
Comments