O que é python-opcua?
O python-opcua é uma biblioteca de código aberto licenciada sob LGPL que implementa o protocolo OPC UA (Open Platform Communications Unified Architecture) totalmente em Python. Ele permite que você crie servidores e clientes OPC UA de forma simples e rápida, ideal para integração de dados em ambientes industriais.
Vantagens do python-opcua
- Escrito em Python – Não há necessidade de compilação em C++
- Multiplataforma – Funciona em Windows, Linux, macOS e dispositivos como Raspberry Pi
- LGPL – Permite uso comercial com liberdade de modificação
- Funcionalidades completas – Suporte a leitura/escrita de dados, eventos, histórico, segurança e mais
- Testes automatizados – Cobertura superior a 95%
Passo a passo: Crie um sistema funcional em minutos
Passo 1: Instale a biblioteca
Instale via pip:
pip install opcua
Para usuários de Ubuntu, também há suporte via apt:
apt install python-opcua
apt install python-opcua-tools
Passo 2: Configure um servidor OPC UA
Exemplo de código para criar um servidor que simula a leitura de temperatura:
from opcua import Server
import time
import random
server = Server()
server.set_endpoint("opc.tcp://0.0.0.0:4840/factory/temperature/")
uri = "http://factory.temperature"
idx = server.register_namespace(uri)
objects = server.get_objects_node()
sensor = objects.add_object(idx, "AmbientSensor")
temp_var = sensor.add_variable(idx, "CurrentTemp", 20.0)
temp_var.set_writable()
server.start()
print("Servidor ativo na porta 4840")
try:
while True:
new_value = 20.0 + random.uniform(-1.5, 1.5)
temp_var.set_value(new_value)
time.sleep(3)
finally:
server.stop()
Passo 3: Crie um cliente OPC UA
Exemplo de cliente que se conecta ao servidor e monitora as atualizações:
from opcua import Client
client = Client("opc.tcp://192.168.1.100:4840/factory/temperature/")
client.connect()
root = client.get_root_node()
temp_node = root.get_child(["0:Objects", "2:AmbientSensor", "2:CurrentTemp"])
print(f"Temperatura atual: {temp_node.get_value()}°C")
class TempHandler:
def datachange_notification(self, node, val, data):
print(f"Nova temperatura registrada: {val}°C")
handler = TempHandler()
subscription = client.create_subscription(500, handler)
subscription.subscribe_data_change(temp_node)
client.disconnect()
Aplicações reais
Monitoramento de equipamentos
Conecte sensores e PLCs para coletar dados em tempo real, como temperatura, pressão e status operacional de máquinas.
Integração entre sistemas
Facilite a comunicação entre SCADA, sistemas Linux e plataformas na nuvem, criando um fluxo de dados contínuo da fábrica ao data center.
Prototipagem rápida
Use ferramentas CLI como uals, uaread e uasubscribe para testar e depurar comunicações OPC UA sem codificação.
Recursos avançados
Configuração de segurença
server = Server()
server.set_security_policy([
ua.SecurityPolicyType.Basic256Sha256_SignAndEncrypt
])
server.load_certificate("server.crt")
server.load_private_key("server.key")
Armazenamento de histórico de dados
from opcua.server.history import HistoryDict
history = HistoryDict()
myvar.set_history_storage(history)
Estruturas de dados personalizadas
class MachineData:
def __init__(self):
self.active = True
self.rpm = 1500
self.status_code = 0
server.register_extension_object("MachineData", MachineData)
Dicas e práticas recomendadas
- Comece com exemplos simples e adicione recursos progressivamente
- Habilite o cache de espaço de endereços para acelerar o tempo de inicialização
- Implemente segurança desde o início, mesmo em ambientes de teste
- Use logs detalhados para facilitar a depuração
- Considere migrar para
opcua-asynciopara aplicações de alto desempenho