Innovate With Data

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

공장 자동화/통신

PLC 데이터 읽고 쓰기 (1) - 미쓰비시 MELSEC PLC (Python pymcprotocol)

데이터위자드 2022. 1. 17. 23:24
반응형

PLC 데이터 읽고 쓰기 (1) - 미쓰비시 MELSEC PLC (Python pymcprotocol)

PLC를 PC와 연결하여 데이터를 수집하는 방법

 

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

이번 포스팅에서는 생산현장에서 사용하는 PLC에 PC를 연결하여 데이터를 읽고 쓰거나, 데이터 수집을 하는 방법들에 대해서 포스팅하겠습니다. 

 

 아마, 현업에서 FA를 다루고 있으신 분들이라면 PLC와 Engineer WorkStation(EWS)를 연결하는 방법으로,

 

  1. OPC Server를 이용한 연결
  2. 미쓰비시 MX Component와 같은 PLC Maker에서 제공하는 전용 프로그램으로 연결
  3. Open source 프로그램이나 직접 개발한 프로그램으로 연결 

 

 위 세 가지를 대부분 이용할 것입니다.

 

1번 OPC Server 연결의 경우 전문적인 프로그램을 이용하기 때문에 사용자 친화적이며 위 3가지 선택중 가장 배우기 쉬운 장점이 있으나, 라이선스를 구매하여하는 등 초기 비용에 대한 부담이 생기게 됩니다.

 

2번, 3번의 경우는 PLC 제조사나 오픈 소스를 이용하여 저렴한 비용 혹은 무료로 현업에서도 작성 가능하다는 장점이 있으나, 개발자 외에는 디버깅이 어려운 점 그리고 직접 코딩 작업을 해야 하기 때문에 사용자 친화적이지 않다는 단점이 있을 수 있겠습니다.

 

옵션마다 일장 일단이 있다고 봅니다. @Pixabay

 

보통 초기 라이선스 비용의 부담 때문에 소규모 FA System에 시범적으로 적용하는 데이터 수집/분석 프로젝트는 2번이나 3번의 옵션을 선택하는 경우가 많은데요. 

 

이번 포스팅에서는 미쓰비시 PLC 연결에 대한 내용 중 2번 MX Component 프로그램을 활용한 예제 말고 Python 모듈을 가지고 작성하는 방법을 설명드릴까 합니다.

 

* 본 포스팅에서 언급된 Python 패키지와 프로그램 예제는 본 포스팅 내용을 부연 설명하기 위해 예시로 든 것이며 연결하고자 하는 PLC나 디바이스와의 호환성 및 적합성 등은 사용자가 반드시 확인해야 합니다. 부적절하게 사용하여 발생되는 오류나 부주의로 발생되는 문제는 사용자 본인의 책임이며, 언급된 모듈이나 제조사와 필자는 무관함을 알립니다.

 

Mitsubishi MX Component라는 강력한 도구가 있는데 굳이 Python 모듈을 사용하는 이유는?

 

제 경험에 비추어 볼 때, MX Component 또한 Melsec PLC와 PC를 연결하고 데이터를 읽고 쓰는 프로그램을 작성하기에 매우 강력한 도구라는 것은 이견이 없습니다.

 

MX Component 같은 경우는 기본적으로 C++ 라이브러리만 지원하고 있어, 현장 End-user용 C# WPF이나 Winform 프로그램을 만드는 데는 적합하지만, 반대로 현장 사용자가 직접 제어해야 할 사항이 없다면 python으로 작성하는 것이 시간 대비 결과물이 더 빠르게 나올 수 있는 장점이 있기 때문입니다.

 

 더불어, 데이터를 수집해서 분석하는 과정을 거치기 위해서는 Python 라이브러리를 활용하는 경우가 많은데 굳이 C++이나 C#으로 작성한 후 Python 측으로 넘겨주는 작업을 거칠 필요가 없어집니다. (물론 C#에도 다양한 라이브러리가 있지만 개인적으로는 Python 라이브러리들이 예제도 많고 해서 선호하는 편입니다.) 

 

하지만 Python 모듈의 경우, PLC 제조사에서 동작을 보증하지 않으며, PLC 제조사 공식 프로그램보다 안정성과 신뢰도가 떨어질 수 있다는 점은 감안해야 할 것입니다. 

 

결론적으로, 

 

  • 현장 운전자나 생산 관리자가 조작할 필요가 있다 -> MX Component
  • 데이터 수집과 분석 위주로 공정 개선 업무를 수행하고 싶다 -> Python + Melsec PLC 연결 모듈(pymcprotocol) 

 

이라 할 수 있겠습니다. (물론, PyQt와 같은 GUI를 이용해서 엔드 유저 맞춤형 프로그램도 작성 가능하므로, 이래 저래 파이썬이 더 다양하게 활용할 수 있겠습니다.)

 

다음으로 해당 파이썬 모듈의 설치와 그 예제에 대해서 알아보겠습니다.

 

Python pymcprotocol Melsec PLC 연결 패키지를 다운로드하여 설치합니다.

 

먼저, 해당 PC와 Melsec PLC는 적절하게 ethenet으로 연결되어 있다고 가정하겠습니다.

 

다음으로 PC에서 Python pymcprotocol 모듈을 다운로드하여 설치합니다.


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

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

 

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

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

datawizard.co.kr

 

 Melsec PLC 연결 라이브러리 역시 다양한 패키지들이 존재하지만 이번 포스팅에서는 pymcprotocol 패키지로 연결하는 방법을 알아보겠습니다.

 

