Innovate With Data

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

공장 자동화/제어 Q&A

가스트론 Gas Detector에 Modbus 485 통신으로 연결하고 Python으로 데이터 가져오기

데이터위자드 2023. 12. 5. 00:10
반응형
Gas Detector 485 통신연결 후 Python으로 데이터 가져오기
문제 인식 : 현장에 있는 Gastron 가스감지기 수신반에서 나오는 데이터를 모드버스 RS-485 통신으로 연결하고 Python으로 데이터를 가져오는 시스템을 구성하고 싶다.

 
  이번 포스팅에서는, 모 블로그 방문자 께서 문의하신 내용을 바탕으로 포스팅을 이어가도록 하겠습니다. (이 카테고리에는 사용자 분들의 질문에 답하는 내용 위주로 포스팅하고자 하오니 참고 부탁드립니다. 😀)
 

과제 : 가스트론 GTC200A 가스감지기 시스템에 Modbus RS-485 통신으로 연결한 후, Python으로 데이터를 가져오는 프로그램을 작성한다.

 
 
먼저, 해당 업체(가스트론 Gastron)의 GTC200A의 사용자 매뉴얼을 참고해 보도록 하겠습니다.
 
 
해당 제조사의 홈페이지에서 내용을 확인하실 수 있습니다.
 

비방폭형 다채널 수신반 - GTC-200A Series - :: (주)가스트론 :: (gastron.com)

비방폭형 다채널 수신반 - GTC-200A Series - :: (주)가스트론 ::

가스감지기 수신반, 비방폭형 다채널, 국제표준의 DIN TYPE CASE 적용으로 확장 용이, 다양한 형태의 수신부(자립식 판넬형, 벽걸이형, 19”Rack형)

www.gastron.com

 

내용을 확인해 보겠습니다.
 
 
 * 경 고 *
아래 매뉴얼은 설명을 위한 단순 참고 자료입니다. 과거의 데이터 일 수 있으며 현재는 변경되었을 수 있으니, 사용자는 제조사에 최신의 문서 내용을 반드시 확인하셔야 합니다. 관련 내용과 제조사는 필자는 무관하며, 아래 내용을 실제 적용/활용하여 발생하는 문제는 사용자 본인의 책임임을 알립니다.
 또한, 실제 제품으로 테스트가 아닌 매뉴얼을 참고하여 프로그램을 작성하였기에 오동작이나 사용자가 원하는 결과가 나오지 않을 수 있습니다. 따라서, 사용자는 실제 사용 환경에서 해당 도구들에 대해 충분한 검증을 요하며, 연결하고자 하는  디바이스와의 호환성 및 적합성 등은 사용자가 반드시 확인 및 검증해야 함을 알립니다.
 
 
매뉴얼 상으로, 가스트론 GTC200A 가스감지 모니터 시스템은 크게 3가지로 구성되어 있는 것을 확인할 수 있습니다.
 

  • 전원부 (Power Unit) - 모니터링 시스템에 전원을 공급

  • 경보부 (Common Unit) - 각 가스 탐지기 채널에서 발생된 알람을 시각/청각 효과로 사용자에게 전달하는 모듈. 또한, Modbus 통신 연결을 할 수 있는 기능이 있음.

  • 농도표시부 (Channel Unit) - 가스 감지기를 연결하고 해당 감지기의 농도를 그래픽화 해서 보여주거나, 설정된 알람에서 표시하는 기능.

 
매뉴얼에서 제시하는, 전형적인 모니터링 시스템 구성도는 다음과 같습니다.
 

가스트론 GTC200A 판넬 구성 예시 @ 가스트론 매뉴얼
가스트론 GTC200A 판넬 구성 예시 @ 가스트론 매뉴얼

 
 
우리의 목적은 모드버스 통신 연결을 해서 파이썬으로 데이터를 가져오는 것이기 때문에, 경보부의 485 통신 부분을 집중적으로 살펴보도록 하겠습니다.
 

파이썬 프로그램 작성 전에 필요한 선행 작업들

 
 
 본격적인 파이썬 프로그램 작성 전, 몇 가지 선행되어야 할 작업 혹은 전제 조건들이 있습니다.
 

