Posts by Sliwka

    Also ich bin ehrlich, würdest du einen Programmierer für 2 Tage bestellen, wäre dir schneller geholfen.


    1. Tag: Programmierarbeiten.

    2. Tag: Step by Step das Programm mit dir durchgehen und dir das ganze in Ruhe erklären.


    Das würd dir mehr helfen in der Situation als im Forum Programmschnipsel zusammen zu kleben und Tagelang zu testen und probieren.

    Hi,
    einerseits schreibst du, du verstehst es langsam mit den Variablen, aber 2 Zeilen weiter schreibst du wie du die Variable Beckenlänge deklarieren willst, obwohl diese längst deklariert ist, da du ansonsten Syntaxfehler hättest?
    Irgendwie verstehe ich deine Frage nicht.

    Dann solltest du eine neue Position erstellen oder ein Frame.


    slin P1

    POS_P1 = P1

    POS_P1_temp = P1


    POS_P1.y = POS_P1_temp .y + OFFSET


    oder machst ein Frame


    DECL FRAME fOffset

    fOffset = $NULLFRAME


    SLIN POS_P1


    ;P1

    SLIN fOffset:POS_P1


    SLIN POS_P1


    ;P2

    fOffset.y = Offset

    SLIN fOffset:POS_P1


    SLIN POS_P1


    ;P3

    fOffset.y = Offset * 2

    SLIN fOffset:POS_P1


    usw.


    Finde mit Frames arbeiten sehr übersichtlich. Kannst auch so nicht ausversehen Punkte überschreiben.

    Hi MedRob,


    Kannst du beschreiben, was du genau vor hast? Finde die Informationen sind verwirrend und zu wenig.

    Wenn ich dich richtig verstanden habe könnte das Programm wie folgt ausschauen.


    slin P1

    POS_P1 = P1


    ; Position 1 anfahren

    POS_P1.y = POS_P1.y + OFFSET

    slin POS_P1


    slin p1


    ; Position 2 anfahren

    POS_P1.y = POS_P1.y + 2*OFFSET

    slin POS_P1


    slin p1


    ; Position 3 anfahren

    POS_P1.y = POS_P1.y + 3*OFFSET

    slin POS_P1

    Einfacher wäre es, wenn du im Programm Temporäre Positionen teachen könnte.


    Diese Temporäre Positionen kannst du in deinem Verfahrprogramm mit den Originalenpunkten überschreiben.


    z.B.
    xEntnahme.Z = xTemp_Entnahme.Z


    Die restlichen Werte werden dann unverändert bleiben.

    Stopnoaprox läuft nur in T2/Automatik.

    Ein Roboter brauch eine Base, auch wenns ein Nullframe ist.


    Dann musst du prüfen, ob deine Baseberechnung plausibel ist, bevor du diese zuweist.


    zB durch Eingrenzungen:


    IF Base_Neu.x > 5000 ... THEN

    Fehler

    WAIT FOR FALSE

    ENDIF



    Was hast du denn generell vor?


    Reicht dir eine Base Schiebung? Durch einen Doppelpunktoperator?

    Basis_Neu = CALCBASE(Ursprung, PunktX, PunktY)

    BASE_DATA[2] = BASE_NEU


    BAS(#Base,2)


    Hoffe verstehe dein Problem richtig, aber so sollte es gehen


    Kannst die Bases/Frames immer zuweisen, wie du es brauchst.

    zB.
    IF XXX THEN

    BASE_DATA[2] = BASE_DATA[BaseNr]

    ELSE

    Basis_Neu = CALCBASE(Ursprung, PunktX, PunktY)

    BASE_DATA[2] = BASE_NEU

    ENDIF

    Laut Datenblatt handelt es sich hierbei um die Sollposition des Roboters oder war das nur ein Schreibfehler?

    --> Du hast Recht, damit kann ich die einzelnen Gradangaben des Roboters untersuchen
    Und einmal für mich wie kann man zwischen Grad und mm unterscheiden?

    Rotatorische Achsen sind in ° angezeigt und Linear Achsen in mm

    Die Gruppensignale verarbeiten nur Integerwerte. Wenn ich Kommawerte mitschicken will multipliziere ich den Wert * 100 und die SPS teilt durch 100.


    Heißt als Beispiel:


    xAchseOut = $AXIS_MOT.A1 * 100


    Tipp:

    Nach deinen Tests würde ich die WAIT SEC Befehle wieder rausnehmen.

    Sonst füg einen Blinker ein, nutze den zB als Lifebit

    DECL BOOL bBlinker


    ;Blinkermerker


             IF $TIMER[1]>=0 THEN


    $TIMER_STOP[1]=TRUE


    $TIMER[1]=-1000


    bBlinker = NOT bBlinker


    $TIMER_STOP[1]=FALSE


             ENDIF


    Testigkeiten = bBlinker

    Hi Andreas,


    in der SPS.sub im Teil der User PLC kannst du die Daten zyklisch senden.


    Beispiel für die X Koordinate:

    Danach musst du ein WORD definieren in der Config.dat ($IN[1] TO $IN[32] giAkt_Pos_X als Beispiel)


    In der SPS.sub schreibst dann:

    IF (VARSTATE("$TOOL")==#INITIALIZED) AND (VARSTATE("$BASE")==#INITIALIZED) AND $T1 THEN
    giAkt_Pos_X = $POS_ACT.X

    giAkt_Pos_Y = $POS_ACT.Y

    giAkt_Pos_Z = $POS_ACT.Z

    giAkt_Pos_A = $POS_ACT.A

    giAkt_Pos_B = $POS_ACT.B

    giAkt_Pos_C = $POS_ACT.C

    ENDIF


    Grüße