KRC 32 Serielle Schnittstelle

  • Hi,
    definiere einen entsprechend grossen CHAR-string als container.
    OFFSET=0
    CREAD(HANDLE, SR_T, MR_T, TIMEOUT, OFFSET,“%r", container[])
    ;Fehlerabfrage
    Switch OFFSET
    CASE länge von einem Artikel
    OFFSET=0
    SREAD (1 Artikel aus container[].... lesen
    CASE länge 2 Artikel
    OFFSET=0
    SREAD (2 Artikel aus container[].... lesen
    usw. ; es können max. 9 Formatzuweisungen in einem SREAD gemacht werden
    ; bei mehr als 9: 2 SREAD hintereinander ohne OFFSET auf 0 zu stellen
    ; Offset ist ein Lesezeiger für den CHAR-Container


    Viel Erfolg

    Wer nach allen Seiten offen ist kann nicht ganz dicht sein

  • Schritt für Schritt zum Roboterprofi!
  • Hallo



    i :hilfe:
    ch will mit Hilfe von CREAD einen String einlesen
    z.B XPOS1,YPOS1,Winkel1;XPOS2,YPOS2,Winkel2
    123,213,126;56,123,68




    Zu Kommatrennung: Ich habe irgendwo raus gelesen, dass die Formatirungszeichen bei CREAD dürfen nicht verwendet werden, nur bei CWRITE


    jetzt bin so vorgegangen wie der Paul oben beschriebn hat. (CREAD funktioniert )


    ich habe CREAD mit SREAD kombiniert
    decl char Position[24]
    CREAD(handle,status,modus,timeout,offset,"%r,Position[])
    offset=0
    SREAD(Position[],status,offset,"%04d%04d%04d", XPOS,YPOS,APOS)


    theoretisch könnte ichb offset auf 13 setzen und koordinaten für 2 Artikel auslesen


    offset=13
    SREAD(Position[],status,offset,"%04d%04d%04d", XPOS1,YPOS1,APOS1)


    jetzt wenn mein String so aussieht
    123 345 111 345 789 222
    dann wird es theoretisch funktionieren


    wenn aber mein String so aussieht
    23 34 111 34 789 22
    oder so
    1021 142 111 567 34 132


    dann lese ich absolüt falsche Koordinaten wenn ich richtig verstehe da bei String 2 an der dritte Stelle Leerzeichen ist und bei dem String 3 an der vierte Stelle statt Leerzeichen ein Wert.


    wie man es so realisiert, dass der String immer gleich
    xxx xxx xxx ausieht weiß ich nicht
    oder wie man die Stellen mir Nullen einfüllt :nocheck:?
    :merci:



    Maxim

  • Hallo Maxim,
    Du machst Dir ganz umsonst Sorgen.
    Wenn (ein) Leerzeichen zwischen den Werten sind, ist es ganz einfach.
    Der Formatierer erkennt durch das Leerzeichen das Zahlenende !
    Keine Längenangaben beim format nötig
    Letzter Wert braucht kein nachfolgendes Leerzeichen.


    offset=0
    SREAD(Position[],status,offset,"%d%d%d", XPOS,YPOS,APOS)
    ;offset hat hier bereits den richtigen Wert um weiterzulesen
    SREAD(Position[],status,offset,"%d%d%d", XPOS1,YPOS1,APOS1)


    oder


    offset=0
    SREAD(Position[],status,offset,"%d%d%d%d%d%d", XPOS,YPOS,APOS,XPOS1,YPOS1,APOS1)


    oder 9 Werte


    Viel Erfolg

    Wer nach allen Seiten offen ist kann nicht ganz dicht sein

  • Hallo


    Danke für schnelle Antwort und Geduld ;)
    aber ich habe immer noch Schwierigkeiten.


    offset=0
    SREAD(Position[],status,offset,"%d%d%d", XPOS,YPOS,APOS)
    ;offset hat hier bereits den richtigen Wert um weiterzulesen
    SREAD(Position[],status,offset,"%d%d%d", XPOS1,YPOS1,APOS1)

    Bei dem ersten SREAD setze ich OFFSET=0
    Bei dem zweiten ist es doch je nach dem wieviele dedimalstellen der Erste hatte?



    offset=0
    SREAD(Position[],status,offset,"%d%d%d%d%d%d", XPOS,YPOS,APOS,XPOS1,YPOS1,APOS1)


    was wird hier passieren wenn die Werte für XPOS1,YPOS1,APO1 nicht vorhanden sind?
    Werden dann nur die ersten drei Werte gelesen?
    :merci:
    Gruß


    Maxim

  • wenn aber mein String so aussieht
    23 34 111 34 789 22
    ++------------------------------- Offset
    oder so
    1021 142 111 567 34 132
    ++------------------------------- Offset


    Offset steht nach dem 1. Lesen entweder am 3. Lehrzeichen oder am Anfang 4. Wert.
    Ist egal, Offset steht immer vor/an dem nächsten zu formatierendem Zeichen.
    Wenn es genau wissen willst :P, HALT nach den 1.SREAD und Offset abfragen.


    Den SREAD mit 6 Parameter machst nur wenn Du weisst es sind 6 Parameter.
    Sonst bekommst Du im STATUS.RET1 den Wert CMD_ABORT oder FMT_ERROR.
    Habe es jetzt nicht ausprobiert

    Wer nach allen Seiten offen ist kann nicht ganz dicht sein

  • Hallo


    Ich habe wieder mehrere Fragen


    Frage 1
    Die Bearbeitungszeit von meiner Kamera ist viel kurzer als die Zeit die der Roboter zum Fahren des Artikels braucht. Nach einigen Überlegungen habe ich mir gedacht, dass ich einen PUFFER (FIFO)einbaue in dem die Positionen temporär gespeichert werden. Nach dem Ablauf einer bestimmter Zeit muss die ersteingefügten Positionen aus dem FIFO rausgeschmissen werden, da der Roboter die nicht mehr erreichen kann


    Gibt es da irgendwelche Lösungen?


    Frage 2
    Ich habe jetzt mein String so aufgebaut dass es immer 6 Positionen geliefert werden. In dem Fall wo es nur ein Artikel vorhanden ist, wird der Rest von der Kamera mit Nullen gefüllt.
    CREAD(HANDLE,STATUS,RMODUS,TIMEOUT,OFFSET,"%F%F%F%F%F%F ",XPOS,YPOS,APOS,XPOS1,YPOS1,APOS1)


    Dann wollte ich eine abfrage einfügen.
    Wenn XPOS1 und YPOS1 =0
    Dann springe zum Sprungmarke
    Wie kann ich eine Sprungmarke einfügen?


    Frage 3
    Ich habe zuerst so was ausprobiert


    XPOS=0
    YPOS=0
    APOS=0
    XPOS1=0
    YPOS1=0
    APOS1=0


    CREAD(HANDLE,STATUS,RMODUS,TIMEOUT,OFFSET,"%F%F%F%F%F%F ",XPOS,YPOS,APOS,XPOS1,YPOS1,APOS1)


    Und dann habe ich versucht von der Kamera einen String mit 3 Positionen zu schicken. Ich bekam Fehlermeldung „ KeineDaten/Variablen vorhanden“. Ich dachte wenn ich die YPOS1 und XPOS1 oben mit Nullen beschreibe dann schluckt er das?

    Frage 4
    POSITION[1]=" "
    POSITION[2]=" "
    POSITION[3]=" "
    POSITION[4]=" "
    POSITION[5]=" "
    POSITION[6]=" "
    POSITION[7]=" "
    POSITION[8]=" "
    POSITION[9]=" "
    POSITION[10]=" "
    ;----ende alle POSITION[] =0
    CREAD(HANDLE,STATUS,RMODUS,TIMEOUT,OFFSET,"%r",POSITION[])


    SREAD(POSITION[],STATUS,OFFSET,"%d%d%d",XPOS,YPOS,APOS)


    Hier habe ich auch versucht die Position nur von einem Artikel zu lesen. Bekam aber eine Fehlermeldung“ Keine Daten/Variablen vorhanden“. Voran kann das liegen?


    Frage 5
    Zu dem OFFSET
    Offset=0
    CREAD(HANDLE,STATUS,RMODUS,TIMEOUT,OFFSET,"%F%F%F%F%F%F ",XPOS,YPOS,APOS,XPOS1,YPOS1,APOS1)


    Ist Offset nach dem Lesen gleich 6
    Zählt er die Stellen in Kuka Beispiel?


    OFFSET=0
    HUGO[]=”1234567890”
    SREAD(HUGO[],STATE,OFFSET,%01d%02d,VAR1,VAR2);
    Ergebnis:
    VAR1=1; VAR2=23


    Oder zählr er die Leerzeichen?
    z.B. 123 131 132 136
    Bei Offset = 3 wird 136 gelesen?


    Frage 6
    Abfrage ob die Daten korrekt übertragen worden?
    Einmal kann es mit Paritätsbit kontrollieren? Parität: Gerade
    Zweitens kann ich mein String POSITION[]mit dem StrFIND durchsuchen nach bestimmetn Kriterien, Zum Beispiel ob bei dem String > O 123 133 213 < O vorhanden ist.
    Falls nicht dann Springe zum Sprungmarke.
    Weiter kann ich mit dem CMD_OK abfragen?
    Meine Frage ist was ich am effektivsten einsetzen könnte, ob es nicht doppelt gemoppelt ist wenn ich z. B. Parität und CMD_OK benutze


    Vielen Dank im Voraus

  • Frage 1: Hmm, musst selbst ausprogrammieren
    Frage 2:Du bist noch ein GOTO-Programmierer :???:
    GOTO merker - merker:
    Frage 3: auch APOS1 muss 0.0 sein
    Frage 4: vor dem SREAD OFFSET=0 vergessen ?
    Frage 5: OFFSET ist ein Zeichen(Byte)zähler/-zeiger
    OFFSET=0
    HUGO[]=”1234567890”
    SREAD(HUGO[],STATE,OFFSET,%01d%02d,VAR1,VAR2);
    --> offset ist 3
    OFFSET=0
    HUGO[]=”1 23 4567890”
    SREAD(HUGO[],STATE,OFFSET,%01d%02d,VAR1,VAR2);
    --> offset ist 6


    Frage 6: auf CMD_OK sollte immer abgefragt werden
    die Einstellung Parität wirkt nur auf den seriellen Hardwarechip (kein Zeitverlust)
    was für serielles Protokoll verwendest Du ?
    XON/XOFF: Parität ist die einzige Prüfung, sehr unsicher da auch keine Checksumme
    über das telegramm gebildet wird
    3964R: sehr sicher, Checksumme über das Telegramm wird gebildet und
    ausgewertet

    Wer nach allen Seiten offen ist kann nicht ganz dicht sein

  • Ich kann bei meinem Ethernet<>Seriell Konverter nur XON/XOFF, RTS/CTS und Kein auswählen.
    3964R: kann ich nur von KUKA auswälen?


    Was mich jetzt wundert ich habe amKUKA XON/XOFF ausgewählt und am Converter RTS/CTS, und die Kommunikation steht


    Kann ich 3964R nur von eine Sete anwenden und hat es Sinn bei KUKA 3964R und bei Converter XOFF/XON?

  • vergiss 3964R (jeder Teilnehmer muss das können)


    XON/XOFF <--> RTS/CTS wundert mich nicht (so)


    KRC empfängt und frisst alles (xon/xoff) egal wie die Hardwaresignale rts/cts stehen
    KRC wird wahrscheinlich auch die rts/cts default richtig setzen damit der Converter richtig arbeitet.

    Wer nach allen Seiten offen ist kann nicht ganz dicht sein

  • ;) und noch paar Fragen


    Ich wollte heute bei der Kamera <>Roboter Seriell Kabel Tx und Rx zwei Leitungen abgreifen und zusätzlich an dem Laptop anschließen damit ich es über Hypertermeinal sehen könnte. Es war theoretische Überlegung, ware aber Interressant zu wissen, habe aber angst die Schnittstelle abzuschißen


    aus dem oberen Posting
    Wenn (ein) Leerzeichen zwischen den Werten sind, ist es ganz einfach.
    Der Formatierer erkennt durch das Leerzeichen das Zahlenende !
    Keine Längenangaben beim format nötig
    Letzter Wert braucht kein nachfolgendes Leerzeichen.


    offset=0
    SREAD(Position[],status,offset,"%d%d%d", XPOS,YPOS,APOS)
    ;offset hat hier bereits den richtigen Wert um weiterzulesen
    SREAD(Position[],status,offset,"%d%d%d", XPOS1,YPOS1,APOS1)


    oder


    offset=0
    SREAD(Position[],status,offset,"%d%d%d%d%d%d", XPOS,YPOS,APOS,XPOS1,YPOS1,APOS1)



    Ich habe es ausprobiert und ich glaube ich finde keine bessere Lösung.
    Jetzt habe ich ein anderes Problem, ich wollte mal schauen was in meinen Variablen steht. Unter AnsichT/Variablen/Überischt habe ich keine einzigen Variable von mir.Auuch beim Suchen der Variable habe ich kein Erfolg gehabt. Muss ich die Liste die selbst erstellen?

  • Nicht abgreifen !!!!!
    Ist elektrisch bei einer seriellen Leitung nicht möglich.


    Was für Variablen, XPOS,... ?
    In die $Config.Dat oder global definieren.

    Wer nach allen Seiten offen ist kann nicht ganz dicht sein

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