DOKUMENTENNAME:
Verhaltensspezifikation: XCTL-Steuerprogramm
Teil: Motorsteuerungs-Komponente (motors.dll)
Autor: S. Lützkendorf
Dokumentversion: 0.6 (Mär. 2001) Entwurf
Gliederung
Die Motorsteuerungs-Komponente enthält die Kernfunktionen zur
Initialisierung, Ansteuerung und Verwaltung von Motoren im XCTL-Programm.
Sie realisiert eine auf relativ abstraktem Niveau definierte Schnittstelle,
mit deren Hilfe andere Komponenten komplexere Steuerungsabläufe
implementieren können.
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 (F1.1). Ausserdem ist zur Bestimmung der absoluten
Motorposition das Motorspiel zu berücksichtigen
(F1.2) und es sind die Motorencoder-Schritte in physikalische
Einheiten umzurechnen (F1.3).
Abb. 1: Referenzpunkt- und Positionsbestimmung und
Konfigurationsparameter (beim C-812, und beim C-832 ohne Verwendung des
Index-Schalters). |
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 XCTL-Software nicht läuft, die absolute
Motorposition nicht verändert wird, werder von Hand noch durch eine
andere Software;
-
die XCTL-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.
Das Motorspiel ist ein systematischer Anteil
am Positionierungsfehler der Motoren der durch notwendige Fertigungstoleranzen
bei Getrieben entsteht. Da dieser Anteil systemaisch ist, kann er durch die
Software korrigiert werden.
Bei jeder Änderung der Bewegungsrichtung muß
berücksichtigt werden, daß der Motor eine bestimmte Anzahl von
Umdrehungen durchführt ohne, daß sich der Motrschlitten bewegt.
D.h. der Motorcontroller bekommt Encoderimpulse, stellte also eine Änderung
der Internen Motorposition fest, ohne daß sich die Absolute Motorposition
ändert. Diese Differenz zwischen Interner und Absoluter Motorposition
muss die Software bei den Positionierungskommandos verrechnen.
Fall 1) wenn ein Motor als letztes eine Linksbewegung zu Position X
ausgeführt hat und dann um einen Betrag D nach rechts bewegt
werden soll, muß die Interne Zielposition also durch
X + D + Spiel, und die Absolute Zielposition
durch X + D berechnet werden.
Eine Richtungsänderung von links nach rechts entspricht also einer
Verschiebung der Internen Null um +D.
Fall 2) wenn ein Motor als letztes eine Rechtsbewegung zu Position X
ausgeführt hat und dann um einen Betrag D nach links bewegt
werden soll, muß die Interne Zielposition also durch
X - D - Spiel, und die Absolute Zielposition
durch X - D berechnet werden.
Eine Richtungsänderung von rechts nach links entspricht also einer
Verschiebung der Internen Null um -D.
Das experimentell zu bestimmende Motorspiel wird als Parameter
Hysteresis in der Konfigurationsdatei
gespeichert. Der Konfigurationsparameter
Upwards speichert die Richtung der letzten
Motorbewegung.
TODO
DIALOGBOX
mit dieser Dialogbox 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. FRAGE1
Die Teilfunktion "Setzten der absoluten Null" arbeitet nur auf dem in der
Listbox ausgewähltem Motor. FRAGE2
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."
FRAGE3: 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. (FRAGE4: 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.
(FRAGE5: 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 die Interne Motorposition
wird ebenfalls auf Null gesetzt (Define Home).
Nach dem "Setzen der absoluten Null" ist der entsprechende Motor im Zustand
"nicht kalibiert". FRAGE6
FRAGE7: Wann wird diese Funktion verwendet?
DIALOGBOX
Über diesen Dialog können folgende allgemeine Konfigurationsparameter
für einen ausgewählten Motor eingestellt werden:
Für die Konfigurationsparameter gelten die im Kapitel 3.2 aufgeführten
Angaben. Es ist sicher zu stellen, daß die dort angegebenen
Einschränkungen nicht verletzt werden.
FRAGE8: Warum sind die Steuerelemente für
PositionMin, PositionMax und RemoveLimit disabled?
Positions-Softwareschranken
Das XCTL-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 physikalische Einheiten gemäß
Unit angegeben werden.
FRAGE9: 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 der 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 das
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) bleibt diese
Fuktion aktiv.
FRAGE10: 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 in Encoderschritten 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, daß 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. FEHLER1
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.
WUNSCH1
FEHLER2: 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.
FRAGE11: Unter welchen Umständen wird
diese Funktion verwendet?
WUNSCH2: Die Einheit der Positionsangaben sollte deutlich
werden.
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.
Für die Konfigurationsparameter gelten die im Kapitel 3.2 aufgeführten
Angaben. Es ist sicher zu stellen, daß die dort angegebenen
Einschränkungen nicht verletzt werden.
Der Button "Start Scan" löst die Funktion F6.3 aus.
DIALOGBOX
Über diesen Dialog können folgende Konfigurationsparameter für
einen C-832er Motorcontroller eingestellt werden.
Für die Konfigurationsparameter gelten die im Kapitel 3.2 aufgeführten
Angaben. Es ist sicher zu stellen, daß die dort angegebenen
Einschränkungen nicht verletzt werden.
Der Button "Start Scan" löst die Funktion F6.3 aus.
TODO
3.1 Benutzerschnittstelle (Dialoge)
Ü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ängigkeiten.
Einige INI-Einträge sind in ihrer Bedeutung bzw. Gültigkeit vom
Parameter Type abhängig.Wenn dies 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üssen [MotorX] heißen wobei X eine Zahl ist.
X muß bei 0 beginnen und die Nummerierung der vorhandenen Sektionen
muß 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 |
zugeordnete 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 Schalter 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
zu gewä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.
-
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.
-
Im Dialog der Funktion F4 sollte die Einheit
der Positionsangaben erkennbar sein.
-
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 Konfigurationsparameter (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 Referenzpunktlauf
links vom Referenzpunkt beginnt, also der Referenzpunkt nicht in Fahrtrichtung
gefunden werden kann? Kontext
-
Warum macht 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
Version |
Änderung / Anmerkung |
0.6 |
Änderung der Struktur entsprechend Vorgaben für
Verhaltensspezifikation;
Korrekturen nach Review durch Herrn Sacklowski |
0.5 |
erste öffentliche Fassung |
-
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.
Die Einheit der Internen Motorposition ist der
Encoderschritt/Encoderimpuls.
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
Home-Position oder auch
Interne Null 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 physikalische Einheiten
umgerechnet werden. (z.B. Sekunden, Grad, Zentimeter)
-
Absolute Null (Syn.: Physikalische Null)
-
Absolute Motorposition, die per definitionem dem Ursprung des verwendeten
Koordinatensystems der Absoluten Positionen entspricht. Diese Position
wird während der Einrichtung des Motors festgelegt.
Z.B. könnte man festlegen, daß 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 Koordinatensystem der Absoluten Positionen nur durch eine Verschiebung
(Offset) des Nullpunktes unterscheidet. Sie dient der temporären
Koordinatenverschiebung.
-
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 physikalische Einheiten 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.
-