OPC-UA Pipe Gateway

Introduzione

opcua_pipe_gateway è un client OPC-UA che permette di leggere e scrivere variabili OPC-UA tramite interfaccia a riga di comando, utilizzando STDIN per i comandi e STDOUT per i risultati. L'applicazione è disponibile in due implementazioni: una versione Perl (opcua_pipe_gateway.pl) e una versione Python (opcua_pipe_gateway.py).

Entrambe le versioni condividono le stesse funzionalità di base e la stessa interfaccia utente, garantendo compatibilità e intercambiabilità nell'uso.

Funzionalità Comuni

Le seguenti funzionalità sono implementate in entrambe le versioni (.pl e .py):

Interfaccia a Riga di Comando

  • Lettura di variabili da STDIN
  • Output dei risultati su STDOUT
  • Messaggi di log e debug su STDERR
  • Processing line-buffered per uso in pipeline Unix

Operazioni su Variabili

  • Lettura di variabili scalari: lettura del valore completo di una variabile
  • Lettura di elementi array: accesso a singoli elementi tramite sintassi variabile[indice]
  • Scrittura di variabili scalari: scrittura di valori completi
  • Scrittura di elementi array: modifica di singoli elementi di array
  • Preservazione del tipo di dato: il tipo originale della variabile viene mantenuto durante le scritture

Formato NodeId Standard OPC-UA

  • Supporto per il formato standard ns=;=
  • Tipi supportati: s (stringa), i (numerico), g (GUID), b (bytestring)
  • Esempio: ns=2;s=Eth50._System._NetworkAdapter

Nomi Variabili con Spazi

  • Supporto per nomi variabili con spazi utilizzando virgolette
  • Sintassi: "variabile con spazi" := valore
  • Escape di virgolette e caratteri speciali

Tipi di Dato Supportati

  • Scalari: Int32, Double, Float, String, Boolean, UInt16, Int16, Int64, UInt32, UInt64, Byte, SByte
  • Array: tutti i tipi scalari supportati
  • Gestione automatica del tipo: inferenza e conversione automatica dei tipi

Autenticazione e Sicurezza

  • Autenticazione username/password: supporto per autenticazione basata su credenziali
  • Crittografia con certificati: supporto per certificati client (.pem o .der)
  • Chiave privata client: supporto per chiavi private (.pem o .der)
  • Certificato server: supporto per trust list con certificato server
  • Security policy: Basic256Sha256 SignAndEncrypt

Configurazione

  • File di configurazione: supporto per file di configurazione in formato key=value
  • Opzioni da riga di comando: tutte le opzioni possono essere specificate da riga di comando
  • Priorità configurazione: i valori da riga di comando hanno priorità su quelli nel file
  • Parametri configurabili: cert, key, server_cert, user, password, endpoint, log_level

Gestione Errori

  • Codici di uscita: sistema di codici di uscita per gestione errori
    • 0: Nessun errore
    • 1: Almeno una variabile ha restituito (error)
    • 2: Almeno una variabile ha restituito (out of band)
    • 3: Sia errori che "out of band" sono stati rilevati
  • Messaggi di errore: output su STDERR per diagnostica
  • Gestione array out of bounds: messaggio (out of band) per indici fuori dai limiti

Logging e Debug

  • Livelli di log configurabili: none, fatal, error, warn, info, debug, trace
  • Output debug: opzione --debug per output dettagliato
  • Log su STDERR: tutti i messaggi di log vengono inviati su STDERR

Formato Input/Output

  • Sintassi lettura: variabile o variabile[indice]
  • Sintassi scrittura: variabile := valore o variabile = valore (per retrocompatibilità)
  • Formato output: variabile = valore per scalari, variabile = [elemento1, elemento2, ...] per array
  • Caratteri speciali (Escape): gestione automatica di newline, tab, virgolette, ecc.

Compatibilità

  • Pipeline Unix: progettato per uso in pipeline e script shell
  • Processing line-buffered: ogni riga viene processata immediatamente
  • Compatibilità KEPServerEX: supporto per server industriali come KEPServerEX (TEstata versione V6)
  • Gestione ApplicationUri: estrazione automatica da certificati per compatibilità

Implementazioni

L'applicazione opcua_pipe_gateway è disponibile in due implementazioni che condividono le stesse funzionalità ma utilizzano librerie e approcci diversi:

Versione Perl (opcua_pipe_gateway.pl)

Libreria Utilizzata

  • Libreria base: OPCUA::Open62541 (wrapper Perl per la libreria C open62541)
  • Libreria C sottostante: open62541 v1.3.8 o superiore
  • Licenza libreria: MPL-2.0 (open62541), GPL v1 / Artistic License 1.0 (OPCUA::Open62541)

Caratteristiche Implementative

  • Gestione event loop: utilizza run_iterate() per processare eventi OPC-UA
  • Gestione connessione: controllo esplicito dello stato della sessione (SESSIONSTATE_ACTIVATED)
  • Gestione timestamp KEPServerEX: la libreria open62541 gestisce automaticamente i timestamp
  • Stabilizzazione sessione: esegue iterazioni aggiuntive dopo l'attivazione per stabilizzare la connessione
  • Gestione memoria: cleanup conservativo per evitare problemi di memoria

Dipendenze

  • Perl 5.24 o superiore
  • Modulo OPCUA::Open62541 da CPAN
  • Libreria open62541 compilata e installata
  • Moduli Perl standard: Time::HiRes, Data::Dumper

