Variable vom Type "FRAME" zuweisen ?!?!?!?!?

  • Hallo alle zusammen...



    ich habe in der $Config.dat eine Global Variable (TEST) vom type Frame angelegt, die dann via CP5614 Profibus Koordinaten an die SPS weiter geben soll.
    Frage:
    wenn ich in meiner *.src nun schreibe:
    $TEST = $BASE


    wobei in $BASE meine BaseKoordinaten stehen
    sollte er doch die Daten die in $Base stehen in $TEST schreiben, oder schreibe ich da was falsch.
    beide sind doch vom Type Frame und BASE ist doch eine fest vom Roboter vorgegebene Global Variable die ich mit :
    $BASE = BASE_DATA[1] ; beschreibe. das geht auch.


    :kopfkratz: :denk:


    Danke schon mal für eure hilfe.......

  • Schritt für Schritt zum Roboterprofi!
  • Hallo,
    du kannst schon Variablen mit '$' deklarieren, aber du solltest es besser nicht tun um die Systemvariablen immer direkt zu erkennen. Und wenn du die Daten an die SPS durchreichen willst würde ich lieber sagen $BASE=BASE_DATA[1] und TEMP_FRAME=BASE_DATA[1] und das TEMPFRAME übergeben, was genau ist jetzt das Problem (steht nichts in $TEST?) und wie und wo regelst du die übergabe auf den CP!!?

  • Danke erst mal für die schnellen Antworten. :merci:


    ich war der meinung das das $ zeichen hin muß weil es Global ist aber ok. (*Wieder mehr weiß* :D)


    nein es sind keine Daten in der CPU angekommen, aber das lag nicht an der übergabe an die CPU das funzt. in $Test Stand nichts drin.
    aber das lag an dem $ und an der Aktualisierung. :uglyhammer_2:


    habe das ganze jetzt in die SPS.sup reingetippt und das $ weggelassen. jetzt funzt es. :ylsuper:



    aber wenn wir schon dabei sind ......
    ich übergebe jetzt Koordinaten von der SPS an den Robi. kann ich das direct schreiben ?


    "PositionIN" ist jetzt variable Type Frame (( X 0.0,Y 0.0,Z 100.0,A 0.0,B 0.0,C 0.0))


    zb. so :


    PTP...........
    LIN_REL PositionIN <-- ???

  • Yes, kannst du machen, würde aber die Koordinaten (Werte) auf Plausibilität prüfen bevor ich den Rob los schicke!!!

  • Nicht wirklich, kommt auf deine Applikation an, schaust du dir die Kartesischen Werte an die für den Bereich gültig sind und dann auf > < oder so in der Art!


  • gibts da so was wie ne Standart lösung um das Thema Plausibilitäts Kontrolle zu lösen?


    Ich mache es so:


    In der CONFIG.dat:
    EXT BILDVERARBEITUNG ( )


    ; Status des einlesen der Messung
    ; =1 Messung Ok und Checkmax iO -> Maximalwerte i.O.
    ; =-2 Messung Ok aber checkmax niO -> Maximalwerte ueberschritten
    INT SENS_STAT=0
    ; Korrekturposition Frame mit eingelesenen Werten
    FRAME SENS_BASE={X 0.0,Y 0.0,Z 0.0,A -0.0,B 0.0,C 0.0}



    Im Berarbeitungsprogramm ICH_MACH_WAS ( :(


    BILDVERARBEITUNG ( )


    Korr_POS.X=Korr_POS.X+SENS_BASE.X
    oder
    KORR_BASE=SENS_BASE


    Im DAT-file ICH_MACH_WAS ( :(
    POS Korr_POS={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0}
    oder
    FRAME KORR_BASE={X 0.0,Y 0.0,Z 252.0,A 0.0,B 0.0,C 0.0}


    *************************************


    DEF BILDVERARBEITUNG ( ) ;--- SRC-Programm :


    $ADVANCE=0


    MESSUNG=0


    REPEAT ; bis kein Fehler
    REPEAT ; 2 mal Versuchen bis Fehlerausgabe


    SENS_STAT=0


    ;INTERRUPT ON 10
    WAIT FOR E_KAMERA_BEREIT
    A_START_MESSUNG=TRUE
    WAIT SEC 0.2


    WAIT FOR E_DATEN_GUELTIG==TRUE
    WAIT SEC 0.2
    A_START_MESSUNG=FALSE


    ; Daten einlesen bzw. auf Fehler warten
    WAIT SEC 0.8


    DATEN_HOLEN ( )
    ;................................................
    ; Sens_STAT wird beschrieben
    ; =1 Messung Ok und Checkmax iO -> Maximalwerte i.O.
    ; =-2 Messung Ok aber checkmax niO -> Maximalwerte ueberschritten
    ;................................................
    MESSUNG=MESSUNG+1
    WAIT SEC 0.5
    UNTIL (SENS_STAT>0) OR (MESSUNG>2)


    ; hier gehts weiter wenn
    ;1 alles OK
    ;2 oder 2.Messung immer noch fehlerhaft
    $ADVANCE=3



    SWITCH SENS_STAT


    CASE 1
    ; Daten in Frame schreiben ...
    SENS_BASE=P


    CASE -2
    ; Maxwert ueberschritten
    ; Kamerabild und Felge kontrollieren
    ; mit Starttaste wird Messversuch erneut gestartet


    TEXT[]="Max-werte ueberschritten!@"
    SOFTKEY[]="@"
    MELDUNG (#HINWEIS,TEXT[],SOFTKEY[] )
    WAIT SEC 0.8


    TEXT[]="Neue Messung durch Quittieren!@"
    SOFTKEY[]="@"
    MELDUNG (#QUIT,TEXT[],SOFTKEY[] )
    WAIT SEC 0.8


    ENDSWITCH


    ; Wiederholen bis Messung & CHECKMAX iO
    UNTIL (SENS_STAT>0)


    END ; ----BILDVERARBEITUNG ( )


    ;************************************


    DEF DATEN_HOLEN ( )


    P=$NULLFRAME
    SENS_BASE=$NULLFRAME
    WAIT SEC 0.1


    IF CHECKMAX(P) THEN
    ; Maximalwertkontrolle
    ; MIN-MAX-Grenze in lokaler Datenliste
    ; Korrwerte in globalen Frame SENS_BASE
    ; uebertragen und SENS_STAT=1 -> Messung & CHECKMAX OK
    SENS_STAT=1
    ELSE ; Checkmax n.i.O.
    ;maximalwert ueberschritten
    SENS_STAT=-2
    ENDIF ; Checkmax


    $ADVANCE=3


    END ; ----DATEN_HOLEN ( )



    DEFFCT BOOL CHECKMAX(BP)
    POS BP
    IF (BP.X<=PXMAX) AND (BP.X>=NXMAX) THEN ; in diesem Fall wird nur dein X-Wert geprüft
    RETURN (TRUE)
    ELSE
    RETURN (FALSE)
    ENDIF
    ENDFCT


    *************************************

Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren

Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können

Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen
Anmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden