Anleitung
Gerätetreiberkonzept CompasBaseLibrary Stand 16.08.2005
Klasse „Device“
Konstruktion
Im überladenen „Device“-Konstruktor eines Gerätetreibers werden die Schnittstellen (Interfaces) des Gerätes nur noch dann konstruiert und in die Auflistung Device.Interfaces eingefügt, wenn deren Anzahl und treiber-interne Namen („InterfaceName“) bekannt und nicht abhängig von der Konfiguration des Gerätes sind. Andernfalls erfolgen diese Aktionen in den überladenen Methoden „Device.Configure“ und „Device.Initialize“.
Methode „Dispose“
Diese Methode stellt sicher, daß erforderliche De-Initialisierungen von Geräten und ggf. deren Schnittstellen durchgeführt werden. Sie wird vom Hauptprogramm aufgerufen und muß bei Bedarf überladen werden.
Property „DeviceName“
Die Basisklasse „Device“ hat die String-Membervariable „deviceName“ (protected) und eine zugehörige Property „DeviceName“ (ReadOnly). Es handelt sich hierbei um den Geräte-Namen, der im Konfigurationsdialog des Hauptprogramms vom Anwender eingegeben wurde und dient u.a. zur Anzeige in den treiber-spezifischen Dialogen. „deviceName“ muß in den Methoden „Configure“, „Initialize“ und „IOTest“ der von Device abgeleiteten Klasse des Treibers mit dem Wert des Übergabeparameters „DeviceEventArgs.DeviceName“ belegt werden.
Typ „DeviceEventArgs“
Beim Aufruf der überladenen „Device“-Methoden „Configure“, „Initialize“ und „IOTest“ wird ein Objekt vom Typ „DeviceEventArgs“ übergeben. Es enthält
|
Parameter |
Typ |
Beschreibung |
|
DeviceName |
String |
Der Name des Geräts in der Konfiguration. |
|
Code |
String |
Der nur vom Gerätetreiber interpretierbare Parametercode zur Konfiguration des Geräts. |
|
Summary |
String |
Eine für den Anwender verständliche Zusammenfassung der Gerätekonfiguration. |
|
Devices |
DeviceCollection |
Die (bisher) konfigurierten Geräte. |
|
Cancel |
Boolean |
Wahr, falls die Konfiguration des Geräts abgebrochen wurde. |
|
MdiParent |
Form |
Das MDI-Container Formular. |
Methode „Configure (DeviceEventArgs e)“
Beim Aufruf der Methode “Configure“ soll ein modaler Dialog zur Konfiguration des Geräts geöffnet werden. Die Konfigurationparameter werden im Parameter „e.Code“ übergeben (bzw. zurückgegeben). Bei erstmaligem Aufruf von „Configure“ ist der Parameter „e.Code“ leer und muß deshalb in der Methode vor Aufruf des Dialogs mit den geräte-typischen Default-Parametern belegt werden. Der Parameter „e.Summary soll“ eine für den Anwender verständliche Zusammenfassung der Konfiguration des Gerätes enthalten. Welche Information vor Beenden von „Configure“ im Parameter „e.Summary“ abzulegen ist, muß vom Kunden definiert werden. Außerdem müssen die Schnittstellen des Geräts vor Beenden von „Configure“ mit ihren treiber-internen Namen („InterfaceName“) konstruiert und der Auflistung „Interfaces“ des Geräts hinzugefügt werden. Im Parameter „e.Configuration“ ist eine Liste der bisherigen Geräte (mit ihrem „DeviceName“) und deren Schnittstellen (mit ihrem „InterfaceName“) der Konfiguration enthalten. Diese Geräte und ihre Schnittstellen sind vor Aufruf von „Configure“ für das aktuelle Gerät bereits vom Hauptprogramm durch Aufruf der entsprechenden „Initialize“-Methoden initialisiert worden. Für die korrekte Bereinigung des „Device“-Objektes und seiner Resourcen bzw. die evntl. erforderliche De-Initialisierung des Gerätes durch Aufruf der überladenen Methode „Dispose“ des Treibers vor erneutem Aufruf von „Configure“ ist das Hauptprogramm zuständig.
Mit der Methode “Initialize“ werden das Gerät und ggf. seine Schnittstellen initialisiert. Dazu muß das Gerät selbst und auch alle evntl. benötigten andere Geräte (bzw. deren Schnittstellen, z.B. zur Kommunikation) angeschlossen und betriebsbereit sein. Die Konfigurationparameter werden im Parameter „e.Code“ übergeben. Die Methode muß zunächst das Gerät selbst initialisieren. Dabei wird - je nach Treiber - bereits auf andere Geräte-Schnittstellen zugegriffen, deren Name im Format "DeviceName.InterfaceName" im Parameter „e.Code“ abgelegt ist und die mit diesem Namen in der Konfiguration (Parameter „e.Configuration“) vorhanden sein müssen. Ist das nicht der Fall, oder ist der Zugriff auf eine verwiesene Schnittstelle nicht möglich (z.B. weil sie nicht initialisiert ist), löst „Initialize“ selbst eine entspr. Exception aus. Konnte das Gerät initialisiert werden, konstruiert „Initialize“ danach alle gemäß Parameter Code möglichen Schnittstellen des Geräts mit ihren treiber-internen Namen („InterfaceName“) und fügt diese der Auflistung „Interfaces“ des Geräts hinzu. Für die korrekte Bereinigung des „Device“-Objektes und seiner Resourcen bzw. die evntl. erforderliche De-Initialisierung des Gerätes durch Aufruf der überladenen Methode „Dispose“ des Treibers vor erneutem Aufruf von „Initialize“ ist das Hauptprogramm zuständig.
Methode „IOTest (DeviceEventArgs e)“
Beim Aufruf der Methode „IOTest“ soll ein nicht modaler Dialog zum Testen des Geräts geöffnet werden. Der Dialog soll den übergebenen Parameter „e.MdiParent“ verwenden. Als Rückgabewert der Methode wird ein Verweis auf das geöffnete Formular erwartet. Vor dem ersten IO-Test werden alle Geräte und ggf. deren Schnittstellen vom Hauptprogramm durch Aufruf der entspr. „Initialize“-Methoden initialisiert. Mehrere IO-Tests verwenden eine gemeinsame Konfiguration.
Methode „OnIOTestCompleted (DeviceEventArgs e)“
Wird das IO-Test-Formular vom Anwender geschlossen, soll die Methode „OnIOTestCompleted“ aufgerufen werden. Das von Ihr gefeuerte Ereignis „IOTestCompleted“ informiert das Hauptprogramm über das Ende des IO-Tests.
Klasse „DeviceInterface“
Properties „InterfaceName“ und „CommandName“
Die Basisklasse „DeviceInterface“ hat zwei String-Membervariablen und zugehörige Properties für den Interface- und den Kommando-Namen.
Der Member „interfaceName“ und die zugehörige Property „InterfaceName“ (ReadOnly) stellen den treiber-internen Namen der Geräte-Schnittstelle (Interface). Dieser wird im Konstruktor bzw. den Methoden „Initialize“ und „Configure“ der zugehörigen Device-Klasse vergeben und in die Auflistung „Device.Interfaces“ des Geräts eingetragen. Er wird für den Anwender nur a) auf der Registerkarte „Schnittstellen“ des Dialogs „Konfiguration“ im Hauptprogramm zur Zuordnung zu den anwender-definierten Kommandos und ggf. b) zur Definition erforderlicher Verweise auf andere Geräte (z.B. die zu verwendende Kommunikationsschnittstelle) innerhalb der treiber-spezifischen Konfigurationsdialoge sichtbar.
Der Member „commandName“ und die zugehörige Property „CommandName“ (ReadOnly) hingegen ist der Name des Kommandos, der im Prüfschritt-Dialog Hauptprogramms vom Anwender eingegeben wurde und dient u.a. zur Anzeige in den treiber-spezifischen Dialogen. „commandName“ muß in den Methoden „Preset“, „Program“, „Teach“ und „Execute“ der von DeviceInterface abgeleiteten Klasse des Treibers mit dem Wert des Übergabeparameters „CommandEventArgs.CommandName“ belegt werden.
Eigenschaft „Autonomous“
Schnittstellen mit der Eigenschaft Autonomous = Wahr sind autonom. D.h. sie können ohne Gerät verwendet werden.
Methode „AllowWiring(Wiring wiring)“
Mit der Methode AllowWiring kann die Schnittstelle einzelne Anschlussarten auschließen. In der Regel sollen alle 3 Anschlussarten (specific = spezifisch, common = allgemein, multiplexed = gebündelt) unterstützt werden. Ist dies nicht möglich oder nicht sinnvoll, muss die Methode AllowWiring bei der nicht unterstützten Anschlussart false zurückgeben.
Typ „InterfaceEventArgs“
Beim Aufruf der überladenen „DeviceInterface“-Methode „Initialize“ wird ein Objekt vom Typ „InterfaceEventArgs“ übergeben. Es enthält:
|
Parameter |
Typ |
Beschreibung |
|
InterfaceName |
String |
Der projektspezifische Name des Kommando-Schnittstelle. |
|
Wiring |
Wiring |
Die Anschlussart der Schnittstelle: Specific = Die Prüflinge sind an einzelnen Sockeln angeschlossen. Common = Für alle Prüflinge gilt der gleiche Anschluss. Multiplexed = Ein gemeinsamer Anschluss wird mit einem Sockelumschalter mehrfach verwendet. |
|
SymbolData |
Object |
Enthält bei speziellen Schnittstellenklassen (z.B. Bus-Systemen) Daten zur symbolischen Kommando-Struktur |
Typ „CommandEventArgs“
Beim Aufruf der überladenen „DeviceInterface“-Methoden „Preset“, „Program“, „Teach“ und „Execute“ wird ein Objekt vom Typ „CommandEventArgs“ übergeben. Es enthält:
|
Parameter |
Typ |
Beschreibung |
|
CommandName |
String |
Der Name des Kommandos in der Prüfschritt-Definition. |
|
Parameter |
Object |
Der/Die zur Definition des Kommandos dienende Parameter |
|
Code |
String |
Der zur Definition des Kommandos dienende Parameter-Text (veraltet, wird durch Parameter ersetzt) |
|
Summary |
String |
Eine für den Anwender verständliche Zusammenfassung des Kommandos. |
|
TimeOut |
Int |
Zeit in Millisekunden zur Ausführung des Kommandos bevor eine Zeitüberschreitung eintritt (Standardwert: System.Threading.TimeOut.Infinite). |
|
DeviceInterface |
DeviceInterface |
Die Geräteschnittstelle, mit der das Kommando ausgeführt wird. |
|
Quantities |
QuantityCollection |
Auflistung aller möglichen Messgrößen. |
|
Units |
UnitCollection |
Auflistung aller möglichen Einheiten. |
|
Messages |
MessageCollection |
Auflistung aller definierten Meldungen |
|
Measure |
Boolean |
Wahr, falls das Kommando einen Messwert liefert. |
|
Quantity |
Quantity |
Messgröße des Messwerts. |
|
Unit |
Unit |
Einheit des Messwerts. |
|
|
|
|
|
Sample |
Int |
Nummer des aktuellen Prüflings. |
|
Socket |
Int |
Nummer des aktuellen Sockels. |
|
Value |
Object |
Der Messwert. |
|
Cancel |
Boolean |
Wahr, falls die Programmierung des Kommandos abgebrochen wurde. |
|
MdiParent |
Form |
Das MDI-Container Formular. |
Methode „Initialize (InterfaceEventArgs e)“
Mit der Methode “Initialize“ wird die Schnittstellen initialisiert. Sie wird vor der Kommando-Programmierung, vor einem IO-Test oder zu Beginn einer Prüfung bei den beteiligten Schnittstellen aufgerufen.
Methode „Preset (CommandEventArgs e)“
Nimmt der Anwender ein neues Kommando in der Kommandoliste eines Prüfschritts auf, dann wird die Methode „Preset“ des betreffenden „DeviceInterface“ aufgerufen. „Preset“ setzt die Standardwerte der Parameter „e.Code“, „e.Summary“, „e.Measure“, „e.Quantity“, „e.Unit“ und „e.DataType“. Dabei soll kein Dialog erscheinen. Welche Default-Werte von „Preset“ zu setzen sind, muss vom Kunden definiert werden.
Methode „Adjust ()“
Die Methode Adjust wird von der Laufzeitumgebung vor jedem Phasen-Zyklus aufgerufen. Hier können Schnittstellen etwaige Aktionen zur Justierung o.Ä. durchzuführen. Beispielsweise kann ein Antrieb die Achse den Ausgangspunkt mittels Pendelbewegungen neu einstellen.
Methode „Program (CommandEventArgs e)“
Beim Aufruf der Methode „Program“ soll ein modaler Dialog zur Programmierung eines Kommandos für das betreffende „DeviceInterface“ geöffnet werden. Die Kommandoparameter werden im Parameter „e.Code“ zurückgegeben. „e.Summary“ soll eine für den Anwender verständliche Zusammenfassung des Kommandos enthalten. Welche Information von „Program“ in „e.Summary“ abzulegen ist, muß vom Kunden definiert werden. Liefert das Kommando einen Messwert muss der Parameter „e.Measure“ auf True gesetzt und mit den Parametern „e.Quantity“, „e.Unit“ und „e.DataType“ der Messwert spezifiziert werden. Welche Daten in diesen Parametern gesetzt werden, ergibt sich aus den technischen Möglichkeiten der jeweiligen „DeviceInterface“-Klasse.
Methode „Execute (CommandEventArgs e)“
Die Methode „Execute“ führt ein Kommando aus. Die Kommandoparameter werden im Parameter „e.Code“ übergeben. Sofern „e.Measure“ den Wert True hat, wird der Messwert im Parameter „e.Value“ in seiner physikalischen Grund-Einheit zurückgegeben. Die evntl. erforderliche Aufbereitung des Messwerts in die durch „Preset“ / „Program“ / „Teach“ vorgegebene Einheit erfolgt durch das Hauptprogramm.
Methode „Teach (CommandEventArgs e)“
Beim Aufruf der Methode „Teach“ soll ein nicht modaler Dialog zum Einrichten (Teachen) eines Kommandos geöffnet werden. Der Dialog soll den übergebenen Parameter „e.MdiParent“ verwenden. Die ursprünglichen Kommandoparameter werden im Parameter „e.Code“ übergeben. Beim bzw. nach Schließen des Teach-Dialogs muß „Teach“ auf jeden Fall das definierte Kommando inklusive der evntl definierten Messung durch Aufruf der Methode „Execute“ ausführen.
Methode „OnTeachCompleted (CommandEventArgs e)“
Wird der Teach-Dialog vom Anwender geschlossen, soll die Methode „OnTeachCompleted“ aufgerufen werden. Das von Ihr gefeuerte Ereignis „TeachCompleted“ informiert das Hauptprogramm über das Ende des Einricht-Vorgangs. Mit dem Ereignis werden die neuen Kommandoparameter (zur Speicherung) und ggf. der gemessene Messwert in seiner physikalischen Grund-Einheit übergeben. Die evntl. erforderliche Aufbereitung des Messwerts in die durch „Preset“ / „Program“ / „Teach“ vorgegebene Einheit erfolgt durch das Hauptprogramm.
Typ „Quantity“
Der Typ Quantity beschreibt eine Messgröße.
|
Parameter |
Typ |
Beschreibung |
|
Id |
String |
Das eindeutige Kennzeichen der Messgröße (z.B. U für Spannung). |
|
Name |
String |
Der Name der Messgröße. |
|
DataType |
Type |
Der Datentyp der Messwerte dieser Größe |
|
Units |
Unit |
Die für diese Messgröße möglichen Messeinheiten. |
Typ „Unit“
Der Typ Unit beschreibt eine Messeinheit.
|
Parameter |
Typ |
Beschreibung |
|
Id |
String |
Das eindeutige Kennzeichen der Messeinheit (z.B. V für Volt). |
|
Name |
String |
Der Name der Messeinheit. |
|
Factor |
double |
Der Faktor zur Umrechnung in die entsprechende Basiseinheit (z.B. 0.001 für Millivolt). |
Typ „Message“
Der Typ Message beschreibt eine Meldung.
|
Parameter |
Typ |
Beschreibung |
|
Id |
String |
Das eindeutige Kennzeichen der Meldung. |
|
Text |
String |
Der Meldungstext. |