가스트론 GTC200A 가스감지기 시스템의 적절한 설치와 구성

 
당연한 얘기겠지만, 해당 가스감지기 시스템은 적절하게 설치되어 있고, 정상적으로 동작한다는 것을 가정하겠습니다.
 

경보부 (Common Unit)과 PC의 통신연결. 파이썬 준비

 
물리적인 통신 연결과 Python 설정 등에 대해서는 앞서 포스팅한 내용을 참조하시기 바랍니다.
 

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

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

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

datawizard.co.kr

 
 
여기서, 모드버스의 통신 설정(Baud rate, Stop bit, Parity 등)은 매뉴얼에 기재된 내용을 참고하시면 되겠습니다.
 

가스트론 GTC200A 통신 설정 @ 가스트론 매뉴얼
가스트론 GTC200A 통신 설정 @ 가스트론 매뉴얼

 
 

이제 준비가 되었다면 프로그램을 작성해 줍니다.

 
 
물리적인 준비가 끝났다면 이제 즐거운 코딩 시간입니다.
 
예제 설명을 위해, 
 

  • Channel 1번에서 농도 값을 가져와서 출력

 
간단한 프로그램을 작성해 보도록 하겠습니다.
 

 
 
from datetime import datetime, date, timedelta
import pandas as pd
import minimalmodbus


if __name__ == "__main__":

    ## 통신 설정
    instrument = minimalmodbus.Instrument('/dev/ttyUSB1', 1)  # USB 포트 이름과 Slave 주소를 입력합니다. (예시임)
    instrument.serial.baudrate = 9600         # Baud rate 설정 GTC200A 메뉴얼 참조
    instrument.serial.parity = minimalmodbus.serial.PARITY_EVEN     # Patity even 으로 설정
    instrument.serial.stopbits = 1
    instrument.mode = minimalmodbus.MODE_RTU        
    # Modbus RTU 기준임, ASCII 인 경우는  'instrument.mode = minimalmodbus.MODE_ASCII' 로 변경

   
    ## 가스 감지기 채널 1번 읽기 ##
    gas_channel_1_analog = instrument.read_register(30001, 1)  # 1채널 30001에서 채널당 1씩 증가. n채널은 3000n
    print(gas_channel_1_analog)
    #slackout(gas_channel_1_analog)     # Slack Push 알람 구현시
 

 
물론, 이 정도로 간단한 구성을 목표로 프로그래밍하진 않을 것이지만 해당 내용을 참고하여 추가적인 기능을 부여하면 되겠습니다.
 
 minimalmodbus에 대한 보다 자세한 내용(통신설정 이라던지 주소 설정이라든지)은 해당 모듈의 공식 문서 페이지에서 찾아보실 수 있습니다.
 

MinimalModbus 2.1.1 documentation

Welcome to MinimalModbus’ documentation! — MinimalModbus 2.1.1 documentation

© Copyright 2023, Jonas Berg Revision 785262db.

minimalmodbus.readthedocs.io

 

마치며,

 
 이번 포스팅에서는 모 방문자께서 주신 문의사항을 바탕으로 가스트론 감지기 수신부에서 파이썬으로 데이터를 가져오는 예제를 알아보았습니다.
 
 실제 연결을 수행해보지 않고 매뉴얼의 내용만을 참고하여 작성하였기에 실제 동작이 원활하지 않거나 오동작을 일으킬 수 있다는 점은 반드시 참고하여 주시기 바라며, 글로만 설명하기에는 다소 난해한 부분이 있는바 메일이나 댓글로 문의하시면 도움드릴 수 있도록 하겠습니다.
 
 

코딩은 재밌고도 쉽지 않습니다. @Pixabay
코딩은 재밌고도 쉽지 않습니다. @Pixabay

 

 

문의사항이나 오류는 메일로 연락 주시면 감사하겠습니다.
📧 simo@datawizard.co.kr

 
 

* 본 포스팅에서 언급된 모듈이나 제조사와 필자는 무관함을 알립니다.

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

반응형