Functional-Prototyping-Serie: Algorithm Engineering

Überblick

Die Functional-Prototyping-Serie ist eine Sammlung von Artikeln, die Sie durch den Prototyping-Prozess führen. Lesen Sie weiter, um wichtige Konzepte, Vorteile der Prototypenerstellung, Diskussionen zur Produktauswahl und zusätzliche technische Ressourcen zu erfahren.

Inhalt

Algorithm Engineering

Algorithm Engineering ist ein Begriff für den Entwurf von angewandten Algorithmen. Es geht um den Prozess der Umwandlung eines Bleistift-und-Papier-Algorithmus in eine robuste, gut getestete und benutzerfreundliche Implementierung. Die Implementierung eines Algorithmus zur Bereitstellung der gewünschten Funktionalität in einem Prototyp kann der schwierigste Teil des gesamten Produktentwicklungslebenszyklus sein, hat aber auch das Potenzial, am lohnenswertesten zu sein. Durch die Anwendung von realen I/O können Sie sehen, wie die Funktionalität Ihres Algorithmus vor Ihren Augen zum Leben erweckt wird. 

In diesem Artikel werden einige der Fallstricke untersucht, auf die Entwickler beim Entwerfen von Algorithmen stoßen können, sowie die Vorteile der Verwendung grafischer Systemdesigns zur Bewältigung dieser Herausforderungen.

Herausforderungen beim Algorithm Engineering 

Die Implementierung von Algorithmen in einen funktionalen Prototyp kann aus verschiedenen Gründen schwierig sein:

Einschränkungen bei der Programmierung.

Steuerungen oder Prozessoren, die aufgrund ihrer I/O-Fähigkeiten ausgewählt werden, z. B. Field Programmable Gate Array (FPGAs), bedeuten für den Entwickler oft Einschränkungen bei der Programmierung. Die Programmierung für verschiedene Plattformen erfordert in der Regel Programmierkenntnisse, die nur wenige System-Level-Designer ausreichend beherrschen.

Implementierung grundlegender Algorithmen.

Die Implementierung von Low-Level-Algorithmen für grundlegende Funktionen nimmt Zeit in Anspruch. Geschwindigkeit ist das A und O bei der Prototypenerstellung, und Designer können es sich oft nicht leisten, einen bekannten Algorithmus von Grund auf neu zu implementieren, da kein Code vorhanden ist.

Überarbeitung von Algorithmen für mehrere Plattformen.

Im Zuge der Weiterentwicklung des Funktionsprototyps müssen Algorithmen oft erneut aufgegriffen werden, um sie auf einen anderen Systemtyp zu übertragen. Der Code funktioniert selten zwischen verschiedenen Laufzeitumgebungen. Das macht die Skalierung einer Anwendung vom Prototyping bis zur Bereitstellung schwierig.

Test und Verifizierung.

Ob ein System die funktionalen Anforderungen erfüllen kann, lässt sich bis zum Ende des Prozesses nur schwer abschätzen, und ein Neubeginn ist teuer. Der Prozessor kann beispielsweise die erforderliche Anzahl von parallelen Tasks nicht schnell genug ausführen. Es kann möglicherweise keine ausreichende Zykluszeit erreicht werden. Außerdem kann die prozessorintensive Analyse möglicherweise nicht in Echtzeit ausgeführt werden.

Die Vorteile des grafischen Systemdesigns für Algorithm Engineering

Beim grafischen Systemdesign werden viele der potenziellen Fallstricke behoben, die bei der Entwicklung von Algorithmen für einen Funktionsprototypen auftreten können. Grafisches Systemdesign ist ein Ansatz zur Lösung von Designherausforderungen, der intuitive grafische Programmierung und flexible kommerzielle Standardhardware (COTS, Commercial off-the-shelf) kombiniert. Mit diesem Ansatz können Sie für alle Phasen des Entwurfs eine einzige Umgebung verwenden. Sehen Sie sich nun genauer an, wie dieser Ansatz die oben genannten Herausforderungen angeht.

Mehrere Rechenmodelle

Einer der Vorteile des grafischen Systemdesigns besteht darin, dass es Programmierern die Möglichkeit gibt, ihre Algorithmen unabhängig vom Berechnungsmodell (MoC, Model of Computation) zu erstellen, mit dem sie implementiert werden. Da der Code für Algorithmen immer komplexer wird, müssen Programmierer verschiedene Berechnungsmodelle (MoCs) verwenden, um ihre Programmierfähigkeiten zu erweitern. Im Folgenden finden Sie einige Berechnungsmodelle, die Sie beim grafischen Systemdesign verwenden können:

