PLC를 PC와 연결하여 데이터 읽고 쓰기 4편 - 오므론(Omron) NX와 NJ PLC 연결
안녕하세요? 데이터 위자드 시모입니다.
이번 시간에는 PLC 데이터 읽고 쓰기 4편으로 오므론(Omron) NX와 NJ PLC를 Python 프로그램으로 연결하는 방법에 대해서 이야기하도록 하겠습니다.
이전 미쯔비시, A-B(Rockwell), Siemens PLC 연결에 대해서는 이전 포스팅을 참조하여 주시기 바랍니다.
이전 포스팅에서 PLC 및 현장 Modbus 지원 단말기를 Python을 활용하여 PC에 연결하는 것에 대해서 이야기했습니다. 중복되는 내용은 피하고 본론으로 넘어가겠으니, 위 링크의 이전 내용을 참조하시기 바라며, 문의는 메일이나 댓글로 연락해주시면 도움드릴수 있도록 하겠습니다.
* 본 포스팅은 모 구독자분의 Omron PLC 연결에 대한 리뷰 요청을 받아 작성되는 내용이며 필자 본인은 본문에 언급된 Python module과 실제 Omron PLC 연결을 해보진 아니하였음을 알립니다. 따라서, 사용자는 실제 사용 환경에서 해당 도구들에 대해 충분한 검증을 요하며, 연결하고자 하는 PLC나 디바이스와의 호환성 및 적합성 등은 사용자가 반드시 확인 및 검증해야 함을 알립니다.
부적절한 사용으로 발생되는 오류나 부주의로 발생되는 문제는 사용자 본인의 책임이며, 언급된 모듈이나 PLC 제조사는 필자와 무관함을 알립니다.
Omron PLC에는 이미 OPC UA Server를 탑재한 제품이 있다?
관련 내용을 Study 하는 단계에서 알게 된 내용으로, Omron 社의 특정 PLC 제품에는 OPC UA server 기능을 탑재한 것으로 확인하였습니다.
자세하게 알아보진 않았으나, 개인적인 생각으로는 해당 모델을 잘 활용할 경우, 엔지니어로 하여금 현장의 OPC UA 구성에 상당한 편의성을 제공해 줄 것이라 생각됩니다.
특히, Omron PLC 위주로 된 제조 현장이라면, PLC module 교체 및 Migration 작업만으로 OPC UA Server에 대한 내용은 어느 정도 해결이 될 것으로 보입니다. (당연히 Client 측 작업은 따로 필요하겠지만요.)
Omron 사 외에도 최근 들어, 굴지의 FA기업들에서도 OPC UA에 대한 지원을 하고 있고 Third Party에서도 다양한 애플리케이션이 출시되는 바, 발품을 열심히 팔아본다면 관련된 좋은 아이디어를 많이 발굴할 수 있을 것이라 생각됩니다.
Python aphyt 패키지를 설치하고 PLC와 PC를 이더넷으로 연결합니다.
이전 Ethernet 통신 기반 PLC 연결과 동일하게, 먼저 PLC와 PC를 연결합니다.
- LAN 케이블을 이용하여 PC와 PLC를 1:1로 연결하거나 유무선 공유기를 이용하여 적절하게 연결합니다.
- 미리 PLC의 IP 주소와 PLC 설정을 확인합니다.
다음으로 PC에서 aphyt 모듈을 다운로드하여 설치합니다. 설치는 Anaconda Prompt나 powershell 등에서
pip install aphyt
명령어를 이용해서 설치합니다.
* aphyt 패키지는 아래 링크의 pypi에서 자세한 내용을 확인해 보시길 바랍니다.
https://pypi.org/project/aphyt/
참고로, Python 관련 내용이 궁금하신 분들은 이전 포스팅 '맨땅에 Python' 내용을 참조하여 주시기 바랍니다.
이제 엔지니어가 필요한 프로그램을 코딩합니다.
패키지 설치까지 완료하셨다면 각자 가지고 계신 IDE를 이용하여 프로그램을 작성해 주시면 되겠습니다.
참고로, 해당 패키지에서 PLC 연결과 변수 읽기 쓰기에 대한 예제에 설명을 일부 첨언하여 아래에 작성하였습니다. 프로그래밍 시 참조하면 되시겠습니다. (앞서 언급했듯이 필자는, 해당 Omron PLC와 PC를 해당 모듈로 연결 및 테스트 해보지 않았습니다. 사용자의 주의를 요하는 바이며, 사용상 발생되는 문제에 대해서는 사용자 본인의 책임임을 인지하여 주시길 당부드립니다.)
* PLC 변수 읽기 쓰기 예제
from aphyt import omron # Omron PLC 연결 모듈 import
eip_instance = omron.n_series.NSeriesEIP()
eip_instance.connect_explicit('192.168.250.13')
eip_instance.register_session()
eip_instance.update_variable_dictionary()
# ip 주소 192.168.250.13에 연결된 omron n 시리즈 PLC를 eip_intance에 할당하고 등록하는 method 호출
reply = eip_instance.read_variable('TestBoolFalse')
print("TestBoolFalse: " + str(reply))
# 'TestBoolFalse'의 Boolean type 변수를 읽고 결괏값을 출력
reply = eip_instance.write_variable('TestBoolFalse', True)
reply = eip_instance.read_variable('TestBoolFalse')
print("TestBoolFalse: " + str(reply))
# 'TestBoolFalse'의 Boolean type 변수를 True로 변경후 변수를 읽고 결괏값을 출력
reply = eip_instance.write_variable('TestBoolFalse', False)
reply = eip_instance.read_variable('TestBoolFalse')
print("TestBoolFalse: " + str(reply))
reply = eip_instance.read_variable('TestBoolTrue')
print("TestBoolTrue: " + str(reply))
reply = eip_instance.read_variable('TestInt1')
print("TestInt1: " + str(reply))
reply = eip_instance.write_variable('TestInt1', 2)
reply = eip_instance.read_variable('TestInt1')
print("TestInt1: " + str(reply))
# 'TestBoolFalse'의 integer type 변수를 2로 변경후 결괏값을 출력
reply = eip_instance.write_variable('TestInt1', 1)
reply = eip_instance.read_variable('TestInt1')
print("TestInt1: " + str(reply))
reply = eip_instance.read_variable('TestLREAL')
print("TestLREAL: " + str(reply))
reply = eip_instance.write_variable('TestLREAL', 63.12)
reply = eip_instance.read_variable('TestLREAL')
print("TestLREAL: " + str(reply))
reply = eip_instance.write_variable('TestLREAL', 3.4)
reply = eip_instance.read_variable('TestLREAL')
print("TestLREAL: " + str(reply))
앞서 소개한 모듈과 마찬가지로, 간단한 프로그래밍으로도 Omron PLC의 데이터를 읽고 쓰는 기능을 수행할 수 있는 것을 보실 수 있습니다. PLC로부터 가져온 데이터를 어떤 식으로 활용할 수 있을지에 대해서는 오롯이 엔지니어의 역량에 달린 부분이라 할 수 있겠지만, 공정 데이터 수집 및 시계열 분석, 알람 기능, GUI를 연계한 운전자 편의성 제공 등 다방면에서 활용이 가능할 것으로 예상됩니다.
관련해서 궁금하신 사항은 댓글이나 메일로 남겨 주시면 도움드릴 수 있도록 하겠습니다. 😀
마치며,
이번 포스팅에서는 Omron PLC를 python 패키지를 활용하여 연결하고, 변수를 읽고 쓰는 방법에 대해서 알아보았습니다.
물론, Omron 사의 일부 PLC가 OPC UA server 기능을 지원하는 점을 활용하여, 전체적으로 OPC UA를 구성하고 현장을 통합하는 방법도 고려될 수 있을 것이라 판단되나, PLC 모듈 교체에 따른 비용이 수반되어야 하는 점이 있을 수 있는 바, 해당 기능을 활용해서 Pilot test에 활용하거나 한시적으로 데이터를 수집하여 활용하는 방법도 고려될 수 있을 것이라 사료됩니다.
문의사항이나 오류는 메일이나 댓글로 연락 주시면 감사하겠습니다.
* 본 포스팅에서 언급된 Python 패키지와 프로그램 예제는 본 포스팅 내용을 부연 설명하기 위해 예시로 든 것이며 연결하고자 하는 PLC나 디바이스와의 호환성 및 적합성 등은 사용자가 반드시 확인해야 합니다. 부적절한 사용으로 발생되는 오류나 부주의로 발생되는 문제는 사용자 본인의 책임이며, 언급된 모듈이나 제조사와 필자는 무관함을 알립니다.
도움이 되셨다면 왼쪽 아래 '💗' 클릭 부탁드립니다. 감사합니다.
'공장 자동화 > 통신' 카테고리의 다른 글
필드버스 통신에서 bps의 의미 (a.k.a baud rate) (0) | 2024.04.01 |
---|---|
HART Protocol 에 대해서 알아봅시다. (장단점 및 활용) (0) | 2023.08.30 |
PLC 데이터 읽고 쓰기 (3) - Siemens S7 PLC (feat. python-snap7) (2) | 2022.01.26 |
PLC 데이터 읽고 쓰기 (2) - Rockwell A-B PLC (feat. pylogix) (2) | 2022.01.19 |
PLC 데이터 읽고 쓰기 (1) - 미쓰비시 MELSEC PLC (Python pymcprotocol) (8) | 2022.01.17 |