안녕하세요. Dibrary입니다.
이번에는 OPC통신이라는 것을 파이썬으로 해보겠습니다.
먼저 OPC통신은 modbus통신처럼 산업현장에서 사용하는 프로토콜 중 하나인데요, 최근에는 OPC를 사용해서 장비별 구분 없이 데이터만을 주고받는데 초점을 두고 있습니다.
저 역시 OPC로 통신하는 프로그램을 만들어 보았고, slave역할의 장비에서 값이 바뀌는지, 써지는지 확인을 파이썬으로 진행했었습니다.
참고로 Client는 OPC서버의 값을 '읽어서 확인'할 수 있는 것을 말합니다.
저는 순간순간 확인하기 쉽게 jupyter를 사용하겠습니다. 혹시 설치가 안 되신 분들은 아래의 글 참고하시면 됩니다.
먼저 jupyter lab의 terminal에서 opc모듈을 설치해야 합니다.
제일먼저 jupyter를 실행하면 아래와 같은 창이 뜨는데, 빨간 네모의 터미널을 클릭해 주세요.
그리고 해당 터미널에 'pip install opcua'를 입력하세요
저는 이미 설치가 되어 있기 때문에, 문구가 이미 설치되었다고 나오네요.
이런 상태에서 곧바로 코드를 작성하시면 됩니다.
아참, 반드시 OPC 서버와 연결이 되어 있으셔야 합니다. 장비든, 네트워크 시뮬레이터든.
아주 간단하게 딱 하나의 노드만을 읽어오는 코드를 작성해 보았습니다.
url은 서버의 url이며, connect를 반드시 해 줘야 읽어올 수 있습니다.
get_node는 노드의 정보를 토대로 노드와 연결 되는 부분이고, get_value를 통해 값을 읽어올 수 있습니다.
node설정 부분 내부에서 ns는 노드의 번호를 의미합니다. 저는 1번 노드의 1630AT155-NO 라는 이름의 노드에 있는 값을 보고싶어서 위와 같이 적었습니다.
만일 노드 명칭이 문자열이 아니라 정수 33이라고 가정하면, get_node의 내부는 ("ns=1 ; i=33") 이렇게 써 주시면 됩니다.
가져온 값을 보니 1만 가져오네요. 네 해당 OPC서버에서 이 노드의 설정은 기본이 1입니다.
만일 node에 어떤 기능들이 있는지 확인하고 싶으시면 dir을 사용해서 확인하시면 됩니다.
뭐 쭉 길게 나오는데, 이 중에 대부분은 거의 안쓰고 get_value, set_value를 자주 쓰게 됩니다.
get_value는 위 코드 처럼 값을 읽어 오는 것이고, set_value는 값을 해당 노드에 기록합니다.
즉, set_value로 OPC서버의 노드 값을 변경할 수 있는 셈이죠. 과연 그런지 보겠습니다.
네 아까랑 같은 코드에 밑에 set_value를 추가하고 해당 노드의 값을 다시 get_value로 확인 해 보았습니다.
22로 노드 값을 변경하니, 읽어온 값도 22로 변경되었네요.
만일 파이썬으로 가져온 값이 맞는지를 같이 비교해보고 싶으시다면 Client툴을 사용해서 실시간으로 보면서 비교해보시면 됩니다.
OPC서버의 값을 보여줄 Client 무료 툴이 다행이도! 있습니다. 아래 사이트에서 UaExpert라는 툴을 사용하면 볼 수 있죠.
UaExpert툴 설치를 완료하신 후에 실행하시면 아래와 같은 초기 화면이 나옵니다.
여기서 Settings 밑의 + 버튼을 눌러보시면 아래와 같은 창이 나옵니다.
여기서 Endpoint Url에 아까 파이썬에서 입력한 OPC 서버의 Url을 입력하고 OK버튼을 누르면 됩니다.
그러면 왼쪽 위에 플러그 같은 아이콘이 생깁니다.
플러그 아이콘 위에서 마우스 오른쪽 클릭 한 후에, connect를 누르면 연결이 됩니다.
해당 노드의 값을 보려면 왼쪽의 태그를 그냥 가운데로 드래그 해 주시면 됩니다.
여기서 실시간으로 확인한 값과 파이썬 코드로 읽은 값을 확인하시면 됩니다.
지금 잘 보시면 1630AT155-NO는 1로 되어 있죠? 그래서 파이썬 코드에도 계속 1로 나타났던 것입니다.
'프로그래밍 > Python' 카테고리의 다른 글
Dixon Q test - 특이치 식별 및 제거, 파이썬으로 구현 (0) | 2022.03.23 |
---|---|
Anderson-Darling 통계 - 정규성 검정, 파이썬으로 확인하기 (0) | 2022.03.16 |
파이썬 데이터 분석 준비! - Numpy배열 다루기 - 1(객체 만들어보기) (0) | 2022.03.15 |
알고리즘을 풀 때 항상 생각해봐야 하는 것 - 복잡도 (0) | 2022.02.16 |
파이썬으로 구현해 확인하는 OPCUA통신 - Server편 (15) | 2022.02.09 |