OK, tut mir leid, wenn ich zu wenig Informationen geliefert habe.
Von einem Rechner sollen motorisierte Achsen angetrieben werden. Konkret 3 Stück.
Dabei gibt es unterschiedliche Typen von Achsen, die mit prinzipiell gleichlautenden Befehlen unterschiedliche Routinen zur Ansteuerung brauchen.
Z.B. der Befehl "Move(10)" soll jede Achse zur Position 10 fahren, dahinter stecken aber die typspezifischen Routinen MoveA(), MoveB(), usw.
Während der Laufzeit soll erst festgelegt werden, welche Achsen von welchem Typ angeschossen sind.
Im Hauptprogramm möchte ich die 3 Achsen mit typunabhängigen Befehlen wie folgt ansprechen:
X.Home()
Y.Move(20)
Z.Speed = 100
... Bisher habe ich es so gelöst, dass bei jedem Befehl (Home, ...) mit einer Select Case den Typ der Achse abfrage und dann die entsprechende typspezifische Subroutine (HomeA, HomeB, ...) aufrufe.
Das funktioniert, ist aber bestimmt nicht die eleganteste Methode.
Daher hier mein Ansatz, wie im 1. Posting beschrieben:
Jede Achse ist eine Instanz der Hauptklasse "Axis". Bei der Erstellung der Instanz wird der Motortyp mit übergeben. Dim X As New Axis(Axis.Type.A, Port1) 'z.B. vom Typ A
Dim Y As New Axis(Axis.Type.A, Port2) 'z.B. vom Typ A
Dim Z As New Axis(Axis.Type.B, Port3) 'z.B. vom Typ B Das ist das Ziel!
Damit soll erreicht werden, dass ich beim Aufrufen von Prozeduren (z.B. X.Home) die richtige Routine (z.B. HomeA) aufgerufen wird. Dabei möchte ich aber nicht wie bisher bei jedem möglichen Befehl eine Select-Case-Abfrage haben, sondern nur eine in der New() Prozedur.
Public Class Axis
Sub New(Typ as .., ByVal Port As SerialPort, ByVal ...)
'Hier wird je nach Typ (A, B ,,,, ) die Variable Achse definiert
Select Case Typ
Case Type.A
Dim Achse As New A(Port, ,...)
Case Type.B
Dim Achse As New B(Port, ...)
'....
'.... ca. 6-7 mögliche Achsen-Typen
End Select
End Sub
Sub Home()
'Je nach Typ von "Achse" wird hier die Routine A.Home() oder B.Home()
' ... aufgerufen
Achse.Home()
End Sub
Sub Move()
Achse.Move()
End Sub
'....
'.... ca. 10-15 mögliche Befehle
End Class Nur leider funktioniert das Caseabhänige deklarieren von "Achse" als Instanz unterschiedlicher Klassen nicht.
Ich hoffe, diesmal ist alles etwas nachvollziehbarer ausgedrückt.
|