FC_ProfileInvCompute

 

FC_ProfileInvCompute - Allgemeine Informationen

Übersicht

Typ

Funktion

Verfügbar ab:

V1.0.3.0

Versionen:

Aktuelle Version

Aufgabe

Ermittlung der Leitposition einer Kurve zu einer Folgeposition.

Beschreibung

Die Funktion startet mit einer linearen Suche von i_lrXStart mit der Schrittweite i_lrXIncr. Wird ein Vorzeichenwechsel in der Differenz aus i_lrYPos – Y(Xi) erkannt, ist der Abschnitt mit der Lösung gefunden.

In diesem Abschnitt wird dann ein binäres iteratives Verfahren genutzt, um das Ergebnis q_lrXPos zu finden.

Die Funktion wird beendet, wenn

|i_lrYpos – Y(XPos)| <= i_lrAccuracy oder nach maximal 20 Durchläufen.

Schnittstelle

Eingang

Datentyp

Beschreibung

i_diProfileId

DINT

ID des zu Grunde liegenden Profils

i_lrYPos

LREAL

Folgeposition, zu der eine Leitposition gesucht werden soll.

i_lrXOffset

LREAL

Offset der Position des Leitgebers

i_lrYOffset

LREAL

Offset der Position der Slaveachse

i_lrXFactor

LREAL

Skalierungsfaktor des Leitgebers

i_lrYFactor

LREAL

Skalierungsfaktor der Slaveachse

i_lrXStart

LREAL

Startwert für die Suche

i_lrXIncr

LREAL

Schrittweite für die Suche

i_lrAccuracy

LREAL

Genauigkeit des Ergenisses, bei dem die Interation abgebrochen werden soll.

Ausgang

Datentyp

Beschreibung

q_etDiag

GD.ET_Diag

Allgemeingültige, bibliotheksunabhängige Aussage zur Diagnose.

Ein Wert ungleich ET_Diag.Ok entspricht einer Diagnosemeldung.

q_etDiagExt

ET_DiagExt

POU-spezifischer, diagnosebezogener Ausgang.

q_etDiag = ET_Diag.Ok -> Statusmeldung

q_etDiag <> ET_Diag.Ok -> Diagnosemeldung

q_lrXPos

LREAL

Position des Leitgebers zur Position der Slaveachse i_lrYPos

Beispiel

Kurve mit drei X-Positionen zu einer Y-Position

G-SE-0068888.1.gif-high.gif

 

 

Beispiel für das Finden von mehreren Lösungen:

lrXStart := lrXOffset;
i := 0;

WHILE lrXStart + lrXIncr < lrXOffset + lrXFactor DO

FC_ProfileInvCompute(i_diProfileId := diProfileId,
i_lrYPos := lrYPos,
i_lrXOffset := lrXOffset,
i_lrYOffset := lrYOffset,
i_lrXFactor := lrXFactor,
i_lrYFactor := lrYFactor,
i_lrXStart := lrXStart,
i_lrXIncr := lrXIncr,
i_lrAccuracy := lrAccuracy,
q_etDiag : etDiag,
q_etDiagExt : etDiagExt,
q_lrXPos := lrXPos);

IF etDiag <> Ok THEN
EXIT;
END_IF

alrXPos[i]:= lrXPos; (* save result *)
i := i + 1; (* number of valid results *)

lrXStart := lrXPos + lrXIncr / 2.0; (*Start of next search *)
END_WHILE

Diagnosemeldungen

q_etDiag

q_etDiagExt

Enumerationswert

Beschreibung

OK

Ok

0

OK

ExecutionAborted

MaxNumberOfIterationsExceeded

96

Die maximale Anzahl an Interationsschritten wurde überschritten.

InputParameterInvalid

AccuracyRange

118

Accuracy ist außerhalb des gültigen Bereichs.

InputParameterInvalid

ProfileIdInvalid

114

ProfileId ist ungültig.

InputParameterInvalid

XFactorRange

115

XFactor ist außerhalb des gültigen Bereichs.

InputParameterInvalid

XIncrRange

117

XIncr ist außerhalb des gültigen Bereichs.

InputParameterInvalid

XStartRange

119

