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.
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.
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;
endInitialisierung 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;
endVerbindungssteuerung ü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
endInteraktion 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
endTroubleshooting: 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.

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.
