Python OPC-UA
하고 싶은 일
클라이언트 PC 측 Pytohon에서 OPC-UA 서버에 연결하고 싶습니다.
배경.
작업 중에는 현장 버스를 사용하는 개발 환경을 갖추어야 한다.
이더넷, PROFFINET 등 공업용 현장 버스를 이용하여 통신을 하려면 환경을 만들기가 매우 어렵다.나는 간단하게 구축할 수 있는 환경이 없다고 생각한다.
OPC-UA가 등장했습니다.
OPC-UA는 상기 현장 버스의 협의를 지원하기 때문에 OPC-UA 서버가 구축될 수 있다면 클라이언트는 현장 버스 통신을 할 필요가 없다.
또 이 서버는 래스퍼리피에서도 구축이 가능하다는 점[1]도 좋았다.
간단한 환경이라면 값싼 구축이 큰 동력이 될 수 있으니 한번 해보고 싶어요.
컨디션
서버측
우선 서버 준비를 하세요.
서버는 Unified-Automation의 데모 서버를 사용합니다.
웹 사이트 위 레이블의 "Downloads"에서 "OPC UA Servers"를 선택하면 OPC UC++ Demo Server(Windows)에서 다운로드할 수 있습니다.
!
Demo Server를 다운로드하려면 사용자가 로그인해야 합니다.
다운로드 설치가 완료되면 서버 응용 프로그램을 시작합니다.
아마도 이때 한 서버
opc.tcp://localhost:48010
가 일어났을 것이다.터미널이 나오면 다음과 같은 내용이 나타날 것이다.
UaCPPServer
***************************************************
Server opened endpoints for following URLs:
opc.tcp://host_name:48010
***************************************************
***************************************************
Press x to shutdown server
***************************************************
👆host_나는name가 실제로는 자신의 컴퓨터 이름이라고 생각한다.서버 측의 준비는 이것으로 끝냅니다.
클라이언트
다음은 고객을 위한 준비입니다.
클라이언트는python의 freeopcua 프로그램 라이브러리를 사용합니다.
pip라면 다음과 같이 설치할 수 있습니다.
pip install opcua
작업을 확인하는 클라이언트 어플리케이션처음에는 어떤 물건인지 몰라서 인터넷 앱에 의존했다.
클라이언트 애플리케이션에는 UaExpert라는 애플리케이션이 있습니다.
이것도 Unified-Automation 웹사이트에서 OPC UA Client→Ua Expert로 다운로드할 수 있다.(또 후술 코드의 노드에 대한 조사 방법을 몰라서 이번에 이 프로그램으로 조사를 진행했다.)
[추기]
freeopcua가github에 게재한
Simple OPC-UA GUI client
라는 응용 프로그램도 있다.pip install opcua-client
에 설치하고 opcua-client
에 시작합니다.이 편리한 곳은 데이터를 간단하게 도표로 표시할 수 있는 곳이다.
메뉴에 차트 추가를 표시하려면 노드 목록에서 마우스 오른쪽 버튼을 클릭합니다.
업데이트 간격
Interval
을 조정할 수 있습니다.각본
freeopcua github의 example부터 만지작거려
client-minimal.py
.client-minimal_demo.py
import sys
sys.path.insert(0, "..")
from opcua import Client
try:
client = Client("opc.tcp://localhost:48010") # connect to demo server
client.connect()
root = client.get_root_node()
print("Objects node is: ", root)
print("Children of root are: ", root.get_children())
var = root.get_child([
"0:Objects",
"0:Server",
"3:AreaAirConditioner",
"3:AirConditioner_1",
"3:Temperature",
])
print("var is: ", var)
print(var.get_data_value())
finally:
client.disconnect()
Client
에서 실례적인 고객류를 connect
에 연결한다.root = client.get_root_node()
에서 루트 노드를 얻었습니다.root.get_children()
는 루트의 하위 노드입니다.var = root.get_child
에서 직접 가져올 노드를 지정할 수 있습니다.여기
var
에서 프레젠테이션 서버의 AirConditioner
모델의 온도Temperature
를 얻습니다.var.get_data_value()
를 통해 var
의 데이터를 얻다.var.get_value()
에서도 노드의 값만 꺼낼 수 있습니다.그럼 이 스크립트를 실행하세요.
실행 결과
다음 출력을 얻었습니다.
cryptography is not installed, use of crypto disabled
cryptography is not installed, use of crypto disabled
Objects node is: i=84
Children of root are: [Node(TwoByteNodeId(i=87)), Node(TwoByteNodeId(i=85)), Node(TwoByteNodeId(i=86))]
var is: ns=3;s=AirConditioner_1.Temperature
DataValue(Value:Variant(val:71.26239999999964,type:VariantType.Double), StatusCode:StatusCode(Good), SourceTimestamp:2022-05-01 03:53:33.253081)
최초의 출력에서 Node id를 얻었고 마지막 출력에서 변수 데이터의 노드와 그 값을 얻을 수 있다.!
AirConditioner_1
의 Tempurature
는 71.26...
로 에어컨 온도의 표시(섭씨가 아니라 화씨인 것 같다)로 알 수 있다.cryptography is not installed, use of crtpto disabled
이런 로그는 출력되지만 암호화 프로토콜을 사용하지 않아서 출력된 로그입니다.사용 시 증명서 등이 필요합니다.
총결산·감상
데이터만 얻으면 금방 뭐라도 할 수 있을 것 같은데.
이어 랩베리피에 OPC-UA 서버를 구축해 파이톤에서 통신을 시작해 보려고 한다.
각주
https://www.slideshare.net/ssuserd477fa/ethercatprofinet-opc-ua ↩︎
Reference
이 문제에 관하여(Python OPC-UA), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/toitoy8/articles/220501_py-opcua텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)