KRC2sr serielle Verbindung..bekomms einfach nicht hin..

  • Hallo und HILFEEE..
    hab schon alles ausprobiert und bekomms einfach nicht hin.. hab auch keinen weiteren Ansatzpunkt mehr, wo ich angreifen könnte..wär schön, wenn jemand nochne Idee hat..
    also hier meine Einstellungen:


    - Verbindung mit COM1 aus HyperTerminal (vom Windows im Robo) zum Rechner mit HyperTerminal klappt gut.
    - für die Verbindung aus einem Robo Programm wurden folg. Einstellungen vorgenommen:

    Serial.ini:
    [COM1]


    BAUD=9600
    CHAR_LEN=8 ; 7,8
    STOP_BIT=1 ; 1,2 at time not changeable
    PARITY=0 ; EVEN=2, ODD=1, NONE=0
    PROC=4 ; 3964R=1, SRVT=2, WTC=3, XONXOFF=4


    [COM2]


    BAUD=9600
    CHAR_LEN=8 ; 7,8
    STOP_BIT=1 ; 1,2 at time not changeable
    PARITY=0 ; EVEN=2, ODD=1, NONE=0


    PROC=4 ; 3964R=1, SRVT=2, WTC=3, XONXOFF=4


    ........


    [XONXOFF]
    CHAR_TIMEOUT=50 ; msec Timeout after last received character
    ; to recognize the end of telegram
    MAX_TX_BUFFER=2 ; 1..5
    MAX_RX_BUFFER=2 ; 1..20
    SIZE_RX_BUFFER=100 ; 1..2048 longest expected telegram length + 15 characters


    XON_VAL=0 ; 0..255 XON character (decimal)
    XOFF_VAL=0 ; 0..255 XOFF character (decimal)
    ; if XON_VAL=0 and XOFF_VAL=0 then XON/XOFF protocol
    ; is disabled (pure serial communication)
    DSR_LINE=0 ; 0 = DSR line not connected, 1 = DSR line must be high


    [TEST]
    ;testprint (Rx/Tx-telegrams) on telnet if value > 0
    TESTPRINT=1



    - XON/OFF stehen die Werte auf 0, somit ist kein Handshakeverfahren ausgewählt (auch am Rechner wurde keins gewählt)
    - Parameter wurden am Rechner (hyperterminal) auch so eingestellt
    - R3964 Protokoll steht am Rechner nicht zur Verfügung


    - COM2 lässt sich im Programm öffnen (COPEN..handle=2)
    - Swrite im Prog.: SWRITE(TEXT[],status,OFFSET,"%s%d","HAllo",i)
    - nach SWRITE steht Status auf CMD_OK MSG_NO=0,HITS=2,LENGTH=0
    - in Telnet wurden geschickte Telegramme angezeigt (kann das aber nicht deuten)
    - Auch Versuche mit COM1 (in KRC.xml zu VxWorks zugeordnet) sind gescheitert




    - kann das Problem bei DSR-Leitung liegen? (in serial.ini)
    - viel. Swrite nicht richtig eingesetzt?
    - Wann werden die Dateien KRl.xml und serial.ini geparst?
    (bei Neustart, nach abspeichern der Dateien oder bei Programmstart *.src)


    Für ein Paar Lösungsansätze oder Gedanken wäre ich sehr Dankbar!
    der Roland

  • Schritt für Schritt zum Roboterprofi!
  • Einmal kaltstart bitte...

    Wolfram (Cat) Henkel

    never forget Asimov's Laws at the programming of robots...

    "Safety is an integral part of function. No safety, no production. I don't buy a car without brakes."


    Messages und Mails mit Anfragen wie "Wie geht das..." werden nicht beantwortet.

    Diese Fragen und die Antworten interessieren jeden hier im Forum.


    Messages and Mails with questions like "how to do..." will not be answered.

    These questions and the answers are interesting for everyone here in the forum.

  • falls es nach einem Kaltstart nicht klappen sollte - bitte zur weiteren Überprüfung Deine Softwareversion angeben.


    Ähhh, willst du mit SWRITE serielle Telegramme schicken :kopfkratz:

    Wer nach allen Seiten offen ist kann nicht ganz dicht sein

  • Hallo kleinstar.


    Hast Du das Problem schon gelöst???


    Wie alt ist denn Deine KRC2. Ab so ca. 2001/02 wurden andere Mainboards verbaut. Seither ist meineswissens auf VxWorks-Ebene nur noch COM3 aktiv. Der 9-polige-Anschluß heißt glaube ich ST5. Auf der gegenüberliegenden Seite, oben am PC.


    Wir verwenden die COM3 aus dem Roboterprogramm eigentlich bei jeder neuen Roboterinstallation.
    Beim ersten mal holt man sich halt eine blutige Nase. :wallbash:


    Bei Bedarf kann ich Dir mal unsere Einstellungen und ein Testprogramm mailen.


    Gruß Roland

  • Hallo Roland,


    finde ich nicht so nett das sich kleinstar nicht mehr meldet. :angry:


    Wie dem auch sei, im Betreff steht KRC2sr. "SR" ist die Steuerung für die Small Robots, das funktioniert nur die COM2 für die serielle Kommunikation.


    happy weekend

    Wer nach allen Seiten offen ist kann nicht ganz dicht sein

  • Hallo fischertech,
    die Einstellungen und ein Testprogramm würden mich auch sehr interessieren, vielen dank und MfG Christian ... .

  • hallo,
    hier kleinstar, der zufällig auch ein roland ist:)
    hab hier garnicht mehr reingeschaut
    mitlerweile habich alles hinbekommen, lag wohl doch am kaltstart..
    wenn jemand mag, kannich mein ganzes prog (mi bewegungsansteuerung, posionsabfrage, geschwindigkeits und beschleunigungsbeeinflussung und arbeitsraumabfrage mal reinstellen).
    grüße

  • Hallo,
    wollt mal mein Krc sr2 prog reinstellen, kommuniziert ganz gut mit labview am rechner..
    außer bei resume im Interruptprog. kommt noch nen fehler..und paar kleine sinnlosigkeiten sind auch noch drin...aber wenns jemand nützt oder jemand anmerkungen oder kritik hat..



    &ACCESS RVP
    &REL 229
    DEF robo()
    ;FOLD BASISTECH INI
    GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )


    INTERRUPT ON 3
    bas (#INITMOV,0 )


    ;ENDFOLD (BASISTECH INI)



    OPEN_PORT()
    ;FOLD PTP HOME Vel= vel_ptp % DEFAULT;%{PE}%R 5.4.36,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:3, 7:DEFAULT
    $BWDSTART=FALSE
    PDAT_ACT=PDEFAULT
    FDAT_ACT=FHOME
    BAS(#PTP_PARAMS,vel_ptp) ;setzt base zurueck!!
    $H_POS=XHOME
    PTP XHOME
    ;ENDFOLD



    ;base wird rueckgesetzt!..deshalb gleich am anfang..
    ;tool und base werden danach gesetzt..


    ;-----my INIT--------------------------------------------------------


    bas(#base ,my_base_nr) ;nach homefahrt setzen
    bas(#tool ,my_tool_nr)



    IF ($ACT_BASE<>my_base_nr) AND ($ACT_TOOL<>my_tool_nr) AND ($WORKSPACE[my_AR_nr].MODE<>#OUTSIDE_STOP) THEN
    goto hauptprog_ende
    meldung("base/tool/AR Fehler..-->Prog.Ende")
    ENDIF


    INTERRUPT DECL 1 WHEN $DATA_SER2<>0 DO int_lesen( ) ;im interrupt stop drin



    IF ($DATA_SER2<>0) then
    TIMEOUT=0.1
    OFFSET=0 ;sonst wird der hochgezaehlte offset des letzten cread uebernommen
    CREAD (HANDLE, status, r_modus, TIMEOUT, OFFSET, "%s %f %f %f %f %f %f",befehl[], N[1], N[2], N[3], N[4],N[5] , N[6]) ;restlichen floats lesen
    ENDIF



    IF ($DATA_SER2<>0) then
    meldung("noch daten drin data ser nicht null")
    ENDIF




    schreibe_prog_start()




    lesen_on() ;command=null,int ein und vorlaufzeiger auf standard
    WHILE true ;endlosschleife programm
    SWITCH command
    case #null
    CASE #st ;nichts (bei zb stop)
    lesen_on() ;interruppt ein, command zurueckgesetzt
    CASE #ln_norm ;ln
    move_ln()
    lesen_on() ;interruppt ein, command zurueckgesetzt
    CASE #ln_trig
    move_ln() ;fahren mit trigger (wird drin mit command ausgelesen..)
    lesen_on() ;interruppt ein, command zurueckgesetzt
    CASE #akt_pos ;pos_akt
    schreibe_akt_pos()
    lesen_on() ;interruppt ein, command zurueckgesetzt
    case #set_vel
    lesen_on() ;interruppt ein, command zurueckgesetzt
    case #set_acc
    lesen_on()
    ENDSWITCH
    ENDWHILE





    hauptprog_ende:


    ;FOLD PTP HOME Vel= 3 % DEFAULT;%{PE}%R 5.4.36,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:3, 7:DEFAULT
    $BWDSTART=FALSE
    PDAT_ACT=PDEFAULT
    FDAT_ACT=FHOME
    BAS(#PTP_PARAMS,vel_ptp)
    $H_POS=XHOME
    PTP XHOME
    ;ENDFOLD


    CLOSE_PORT()


    END


    ;__________________________________________________________________________________________________
    ;---Unterprogramme---------------------------------------------------------------------------------
    ;__________________________________________________________________________________________________


    DEF lesen_on()
    command=#null
    $advance=def_advance ;vorlaufzeiger..wieder setzen, wegen trigger
    INTERRUPT ON 1 ;als letztes setzen, weil ab da wieder unterbrechbar.. sonst wird das andere nicht gesetzt
    END
    ;-------------------------------------------------------------------------------------------


    DEF int_lesen()
    interrupt off 1
    command=#null
    befehl[]=" "
    rest_str[]=" "
    rest_float=0
    FOR j=1 TO 6
    N[j]=0
    ENDFOR



    ;behfehl lesen
    ;r_modus=#ABS ;abs warten bis timeout
    TIMEOUT=0.04
    OFFSET=0 ;sonst wird der hochgezaehlte offset des letzten cread uebernommen
    CREAD (HANDLE, status, r_modus, TIMEOUT, OFFSET, "%s %f %f %f %f %f %f",befehl[], N[1], N[2], N[3], N[4],N[5] , N[6]) ;restlichen floats lesen




    IF (status.RET1==#cmd_ok) THEN ;lesen fehlgeschlagen
    meldung("cmd_stat=#cmd_ok.nur bei cond")
    ENDIF
    IF (status.RET1==#CMD_TIMEOUT ) THEN ;lesen fehlgeschlagen
    meldung("cmd_stat=#CMD_TIMEOUT..nur bei abs")
    ENDIF
    IF (status.RET1==#data_ok) THEN ;lesen fehlgeschlagen
    meldung("cmd_stat=#data ok")
    ENDIF
    IF (status.RET1==#DATA_BLK) THEN ;lesen fehlgeschlagen
    meldung("cmd_stat=#DATA_BLK...daten zu l;ang zum suende lesen. ")
    ENDIF
    IF (status.RET1==#CMD_ABORT) THEN ;lesen fehlgeschlagen
    meldung("cmd_stat=#CMD_ABORT ")
    ENDIF
    IF (status.RET1==#FMT_ERR) THEN ;lesen fehlgeschlagen
    meldung("cmd_stat=#fmt_err:format passt nicht zur variable!")
    ENDIF



    ;----befehl auswerten ..befehl[]
    ;"st"?
    j = StrFind(1, befehl[], "st" , #CASE_SENS) ;gibt 0 zurück bei nicht gefunden
    IF j<>0 THEN ;ungleich 0..=muster gefunden
    brake f ;mit F löst einen STOP 1 aus, sonst stop2
    ;LIN $POS_INT ;zurück auf bahn,wo int ausgeloest wurde..nur im interrupt prog gueltig!
    meldung("ln_stop")
    command=#st ;für case im hauptmenue
    resume ;geht nur, wenn aus unterprog mit mit advance an richtiger stelle aufgerufen
    ;bricht alle unterprog und intprogs bis zur ebene ab, wo der akt int decl wurde..
    ;vorlaufzeiger muss eine ebene unter der ebene sein, wo int decl wurde
    ENDIF ;"st"



    ;"ln_norm"?
    j=0
    j = StrFind(1, befehl[], "ln_norm", #CASE_SENS)
    IF j<>0 THEN ;ungleich 0..=muster gefunden
    ;OFFSET=0;sonst wird der hochgezaehlte offset des letzten cread uebernommen
    ;CREAD (HANDLE, status, r_modus, TIMEOUT, OFFSET, "%f %f %f %f %f %f",N[1], N[2], N[3], N[4],N[5] , N[6]) ;restlichen floats lesen
    ;CREAD (HANDLE, status, r_modus, TIMEOUT, OFFSET, "%s %f %f %f %f %f %f",rest_str[], N[1], N[2], N[3], N[4],N[5] , N[6]) ;restlichen floats lesen
    punkt.x=N[1] ;gelesene floats an punkt uebergeben
    punkt.Y=N[2]
    punkt.Z=N[3]
    punkt.A=N[4]
    punkt.B=N[5]
    punkt.C=N[6]
    command=#ln_norm
    ENDIF ;"ln"



    ;"ln_trig"?
    j=0
    j = StrFind(1, befehl[], "ln_trig", #CASE_SENS)
    IF j<>0 THEN ;ungleich 0..=muster gefunden
    ;OFFSET=0;sonst wird der hochgezaehlte offset des letzten cread uebernommen
    ;CREAD (HANDLE, status, r_modus, TIMEOUT, OFFSET, "%f %f %f %f %f %f",N[1], N[2], N[3], N[4],N[5] , N[6]) ;restlichen floats lesen
    ;CREAD (HANDLE, status, r_modus, TIMEOUT, OFFSET, "%s %f %f %f %f %f %f",rest_str[], N[1], N[2], N[3], N[4],N[5] , N[6]) ;restlichen floats lesen
    punkt.x=N[1] ;gelesene floats an punkt uebergeben
    punkt.Y=N[2]
    punkt.Z=N[3]
    punkt.A=N[4]
    punkt.B=N[5]
    punkt.C=N[6]
    command=#ln_trig
    ENDIF ;"ln_norm"



    ;"akt_pos"?
    j=0
    j = StrFind(1, befehl[], "akt_pos", #CASE_SENS)
    IF j<>0 THEN ;ungleich 0..=muster gefunden
    command=#akt_pos ;für case im hauptmenue
    ENDIF ;"akt_pos"



    ;"set_vel"?
    j=0
    j = StrFind(1, befehl[], "set_vel", #CASE_SENS)
    IF j<>0 THEN ;ungleich 0..=muster gefunden
    vel_ln=N[1] ;geschw setzen
    IF (vel_ln<=vel_min) AND (vel_ln>=vel_max) THEN ;geschwindigkeit zu groß oder zu klein--> auf min setzen
    vel_ln=vel_min
    meldung("falsche Geschwindigkeit")
    ENDIF
    CWRITE (handle, status, w_modus, "%s %f","vel_ln " , vel_ln); zur kontrolle schicken
    command=#set_vel
    ENDIF ;"set_vel"



    ;"set_acc"?
    j=0
    j = StrFind(1, befehl[], "set_acc", #CASE_SENS)
    IF j<>0 THEN ;ungleich 0..=muster gefunden
    acc_ln=N[1] ;beschleunigung setzen
    IF (acc_ln<=acc_min) AND (acc_ln>=acc_max) THEN ;beschleunigung zu groß oder zu klein--> auf min setzen
    acc_ln=acc_min
    meldung("falsche beschleunigung")
    ENDIF
    CWRITE (handle, status, w_modus, "%s %f","acc_ln " , acc_ln); zur kontrolle schicken
    command=#set_acc
    ENDIF ;"set_acc"





    ;meldung("robo:gelesener satz:")
    ;CWRITE (handle, status, w_modus, "%s %f %f %f %f %f %f",befehl[], N[1], N[2], N[3], N[4],N[5] , N[6]) ;restlichen floats lesen


    if ($DATA_SER2<>0) THEN
    meldung("data_ser2 noch nicht leer..reststr lesen")
    OFFSET=0
    CREAD (HANDLE, status, r_modus, TIMEOUT, OFFSET, "%s", rest_str[])
    OFFSET=0
    CREAD (HANDLE, status, r_modus, TIMEOUT, OFFSET, "%f", rest_float)


    meldung("reststring:")
    CWRITE (handle, status, w_modus, "%s", rest_str[])
    meldung("reststring:")
    CWRITE (handle, status, w_modus, "%s", rest_str[])
    meldung("reststringende")
    ENDIF ;data_ser=0?



    END ;lesen
    ;----------------------------------------------------------------------------------


    DEF schreibe_prog_start()
    ;OFFSET=0 ;wird hier nicht gebraucht
    CWRITE (handle, status, w_modus, "%s","prog_start")
    CWRITE (handle, status, w_modus, "%+#10.4f %+#10.4f %+#10.4f %+#10.4f %+#10.4f %+#10.4f", $POS_ACT.X, $POS_ACT.Y, $POS_ACT.Z, $POS_ACT.A, $POS_ACT.B, $POS_ACT.C)


    END ;schreibe_prog_start()


    ;-------------------------------------------------


    DEF schreibe_akt_pos()
    ;OFFSET=0

    CWRITE (handle, status, w_modus, "%s","akt_pos")
    CWRITE (handle, status, w_modus, "%+#10.4f %+#10.4f %+#10.4f %+#10.4f %+#10.4f %+#10.4f", $POS_ACT.X, $POS_ACT.Y, $POS_ACT.Z, $POS_ACT.A, $POS_ACT.B, $POS_ACT.C)


    END ;schreibe_akt_pos()


    ;-------------------------------------------------


    DEF move_ln()


    ;POS TCP2 ;kommt noch..



    If (punkt_in_ar(punkt)==true) THEN

    ;!!zur sicherheit erstmal punkt.A.B.C=0 setzen
    punkt.A=0
    punkt.B=0
    punkt.C=0


    ;FOLD LIN P6 Vel= 0.01 m/s CPDAT6 Tool[my_tool_nr]:DRUCKKOPF Base[my_base_nr]:Drucken;%{PE}%R 5.4.36,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P6, 3:, 5:0.02, 7:CPDAT6
    $BWDSTART=FALSE
    LDAT_ACT=LCPDAT1 ;bewegungsparameter
    FDAT_ACT=FP1 ;base..tool
    BAS(#CP_PARAMS,vel_ln) ;m/s...Geschwindigkeit
    BAS(#ACC_CP,acc_ln) ;maximale beschleunigung setzen

    IF ($ACT_BASE==my_base_nr) AND ($ACT_TOOL==my_tool_nr) AND ($WORKSPACE[my_AR_nr].MODE==#OUTSIDE_STOP) THEN
    meldung("ln_start")
    interrupt on 1 ;somit bewegung unterbrechbar

    IF (command==#ln_trig) THEN ;trigger einschalten
    trigger when path=-40 delay=0 do PULSE(DIMATIX,TRUE,0.4)
    ENDIF ;trigger einschalte n

    LIN punkt ;typ pos oder e6pos oder...


    $ADVANCE=0 ;in bsp immer am ende des unterprogs gesetzt, das abgebrochen werden soll.
    ;aber sinnlos, weil die stelle in den such_bsp garnicht erreicht wird
    ;oder sie wird durch den vorlauf erreicht..joo...

    CWRITE (handle, status, w_modus, "%s","pos_erreicht ")
    CWRITE (handle, status, w_modus, "%+#10.4f %+#10.4f %+#10.4f %+#10.4f %+#10.4f %+#10.4f", $POS_ACT.X, $POS_ACT.Y, $POS_ACT.Z, $POS_ACT.A, $POS_ACT.B, $POS_ACT.C)


    ENDIF ;frage nach base/tool/AR richtig
    ;ENDFOLD

    ELSE ;außerhalb arbeitsraum
    meldung("Arbeitsraum verletzt")
    ENDIF
    END ;move_ln()




    ;---------------------------------------------------------------------------------------------------------



    DEFFCT BOOL punkt_in_ar(pkt:IN)
    DECL POS pkt
    DECL BOOL bool_var



    ;AR grenzen kopieren (ori gleich wie bei base)
    ;an punkt festmachen--ar punkt aus world in base rechnen.(ist 0 0 0 )


    AR_start_base.X=0
    AR_start_base.Y=0
    AR_start_base.Z=7.8 ;1mm über platte...7.8mm=chuck
    AR_start_base.A=0
    AR_start_base.B=0
    AR_start_base.c=0



    ;X-AR_grenzen
    if ($WORKSPACE[my_AR_nr].X1>=$WORKSPACE[my_AR_nr].X2) THEN ;x1>=x2
    ar_xmax=AR_start_base.X +$WORKSPACE[my_AR_nr].X1
    ar_xmin=AR_start_base.X +$WORKSPACE[my_AR_nr].X2
    ENDIF
    if ($WORKSPACE[my_AR_nr].X1<$WORKSPACE[my_AR_nr].X2) THEN ;x1<x2
    ar_xmax=AR_start_base.X +$WORKSPACE[my_AR_nr].X2
    ar_xmin=AR_start_base.X +$WORKSPACE[my_AR_nr].X1
    ENDIF;;;


    ;Y-AR_grenzen
    if ($WORKSPACE[my_AR_nr].Y1>=$WORKSPACE[my_AR_nr].Y2) THEN ;y1>=y2
    ar_ymax=AR_start_base.Y+$WORKSPACE[my_AR_nr].Y1
    ar_ymin=AR_start_base.Y+$WORKSPACE[my_AR_nr].Y2
    ENDIF
    if ($WORKSPACE[my_AR_nr].Y1<$WORKSPACE[my_AR_nr].Y2) THEN ;y1<y2
    ar_ymax=AR_start_base.Y+$WORKSPACE[my_AR_nr].Y2
    ar_ymin=AR_start_base.Y+$WORKSPACE[my_AR_nr].Y1
    ENDIF


    ;Z-AR_grenzen
    if ($WORKSPACE[my_AR_nr].Z1>=$WORKSPACE[my_AR_nr].Z2) THEN ;z1>=z2
    ar_zmax=AR_start_base.Z+$WORKSPACE[my_AR_nr].Z1
    ar_zmin=AR_start_base.Z+$WORKSPACE[my_AR_nr].Z2
    ENDIF
    if ($WORKSPACE[my_AR_nr].Z1<$WORKSPACE[my_AR_nr].Z2) THEN ;Z1<z2
    ar_zmax=AR_start_base.Z+$WORKSPACE[my_AR_nr].Z2
    ar_zmin=AR_start_base.Z+$WORKSPACE[my_AR_nr].Z1
    ENDIF




    ;---- X ------- Y ------- Z -----
    If (ar_xmin<=pkt.X) AND (pkt.x<=ar_xmax) AND (ar_ymin<=pkt.Y) AND (pkt.Y<=ar_ymax) AND (ar_zmin<=pkt.Z) AND (pkt.Z<=ar_zmax) THEN
    bool_var=true
    ELSE
    bool_var=false
    ENDIF


    RETURN bool_var
    ENDFCT ;AR test



    ;----------------------------------------------------------------------------------
    DEF meldung(meldg :IN)
    CHAR meldg[]

    OFFSET=0
    ;w_modus=#ASYNC

    ;pos übertragen--2 cwrite
    CWRITE (handle, status, w_modus, "%s", meldg[])


    END ;meldung


    ;-------------------------------------------------


    DEF OPEN_PORT()
    COPEN(:SER_2, HANDLE)
    IF (HANDLE==0) THEN
    ;HALT

    ENDIF
    END


    ;-------------------------------------------------------


    DEF CLOSE_PORT()
    CCLOSE (HANDLE,status)
    IF (status.RET1<>#CMD_OK) THEN ;<> -->ungleich
    ;HALT
    ENDIF
    END


    ..konnte leider nicht mit [code..] arbeiten


    vielleicht hilfts ja jemand weiter...
    mfg Roland

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