Einführung
Funktionsweise und Philosophie des Laufzeitsystems
Das Herzstück von iPlus-framework ist ein objektorientiertes, komponentenbasiertes Framework, das auf dem .NET-Framework von Microsoft® aufsetzt. Es ist vollständig serviceorientiert aufgebaut. Das bedeutet, dass alle Klassen bzw. Komponenten nur per Konfiguration in der Datenbank zum Leben erweckt werden. Alle Instanzen können netzwerktransparent miteinander kommunizieren. Auch die Programmierung der Komponenten erfolgt netzwerktransparent. Somit ergibt sich eine grenzenlose Skalierbarkeit des Systems und es können Multitier-Architekturen per Mausklick aufgebaut werden. Das System arbeitet zudem völlig ereignisgesteuert, um eine fast echtzeitnahe Prozessabarbeitung und Visualisierung zu ermöglichen.
Aufgrund der serviceorientierten Architektur, können verschiedene Hersteller Ihre eigenen Lösungen entwickeln, die später gemeinsam auf einem Zielsystem laufen, ohne dass eine Kompilierung zu einem Gesamtsystem notwendig ist. Es ist vergleichbar mit einem herkömmlichen Paketverwaltungssystem wie z.b. nuget jedoch mit den wesentlichen Unterschieden, dass
Daraus ergeben sich folgende Vorteile:
Erklärung und Einordnung von IPlus anhand der Softwareschichten und .NET-Assemblies
iPlus ist mit Visual-Studio entwickelt und setzt auf dem .NET-Framework 4.8 auf:
iPlus-framework kann entweder eigenständig oder mit MES-Funktionalitäten genutzt bzw. lizenziert werden. Für die egenständige Nutzung von iPlus werden als Mindestkonfiguration die Assemblies 1,2,3,5 benötigt (optionale 4). Für die MES-Funktionalität werden zusätzlich Assemblies vom Typ 5,6,7 (optional 4) benötigt.
Konkret sind das für
iPlus:
gip.core.datamodel
gip.core.autocomponent
gip.core.layoutengine
gip.core.dbsyncer
gip.core.ControlScriptSync
gip.core.manager
gip.core.processapplication
gip.core.reporthandler
gip.core.archiver
gip.core.communication
gip.core.visualcontrols
gip.bso.iplus
gip.mes.client
gip.iplus.console
gip.iplus.service
gip.iplus.startup
gip.tool.installerAndUpdater
gip.ext.chart
gip.ext.design
gip.ext.designer
gip.ext.editor
gip.ext.essentcollections
gip.ext.essentinterop
gip.ext.fluent
gip.ext.graphics
gip.ext.modbus
gip.ext.opctoolbox
gip.ext.widgets
gip.ext.xamldom
gip.core.scichart
gip.bso.twincat3
gip.bso.tcStudio
gip.core.tcAgent
gip.core.tcClient
gip.core.tcShared
Zusätzlich für iplus-MES:
gip.mes.datamodel
gip.mes.autocomponent
gip.mes.manager
gip.mes.facility
gip.mes.maintenance
gip.mes.processapplication
gip.mes.archiver
gip.bso.facility
gip.bso.licence
gip.bso.logistics
gip.bso.manufacturing
gip.bso.masterdata
gip.bso.purchasing
gip.bso.sales
gip.core.processfacility
gip2006.core.processapplication
tcat.variobatch.processapplication
Alle Assemblies werden dynamisch vom iPlus-Framework geladen und die Instanzieerung der Klassen und Komponenten, die auf dem iPlus-Framework basieren, erfolgt überwiegend per Reflektion. Damit das funktioniert müssen diese Assemblies einem bestimmten Namensschema entsprechen (siehe Asteriske Bild oben). Das beduetet, wenn Sie eine eigene Assembliy bauen wollen, die auf dem iPlus-Framework aufsetzt müssen Sie sich der Namenskonvention anpassen. Dabei gelten folgende Regeln:
Teil 1 des Dateinamens entspricht Ihrem Firmennamen.
Teil 2 des Dateinamens informiert über die Einordnung der Abstraktionsebene
Teil 3 des Dateibnamens ist frei vergebbar. Benutzen Sie einen Namen, der möglichst prägnant ist.
Die gip.core.datamodel.dll-Assembly (1)
Die gip.core.datamodel.dll-Assembly setzt auf dem Entity-Framework auf um Zugriffe auf die Datenbank ausführen zu können. In der Datenbank werden
gespeichert.
Per Hilfsklassen/Methoden können diese Informationen abgefragt und verändert werden. Die gip.core.datamodel ist vergleichbar mit dem Typ- und Reflection-System von .NET, jedoch mit dem Unterschied dass dies mittels Datenbank geschieht. Dies ist notwendig, damit man mittels der iPlus-Entwicklungsumgebung objektorientiert programmieren kann ohne neue .NET-Typen oder Assemblies erstellen zu müssen.
Weitere Aufgaben der gip.core.datamodel sind:
Die gip.core.autocomponent-Assembly (2)
Die gip.core.autocomponent-Assembly implementiert die abstrakten Definitionen aus der gip.core.datamodel. Sie ist die Basis-Assembly auf der alle weiteren Assemblies aufbauen welche Modellklassen enthalten (keine Präsentation). Der Name "autocomponent" ist eine Abkürzung für "Automation-Component" welche die Basisklasse für alle Klassen ist, die später durch die iPlus-Runtime instanziiert und verwaltet werden.
Die Basisklasse "ACComponent" übernimmt folgende Aufgaben:
ACComponent ist vergleichbar mit der Klasse "System.Object" im .NET-Framework. Alle weiteren Klassen erben von ihr. Wenn Sie also Ihre eigene brachenspezifische Assembly bauen wollen sollten Sie mindestens von ACComponent ableiten.
Weitere Funktionalitäten der gip.core.autocomponent-Assembly:
Die gip.core.layoutengine-Assembly (3)
Die Präsentation erfolgt mittels WPF/XAML. Normalerweise liegen bei WPF-Anwendungen die Oberflächen als kompilierte BAML-Resourcen in der entsprechenden Assembly vor. iPlus geht hier einen anderen Weg: Alle Designs sind als XAML in der Datenbank gespeichert. Sobald eine ACComponent präsentiert werden soll, wird der XAML-Code aus der Datenbank geladen und Just-In-Time vom XAML-Parser kompiliert und vom iPlus-Framework präsentiert. Dies ist die wichtigste Aufgabe der gip.core.layoutengine.
Der datenbankbasierte Ansatz hat den Vorteil, dass die komplette Oberfläche kundenspezifisch verändert werden kann ohne ohne die Updatefähigkeit zu verlieren. Ausserdem ist der datenbankbasierte Ansatz notwendig da iPlus gleichzeitig auch ein SCADA-System ist.
Weitere Aufgaben der gip.core.layoutengine sind:
Ihre eigenen Steuerelemente verwenden
Wenn Sie Ihre eigenen Steuerelemente entwickeln wollen sollten Sie auf der gip.core.layoutengine aufsetzen. Benennen Sie Ihre Assembly entsprechend den Namenskonventionen und verwenden Sie "controls" als Postfix. Ein Beispiel dafür ist die gip.core.visualcontrols.dll. Sie beinhaltet Steuerelemente für die Automatisierungstechnik.
Klassenbibliotheken zur Erweiterung der Entwicklungsumgebung oder Anwendungsfunktionalität
Assemblies, die das Wort "Manager" beinhalten, enthalten meist Komponenten welche dazu dienen die Entwicklungsumgebung oder Businessobjekte um Funktionalitäten zu erweitern. Businessobjekte sind Automation-Components, die an der Oberfläche angezeigt werden und mit Anwendungstabellen arbeiten (z.B. Materialverwaltung, Lagerplatzverwaltung, Lieferscheine,... aber auch die iPlus-Entwicklungsumgebung selbst). Werden nun gemeinsame Funktionen benötigt, die einmal von den Businessobjekten benötigt werden aber auch im Hintergrund von serverseitigen Instanzen, dann sollte man diese Funktionalitäten in sogenannte "Manager"-Assemblies auslagern damit möglicherweise cirkuläre Abhängigkeiten vermieden werden. Beispiele dafür sind die gip.core.manager.dll (iPlus) und die gip.mes.manager.dll (.MES).
Die gip.mes.datamodel-Assembly (6)
Die gip.mes.datamodel-Assembly beeinhaltet das Datenmodell für die MES-Funktionalität. In diesem Falle benötigen Sie auch die erweiterte Datenbank mit den MES-relevanten Tabellen. Es gibt also zwei unterschiedliche Datenbankdateien:
Die gip.mes.datamodel-Assembly erweitert auch nicht das Entity-Framework-Modell (.edmx) aus der gip.core.datamodel sondern ist ein komplett seperates Modell und muss in einem seperaten Datenbankkontext geöffnet werden (System.Data.Objects.ObjectContext).
Im Datenbankmodell sind auch Fremdschlüsselbeziehungen unidirektional. MES-relevante-Tabellen können auf iPlus-Relevante Tabellen verweisen aber nicht umgekehrt.
Bei der späteren Programmierung können Sie Hilfsfunktionen nutzen, welche Ihnen das Matching zwischen beiden Datenbankkontexten erleichtert (siehe EntityObjectExtension).
Sie können natürlich auch Ihre eigene Anwendungstabellen dem iPlus-Datenbankmodell hinzufügen und sich eine eigene .datamodel-Assembly bauen. Sie müssen dafür das Interface IACEntityObjectContext implementieren und die Klasse ACObjectContextHelper verwenden. Siehe Thema "Anwendungstabellen hinzufügen".
Klassenbibliotheken für die Anwendungsprogrammierung.
Assemblies die für die eigentliche Anwendung oder Branchenlösung benötigt werden sollten folgendem Namensschema entsprechen:
Wir verwenden Cookies, um Ihnen das bestmögliche Erlebnis zu bieten. Darüber hinaus ermöglichen sie uns eine Analyse des Nutzerverhaltens, um die Website stetig für Sie zu verbessern.