XStart ist außerhalb des gültigen Bereichs.

InputParameterInvalid

YPosRange

120

YPos ist außerhalb des gültigen Bereichs.

UnexpectedProgramBehavior

ProfileAlreadyInUse

116

Das Profil wird bereits verwendet.

UnexpectedProgramBehavior

UnexpectedFeedback

1

Es ist ein unbeabsichtigter Fehler während der Ausführung aufgetreten.

AccuracyRange

Enumerationsname:

AccuracyRange

Enumerationswert:

118

Beschreibung:

Accuracy ist außerhalb des gültigen Bereichs.

Problem

Ursache

Lösung

-

Am Eingang i_lrAccuracy wurde eine Zahl kleiner als 1E-10 angelegt.

Es muss ein Wert größer als null angegeben werden.

MaxNumberOfIterationsExceeded

Enumerationsname:

MaxNumberOfIterationsExceeded

Enumerationswert:

96

Beschreibung:

Die maximale Anzahl an Interationsschritten wurde überschritten.

Problem

Ursache

Lösung

-

i_lrAccuracy wurde zu klein gewählt. Das numerische Annäherungsverfahren konvergiert nicht in weniger als Gc_diMaxNumberOfIterations Iterationsschritten auf ein solch genaues Ergebnis.

Es muss ein größerer Wert für i_lrAccuracy gewählt werden.

Ok

Enumerationsname:

Ok

Enumerationswert:

0

Beschreibung:

OK

Die Leitposition wurde erfolgreich ermittelt.

ProfileAlreadyInUse

Enumerationsname:

ProfileAlreadyInUse

Enumerationswert:

116

Beschreibung:

Das Profil wird bereits verwendet.

Problem

Ursache

Lösung

-

Das Bewegungsprofil wird bereits verwendet.

Überprüfen Sie die Bewegungsdaten.

ProfileIdInvalid

Enumerationsname:

ProfileIdInvalid

Enumerationswert:

114

Beschreibung:

ProfileId ist ungültig.

Problem

Ursache

Lösung

-

Das Profil existiert nicht

Überprüfen Sie den Wert am Eingang i_diProfileId.

UnexpectedFeedback

Enumerationsname:

UnexpectedFeedback

Enumerationswert:

1

Beschreibung:

Es ist ein unbeabsichtigter Fehler während der Ausführung aufgetreten.

Problem

Ursache

Lösung

-

Es ist ein Fehler in der internen Abarbeitung aufgetreten.

Bitte informieren Sie das Supportteam über diesen Fehler.

XFactorRange

Enumerationsname:

XFactorRange

Enumerationswert:

115

Beschreibung:

XFactor ist außerhalb des gültigen Bereichs.

Problem

Ursache

Lösung

-

Am Eingang i_lrXFactor wurde der Wert 0 angelegt.

i_lrXFactor darf nicht 0 sein.

XIncrRange

Enumerationsname:

XIncrRange

Enumerationswert:

117

Beschreibung:

XIncr ist außerhalb des gültigen Bereichs.

Problem

Ursache

Lösung

-

Am Eingang i_lrXIncr wurde eine Zahl <= 0 angelegt.

i_lrXIncr muss größer sein als 0.

XStartRange

Enumerationsname:

XStartRange

Enumerationswert:

119

Beschreibung:

XStart ist außerhalb des gültigen Bereichs.

Problem

Ursache

Lösung

-

Am Eingang i_lrXStart wurde eine Zahl außerhalb der Kurve angegeben.

Überprüfen Sie i_lrXStart und setzen Sie den Parameter auf einen Wert über i_lrXOffset.

Überprüfen Sie i_lrXStart und setzen Sie den Parameter auf einen Wert unter i_lrXOffset + i_lrXFactor - i_lrXIncr.

YPosRange

Enumerationsname:

YPosRange

Enumerationswert:

120

Beschreibung:

YPos ist außerhalb des gültigen Bereichs.

Problem

Ursache

Lösung

-

Am Eingang i_lrYPos wurde ein Wert angelegt, der vom Master im angegebenen Bereich der Kurve nicht erreicht wird.

Überprüfen Sie die Definition der Kurve.

Überprüfen Sie die Startposition i_lrXStart.