chevron_left
chevron_right

Flexible Schnittstellenprogrammierung in LabVIEW

Für eine flexible und erweiterbare Implementierung einer Schnittstelle sind diverse Aspekte zu berücksichtigen. Nebst verschiedenen Protokollen gilt es, auch verschiedene Arten von Nachrichten zu unterstützen. Bezüglich der Erweiterbarkeit, Wartbarkeit und Flexibilität bietet LabVIEW mit LVOOP ein passendes Werkzeug für die Umsetzung an.

 

Komplexe industrielle Systeme fordern zwischen den einzelnen Modulen oder Teilsystemen immer öfter verschiedene Schnittstellenarten. So lassen sich die verschiedensten Komponenten mit den unterschiedlichsten Kommunikationsprotokollen zu einem effizienten System verbinden. Um diesen Anforderungen gerecht zu werden, sollten die Schnittstellen bereits bei der Programmierung flexibel aufgebaut sein. Nur so können später weitere Funktionen integriert oder weitere Interfaces hinzugefügt werden.

Der Fokus bei der Implementierung sollte dabei vor allem auf dem Protokoll sowie den einzelnen Nachrichten liegen. Obwohl Nachrichten oft gemeinsame Komponenten wie beispielsweise Sender-ID oder Timestamp aufweisen, müssen sie dennoch auf Grund abweichender Priorität oder nachrichtenspezifischer Datentypen unterschiedlich behandelt werden. Auch die zahlreichen Protokolle handhaben das Senden oder Empfangen von Messages unterschiedlich, obwohl der prinzipielle Funktionsumfang (open, send, receive, close) meist identisch ist.

Objektorientierte Programmierung

Bei der objektorientierten Programmierung werden ähnliche Funktionalitäten verschiedener Systeme in Klassen abgebildet und zu einer Hierarchie zusammengefasst. Die oberste Klasse in dieser Struktur wird als Basisklasse bezeichnet. Von dieser ausgehend werden weitere Klassen abgeleitet, welche die Funktionen der Basisklasse verwenden, durch eigene Funktionen erweitern oder die Funktionen durch Abändern überschreiben können. Die Basisklasse der Nachrichten stellt Funktionen für das Erstellen und Versenden der Nachricht, sowie die für alle Klassen gültigen Datenfelder zur Verfügung. Die davon abgeleiteten Klassen für verschiedene Arten von Nachrichten enthalten die spezi­fischen Datenfelder. Zudem können sie weitere spezifische Funktionen enthalten oder einzelne Funktionen der Basisklasse überschreiben und so deren Funktionalität anpassen. Dieses Vorgehen kann man auch für Schnittstellen anwenden. Für verschiedene Interfaces lassen sich ausgehend von der Schnittstellen-Basisklasse spezifische Umsetzungen ableiten.

Umsetzung in LabVIEW

Die zuvor gemachten Überlegungen können in LabVIEW OOP (kurz LVOOP) direkt übertragen werden. Als vielleicht grösster Unterschied zu objektorientierter Programmierung in anderen Sprachen ist jedoch zu erwähnen, dass Klassen in LabVIEW lediglich private Daten enthalten können. Eine Klasse in LVOOP entspricht einem Cluster, also einer Sammlung von Daten unterschiedlichen Typs. Gegenüber der normalen Verwendung von Clustern sind die Daten in der Klasse aber gekapselt und können nur von Funktionen aus der zugehörigen Klasse oder deren abgeleiteten Klassen verändert werden.

Die einzelnen Nachrichten und Schnittstellen erhalten ihre spezifischen Funktionen in separaten VI, Virtuelle Instrumente. Durch den Wegfall der Unterscheidung verschiedener Schnittstellen und Nachrichtentypen innerhalb dieser Funktionen bleibt der Code schlank. Sind die Klassen für Schnittstelle und Nachrichten erstellt, kann über eine Queue die Kommunikation aufgebaut werden. Das Versenden ganzer Klassenobjekte als Nachricht über eine Queue hat mehrere Vorteile: Einerseits kann durch Steuerung der Queue eine Priorisierung der Nachrichten erfolgen, andererseits wird durch Dynamic Dispatching automatisch die der jeweiligen Nachricht zugeordnete Sendefunktion angewandt.

Für die Bedienung der Schnittstelle selbst bietet die Objektorientierung sowie das Dynamic Dispatching den Vorteil, dass durch die Änderung des zu Beginn des Programmes geladenen Schnittstellentyps automatisch sämtliche Schnittstellenzugriffe angepasst werden. Selbstverständlich lassen sich auch Funktionen implementieren, die einen Wechsel der Schnittstelle zur Laufzeit zulassen.

Vorteile von LVOOP

Da alle VI spezifisch auf eine Schnittstelle oder eine Nachricht zugeschnitten sind, bleibt der restliche Code übersichtlich und gut wartbar. Wenn im Laufe der Zeit neue Funktionen (Nachrichten) oder Schnittstellen implementiert werden müssen, kann die entsprechende Klassenhierarchie einfach erweitert werden. So bleibt die Flexibilität der Software über den gesamten Produktlebenszyklus erhalten.

Durch die Kapselung der Daten innerhalb der Klassen wird das Debugging erleichtert, da die Zugriffe auf die Daten klar geregelt sind. Um jederzeit den Überblick über die beiden Klassenhierarchien zu haben, ist eine aussagekräftige Dokumentation unerlässlich. Da die einzelnen Funktionen der Message- und der Interface-Klassen weniger komplex ausfallen als bei einer herkömmlichen Umsetzung, kann man mit der Druckfunktion in LabVIEW ohne grossen Aufwand eine gute Dokumentation erstellen.

Firmenbroschüre: 12-13_15.50.pdf

Infoservice


MEquadrat AG
Platz 4, 6039 Root D4
Tel. 041 541 99 10, Fax 041 541 99 11
info@mequadrat.ch, www.mequadrat.ch