OPC UA in MATLAB: Steuerung von Imperix B-Box Controllern mit dem Industrial Communication Toolbox

Die Verbindung von MATLAB mit Geräten über OPC UA ist ein entscheidender Schritt für moderne Automatisierungs- und Steuerungssysteme. Speziell die Steuerung von Geräten wie dem Imperix B-Box Digital Controller über OPC UA mit MATLAB eröffnet vielfältige Möglichkeiten für Forschung, Entwicklung und industrielle Anwendungen. Dieser Artikel beleuchtet, wie Sie mit dem Industrial Communication Toolbox für MATLAB und Simulink (früher OPC Toolbox) erfolgreich mit einem OPC UA Server kommunizieren, um die B-Box zu überwachen und zu steuern.

Einführung in OPC UA und MATLAB für die industrielle Kommunikation

OPC UA (Open Platform Communications Unified Architecture) ist ein herstellerunabhängiger Standard zur sicheren und zuverlässigen Datenübertragung in der industriellen Automatisierung. Er ermöglicht den Datenaustausch zwischen verschiedenen Geräten und Systemen, unabhängig von deren Plattform oder Hersteller. MATLAB, eine leistungsstarke Plattform für numerische Berechnungen und Softwareentwicklung, bietet durch das Industrial Communication Toolbox exzellente Möglichkeiten, sich mit OPC UA Servern zu verbinden und Daten zu verarbeiten.

Für Ingenieure und Entwickler, die sich mit Opc Ua Matlab auseinandersetzen, ist die Fähigkeit, auf OPC UA-Variablen zuzugreifen, unerlässlich. Dies ermöglicht nicht nur das Monitoring von Prozessdaten, sondern auch die Steuerung von Aktoren und die Anpassung von Parametern in Echtzeit.

Die Imperix B-Box und ihre OPC UA Server-Fähigkeiten

Der Imperix B-Box Digital Controller ist ein leistungsstarkes Werkzeug für schnelles Prototyping in der Leistungselektronik. Seine integrierte OPC UA Server-Funktionalität macht ihn zu einem idealen Kandidaten für die Integration in ein MATLAB-basiertes Steuerungssystem. Die von den Imperix-Controllern bereitgestellten OPC UA-Variablen sind umfassend dokumentiert, was die Implementierung erleichtert.

Weiterlesen >>  SAP Customer Management mit S/4HANA: Eine tiefgehende Analyse der On-Premise-Lösung

Die Dokumentation finden Sie unter imperix OPC UA Server.

Verbindung zum OPC UA Server mit MATLAB herstellen

Die erste Hürde bei der Nutzung von OPC UA MATLAB ist die erfolgreiche Verbindung zum OPC UA Server. Das Industrial Communication Toolbox bietet hierfür intuitive Funktionen.

Schritt 1: Serverinformationen abrufen

Mit der Funktion opcuaserverinfo() erhalten Sie ein OPC UA ServerInfo-Objekt, das detaillierte Informationen über den Server wie Beschreibung und Hostnamen enthält.

info = opcuaserverinfo('10.10.10.134');


Beispielhafte Ausgabe der MATLAB opcuaserverinfo Funktion

Schritt 2: OPC UA Client erstellen und verbinden

Anschließend erstellen Sie mit der Funktion opcua() ein OPC UA Client-Objekt. Dieses Objekt ermöglicht Ihnen, eine Verbindung zum Server herzustellen (connect()) und deren Status zu überprüfen (isConnected()). Das Trennen der Verbindung erfolgt mit disconnect().

client = opcua(info);
connect(client);
isConnected(client); % Gibt 1 zurück, wenn verbunden, 0 sonst
disconnect(client);

Alternativ kann die Funktion opcua() direkt die IP-Adresse und den Port als Parameter entgegennehmen:

client = opcua('10.10.10.134', 4840);

Wichtiger Hinweis zur Fehlerbehebung: Falls opcuaserverinfo funktioniert, aber opcua einen “not enough input arguments”-Fehler ausgibt, liegt dies oft daran, dass Windows den Hostnamen nicht auflösen kann. In diesem Fall müssen Sie die Datei C:WindowsSystem32driversetchosts bearbeiten und das Paar “Hostname/IP” manuell hinzufügen.

OPC UA Variablen lesen und schreiben mit MATLAB

Nach erfolgreicher Verbindung können Sie OPC UA-Variablen einfach lesen und schreiben.

