Innovate With Data

데이터로 더 큰 가치를 제공합니다.

공장 자동화/통신

모드버스 데이터 가져오기 (2) - MODBUS/TCP (feat. pyModbusTCP)

데이터위자드 2022. 1. 16. 23:39
반응형

모드버스 데이터 가져오기 (2) - MODBUS/TCP (feat. pyModbusTCP)

현장에서 가장 범용적으로 사용되는 프로토콜 MODBUS 2편 - MODBUS/TCP 

 

 안녕하세요? 데이터 위자드 시모입니다.

이번 포스팅에서는 지난 포스팅에 이어 현장에서 가장 범용적으로 사용되는 통신 프로토콜인 MODBUS 통신, 그중에서도 MODBUS/TCP 지원 모듈에서 PC로 데이터를 가져오는 것에 대해서 포스팅하겠습니다. 

 

 MODBUS/TCP와 MODBUS/RTU는 기본적으로 같은 프로토콜을 사용하되 다른 Physical layer를 사용하는 방식이라 보시면 되겠습니다. 소위 말하는 485 연결방식이나 이더넷 연결방식이냐의 차이로서, 영어로 메일을 보내느냐 팩스로 보내느냐의 차이정도라 생각하시면 되겠습니다.

 

* 필드버스 통신방식에 대해서는 이전 포스팅을 참조하여 주시기 바랍니다.

시작하기 - 생산현장에서의 통신(feat. 필드버스)

 

시작하기 - 생산현장에서의 통신(feat. 필드버스)

일상생활에서의 통신(Communication)  안녕하세요? 데이터 위자드 시모입니다. 이번 포스팅에서는 통신에 대해서 이야기해보도록 하겠습니다. 일상생활에서 통신이라면 전화, 인터넷, 문자, 이메일

datawizard.co.kr

 

MODBUS/TCP는 이더넷 (소위 말하는 LAN선) 연결 전용으로 나온 통신 방식으로 기존 RS-485 통신시에 전용 컨버터를 이용해야 하는 불편함을 해소시켜 사용자에게 연결성 측면에서 유리함을 가져다 줍니다.

 

랜선으로 연결하여 훨씬 편리합니다. @Pixabay

 

준비물은 PC와 MODBUS 지원 디바이스 그리고 랜선 그리고 선택사항으로 공유기입니다.

 

 앞서 설명한 바와 같이 MODBUS/TCP는 이더넷 케이블로 연결가능하기 때문에 별도의 RS-485 컨버터가 필요하지 않습니다. 대신, PC와 다수의 디바이스를 연결하기 위해서 유무선 공유기를 사용하는 것이 좀더 편리합니다.

 

* MODBUS/RTU 연결은 이전 포스팅을 참조하여 주시기 바랍니다.

모드버스 데이터 가져오기 (1) - MODBUS/RTU (feat. Python minimalmodbus)

 

모드버스 데이터 가져오기 (1) - MODBUS/RTU (feat. Python minimalmodbus)

현장에서 가장 범용적으로 사용되는 프로토콜 MODBUS  안녕하세요? 데이터 위자드 시모입니다. 이번 포스팅에서는 현장에서 가장 범용적으로 사용되는 통신 프로토콜인 MODBUS 통신, 그중에서도 MO

datawizard.co.kr

 

PC와 MODBUS 지원 디바이스 간 케이블을 연결하고 설정을 완료합니다.

 

 랜선이나 무선인터넷으로 PC에 연결하고 IP 설정을 완료하여 줍니다. 데이터를 가져올 디바이스에도 공유기나 PC에 1:1로 랜선을 연결하여 줍니다. 

 

이 때 IP는 연결될 Slave 디바이스의 IP와 중복되지 않게 설정하시면 되겠습니다. 완료 후 MODBUS 통신 연결 관리 툴을 사용하여 연결이 적절하게 되었는지 확인합니다. (자세한 설명은 댓글이나 메일로 문의 바랍니다.)

 

연결이 잘 이루어졌다면, Python Modbus 통신 패키지를 다운받아 설치합니다.

 

다음으로 PC에서 모드버스 통신 Python 모듈을 다운받아 설치합니다.


Python 모듈 설치 방법은 이전 포스팅은 참조하여 주십시요.

파이썬 (2) - PIP로 모듈 설치하기

 

파이썬 (2) - PIP로 모듈 설치하기

파이썬(Python) 모듈(라이브러리) 이야기 이전 포스팅에서 파이썬 설치에 대해서 정리하였습니다. (파이썬 설치에 대한 내용은 아래 링크를 참조하시기 바랍니다.) 파이썬 (1) - 파이썬 시작하기 파

datawizard.co.kr

 

다양한 Modbus 모듈들이 존재하지만 이번 포스팅에서는 pyModbusTCP 패키지를 이용하여 데이터를 주고 받는 프로그램을 작성하도록 하겠습니다.

 

pyModbusTCP 패키지는 설명은 아래 링크에서 확인하시기 바랍니다.

 

https://pypi.org/project/pyModbusTCP/

 

pyModbusTCP

A simple Modbus/TCP library for Python

pypi.org

 

 마지막으로 사용자가 필요로하는 기능을 담아 Python 프로그램을 작성합니다.

 

pyModbusTCP 패키지의 설치까지 완료 되었다면, 사용자가 원하는 기능을 담아 Python 프로그램을 작성해 줍니다. 

패키지 제작 프로그래머의 예제를 아래에 첨부하오니, 참조하여 주시기 바랍니다.

 

#include (for all samples)
from pyModbusTCP.client import ModbusClient
# module init (TCP always open)
# TCP auto connect on first modbus request
c = ModbusClient(host="localhost", port=502, unit_id=1, auto_open=True)
# module init (TCP open/close for each request)
# TCP auto connect on modbus request, close after it
c = ModbusClient(host="127.0.0.1", auto_open=True, auto_close=True)
Read 2x 16 bits registers at modbus address 0 :
regs = c.read_holding_registers(0, 2)
if regs:
    print(regs)
else:
    print("read error")
# Write value 44 and 55 to registers at modbus address 10 :
if c.write_multiple_registers(10, [44,55]):
    print("write ok")
else:
    print("write error")

 

MODBUS 프로그램시 Map은 디바이스의 제조사의 매뉴얼을 참조하시기 바랍니다.

 

 

마치며,

 

 이번 포스팅에서는 MODBUS 지원 디바이스의 PC연결과 파이썬 pyModbusTCP 패키지를 이용하여 데이터를 읽고 쓰는 방법을 간단한 예제로 알아보았습니다. 글로만 설명하기에는 다소 난해한 부분이 있는바 메일이나 댓글로 문의주시면 도움 드릴수 있도록 하겠습니다.

 

생각보다 쉽진 않습니다..

 

 

 

'💗' 도움이 되셨다면 공감 클릭 부탁드립니다. 감사합니다.

반응형