Vantaggi

  • Prestazioni: libreria C nativa per prestazioni ottimali
  • Stabilità: libreria open62541 ampiamente testata e utilizzata
  • Compatibilità: supporto completo per tutte le funzionalità OPC-UA
  • Eseguibile standalone: possibilità di creare eseguibili standalone con tutte le dipendenze

Versione Python (opcua_pipe_gateway.py)

Libreria Utilizzata

  • Libreria base: python-opcua (freeopcua)
  • Licenza libreria: LGPL-3.0

Caratteristiche Implementative

  • Gestione connessione: utilizza l'API ad alto livello di python-opcua
  • Discovery endpoint: esegue discovery automatico degli endpoint per trovare Basic256Sha256
  • Gestione timestamp KEPServerEX: implementazione esplicita per evitare timestamp nelle scritture
    • Utilizza set_attribute() invece di set_value() per controllo diretto
    • Imposta esplicitamente SourceTimestamp e ServerTimestamp a None
  • Gestione DataValue: creazione esplicita di DataValue senza timestamp per compatibilità KEPServerEX
  • Gestione errori: try/except per gestione robusta delle eccezioni

Dipendenze

  • Python 3.6 o superiore
  • Modulo opcua da pip
  • Moduli Python standard: sys, os, re, argparse, json, io

Vantaggi

  • Facilità di installazione: installazione semplice tramite pip
  • API ad alto livello: interfaccia più semplice e intuitiva
  • Gestione automatica: molte operazioni gestite automaticamente dalla libreria
  • Ambienti virtuali: supporto per ambienti virtuali Python per isolamento dipendenze

Differenze Principali

Gestione Timestamp per KEPServerEX

  • Versione Perl: la libreria open62541 gestisce automaticamente i timestamp. Non è necessario intervento esplicito.
  • Versione Python: implementazione esplicita per evitare timestamp. Utilizza set_attribute() con DataValue senza timestamp per evitare che KEPServerEX rifiuti le scritture.

Gestione Connessione

  • Versione Perl: controllo esplicito dello stato della sessione con getState() e iterazioni manuali con run_iterate().
  • Versione Python: gestione più automatica tramite l'API di python-opcua, con discovery automatico degli endpoint.

Gestione Tipi di Dato

  • Versione Perl: utilizza le costanti di tipo di open62541 (TYPES_INT32, TYPES_DOUBLE, ecc.).
  • Versione Python: utilizza gli enum di python-opcua (ua.VariantType.Int32, ua.VariantType.Double, ecc.).

Prestazioni

  • Versione Perl: prestazioni ottimali grazie alla libreria C nativa.
  • Versione Python: prestazioni generalmente buone, possono variare a seconda del carico e della versione di Python.

Installazione e Distribuzione

  • Versione Perl: richiede compilazione di open62541 e installazione del modulo Perl. Possibilità di creare eseguibili standalone.
  • Versione Python: installazione più semplice tramite pip, ma richiede Python e le dipendenze sul sistema target.

Gestione Errori

  • Versione Perl: gestione errori tramite status code e controllo esplicito dello stato.
  • Versione Python: gestione errori tramite eccezioni Python con try/except.

Esempi d'Uso

Entrambe le versioni supportano gli stessi esempi d'uso:

Lettura di Variabili

echo "the.answer" | opcua_pipe_gateway opc.tcp://127.0.0.1:4840
echo "the.answer" | opcua_pipe_gateway.py opc.tcp://127.0.0.1:4840

Scrittura di Variabili

echo "the.answer := 42" | opcua_pipe_gateway opc.tcp://127.0.0.1:4840
echo "the.answer := 42" | opcua_pipe_gateway.py opc.tcp://127.0.0.1:4840

Array

echo "test.array[0]" | opcua_pipe_gateway opc.tcp://127.0.0.1:4840
echo "test.array[0] := 99" | opcua_pipe_gateway opc.tcp://127.0.0.1:4840

Con Configurazione

echo "variabile" | opcua_pipe_gateway --config config.conf opc.tcp://127.0.0.1:4840
echo "variabile" | opcua_pipe_gateway.py --config config.conf opc.tcp://127.0.0.1:4840

Requisiti di Sistema

Versione Perl

  • Sistema operativo: Debian 10+ o Ubuntu 18.04+
  • Perl: versione 5.24 o superiore
  • Libreria open62541: versione 1.3.8 o superiore
  • Modulo Perl OPCUA::Open62541
  • Moduli Perl standard: Time::HiRes, Data::Dumper

Versione Python

  • Sistema operativo: Debian 10+ o Ubuntu 18.04+
  • Python: versione 3.6 o superiore
  • Libreria python-opcua (freeopcua)
  • Moduli Python standard: sys, os, re, argparse, json, io

Supporto

Per problemi o domande:

Copyright e Disclaimer

Copyright (c) 2025 Guido Brugnara <gdo@leader.it>. Tutti i diritti riservati.

Sono disponibili due licenze:
  • Commerciale (con supporto)
  • Open Source Artistic Lic. nella versione Perl

Il codice e la documentazione sono state redatte con l'ausilio di strumenti di supporto al lavoro basati su Intelligenza Artificiale.

Si declina ogni responsabilità nell'uso del software in caso di danni diretti o indiretti.

Questo software utilizza le seguenti librerie open source:

Per i dettagli completi delle licenze, consultare i file LICENSE delle rispettive librerie.

Per informazioni: ContattiLeader

Questa pagina: Portal > OpcUApipeGateway
Versione pagina: 23 Nov 2025, GuidoBrugnara
Questo sito utilizza FoswikiCopyright (©) Leader.IT - Italy P.I. IT01434390223 Informativa privacy & uso dei cookies