Datenfluss

Datenfluss ist das MoC, das am häufigsten mit der Software LabVIEW von NI in Verbindung gebracht wird. Beim Datenfluss muss der Entwickler vor der Ausführung an allen Eingängen Daten einfügen. Der Datenfluss ist eine intuitive Programmierstruktur, die die Implementierung von Anwendungen wie parallelen Prozessen vereinfacht.

Textbasierte Mathematik

Textbasierte Mathematik ist ein weiteres Werkzeug zum einfachen Erstellen komplexer Funktionen. Textbasierte Mathematik ist eine für Menschen lesbare Implementierung oft komplexer Algorithmen, die einfacher in Form einer Skriptbeschreibung zu schreiben sind. Beispiele für textbasierte Mathematik sind der Formelknoten und der MATLAB-Skriptknoten. Mit LabVIEW können Sie die am besten geeignete Syntax für die Entwicklung von Algorithmen auswählen, sei es bei der Entwicklung von Algorithmen, der Erforschung von Signalverarbeitungskonzepten oder der Analyse von Ergebnissen.

C-Code

Manchmal wurde der verwendete Algorithmus ursprünglich in C oder C++ erstellt. In diesem Fall müssen Sie die vorherige Arbeit nicht mehr verwerfen. Sie können stattdessen auch den Inline-C-Knoten oder den Knoten zum Aufruf externer Bibliotheken verwenden, um Ihren vorherigen Programmcode direkt in LabVIEW aufzurufen. Verwenden Sie den Inline-C-Knoten, um bereits vorhandenen C-Code oder kleine numerische oder Array-Algorithmen zu implementieren. Verwenden Sie den Knoten zum Aufruf externer Bibliotheken, um auf C-Code in DLLs oder gemeinsam genutzten Bibliotheken zuzugreifen.

Erfahren Sie mehr über die Verwendung von Python, MathWorks®MATLAB®-Software und C/C++ mit LabVIEW

Offene Softwarearchitektur

Im Laufe der Jahre hat die LabVIEW-Plattform in zahlreichen Designdisziplinen eine breite Akzeptanz gefunden, was dazu führte, dass Daten mit verschiedenen Design- und Simulationswerkzeugen zusammengeführt werden mussten. LabVIEW erreicht diese Kompatibilität mit zahlreichen Integrationswerkzeugen, Bibliotheken und Dateiformaten. LabVIEW bietet außerdem eine Vielzahl von Standardintegrationsfunktionen mit anderen Softwaretools und Messressourcen, darunter die folgenden:

  • DLLs, gemeinsam genutzte Bibliotheken
  • ActiveX, COM und .NET (Microsoft)
  • DDE, TCP/IP, UDP, Ethernet, Bluetooth
  • CAN, DeviceNet, Modbus, OPC
  • USB, IEEE 1394, RS232/485, GPIB
  • Datenbanken (ADO, SQL usw.)

Mit diesen Werkzeugen ist die Integration mit Daten fast aller Arten von Mess- und Regelgeräten möglich. Durch die Kombination von LabVIEW mit universellen Standards für die Hardwarekommunikation können Entwickler Kompatibilität und Skalierbarkeit für viele Jahre sicherstellen.

Der LabVIEW-Ansatz

Die Hunderte von Funktionen in LabVIEW, die eine Vielzahl traditioneller Algorithmen in den Bereichen Mathematik, Signalverarbeitung, Wahrscheinlichkeits- und Regelungstechnik abdecken, sind wesentliche Bausteine für jeden benutzerdefinierten Algorithmus. Diese Funktionen erleichtern das Schreiben von Low-Level-Code und geben Ingenieuren die Zeit, sich auf eine Lösung statt auf die Implementierung zu konzentrieren.

Da die Erfassung von Messwerten mit LabVIEW so einfach ist, sollten Benutzer ihre Algorithmen mit tatsächlichen Daten testen, um sie iterativ zu optimieren. Bei diesem interaktiven Testansatz können Sie mit verschiedenen Funktionen experimentieren, um festzustellen, ob das gewünschte Ergebnis geliefert wird. Wenn Sie beispielsweise ein Signal mit einem Filter verarbeiten, können Sie aus einer Vielzahl von Lösungen auswählen, das gewünschte Signal erfassen und die Ergebnisse in einem Graph oder einer Datei anzeigen. Wenn die Ergebnisse nicht für die Anwendung geeignet sind, können Sie einen anderen Filter auswählen. Oftmals ist es einfacher, das tatsächliche Signal für einen Algorithmus zu erfassen, als es mit einer Software zu simulieren.

 

