DOKUMENTENNAME:
Pflichtenheft/Verhaltensspezifikation: RTK-Steuerprogramm
Teil: Motorsteuerungs-Komponente (motors.dll)
Autor: S. Lützkendorf
Dokumentversion: 0.5 (Jan. 2001)
Gliederung
-
Interne Motorposition
-
Vom Motorcontroller bestimmte Position, relativ zu einer beliebig gesetzen
Null-Position. Ein Motorcontroller kann nur Positionsänderungen registrieren
und mit Hilfe dieser die interne Motorposition fortschreiben.
Nach dem Einschalten der Hardware ist diese interne Position undefiniert
oder Null. Sie kann zu jedem Zeitpunkt per Befehl auf Null gesetzt werden.
Die Position an der die interne Position gleich null ist, wird häufig
Home-Position genannt.
-
Absolute Motorposition
-
(Physikalische) Stellung des vom Motor bewegten Schlitten/Tisch/... . Das
Koordinatensystem zur Angabe absoluter Motorpositionen hat seinen Ursprung
in der Absoluten Null.
Es ist Aufgabe der Software aus der internen Motorposition die absolute
Motorposition zu bestimmen.
Die Einheit der vom Motorcontroller gelieferten internen Position sind
Motorencoderschritte. Diese müssen je nach Achse in sinnvolle Einheiten
umgerechnet werden. (z.B. Sekunden, Grad, Centimeter)
-
Absolute Null (Syn.: Physikalische Null)
-
Absolute Motorposition, die per definitionem dem Ursprung des verwendeten
(Welt-)Koordinatensystems entspricht. Diese Position wird während
der Einrichtung des Motors festgelegt.
z.B. könnte man festlegen, das die Absolute Null der Tilt-Achse gerade
dort ist, wo der Tisch waagerecht ist.
-
Referenzpunkt (Syn.: Index-Position,
Grundstellung)
-
Position die der Motor reproduzierbar anfahren kann, unabhängig davon,
an welcher Ausgangsposition er sich befindet (d.h. die hardwareseitig erkennbar
ist). Die Lage dieses Punktes im Koordinatensystem der absoluten Motorposition
ist durch die Kalibrierung bekannt.
z.B. wird beim C-812-Controller als R. die Position verwendet, auf die der
Motor automatisch gefahren wird, wenn die linke Hardware-Schranke erreicht
wird.
-
Relative Motorposition
-
Absolute Motorposition in einem alternativen Koordinatensystem, das sich
von dem der Absoluten Positionen nur durch eine Verschiebung (Offset)
des Nullpunktes unterscheidet. Sie dient der temporären Koordinaten
Verschiebung.
-
Relative Null
-
Koordinatenursprung der relativen Motorpositionen. Bestimmt durch ein Offset
zur Absoluten Null. (s.a. ini-Eintrag
AngleBias)
-
Motorencoderschritte
-
Einheit in der ein Motorcontroller Distanzen und Positionen angibt. Die
Umrechnung in Welteinheiten ist abhängig von der Auflösung des
verwendeten Motors (in Encoderimpulsen pro Umdrehung) und der Übersetzung
des verwendeten Getriebes.
-
Hardware-Schranke
-
Absolute Motorposition die die Bewegung eines Motors in einer Richtung
beschränkt. Erreicht der Motor diese Position löst die Hardware
- z.B. über einen Endlagenschalter - ein Signal aus, auf das der
Motorcontroller bzw. die Steuersoftware reagiert.
Bei dem Controller C-812 wird der Motor automatisch um eine konfigurierbare
Anzahl von Motorschritten zurückgefahren um diese kritische Position
zu verlassen und ein Status-Flag gesetzt.
Beim C-832 wird nur ein Status-Flag gesetzt das von der Software abzufragen
und zu behandeln ist. (??)
s.a. ini-Eintrag RemoveLimit.
-
Motorspiel (Syn.: Hysteresis)
-
Differenz zwischen zwei absoluten Positionen um die der Schlitten ohne eine
Drehung der Motorschraube bewegt werden kann
bzw. umgekehrt
Winkel um den die Motorschraube (nach Richtungswechsel) gedreht werden kann,
ohne das sich der Schlitten bewegt.
Das Motorspiel muss experimentell bestimmt werden. s. ini-Eintrag
Hysteresis
-
Software-Schranke
-
Parameter der die Werte eines anderen Parameters in einer Richtung begrenzt.
-
Kalibrierung
-
Allgemein: Abstimmung zwischen Soft- und Hardware. Die Software soll dem
konkreten Zustand der Hardware entsprechend konfiguriert werden. Konkret
soll das Verhältniss zwischen den Koordinatensystemen der Internen und
der Absoluten Motorpositionen bestimmt werden um die Umrechnung ineinander
zu ermöglichen.
-
links - rechts
-
eine Position ist links von einer anderen wenn ihr Wert kleiner ist, bzw.
rechts wenn ihr Wert größer ist. (s.a. Abb. 1)
-
Aktueller Motor, Aktiver Motor
-
ausgezeichneter Motor, der für einige Funktionen eine Voreinstellung
und für einige Funktionen der Motor ist, auf dem die Funktion arbeitet.
Einige Funktionen können bestimmen welches der Aktuelle Motor ist.
-
Funktionen
Die vom Motorcontroller verwaltete interne Motorposition kann in eine absolute
Motorposition umgerechnet werden, wenn die Verschiebung zwischen dem
Koordinatensystem der absoluten und dem der internen Motorposition bekannt
ist (s. 1.1). Ausserdem ist zur Bestimmung der absoluten Motorposition das
Motorspiel zu berücksichtigen (s 1.2) und es sind die Motorencoder-Schritte
in "Welt"-Einheiten umzurechnen (s. 1.3).
Abb. 1: Referenzpunkt- und Positionsbestimmung und
Konfigurationsparameter (beim C-812, und beim C-832 ohne Verwendung des
Index-Schalters). |
F1.1 Systeminitialisierung und Bestimmung der Koordinatenverschiebung
Es gibt 2 Möglichkeiten nach dem Systemstart den Abstand zwischen der
absoluten Null und der internen Null zu bestimmen:
-
Durch einen Referenzpunktlauf, bei dem eine Position angefahren wird, dessen
Abstand zur Absoluten Null bekannt ist, und die zur internen Null gesetzt
wird. Oder
-
über Konfigurationsdaten; dabei werden Informationen verwendet, die
vor dem letzten Ausschalten des Systems gespeichert wurden.
Die Variante über Konfigurationsdaten kann nur dann fehlerfrei
funktionieren, wenn sicher gestellt wird
-
daß in der Zeit in der die RTK-Software nicht läuft, die absolute
Motorposition nicht verändert wird, werder von Hand noch durch eine
andere Software;
-
die RTK-Software die Konfigurations-Daten korrekt abgespeichert hat; und
-
die Konfigurations-Daten nicht ausserhalb des Programms verändert wurden.
Die Möglichkeit des Referenzpunktlaufs dagegen ist weniger von aktuellen
Konfigurationsdaten abhängig und damit weniger fehleranfällig.
Gründe dafür trotzdem auch die zweite Variante zu implementieren
sind: a) daß ein Referenzpunklauf Zeit kostet und b) daß es für
einige Achsen wegen der Lebensdauer sinnvoll ist, größere Bewegungen
zu vermeiden.
Die Bestimmung der Koordinatenverschiebung aus den Konfigurationsdaten
erfolgt mit dem Parameter
DeltaPosition. Dieser speichert
den Abstand zwischen der Absoluten Null und der Absoluten Motorposition beim
letzten ordnungsgemäßen Verlassen des Programms. Beim Neustart
des Programms wird die Interne Motorposition auf Null gesetzt, damit ist
DeltaPosition der Abstand zwischen der Absoluten und der Internen
Motorposition, entspricht also der gesuchten Koordinatenverschiebung.
(*) |
Die absolute Motorposition wird berechnet als Summe der vom Controller
gelieferten Internen Motorposition und der Koordinatenverschiebung
DeltaPosition. |
Ob die Konfigurationsdaten brauchbar sind, signalisiert der
Konfigurationsparameter RestartPossible. Dieser wird bei der
Initialisierung des Software-Systems auf False gesetzt, und wird
erst beim ordnunsgemäßen Beenden des Programmes und nach dem Speichern
des aktuellen Wertes von DeltaPosition auf True gesetzt.
Falls also das Programm nicht korrekt beendet wurde - z.B. durch einen Absturz
- ist beim nächsten Programmstart die Ungültigkeit der
Konfigurationsdaten erkennbar.
Wenn die Konfigurationsdaten nicht gültig sind, muß ein
Referenzpunktlauf durchgeführt werden. Dabei wird eine Motorposition
angefahren, deren Abstand zur Absoluten Null bekannt ist. Dieser Abstand
wird während der Kalibrierung (s.u.) bestimmt und im Konfigurationsparameter
DistanceToZero gespeichert. Wenn diese Position erreicht ist, wird
die Interne Motorposition auf Null gesetzt. Damit entspricht
-DistanceToZero der gesuchten Koordinatenverschiebung und wird in
DeltaPosition gespeichert. Damit gilt dann wieder
(*).
Abb. 2: Referenzpunkt- und Positionsbestimmung und
Konfigurationsparameter (beim C-832 mit Verwendung des Index-Schalters,
reference switches).
( Kommentar im Code: "Indexposition bei C-832 meist genau die Index-Position
plus RemoveLimit" ???) |
Für jeden Motor kann temporär der Koordinatenursprung der absoluten
Positionen verschoben werden. Der neue Koordinatenursprung heißt Relative
Null.
Nach der Initialisierung ist bei allen Motoren die Relative Null gleich der
Absoluten Null.
F1.3 Berücksichtigung des Motorspiels
Bei jeder Änderung der Bewegungsrichtung ist das Motorspiel zu
berücksichtigen. D.h. wenn ein Motor als letztes eine Linksbewegung
(Rechtsbewegung) zu Position X ausgeführt hat und dann um einen
Betrag D nach rechts (links) bewegt werden soll, würde die
Nichtberücksichtigung des Spiels bedeuten, dass der Motor nur an die
Position X + D - Spiel
(X - D + Spiel) anstatt an die Position
X + D (X - D) gefahren wird.
Das experimentell bestimmte Motorspiel wird als Parameter
Hysteresis in der Konfigurationsdatei
gespeichert. Der Konfigurationsparameter
Upwards speichert die Richtung der letzten
Motorbewegung.
F1.4 "Umrechnung in sinnvolle Einheiten"
TODO
DIALOGBOX
vom diesem Dialog lassen sich folgende Teilfunktionen ausführen:
(Leere Felder bedeuten, daß das Steuerelement für die Teilfunktion
keine Bedeutung hat. Der Button mit dem Bullet löst die Funktion aus.) |
Die Teilfunktionen die für einem Motor gelten, arbeiten auf dem in der
Listbox ausgewähltem Motor. Die Teilfunktionen die auf allen Motoren
arbeiten, ignorieren die Listbox-Einstellung und führen die Funktion
für alle Motoren parallel durch. FRAGE
Die Teilfunktion "Setzten der absoluten Null" arbeitet nur auf dem in der
Listbox ausgewähltem Motor. FRAGE
Aufgabe der Kalibrierung ist es, das Software-System mit einer neuen bzw.
veränderten Motorenkonfiguration abzustimmen. Ziel ist es den Abstand
zwischen Referenzpunkt und Absoluter Null zu bestimmen. Dieser Abstand wird
in dem Konfigurationsparameter DistanceToZero gespeichert. Mit Hilfe
dieses Wertes läßt sich die Lage des Urspungs des Koordinatensystems
der absoluten Positionen bestimmen.
Die Kalibrierung ist zu wiederhohlen, wenn sich an der Motorenkonfiguration
etwas verändert hat; z.B. Veränderung der Hardwareschranken, der
Referenz-Schalter, ... .
Ablauf
-
(Einrichtung der Motorenkonfiguration entsprechend dem Versuchsaufbau;
Positionierung des Motors auf der Absoluten Null)
-
Referenzpunktlauf mit der Option "Keep Calibration Data" == false.
-
-
(Bestimmung der linken und rechten Software-Schranke; TODO).
(aus Dokumentation: "DistanceToZero: ... Diese Größe
ist für viele Antriebe durch explizites Messen einer Kalibrierungskurve
festgelegt. In anderen Fällen kann die physikalische Null mit dem
Referenzpunkt in Beziehung gesetzt werden."
FRAGE: was für Kalibrierungskurven sind
gemeint?)
Ziel des Referenzpunktlaufes ist es, eine Motorposition anzufahren, von welcher
der Abstand zur Absoluten Null bekannt ist. Setzt man diese Position
zur Internen Null, kann man mit dem bekannten Abstand die Internen
Motorpositionen in Absolute umrechnen. Am Referenzpunkt gilt dann:
DeltaPosition == -DistanceToZero.
Ablauf
-
Speichern der aktuellen Internen Position
-
Anfahren des Referenzpunktes; der Referenzpunkt wird Motor/Controller-spezifisch
angefahren:
-
C-812
-
Der Motor wird angewiesen eine Position anzufahren, von der sicher ist, dass
sie links der linken Hardware-Schranke liegt.
D.h. der Motor fährt gegen die linke Hardware-Schranke. Dies löst
ein Signal aus, auf das der Motor automatisch vom Controller um eine bestimmte
Distanz zurückgefahren wird (s. Paramenter
RemoveLimit).
Die Position an der der Motor stehen bleibt, ist per definitionem der
Referenzpunkt. (s. Abb. 1)
-
C-832 allgem.
-
Der C-832-Controller hat eine spezielle Index-Line (Reference switch input).
D.h. man kann einen extra Schalter verwenden, der dem Controller des Erreichen
einer speziellen Position signalisiert. (s. Abb. 2)
Ob ein solcher Schalter in der aktuellen Versuchsanordnung verwendet wird,
legt der Konfigurationsparameter
IndexLine fest.
-
C-832 (IndexLine == false)
-
In diesem Fall wird der Referenzpunkt wie beim C-812er Controller bestimmt;
mit dem Unterschied, dass das Zurückfahren nicht automatisch vom Controller
ausgelöst wird, sondern von der Software.
(FRAGE: Das ist etwas problematisch, da die Software abfragen muss ob eine
Hardware-Schranke erreicht worden ist, und der Zeitpunkt (bzw. die Position)
wann dies erfolgt, nicht immer die gleiche sein muss bzw. kann.)
-
C-832 (IndexLine == true)
-
Falls MoveFirstToLimit == true
wird zuerst die linke Hardware-Schranke angefahren, in dem eine Ziel-Position
links davon angegeben wird; und nachdem diese erreicht wurde, wird der Motor
nach rechts in Bewegung gesetzt (in dem eine Position sehr weit rechts als
Ziel angegeben wird). Der Motor wird gestoppt sobald das Index-Signal empfangen
wurde. Dass dieses Signal kommt ist sichergestellt, da von der "linkesten"
Position mit der Suche begonnen wird. MoveFirstToLimit == true stellt
also sicher, dass der Index-Schalter stets von der gleichen Seite angefahren
wird. (FRAGE: was passiert wenn es gar keine
Index-Line gibt?)
Ist MoveFirstToLimit == false
wird der Motor in Richtung der linken Hardware-Schranke bewegt und gestoppt
sobald das Index-Signal empfangen wurde.
(FRAGE: was passiert wenn der Referenzpunktlauf
links vom Referenzpunkt beginnt?).
-
Falls der Referenzpunktlauf der Kalibrierung dient ("Keep Calibration
Data" == false), kann DistanceToZero aus der Distanz zwischen
der gespeicherten Internen Position (s. Schritt 1) und der aktuellen Internen
Position bestimmt werden.
-
Die Interne Position wird auf Null gesetzt (Home-Position); und
DeltaPositon auf -DistanceToZero; von nun an gilt wieder
(*).
-
Falls der Referenzpunktlauf mit der Option "Hold Position" == true
gestartet wurde, wird nun die Motorposition angefahren, die der Motor vor
dem Referenzpunktlauf inne hatte;
andernfalls wird die Position angefahren die im Konfigurationparameter
InitialAngle steht.
Der Referenzpunktlauf wird nicht für Motoren zugelassen mit den
Konfigurations-Parameter
InitialMove == 0.
Legt die aktuelle Motorposition als Absolute und Interne Null fest. D.h.
DeltaPosition wird auf Null gesetzt und und die Interne Motorposition
wird ebenfalls auf Null gesetzt (Define Home).
Nach dem "Setzen der absoluten Null" ist der entsprechende Motor im Zustand
"nicht kalibiert". FRAGE
FRAGE: Wann wird diese Funktion verwendet?
DIALOGBOX
Über diesen Dialog können folgende allgemeine Konfigurationsparameter
für einen ausgewählten Motor eingestellt werden:
FRAGE: Warum sind die Steuerelemente für
PositionMin, PositionMax und RemoveLimit disabled?
Positions-Softwareschranken
Das RTK-System verwaltet für die absolute Position 2 x 2 Softwareschranken.
Zum ersten PositionMin und PositionMax deren Werte in
Motorencoder-Schritten angegeben werden und zum zweiten AngleMin
und AngleMax, deren Werte in "Welt"-Einheiten gemäß
Unit an gegeben werden.
FRAGE: Wozu die doppelte Buchführung die
nur zu Fehlern führen kann? Die Werte für AngleMin und
AngleMax können problemlos aus PositionMin und
PositionMax berechnet werden. Genau dies stellt auch die Funktion
"&Bereichsmaximierung" (s.u.) zur Verfügung. AngleMin und
AngleMax werden in der Implementation nur während der Umrechnung
von Nutzer-Einheiten in Motor-Schritte verwendet, und das Ergebnis die Umrechnung
wird dann noch mal gegen PositionMin und PositionMax
getestet.
Wenn AngleMin und AngleMax doch benötigt werden, sollte
das Verhältnis zu PositionMin und PositionMax definiert
werden; etwa: das Intervall AngleMin und AngleMax kann
nur im Intervall PositionMin und PositionMax liegen.
Ähnliches gilt für PositionWidth und AngleWidth.
Diese Funktion veranlasst den aktuellen Motor in regelmässigen
Abständen zu überprüfen ob eine der Hardware-Schranken erreicht
wurde. Der Motor informiert (via Event) den Anwendungsrahmen über des
Testen der Hardware-Schranke und gegebenenfalls über das Erreichen einer
Hardware-Schranke.
Der erste Button-Click startet diese Überwachungsfunktion, der zweite
Click beendet sie. (das sollte in der Button-Beschriftung erkennbar gemacht
werden.)
Diese Überwachungsfunktion ist nicht an diesen Dialog gebunden. D.h.
nach dem Schliessen des Dialoges (und eigentlich erst dann) beleibt diese
Fuktion aktiv.
FRAGE: wann wird diese Funktion benötigt?
ANM: Die entsprechenden Methoden sind nur für den C-832er Controller
implementiert. D.h. beim C-812er passiert beim Button-Click nichts.
DIALOGBOX
Diese Funktion ermöglicht einen ausgewählten Motor über die
Angabe einer internen Motorposition zu bewegen. Die möglichen
Motorpositionen werden dabei durch die Softwareschranken PositionMin
und PositionMax beschränkt.
Die Ziel-Position, d.h. die interne Motorposition die angefahren werden soll,
kann entweder über die Textbox "New Position" oder über eine Bewegung
des Scrollbars bestimmt werden.
Wird die Ziel-Position über die Textbox angegeben, wird getestet ob
die angegebene Ziel-Position jenseits einer Software-Schranke liegt. Ist
dies der Fall wird die Ziel-Position durch die Position dieser Software-Schranke
ersetzt. Dadurch wird sichergestellt das die Zielposition immer zwischen
den Software-Schranken liegt. Dann wird der Motor angewiesen die Zielposition
anzufahren. Der Motor kann um jeden beliebig kleinen positiven Betrag bewegt
werden.
Über den Scrollbar kann die Positionsänderung nur in Vielfachen
des Parameters PositionWidth erfolgen. Eine "kleine" Bewegung entspricht
1 x PositionWidth, eine "große" entspricht 5 x
PositionWidth. FEHLER
Während der Motor in Bewegung ist kann keine neue Ziel-Position angegeben
werden.
Das Schliessen des Dialoges über den "Cancel"-Button oder über
den "X"- Button während einer Bewegung stoppt den aktiven Motor unmittelbar.
WUNSCH
FEHLER: die Auswahl eines anderen Motors
während der aktuell gewählte Motor in Bewegung ist, sollte nicht
möglich sein; in der gegenwärtigen Implementation ist dies
möglich; wenn der aktuelle Motor in Bewegung ist, läuft er 'im
Hintergrund' weiter; er wird auch nicht gestoppt wenn der Dialog geschlossen
wird.
FRAGE: Unter welchen Umständen wird
diese Funktion verwendet?
Diese Funktion wird durch die Methode mlSetAngleDefault() realisiert.
Setzt für alle Motoren den Parameter AngleBias gleich 0. Und
berechnet aus den Software-Schranken PositionMin und
PositionMax die Werte für AngleMin und
AngleMax.
TODO
Unter dieser Funktion werden Optionen zur Einstellung Motor- bzw.
Controller-spezifischer Parameter angeboten.
Die Funktion arbeitet stets auf dem aktuellen
Motor. Der Name des aktuellen Motors wird in der Titel-Leiste des Dialogs
angegeben.
DIALOGBOX
Über diesen Dialog können folgende Konfigurationsparameter für
einen C-812er Motorcontroller eingestellt werden.
DIALOGBOX
Über diesen Dialog können folgende Konfigurationsparameter für
einen C-832er Motorcontroller eingestellt werden.
F6.3 Start Scan
TODO
-
Im Dialog "Verfahren nach Encoder-Position" funktioniert
der Scrollbar zur Angabe der Zielposition nicht, obwohl Teile des Codes
dafür vorhanden sind. Kontext
-
im Dialog "Verfahren nach Encoder-Position": zu einem Zeitpunkt
darf nur ein Motor in Bewegung sein. Kontext
-
Der "Cancel"-Button im Dialog "Move Drive"
sollte während der Bewegung "Stop" heißen, und nur die Bewegung
beenden, nicht aber das Fenster schließen.
-
Kalibrierung auch für alle Motoren möglich? Die beiden Optionen
"Keep Position" und "Handle all Drives" werden zwar disabled wenn "Keep
Calibration Data" auf false gesetzt wird, aber die Werte der Optionen
werden trotzdem verwendet (denke ich). Kontext
-
Welche Funktion haben "Cancel" und "OK" bei laufendem Referenzpunktlauf und
sonst? Diese Buttons sollten "Stop" und "Close" heissen. Stop ist nur bei
laufenden Referenzpunktlauf enabled, und Close sonst.
Kontext
-
aus Dokumentation: "DistanceToZero: ... Diese Größe ist
für viele Antriebe durch explizites Messen einer Kalibrierungskurve
festgelegt. In anderen Fällen kann die physikalische Null mit dem
Referenzpunkt in Beziehung gesetzt werden." FRAGE was für
Kalibrierungskurven sind gemeint? Kontext
-
Was passiert wenn die Konfigurationparameter (für C832) sagen es gibt
eine Index-Line, es aber gar keine gibt, bzw. diese nicht anspricht?
Kontext
-
Was passiert wenn MoveFirstToLimit == false und der der
Referenzpunktlauf links vom Referenzpunkt beginnt, also der Referenzpunkt
nicht in Fahrtrichtung gefunden werden kann?
Kontext
-
Warum mach das setzten der absoluten Null die Kalibrierung bzw. der
Referenzpunktlauf ungültig Kontext
-
Wann wird die "Setzten der Absoluten Null" verwendet?
Kontext
-
Warum sind im Dialog "Common Settings ..." die Steuerelemente für
PositionMin, PositionMax und RemoveLimit disabled?
Kontext
-
Frage zum Verhältnis Position[Min|Max|...] zu
Angle[Min|Max|...].Kontext
-
Wann wird die Funktion "F3.2 End-Schalter" benötigt?
Kontext
-
Unter welchen Umständen wird die Funktion "Verfahren nach
Encoder-Schritten" verwendet? Kontext
-
welche Funktion hat der Konfiguration-Parameter
InitialMove
Übersicht
Allgemein
Einträge zur Hardware-Ansteuerung
Einträge zum Referenzpunkt und zur
Positionsbestimmung
Einträge zu Software-Schranken
"Einträge für das Rückspeichern von
verschiedenen Einstellungen"
Sonstige Parameter zur Motorsteuerung
TODO
Obsolete Parameter
TODO: es fehlen Angaben zu den Default-Werten, Einheiten, Wertebereichen
und Abhänigkeiten.
Einige INI-Einträge sind in ihrer Bedeutung bzw. Gültigkeit vom
Parameter Type abhängig.Wenn dise der
Fall ist, steht der entsprechende Type in Klammern nach dem Parameternamen.
Abschnitte in Hochkommata (") sind i.d.R. aus den vorhandenen
Dokumentationsfragmenten.
Für jeden Motor ist im Konfiguration-File eine Sektion anzulegen. Die
Sektionen müßen [MotorX] heißen wobei X eine Zahl
ist. X muß bei 0 beginnen und die Nummerierung der vorhandenen Sektionen
müssen durchgehend sein; d.h. die letzte Motor-Sektion, die gelesen
wird, ist die [MotorX]-Sektion für die es keine nachfolgende
Sektion [MotorX+1] mehr gibt. Es gibt keine Beschränkung für
die Anzahl der Motor-Sektionen.
Definition: einige Parameter haben Werte vom Type boolsch, d.h.
sie können als Werte die Zahlen 0 oder 1 haben, wobei gilt: 0 ==
falsch und 1 == wahr.
Die Parameter in den Sektionen sind folgende:
-
Name
-
Ein im Prinzip beliebiger Bezeichner der der Identifikation des Motors in
der Nutzeroberfäche dient.
Werte: Zeichenkette
Default: "Motor"
Es gibt einige vordefinierte Bezeichner die einem Motor eine spezielle Rolle
als Achse in einem bestimmten Versuchsaufbau zuweisen. Einige Achsen werden
miteinander identifiziert.
vordefinierter Name |
zu geordnete Achse |
AzimutalRotation |
Rotation = Phi |
AZ |
Rotation |
Azimute |
X, x |
X |
Horizontal |
x-Achse |
x-Axis |
Y, y |
Y |
y-Achse |
y-Axis |
Z, z |
Z |
Vertical |
z-Achse |
z-Axis |
Theta |
Theta |
Omega |
Omega = DF |
Tilt |
Tilt = Psi |
TL |
DC |
DC |
Diffraction coarse |
Beugung grob |
DF |
DF = Omega |
Diffraction fine |
Beugung fein |
Psi |
Psi = Tilt |
Phi |
Phi = Rotation |
CC |
Collimator |
Collimator |
Kollimator |
Absorber |
Absorber |
Monochromator |
Monochromator |
Encoder |
Encoder |
-
Type
-
Hardware/Implementations-Typ des Motor-Controller.
Werte: [ C-812ISA | C-812GPIB | C-832 | TMotor ]
Default: TMotor
-
BoardId
-
Controller-Nummer des angeschlossenen Motors; "Ordnet dem logischen Motor
einen Kanal auf der Steuerkarte zu"
Werte: [ 1 | 2 ] (C-832); [ 1 .. 4 ] (C-812ISA, C-812GBIB)
Default: 1
-
RamAddr (C-812ISA)
-
Speicheradresse, für den Direktspeicherzugriff zur Kommunikation
Software-Hardware.
Werte: Hex-Zahl aus Bereich: C800 ... DE00
Default: 0xD000
-
IoAddr (C-832, C-812GBIB)
-
Port-Adresse für die Software-Hardware-Kommunikation.
Werte: Hex-Zahl "above 200(hex)"(C-832)
Default: 0x210 (C-832); 0x200 (C-812GBIB)
-
GPIBAddr (C-812GBIB)
-
Default: 1 oder 15 (??)
-
-
DifferentialEncoder (C-832)
-
"Die Motorsteuerung ist in derLage, neben einfachen auch differentielle
Encodersignale zu verarbeiten"
Werte: boolsch
Default: falsch
-
EnableInterrupts (C-832)
-
??
Werte: boolsch
Default: falsch
-
DistanceToZero
-
Distanz zwischen Referenzpunkt und absoluter Null.
Wird während der Kalibrierung bestimmt.
Werte: [0 .. ??]
Einheit: Motorencoderschritte
Default: 0 ??
-
IndexLine (C-832)
-
Vorhandensein eines speziellen Index-Schalters/Inputs beim Motor/Controller.
Dieser Schalters kennzeichnet eine als Referenzpunkt verwendbare Position.
Der C-832 hat eine solche Index-Line ("die Antriebe Omega und Theta des
HRM-Diffraktometer besitzen Indizes für Referenzpunktläufe").
Dieser Parameter wird nur beim C-832 berücksichtigt.
-
Werte: boolsch
Default: falsch
-
MoveFirstToLimit (C-832)
-
Bei Existenz einer Index-Line, d.h. IndexLine=1, gibt der Parameter
an ob der Motor erst eine Endlage anfahren soll, bevor die Indexposition
gesucht wird. Das stellt sicher, daß der Referenzpunkt immer von der
gleichen Seite angefahren wird.
Dieser Parameter wird nur beim C-832 berücksichtigt.
Werte: boolsch
Default: falsch
-
InitialMove
-
"Gibt an, ob mit dem Antrieb die Grundstellung programmgesteuert angefahren
werden kann."
InitialMove == false verhindert die Nutzung/Durchführung der
Funktionen Kalibierung und
Referenzpunktlauf
Werte: boolsch
Default: falsch
-
InitialAngle
-
Gibt an, welche absolute Position nach dem Referenzpunktlauf angefahren werden
soll.
(Wird nicht berücksichtigt falls der Referenzpunktlauf mit der Option
"Hold Position" durchgeführt wird. Häufig ist dies die absolute
Null.)
Werte: [real] ???
Einheit: ???
Default: 0.0
-
RemoveLimit
-
Distanz um die der Motor bei Ansprechen einer Hardwareschranke automatisch
zurückgefahren wird.
(Beim C-812er Controller übernimmt das automatische Zurückfahren
der Controller selbst; beim C-832er muss dafür die Software sorgen.)
Werte: [0 .. ???]; sollte so gewählt werden, daß der Endlagenschalter
entspannt wird.
Einheit: Motorencoderschritte.
Default: 4000
-
Hysteresis
-
Motorspiel
Werte: [0 .. ???]
Einheit: Motorencoderschritte
Default: 0
-
DeltaPosition
-
absolute Motorposition beim Verlassen des Programms.
Einheit: Motorencoderschritte
Werte: [?? .. ??]
Default: 0 ??
-
Upwards
-
Richtung der zuletzt durchgeführten Bewegung.
Werte: [0, 1]
1: "Aufwärts", Bewegung nach rechts
0: "Abwärts", Bewegung nach links
Default: 1
-
RestartPossible
-
Gibt an, ob das Programm ordnungsgemäß verlassen wurde, d.h. daß
die Kalibrierungsdaten im ini-File korrekt gespeichert wurden.
Werte: boolsch
Default: falsch
-
PositionMin
-
absolute Position der linken Software-Schranke
Einheit: Motorencoderschritte
Default: -100
-
PositionMax
-
absolute Position der rechten Software-Schranke
Einheit: Motorencoderschritte
Default: 100
-
MinimalWidth
-
"legt die kleinste Schrittweite fest, um ein sicheres Anfahren des Motors
zugewährleisten"
Einheit: Motorencoderschritte??
Werte: [0 .. ???]
Default: 10
-
MaximalWidth
-
Werte: [0 .. ???]
Default: 10
-
MaxVelocity
-
Maximale Geschwindigkeit des Motors
Einheit: Motorencoderschritte / sec (?)
Default: 8000
Werte: 0 .. 8.388.680 (C812); 0..1073741823 = 0x3FFFFFFF (C832) ?
-
PositionWidth
-
"Schrittweite zum Messen des Anfahrverhaltens"
Wird verwendet in den Implementationen von TMotor::StartCheckScan; und legt
die kleinste Schrittweite in der Funktion "Direct Steering" fest
Default: 10
Werte: > 0
-
AngleMin
-
"Nutzerbereich links"
Default: -1
-
AngleMax
-
"Nutzerbereich rechts"
Default: 1
-
AngleBias
-
"absolute relative Winkel"; Offset zwischen Absoluter und Relativer Null;
ist wohl obsolet; s.a. F1.2
-
AngleWidth
-
"Nutzerschrittweite"
Default: 0.1
-
Velocity
-
"aktuelle Geschwindigkeit"
Werte: > 0
Default: 8000
-
Torque (C812)
-
maximaler Motorstrom
Werte: 1.. 127
Default: 110
-
Gain
-
statische Verstärkung; KD?
Werte: 1 .. 255 (C812); 1 .. 32767 (C832)
Default: 100
-
DynamicGain
-
dynamische Verstärkung; KP
Werte: 1 .. 255 (C812); 1 .. 32767 (C832)
Default: 37
-
IntegralGain (C-832)
-
KI
Werte: 1 .. 32767
Default: 10
-
IntegralLimit (C-832)
-
KL
Werte: 1 .. 32767
Default: 10
-
Acceleration
-
Beschleunigung. Wird auch als Entschleunigung verwendet. Ein Wert von 0 ist
zwar zulässig aber wohl nicht wirklich sinnvoll.
Werte: 0 .. 8.388.680 (C812); 0..1073741823 = 0x3FFFFFFF (C832) ?
-
Default: 10
-
Unit
-
"Einheit des Koordinatensystems. Die Korrekturfaktoren sind i.A. für
Winkelsekunden berechnet. DerNutzer hat bei einige Antrieben die Wahl zwischen
Grad, Minuten, oder Winkelsekunden. Die Einheiten werden dann entsprechend
umgerechnet. Ansonsten können beliebige Einheiten angegeben werden"
Werte: [ "Grad" | "Minuten" | "Sekunden" | Name ]
Default: "Unit"
-
DeathBand (C-812)
-
"Regelung setzt innerhalb dieses Bereiches aus"
Default: 1
-
MaxFailure
-
Default: 30.0
-
Digits
-
"Gibt die Anzahl der Nachkommastellen für die Anzeige der Position in
verschiedenen Dialogen und Koordinatensystemen an. Für die Schrittweite
wird i.A. eine weitere Nachkommastelle verwendet"
Werte: [ 0 .. ]
Default: 2
-
SpeedScale
-
"Faktor zur Angabe der Geschwindigkeit in der verständlichen Form"
Werte: real, > 0
Einheit: "Einheiten je Sekunde"; Einheit steht dabei für die unter
Unit eingestellte Einheit
Default: 10.0
-
Correction
-
Default: 0
-
Koeff_1
-
Default: 1.0
-
Koeff_2
-
Default: 0.0
-
Koeff_3
-
Default: 0.0
Diese Parameter tauchen in einigen "echten" INI-Files auf, werden aber von
der Software nicht verwendet. Wahrscheinlich Überreste älterer
Versionen.
MoveFirstToZero; Orientation; Direction;
Position; AngleZero; Koeff_0.