Array unter Beckhoff aufrufen

heli100

Level-2
Beiträge
68
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo;

habe unter Twincat3 folgendes Array definiert:
aPositions : ARRAY[0..2] OF LREAL := [2000,0,2500];

D.h. der Servo soll zunächst Position 2000 anfahren, dann auf 0 zurück und dann wieder auf 2500.

Wie rufe ich im Programmteil dieses unter den Variablen definierte Array auf?
Durch Betätigen eines Schalters soll der Motor diese Positionen anfahren.

Vielen Dank
 
Code:
[LEFT][COLOR=#222222][FONT=Verdana]If Schalter1 then [/FONT][/COLOR]
    [COLOR=#222222][FONT=Verdana]SollPosition := aPositions[0];[/FONT][/COLOR]
[COLOR=#222222][FONT=Verdana]ElseIf Schalter2 then [/FONT][/COLOR]
    [COLOR=#222222][FONT=Verdana]SollPosition := aPositions[1];[/FONT][/COLOR]
[COLOR=#222222][FONT=Verdana]ElseIf Schalter3 then [/FONT][/COLOR]
    [COLOR=#222222][FONT=Verdana]SollPosition := aPositions[2];[/FONT][/COLOR]
[COLOR=#222222][FONT=Verdana]EndIf;[/FONT][/COLOR][/LEFT]
jedenfalls sinngemäss oder mit CASE?
Was heisst denn "Schalter betätigen"? Mehrere Schalter oder Taster? Oder StufenSchalter? Oder etwas "ThumbWheel"-mässiges, evtl. mit GrayCode?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo;
momentan sieht es so aus, allerdings rührt sich nichts. Im manuellen NC-Online-Betrieb dreht sich der Servo tadellos. Die Ausgänge dienen lediglich zur Visualisierung, sie funktionieren. Danke für weitere Hilfe.

Als Variable definiert: aPositions : ARRAY[0..2] OF LREAL := [1000,0,2500];

Programm:
Output1 := Input1;
Output2 := Input2;
Output3 := Input3;

IF Output1 AND NOT Output2 AND NOT Output3 THEN
SollPosition := aPositions[0];
ELSIF Output2 AND NOT Output1 AND NOT Output3 THEN
SollPosition := aPositions[1];
ELSIF Output3 AND NOT Output1 AND NOT Output2 THEN
SollPosition := aPositions[2];
END_IF;

Die Frage ist, wie sage ich dem Motor, dass er die entsprechenden Positionen anfahren soll.
 
Zuletzt bearbeitet:
Code:
mcJog(
    Axis:= Axis1, 
    JogForward:= , 
    JogBackwards:= , 
    Mode:= MC_JOGMODE_STANDARD_FAST, 
    Position:= [COLOR=#0000cd][FONT=Verdana]SollPosition[/FONT][/COLOR], 
    Velocity:= 1000, );
Das sieht doch gar nicht sooo verkehrt aus. Probier's mal mit dem Einfügen von "SollPosition" (oben in blau), um das "Loch" zu schliessen.
Weitere Anmerkungen erspare ich mir hier erstmal.

Gruss, Heinileini

Huch, da habe ich etwas zitiert, was mittlerweile gar nicht mehr da steht . . .

Könnte mir vorstellen, dass
JogForward:= ,
JogBackwards:= ,
ohne dort zugewiesene Werte vom Compiler bemeckert wird . . . weglassen?
 
Zuletzt bearbeitet:
Diese JogForward und Backw sind nur für den manuellen Betrieb gedacht, d.h. der Motor dreht solange wie die Schalter eingeschalten sind. Der Motor soll aber auf die im Array definierten Positionen fahren und dort stehen bleiben. Nicht ganz einfach das Ganze, wenn man's das erste Mal macht
 
Zuletzt bearbeitet:
Dafür gibt es die Befehle MC_MoveAbsolute für eine Absolutfahrt, bzw. MC_MoveRelative für eine Relativfahrt, eine Endlosfahrt startest Du mit MC_MoveVelocity. Zum "vernünftigen" Arbeiten mir einer Achse in der Beckhoff NC benötigst Du dann noch die Befehle MC_Power und MC_Home und vielleicht noch MC_Stop und/oder MC_Halt.
 
Zuletzt bearbeitet:
Danke euch für die Tipps;

Klingt plausibel; habe jetzt folgenden Funktionsblock integriert, läuft aber trotzdem noch nicht, scheint ein Initialisierungsproblem zu sein:

mcMoveAbs(
Axis:= Axis1,
Execute:= ,
Position:= SollPosition,
Velocity:= ,
Acceleration:= ,
Deceleration:= ,
Jerk:= ,
BufferMode:= ,
Options:= ,
Done=> ,
Busy=> ,
Active=> ,
CommandAborted=> ,
Error=> ,
ErrorID=> );
 
Neben dem was StructuredTrash schon anmmerkte muss die Achse auch enabled sein inklusive Richtungsfreigabe und Overdrive muss >>0% sein. Die Werte für Acceleration, Deceleration, usw. kannst Du auch außerhalb des Aufrufes übergeben, z.B. so:

Code:
mcMoveAbs.Acceleration := 1000.0;
mcMoveAbs.Deceleration := 1000.0;
mcMoveAbs.Jerk := 10000.0;
mcMoveAbs.Velocity := 100.0;
Wobei ich bei Acceleration, Deceleration und Jerk nicht sicher bin, ob er bei diesen Werten nicht Standardwerte nimmt, wenn keine Wert übertragen wird.

Von irgendwas mit Internetzugang gesendet.
 
Zuletzt bearbeitet:
Zurück
Oben