산업 IoT & 스마트 팩토리 디지털트윈/OPC UA 표준 통신

OPC UA 쉽게 이해하기: 구조부터 Python 예제까지 한눈에 정리!

프로잉2 2025. 6. 9. 18:06
728x90

✅ OPC UA란?

**OPC UA (OPC Unified Architecture)**는 제조 장비와 시스템 간 안전하고 신뢰성 높은 데이터 통신을 가능하게 하는 산업용 통신 표준입니다. 기존의 OPC(Classic)와 달리 플랫폼 독립적이며, 보안, 확장성, 데이터 모델링 기능이 강화되어 있습니다.


🔧 OPC UA 구조 (쉽게 설명)

1. 서버(Server) - 데이터를 제공하는 쪽

  • PLC, 센서, 로봇 등 실제 장비에 설치됨
  • 내부의 변수(예: 온도, 속도, 상태 등)를 OPC UA 객체로 외부에 제공

2. 클라이언트(Client) - 데이터를 읽거나 제어하는 쪽

  • HMI, SCADA, MES, 분석 시스템 등
  • OPC UA 서버에 접속하여 실시간 데이터를 구독하거나 값을 변경함

3. 정보 모델(Information Model)

  • 데이터들이 단순한 값이 아닌 구조화된 객체로 표현됨 (예: ‘모터 → 속도, 전류, 상태’ 식)

4. 통신 방식

  • TCP/IP 기반으로 통신
  • 보안(암호화, 인증), 데이터 구독(Subscription), 이력 저장(History Access) 등을 지원

🖥️ Python OPC UA 서버 코드

from opcua import Server
from datetime import datetime
import random
import time

# OPC UA 서버 생성
server = Server()
server.set_endpoint("opc.tcp://0.0.0.0:4840/freeopcua/server/")

# 네임스페이스 등록
uri = "http://example.org/opcua"
idx = server.register_namespace(uri)

# 객체 생성: Sensor
objects = server.get_objects_node()
sensor = objects.add_object(idx, "MySensor")

# 변수 생성
temperature = sensor.add_variable(idx, "Temperature", 25.0)
humidity = sensor.add_variable(idx, "Humidity", 40.0)

# 외부에서 값을 쓸 수 있도록 설정
temperature.set_writable()
humidity.set_writable()

# 서버 시작
server.start()
print("OPC UA 서버 실행 중...")

try:
    while True:
        # 가상의 데이터 업데이트
        temp_val = round(random.uniform(20, 30), 2)
        hum_val = round(random.uniform(35, 60), 2)

        temperature.set_value(temp_val)
        humidity.set_value(hum_val)

        print(f"{datetime.now()} → Temp: {temp_val}°C, Humidity: {hum_val}%")
        time.sleep(2)

except KeyboardInterrupt:
    print("서버 종료 중...")
    server.stop()

 

📡 주요 기능 설명

항목 설명
set_endpoint 클라이언트가 접속할 수 있는 서버 주소 (IP, 포트) 설정
register_namespace 사용자 정의 네임스페이스 URI 등록
add_object, add_variable OPC UA 구조 내 객체 및 변수 생성 (노드 구성)
set_value() 주기적으로 변수 값을 갱신하여 클라이언트에 실시간 데이터 제공

💡 예제: Python으로 OPC UA 클라이언트 만들기

아래는 Python에서 opcua 라이브러리를 활용해 실제 값을 읽는 간단한 예시입니다.

from opcua import Client

# OPC UA 서버 주소 (예: 장비 또는 시뮬레이터)
url = "opc.tcp://localhost:4840"

# 클라이언트 생성 및 접속
client = Client(url)
client.connect()
print("서버에 연결되었습니다.")

# 노드(변수) 지정: Node ID는 장비마다 다름
node = client.get_node("ns=2;s=Temperature")  # 예: 온도 변수
value = node.get_value()
print(f"현재 온도 값: {value}")

client.disconnect()

이 코드는 OPC UA 서버에 연결하여 "Temperature"라는 변수 값을 읽어옵니다.

 

https://www.youtube.com/watch?v=Em_Gx0rWc5U

 


🧪 실습용 무료 서버 추천

  • Prosys OPC UA Simulation Server
    윈도우에서 무료로 제공, 다양한 변수 제공
  • Unified Automation UA Expert
    전문 OPC UA 클라이언트 툴로 실시간 확인 가능
  • FreeOPCUA (Python 서버 구현)
    Python 기반 OPC UA 서버도 직접 구현 가능

📦 활용 예시 (현장 중심)

분야 예시 사용
제조라인 장비 온도/속도/불량률 실시간 수집
에너지 태양광 인버터 상태 모니터링
물류 AGV, 컨베이어 센서 상태 모니터링
스마트팩토리 MES ↔ PLC 연동, 에너지 절감 분석 등
 

https://www.youtube.com/watch?v=ZlJCuAeGPis

 

728x90