DOKUMENTENNAME:

Pflichtenheft/Verhaltensspezifikation: RTK-Steuerprogramm
Teil: Motorsteuerungs-Komponente (motors.dll)

Autor: S. Lützkendorf

Dokumentversion: 0.5 (Jan. 2001)


Gliederung

Definitionen
Funktionen
F1 Bestimmung der absoluten Motorposition
F2
F2.1
F2.2
F2.3

Grundstellung anfahren (= Reference Point Handling)
Teilfunktion: Kalibrierung
Teilfunktion: Referenzpunktlauf
Teilfunktion: "Setzen der absoluten Null"

F3
F3.1
F3.2
Motor-Parameter einstellen (= Common Settings for Drives)
Parameter-Einstellung
"End-Schalter"
F4 Verfahren nach Encoder-Position (= Direct Steering, Move Drive (RAW))
F5 Bereichsmaximierung
F6
F6.1
F6.2
Optimieren (motorspezifische Parameter festlegen)
Optimieren eines C-812er Motors
Optimieren eines C-832er Motors

Fehler
Änderungswünsche
Probleme, Offene Fragen
Anhang: Konfigurations-Parameter (INI-Einträge)


0. Definitionen

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

F1: Bestimmung der absoluten Motorposition

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:

  1. Durch einen Referenzpunktlauf, bei dem eine Position angefahren wird, dessen Abstand zur Absoluten Null bekannt ist, und die zur internen Null gesetzt wird. Oder
  2. ü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

  1. 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;
  2. die RTK-Software die Konfigurations-Daten korrekt abgespeichert hat; und
  3. 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" ???)

F1.2 Die Relative Null

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

F2: Grundstellung anfahren (= Reference Point Handling)

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

F2.1 Teilfunktion: Kalibrierung

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
  1. (Einrichtung der Motorenkonfiguration entsprechend dem Versuchsaufbau; Positionierung des Motors auf der Absoluten Null)
  2. Referenzpunktlauf mit der Option "Keep Calibration Data" == false.
  3. (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?)

F2.2 Teilfunktion: Referenzpunktlauf

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
  1. Speichern der aktuellen Internen Position
  2. 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?).
  3. 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.
  4. Die Interne Position wird auf Null gesetzt (Home-Position); und DeltaPositon auf -DistanceToZero; von nun an gilt wieder (*).
  5. 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.

F2.3 Teilfunktion: "Setzen der absoluten Null"

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?

F3: Motor-Parameter einstellen (= Common Settings for Drives)

DIALOGBOX

F3.1 Teilfunktion Parameter-Einstellung

Ü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.

F3.2 Teilfunktion "End-Schalter"

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.

F4: Verfahren nach Encoder-Position (= Direct Steering, Move Drive (RAW))

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?

F5: &Bereichsmaximierung

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

F6: Optimieren

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.

F6.1 Optimieren eines C-812er Motors

DIALOGBOX

Über diesen Dialog können folgende Konfigurationsparameter für einen C-812er Motorcontroller eingestellt werden.

F6.2 Optimieren eines C-832er Motors

DIALOGBOX

Über diesen Dialog können folgende Konfigurationsparameter für einen C-832er Motorcontroller eingestellt werden.

F6.3 Start Scan

TODO

Fehler

  1. Im Dialog "Verfahren nach Encoder-Position" funktioniert der Scrollbar zur Angabe der Zielposition nicht, obwohl Teile des Codes dafür vorhanden sind. Kontext
  2. im Dialog "Verfahren nach Encoder-Position": zu einem Zeitpunkt darf nur ein Motor in Bewegung sein.  Kontext

Änderungswünsche

  1. 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.

Probleme, Offene Fragen

  1. 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
  2. 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 
  3. 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
  4. Was passiert wenn die Konfigurationparameter (für C832) sagen es gibt eine Index-Line, es aber gar keine gibt, bzw. diese nicht anspricht? Kontext
  5. Was passiert wenn MoveFirstToLimit == false und der der Referenzpunktlauf links vom Referenzpunkt beginnt, also der Referenzpunkt nicht in Fahrtrichtung gefunden werden kann? Kontext
  6. Warum mach das setzten der absoluten Null die Kalibrierung bzw. der Referenzpunktlauf ungültig Kontext
  7. Wann wird die "Setzten der Absoluten Null" verwendet? Kontext

  8. Warum sind im Dialog "Common Settings ..." die Steuerelemente für PositionMin, PositionMax und RemoveLimit disabled? Kontext

  9. Frage zum Verhältnis Position[Min|Max|...] zu Angle[Min|Max|...].Kontext

  10. Wann wird die Funktion "F3.2 End-Schalter" benötigt? Kontext

  11. Unter welchen Umständen wird die Funktion "Verfahren nach Encoder-Schritten" verwendet? Kontext

  12. welche Funktion hat der Konfiguration-Parameter InitialMove

 


Anhang: Konfigurations-Parameter (INI-Einträge)

Ü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.

Allgemein

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

Einträge zur Hardware-Ansteuerung

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

Einträge zum Referenzpunkt und zur Positionsbestimmung

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

Einträge zu Software-Schranken

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) ?

"Einträge für das Rückspeichern von verschiedenen Einstellungen"

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

Sonstige Parameter zur Motorsteuerung

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

TODO

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

Obsolete Parameter

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.