COTS-Hardware

Kommerzielle Standardhardware (COTS, Commercial off-the-shelf) bietet nicht nur eine kostengünstige Möglichkeit, schnell mit der Prototypenerstellung zu beginnen, sondern hilft Ihnen beim grafischen Systemdesign auch bei der Implementierung nativer Algorithmen auf einer großen Anzahl verschiedener Zielsysteme mit integrierter I/O. Verwenden Sie Echtzeitprozessoren, wie sie auf den CompactRIO- und PXI-Plattformen von NI zu finden sind, um I/O mit deterministischer Steuerung zu integrieren und so die Zuverlässigkeit zu erhöhen. Dies ist beispielsweise bei Hardware-in-the-Loop-Anwendungen von entscheidender Bedeutung, bei denen Hard- und Software eng integriert werden müssen, um die Umgebung, die von den Regelalgorithmen gesteuert werden soll, dynamisch zu simulieren.

Neben der Verwendung von Echtzeitprozessoren mit FPGAs können Sie LabVIEW in Ihre Anwendung integrieren, um Code von einem COTS-Hardwaretyp auf einen anderen zu übertragen. So können Sie beispielsweise Code, der ein Signal auf einem Desktop-Computer analysiert, für reale I/O transportieren und in Formfaktoren wie PXI-Modulen oder Embedded-Prozessoren verwenden, ohne ihn wesentlich umschreiben zu müssen. Wenn Sie einen Prototyp zunächst auf einem Desktop-Computer entwerfen und verifizieren und ihn dann für den Einsatz in einem Embedded-System auf einen 32-Bit-Prozessor übertragen, können Sie viel Entwicklungsdauer und kostspielige Nacharbeiten aufgrund übersehener Entwurfsregeln sparen.

Werkzeuge für Simulation und Reglerdesign

Da LabVIEW eine offene Plattform ist, können Sie Ihre Messwerte mit simulierten Ergebnissen abgleichen. Sie können sogar simulierte und physikalische Daten für die Verhaltensmodellierung austauschen. Darüber hinaus können Sie physikalische Tests mit simulierten Stimuli durchführen, um eine robuste Testumgebung bereitzustellen.

Verwenden Sie die Simulation mit LabVIEW , um die Leistung für Entwurfskriterien zu überprüfen und vorherzusagen. Sie können Konstruktionen zur frühen Designbewertung in separate Simulationswerkzeuge importieren. Der nächste Schritt umfasst die automatisierte Layout- oder Modellbildung und Werkzeuge zur Automatisierung des Build-Vorgangs. Das Speichern von Systemzustandsinformationen und (gegebenenfalls) Ausgangssignalen hilft Ihnen bei der Fehlersuche in Anwendungen und bei der Festlegung von Spezifikationen für die Anwendungsleistung.

Mithilfe von Steuerblockdiagrammen, wie sie im LabVIEW Control Design and Simulation Module enthalten sind, können lineare, nichtlineare, diskrete oder stetige Regelsysteme entworfen werden. Bei diesem abstrahierten Programmierstil können Sie mit herkömmlichen Regelungskonzepten wie Übertragungsfunktionsblocks, Integratoren, Differenzierern und Rückkopplungsschleifen programmieren. Mithilfe dieses allgemeinen Blockdiagramms können Sie Lösungen auf der konzeptionellen Ebene entwickeln, bei der Sie Ihre bisherigen Erfahrungen und Kenntnisse über ein System einbringen können.

Abbildung 1. PID-Regelung mit Reglerdesign und Simulation

 Nächste Schritte

Die Entwicklung der Algorithmen, die die Funktionalität Ihres Prototyps implementieren, kann ein anspruchsvoller Prozess sein. Grafisches Systemdesign ist ein Ansatz, der sich die enge Integration zwischen intuitiver grafischer Software und COTS-Hardware zunutze macht, um Sie bei der Bewältigung der Herausforderungen im Zusammenhang mit der Entwicklung von Algorithmen zu unterstützen und Ihren Prototypen schnell und kostengünstig in Betrieb zu nehmen.

Weitere Informationen zu den technischen Aspekten des Übergangs vom Papierdesign zum Softwaredesign finden Sie in den folgenden Ressourcen.