Schritt 1: OPC UA Server Node Objekt erstellen

Zuerst erstellen Sie ein OPC UA Server Node-Objekt mithilfe der Funktion findNodeByName(). Diese Funktion benötigt den Namespace des Clients und den Namen der gesuchten Variable.

cpu_load_node = findNodeByName(client.Namespace, 'CPU load [%]');

Schritt 2: Werte lesen oder schreiben

Mit den Funktionen readValue() und writeValue() können Sie dann den Wert der Variable auslesen oder einen neuen Wert zuweisen.

% Lesen der CPU-Last-Variable
current_cpu_load = readValue(client, cpu_load_node);

% Schreiben eines neuen Wertes in eine konfigurierbare Benutzer-Variable (z.B. Vdc_ref)
writeValue(client, findNodeByName(client.Namespace, 'Vdc_ref'), 10.5); % Beispielwert 10.5V


Beispiel einer benutzerdefinierten GUI zur Interaktion mit einem Imperix Controller

Steuerung von PWM-Ausgängen über OPC UA

Die direkte Ausführung von OPC UA-Methoden wie “Enable outputs” und “Disable outputs” wird vom MATLAB Industrial Communication Toolbox OPC UA Client derzeit nicht unterstützt. Dennoch können Sie die Funktionalität zur Aktivierung und Deaktivierung von PWM-Ausgängen über spezielle Blöcke oder durch gezielte Schreiboperationen auf entsprechende Variablen implementieren.

Weiterlesen >>  Firefox Download Mac M1: Installation auf Apple Silicon Geräten

Vorsicht: Die Aktivierung von PWM-Ausgängen muss mit äußerster Sorgfalt erfolgen, um schwerwiegende Schäden am Umrichter zu vermeiden.

Durchsuchen von OPC UA Variablen mit MATLAB

Anstatt jeden Variablennamen explizit mit findNodeByName() anzugeben, bietet die Funktion browseNamespace() eine komfortable Möglichkeit, den Namespace des OPC UA Servers zu durchsuchen. Nach Auswahl der gewünschten Nodes mit der OK-Schaltfläche gibt browseNamespace() die entsprechenden OPC UA Server Node-Objekte zurück, die dann für Lese- oder Schreibvorgänge verwendet werden können.

nodes = browseNamespace(client);
values = readValue(client, nodes);


Browserfenster für OPC UA-Variablen im MATLAB Interface

Erstellung einer GUI mit App Designer als OPC UA Client

Das Industrial Communication Toolbox ermöglicht die einfache Integration in eine von MATLAB App Designer erstellte grafische Benutzeroberfläche (GUI). Dies vereinfacht die Bedienung von OPC UA-fähigen Geräten erheblich und verwandelt MATLAB in eine leistungsstarke HMI-Plattform.

Deklaration des Clients in App Designer

Innerhalb des Code-Editors von App Designer deklarieren Sie zunächst den client als Property, damit er in allen Funktionen und Callbacks der App zugänglich ist:

properties (Access = private)
    client;
end

Initialisierung des Clients in der Startup-Funktion

In der StartupFcn der GUI initialisieren Sie das client-Objekt mit dem Typ opc.ua.Client:

% Code, der nach der Erstellung der Komponenten ausgeführt wird
function startupFcn(app)
    app.client = opc.ua.Client;
end

Verbindungssteuerung über Buttons

Ein “Connect”-Button kann mit Funktionen zum Verbinden und Trennen (connect(), disconnect()) programmiert werden. Die IP-Adresse des Servers kann beispielsweise über ein EditField UI-Element eingegeben werden.