pymcprotocol 패키지에 대한 자세한 내용은 아래 pypi 홈페이지에서 확인하시기 바랍니다.

 

https://pypi.org/project/pymcprotocol/

 

pymcprotocol

MC Protocol(MELSEC Communication Protocol) implementation by Python

pypi.org

 

 마지막으로 사용자가 원하는 프로그램을 작성합니다.

 

 해당 패키지의 설치까지 완료되었다면, 필요한 기능을 반영하여 프로그램을 작성하면 되겠습니다.

 

그전에 먼저 공식 홈페이지에서는 melsec PLC의 mc protocol를 사용하기 위해서 GxWorks2 나 GxWorks3에서 아래와 같이 설정을 변경해주고 PLC를 Rerun(재기동) 하라고 안내하고 있습니다.

 

Melsec PLC mc protocol open 방법 @pypi pymcprotocol

 

공식 홈페이지 Melsec PLC 연결 프로그램의 예제를 아래에 첨부하오니, 참조하여 주시기 바랍니다.

 

# Connect by Python
import pymcprotocol

#If you use Q series PLC
pymc3e = pymcprotocol.Type3E()
#if you use L series PLC,
pymc3e = pymcprotocol.Type3E(plctype="L")
#if you use QnA series PLC,
pymc3e = pymcprotocol.Type3E(plctype="QnA")
#if you use iQ-L series PLC,
pymc3e = pymcprotocol.Type3E(plctype="iQ-L")
#if you use iQ-R series PLC,
pymc3e = pymcprotocol.Type3E(plctype="iQ-R")

#If you use 4E type
pymc4e = pymcprotocol.Type4E()

#If you use ascii byte communication, (Default is "binary")
pymc3e.setaccessopt(commtype="ascii")
pymc3e.connect("192.168.1.2", 1025)


# Send command
#read from D100 to D110
wordunits_values = pymc3e.batchread_wordunits(headdevice="D100", readsize=10)

#read from X10 to X20
bitunits_values = pymc3e.batchread_bitunits(headdevice="X10", readsize=10)

#write from D10 to D15
pymc3e.batchwrite_wordunits(headdevice="D10", values=[0, 10, 20, 30, 40])

#write from Y10 to Y15
pymc3e.batchwrite_bitunits(headdevice="Y10", values=[0, 1, 0, 1, 0])

#read "D1000", "D2000" and  dword "D3000".
word_values, dword_values = pymc3e.randomread(word_devices=["D1000", "D2000"], dword_devices=["D3000"])

#write 1000 to "D1000", 2000 to "D2000" and 655362 todword "D3000"
pymc3e.randomwrite(word_devices=["D1000", "D1002"], word_values=[1000, 2000], 
                   dword_devices=["D1004"], dword_values=[655362])

#write 1(ON) to "X0", 0(OFF) to "X10"
pymc3e.randomwrite_bitunits(bit_devices=["X0", "X10"], values=[1, 0])



# Unlock and lock PLC
#Unlock PLC,
#If you set PLC to locked, you need to unlkock to remote operation
#Except iQ-R, password is 4 character.
pymc3e.remote_unlock(password="1234")
#If you want to hide password from program
#You can enter passwrod directly
pymc3e.remote_unlock(request_input=True)

#Lock PLC
pymc3e.remote_lock(password="1234")
pymc3e.remote_lock(request_input=True)



# Remote Operation
If you connect to your system by E71 module, Ethernet communication module,
These commands are available.

If you connect to PLC directly, C059 error returns.

#remote run, clear all device
pymc3e.remote_run(clear_mode=2, force_exec=True)

#remote stop
pymc3e.remote_stop()

#remote latch clear. (have to PLC be stopped)
pymc3e.remote_latchclear()

#remote pause
pymc3e.remote_pause(force_exec=False)

#remote reset
pymc3e.remote_reset()

#read PLC type
cpu_type, cpu_code = pymc3e.read_cputype()

 

Melsec PLC Logic에 대해서는 블로그나 카페에 관련 정보가 많으니 해당 내용을 참조하시기 바랍니다.

 

 

마치며,

 

 이번 포스팅에서는 Python pymcprotocol을 이용해서 미츠비시 Melsec PLC을 연결하고 데이터를 읽고 쓰는 파이썬 프로그램을 작성하는 방법에 대해서 알아보았습니다. 상용 OPC server 관리 프로그램이나 기존 MX Component 프로그램보다 직접 코딩해야 하는 번거로움이 있으나, 잘만 활용한다면 데이터 수집과 저장 그리고 그리고 머신러닝 분석뿐만 아니라 메신저 알람 기능과 같은 부가적인 기능까지 그 활용성은 무궁무진할 것이라 생각됩니다.

 

글로만 설명하기에는 다소 난해한 부분이 있는바 메일이나 댓글로 문의하시면 도움드릴 수 있도록 하겠습니다.

 

생각보다 쉽진 않습니다

 

* 본 포스팅에서 언급된 Python 패키지와 프로그램 예제는 본 포스팅 내용을 부연 설명하기 위해 예시로 든 것이며 연결하고자 하는 PLC나 디바이스와의 호환성 및 적합성 등은 사용자가 반드시 확인해야 합니다. 부적절하게 사용하여 발생되는 오류나 부주의로 발생되는 문제는 사용자 본인의 책임이며, 언급된 모듈이나 제조사와 필자는 무관함을 알립니다.

 

커피 한잔 후원하기
글쓰기에 지친 필자에게 커피한잔 사주기 😊

 

 

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

 

반응형