Serielle Datenübertragung

  • das ging ja fix :supi:


    - die Abfrage IF (z==5) THEN ist falsch, Du musst auf "5" (ASCII) abfragen


    in dezimal oder hex?
    also IF(z==053)?



    wird scho :D


    - denke Du hast Dich hier verschrieben. CREAD schaut flg aus:
    CREAD(HANDLE,lesestatus,lesemodus,TIMEOUT,OFFSET,"%c",z)
    wobei real timeout=10.0 (lange warten auf Deinen Tastendruck)
    int offset=0 (immer vor dem CREAD auf 0 setzen)


    muss ich denn die beiden nochmal für den befehl extra deklarieren oder reicht es wenn ich oben =10 und = 0 hinter schreibe?
    und muß auch groß bzw. kleinschreibung geachtet werden?

    Einmal editiert, zuletzt von blender ()

  • Schritt für Schritt zum Roboterprofi!
  • - entweder "5", oder hex 35 oder dez 53


    - Gross-, Kleinschreibung egal
    extra declarieren und zuweisen !
    In Deinem Programm ist der Offset bereits deklariert :lol:

    Wer nach allen Seiten offen ist kann nicht ganz dicht sein

  • Komme leider morgen erst wieder an den Rob um zu testen.


    Mir graut es aber jetzt schon wenns an so einfachen Dingen scheitert. :-|


    Ich muß ja von meinem Ausgangspunkt(wo das Werkstück liegt), den ich in kartesischenKoordinaten habe, eine Rückwärtstransformation machen und das alles im Programm unterbringen. Und per selbst erstellter Software x,y und den Winkel über die RS232 schicken. :huh:


    Aber alles nacheinander.


    Nen schönen Feierabend.

  • Also das PRogramm habe ich jetzt so geändert:


    ;-------Hauptprogramm


    COPEN(:xprechner, HANDLE) ;Kanal oeffnen
    IF (HANDLE==0) THEN ;falls kein Kanal geoeffnet wurde
    HALT ;dann Programmstop
    ENDIF



    CWRITE(HANDLE, Schreibstatus,Schreibmodus,"%c%c",c,d)


    TIMEOUT= 1.0
    OFFSET=0


    CREAD(HANDLE, Lesestatus,Lesemodus,TIMEOUT,OFFSET"%c",z)
    IF (z=="5") THEN


    PTP HOME Vel= 100% DEFAULT
    LIN P1 Vel = 2m/s CPDAT1 Tool[1] Base[0]
    PTP HOME Vel= 100% DEFAULT
    ENDIF


    CCLOSE(HANDLE, Closestatus); Kanal schließen


    Fehler sind nicht mehr vorhanden.Nur bekomme ich jetzt angezeigt, dass der Wert für z falsch ist.
    Dann überspringt er die if und beendet das Prog.
    Das Cwrite geht noch ich bekomme AB am Terminal.
    Cread müsste ja auch funktionieren sonst würde er ja nicht in die IF gehen oder?
    Wie kann ich denn sehen was er in die Variable z schreibt?

  • da Du einen Timeout von 1 sec hast, nehme ich an das CREAD ist schon durch bevor Du am Hyperterm eine taste gedrückt hast.


    was ist das für eine Meldung ?

    Wer nach allen Seiten offen ist kann nicht ganz dicht sein

  • dann wurde nichts in Z geschrieben, Variable ist auch nicht vorinitialisiert - desshalb die Meldung


    - erhöhe timeout oder
    - warte auf Telegramm
    TIMEOUT= 1.0
    OFFSET=0


    wait for $DATA_SER2 > 0 ; nehme an das :xprechner COM2 ist
    CREAD(HANDLE, Lesestatus,Lesemodus,TIMEOUT,OFFSET"%c",z)
    IF (z=="5") THEN
    :

    Wer nach allen Seiten offen ist kann nicht ganz dicht sein


  • Klappt super! :supi:
    Hab den TIMEOUT auch wieder auf 10 gesetzt.
    Eine frage habe ich heute aber noch. Habe leider nur die Betriebsanleitungen und nichts über das Programmieren (außer cread/write).Wie kann ich das alles automatisch ablaufen lassen?ohne ständig die beiden (graue und grüne) Tasten drücken zu müssen?

  • Sobald ich die INI Zeile einfüge bekomme ich sehr viele Fehlermeldungen.
    Gibt es dabei nen Trick?


    Und wenn ich ein neues SR Template hinzufüge sind die alle leer. :???:

  • oh mei, habe nie mit einer V3.2 gearbeitet.
    Ist eine neue Datei wirklich leer ?


    zur Not kann man sich flg. helfen:


    DEF CR_CW ( )
    2
    ; Daten definitionen
    3 INT HANDLE,OFFSET,I
    9 :
    10 FOR I=1 TO 6
    11 ;ACHSGESCHWINDIGKEIT
    12 $VEL_AXIS[I]=100 ;0-100 [%]
    13 ;ACHSBESCHLEUNIGUNG
    14 $ACC_AXIS[I]=90 ;1-100 [%]
    15 ENDFOR
    16
    17 $TOOL=$NULLFRAME
    18 $BASE=$NULLFRAME
    19
    20 PTP {A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0.0} ; Home
    21 ; Deine Programmteil

    Wer nach allen Seiten offen ist kann nicht ganz dicht sein

  • Hallo,


    ich hab gerade nen kleines Problem mit meinem Programm und wollte dafür kein neues Thema aufmachen.
    Vielleicht noch ne kleine Info zum Projekt, ich habe mehrere geometrische Körper. Von einem Bilderarbeitungssystem bekomme ich die Koordinaten, und ein Programm was ich in C# geschrieben habe, bestimmt daraus den Körper und sendet diese Information an die KR C1 Steuerung. Diese greift den Körper und positioniert diesen woanders. Die Körper können mehrfach vorkommen.


    &ACCESS RVP
    &REL 105
    &PARAM TEMPLATE = C:\KRC\ROBOTER\TEMPLATE\EXPERTVORGABE
    &PARAM EDITMASK = *
    DEF schoepe1( )


    ;-------Deklarationen
    EXT BAS (BAS_COMMAND :IN,REAL :IN )
    DECL AXIS HOME ; Variable HOME TYp AXIS
    INT HANDLE, Offset


    REAL Timeout


    DECL CHAR c
    DECL CHAR d
    DECL CHAR z
    DECL CHAR geo


    Real R_Wert


    Bool B_Wert
    DECL STATE_T Lesestatus, Schreibstatus, Closestatus, Auswertstatus, Verarbeitungsstatus
    DECL MODUS_T Lesemodus, Schreibmodus


    CHANNEL :xprechner :SER_2 $PSER_2 ;Zuweisung einer Variablen an den Kanal


    ;------Initialisierung


    BAS (#INITMOV,0 ) ;Ini von Geschw. Beschl. Koordiatensystem


    HOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}


    Schreibmodus=#SYNC ;synchrone Datenuebertragung
    Lesemodus=#ABS ;aktives Lesen intialisieren
    c="A"
    d="B"


    GreifPosition={X -859,Y -1109.519,Z 573.3751,A 51.9,B 2.7,C 180, S 'B 010', T 'B 101010'}


    AblagePosition={X 1175,Y 0,Z 811,A 180,B 2.7,C 180, S 'B 010', T 'B 101010'}


    AblagePositionNeu={X 1297.153,Y 94.64316,Z 513.1287,A 180,B 2.7,C 180, S 'B 010', T 'B 101010'}


    WartePosition={X 0,Y -1281,Z 824,A 90,B 7,C 180, S 'B 010', T 'B 101010'}


    WartePositionNeu={X -823.1487,Y -1083.711,Z 829.6237,A 90,B 7,C 180, S 'B 010', T 'B 101010'}


    ;-------Hauptprogramm


    COPEN(:xprechner, HANDLE) ;Kanal oeffnen
    IF (HANDLE==0) THEN ;falls kein Kanal geoeffnet wurde
    HALT ;dann Programmstop
    ENDIF


    ;WAIT FOR ($IN[41] AND NOT $IN[42])
    ;$OUT[41]=TRUE ; Band anfahren


    ;IF ($IN[43] OR IN[44])THEN


    ;CWRITE(HANDLE, Schreibstatus,Schreibmodus,"%c%c",c,d)


    LOOP
    TIMEOUT = 10.0
    OFFSET = 0


    PTP WartePosition


    ;WAIT FOR $DATA_xprechner>0
    CREAD(HANDLE, Lesestatus, Lesemodus,TIMEOUT,OFFSET,"%c",geo)


    IF (geo=="1")THEN ; geo=1 entspricht Quadrat


    PTP HOME


    ENDIF


    IF (geo=="2")THEN ; geo=2 entspricht grosses Dreieck


    LIN WartePositionNeu
    LIN GreifPosition
    PTP AblagePosition
    LIN AblagePositionNeu
    PTP HOME
    ENDIF


    IF (geo=="3")THEN ;kleines Dreieck


    PTP HOME
    ENDIF


    ENDLOOP


    CCLOSE(HANDLE, Closestatus) ;Kanal schliessen


    END


    Die Bewegungsbefehle habe ich rausgelöscht, damit das Programm nicht die ganze Seite hier einnimmt.


    Und zwar schaffe ich es leider nicht diesen Befehl zum laufen zu bringen: ;WAIT FOR $DATA_xprechner>0. // _SER2 habe ich auch schon Probiert.
    Die Variable "geo" darf nach dem Durchlauf der Loopschleife keinen Wert mehr haben, da sie einen neuen von einem externen PC bekommt.


    Oder kann ich die Variable =0 setzten, und dann eine If Abfrage machen, wenn gleich 0 dann mach den cread Befehl???


    Mein zweites Problem ist, dass ich Zahlen von 1 bis 5 zu meinem Robprogramm sende. Diese stehen für Geometrien zb. einem Quadrat usw.
    Dieses gibt es jetzt aber 2 mal und soll auch noch an eine andere Stelle abgesetzt werden. Kann mir dafür jemand einen Tip geben.


    Danke schonmal für eure Antworten und ein schönes Wochenende.

    Einmal editiert, zuletzt von blender ()

  • Das klappt soweit, komisch das es vorher nicht ging hatte $DATA_SER2 auch schon versucht.
    Ist es denn normal, dass jetzt bei dem Befehl immer das Quittmenü aufgerufen wird?


    Und danke nochmal für die hilfe.


    Gruß
    blender

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