% Button-Callback-Funktion: ConnectButton
function ConnectButtonPushed(app, event)
    if isConnected(app.client) == 1
        disconnect(app.client);
        app.client = opc.ua.Client; % Client zurücksetzen
    else
        ip = app.TargetIPEditField.Value; % IP aus EditField lesen
        try
            info = opcuaserverinfo(ip);
            hostname = info.Hostname;
            try
                app.client = opcua(info);
                connect(app.client);
            catch
                msgbox({['Ziel ' ip ' (' hostname ') gefunden, aber Verbindung fehlgeschlagen. ']; ...
                        '' ; ...
                        ['Hinweis: Aufgrund einer Einschränkung des Industrial Communication Toolbox müssen Sie möglicherweise die Datei C:WindowsSystem32driversetchosts bearbeiten und die Zeile "' ip ' ' " hostname '" manuell hinzufügen']});
            end
        catch
            msgbox(['Verbindung zu ' ip ' fehlgeschlagen.']);
        end
    end
end

Interaktion mit OPC UA Variablen über UI-Komponenten

Die zuvor beschriebenen Lese- und Schreibfunktionen (readValue(), writeValue()) können nun in den Callbacks von Timern oder anderen UI-Komponenten verwendet werden, um mit den verfügbaren OPC UA-Variablen zu interagieren.

% Button-Callback-Funktion: PrechargebusandactivatePWMButton
function PrechargebusandactivatePWMButtonPushed(app, event)
    if UserCodeIsRunning(app) % Beispielbedingung
        activate_cmd_value = readValue(app.client, findNodeByName(app.client.Namespace, 'activate'));
        if activate_cmd_value == 0
            writeValue(app.client, findNodeByName(app.client.Namespace, 'activate'), 1);
            app.PrechargebusandactivatePWMButton.Text = 'Deactivate all PWM, open relays';
        else
            writeValue(app.client, findNodeByName(app.client.Namespace, 'activate'), 0);
            app.PrechargebusandactivatePWMButton.Text = 'Precharge bus and activate PWM';
        end
    end
end

Troubleshooting: Häufige Probleme bei der OPC UA Verbindung mit MATLAB

MATLAB opcua Funktion „not enough input arguments“ Fehler

Wenn die opcuaserverinfo-Funktion erfolgreich ist, aber opcua den Fehler “not enough input arguments” ausgibt, selbst bei direkter Angabe einer IP-Adresse, liegt dies wahrscheinlich an der Unfähigkeit von Windows, den Hostnamen aufzulösen.

>> client = opcua('10.10.10.134', 4840)
Error using strncmpi
Not enough input arguments.
Error in opc.ua.Client (line 387)
  if ~strncmpi(this(tI).Hostname, urlParts.Hostname, numel(this(tI).Hostname))
Error in opcua (line 43)
  uaObj = opc.ua.Client(varargin{:});


Fehlermeldung bei Problemen mit der Hostnamen-Auflösung

Selbst wenn eine IP-Adresse direkt an die opcua-Funktion übergeben wird, versucht das Toolbox intern, über den Hostnamen zu verbinden. Die Lösung besteht darin, die Datei C:WindowsSystem32driversetchosts mit Administratorrechten zu bearbeiten und das Paar “Hostname/IP” manuell hinzuzufügen.

Weiterlesen >>  Google Chrome auf Ubuntu installieren: Die ultimative Anleitung für 24.04 LTS


Bearbeitung der Hosts-Datei zur manuellen IP-Auflösung

MATLAB readValue Fehler „index exceeds the number of array elements (0)“

Wenn die readValue()-Funktion den Fehler “index exceeds the number of array elements (0)” zurückgibt, obwohl Sie sicher sind, dass der OPC UA-Knoten existiert, kann dies daran liegen, dass der OPC UA-Client nicht aktuell ist und die OPC UA-Knoten neu durchsuchen muss. Eine einfache Lösung ist es, die Verbindung zu trennen und neu aufzubauen.

>> readValue(findNodeByName(client.Namespace, 'my_probe'))
Index exceeds the number of array elements (0).
Error in opc.ua.Node/isSameClient (line 545)
  tf = ~isempty(this(1).Client);
Error in opc.ua.Node/readValue (line 802)
  if ~isSameClient(nodeList)

Durch eine erneute Trennung und Verbindung (disconnect(client); connect(client);) kann dieses Problem oft behoben werden.

Fazit

Das Industrial Communication Toolbox für MATLAB bietet eine leistungsstarke und flexible Lösung für die Integration von OPC UA in Ihre Automatisierungs- und Steuerungsanwendungen. Die Möglichkeit, mit dem OPC UA MATLAB die Imperix B-Box Controller zu überwachen und zu steuern, eröffnet neue Wege für Forschung und industrielle Anwendungen. Durch die klare Dokumentation und die intuitive Handhabung von Funktionen wie opcua, readValue und writeValue sowie die Unterstützung durch App Designer wird die Entwicklung komplexer Systeme vereinfacht. Beachten Sie die Tipps zur Fehlerbehebung, um eine reibungslose Implementierung zu gewährleisten und das volle Potenzial von OPC UA in MATLAB auszuschöpfen.