cread/cwrite Beispielprogramm funktioniert nicht

  • Hallo,


    das ist mein erster Eintrag im Forum! Bis jetzt bin ich immer mit nach kucken weiter gekommen, aber bei dem Problem komm ich irgendwie nicht weiter.


    Hoffe irgendjemand mit mehr Erfahrung in Cread/Cwrite kann mir helfen.



    Nach einigen kleineren Programmieraufträgen habe ich nun die Aufgabe Positionsdaten von einer IVC Kamera von Sick an einen KR 210 über RS232 zu schicken. Hab mir jetzt mal die Doku zu Cread/Cwrite besorgt. Nachdem ich die Einstellungen in den INI-Dateien nach der Beschreibung vorgenommen habe, habe ich weiter unten auch gleich ein Beispielprogramm gefunden. Das Programm heißt "Recive" und ist auf Seite 46 unter 7.1.2 Positionsdaten empfangen der Doku aufgeführt. Habe nun versucht das Beispielprogramm direkt in meinen Roboter zu kopieren aber er zeigt mir noch 5 Fehlermeldungen an, obwohl das Programm 1 zu 1 übernommen wurde.


    Hab dann mal im Forum gesucht und da ein Beispielprogramm für ne KRC 32 gefunden.


    http://www.roboterforum.de/rob…chnittstelle-t3008.0.html


    Hab das auch kopiert, abgeändert und es auf meine Robotersteuerung gespielt.
    Leider funktioniert auch dieses Programm nicht. Vielleicht liegt es hier daran weil es für eine KRC 32 ist, aber das von der kuka-Doku müsste doch funktionieren???

  • Schritt für Schritt zum Roboterprofi!
  • Hi,


    ich denke als erste sollten "wir" uns mal die ini-Dateien ansehen. Kannst du bitte dessen Inhalt mal posten und schreiben was du für eine Steuerung hast.


    Gruß :zwink:
    Bert

    Wer Robotern am Zahnriemen dreht, braucht ein Zahnriemenspannungsmessgerät!

  • Hallo Bert,


    ich benutze ein KR C 2 Steuerung!


    HWF_INF.ini:


    Code
    [SERIAL]
    ;ENABLE: COM is accessible by robot (vxWorks)
    ;DISABLE: COM is accessible by WinXP
    ;CONSOLE: for developer only
    COM3=ENABLE ;[ENABLE, DISABLE, CONSOLE]


    Serial.ini:



    Außerdem hab ich noch "INT handle = 0" in der $config.dat deklariert.


    Hab dann versucht das Beispielprogramm wie oben beschrieben zu benutzen.


    Das Prog war allerdings Fehlerhaft.


    Anschießend bin ich Schritt für Schritt vorgegangen um die Fehler auszumerzen.


    Habe einen Befehl nach dem andere eingegeben und ihn auf Fehler überprüft.


    Code
    COPEN(:SER_3, HANDLE)
    
    
    OFFSET=0
    TIMEOUT=10
    
    
    CREAD (HANDLE, SR_T, MR_T, TIMEOUT, OFFSET, "%f %f %f %f %f %f",
    $POS_ACT.X, $POS_ACT.Y, $POS_ACT.Z, $POS_ACT.A, $POS_ACT.B,
    $POS_ACT.C)


    Mein erstes Problem hab ich aber schon in der CREAD Zeile --> "Fehler 2326 Name erwartet".


    Die Variablen "HANDLE, SR_T, MR_T, TIMEOUT, OFFSET" sind alle deklariert!


    Leider weiß ich noch nicht wo der Fehler liegt!

  • die Variablen müssen flg. definiert sein:
    INT HANDLE,OFFSET
    REAL TIMEOUT
    DECL STATE_T SR_T
    DECL MODUS_T MR_T


    nötige Vorbelegungen:
    TIMEOUT = 10.0
    MR_T = #ABS


    Falls es dann immer noch nicht funkt - bitte die Spaltennummer bei der
    Fehlermeldung angeben (zeigt auf den falschen Namen).

    Wer nach allen Seiten offen ist kann nicht ganz dicht sein

  • Danke Lindepaul!
    Mein Fehler lag in der Deklaration der Variablen! :oops: Nachdem ich die Variablen, wie von Lindepaul angegeben, deklariert hatte, konnte ich das Programm ohne Fehler benutzen.


    Da ich REAL-Werte empfangen muss hab ich ein Bisschen herumexperimentiert und den folgenden Programmcode erfolgreich getestet.


    Code
    CREAD (HANDLE, SR_T, MR_T, TIMEOUT, OFFSET, "%e", p[1])


    Die Variable wird erfolgreich geschrieben!


    Nur brauche ich ja sechs Realwerte.


    Dachte, wenn ich das Programm wie folgend ändere funktioniert es.



    Code
    CREAD (HANDLE, SR_T, MR_T, TIMEOUT, OFFSET, "%e %e %e %e %e %e", p[1], p[2], p[3], p[4], p[5], p[6])


    --> Doch leider funktioniert es so nicht.


    Sobald ich mehr als eine Variable in der %e- Formatierung schreiben will bekomme ich
    die Fehlermeldung "1505 Unzulässige Variablenkombination"


    Muss ich in diesem Fall den Befehl Cread sechs mal einzeln aufrufen?


    Oder kennt jemand eine bessere Lösung?

  • Hallo Eiche,
    sollte eigentlich funken.


    - benutzt wird normalerweise das Format %f für Real. %g formatiert den Wert
    immer zu einer Stelle vor dem Komma.
    - P[1] bis P[6] sind Reals ?


    Probiere es mit %f

    Wer nach allen Seiten offen ist kann nicht ganz dicht sein

  • Hallo Lindepaul,


    Danke für die schnelle Antwort!


    Ja, P[1] bis P[6] sind REAL.


    Hab das Prog jetzt auch noch mit %f getestet, aber leider ohne Erfolg.
    Das Programm mit %f sowie das Programm mit %e verhalten sich gleich.
    Wenn ich nur einen Wert schicke aber das Programm auf mehrere Werte wartet, dann wird der Wert auch gelesen. (bekomme zwar ne Fehlermeldung, aber die Variable ändert sich zuvor)
    Sobald ich aber mehr als einen Wert sende wird die Variable nicht geändert. Es wird sofort die Fehlermeldung "1505 Unzulässige Variablenkombination" ausgegeben.
    Hab mir die Daten, die von der Kamera ausgegeben werden, jetzt mal im Hyper Terminal angesehen.


    Gesendete Daten:
    "-7.125500e+021.566600e+011.115550e+021.112200e+021.200000e+00-2.200000e-01"


    In der Doku steht, dass mehrere Formate mit einem Leerzeichen getrennt werden müssen.
    Dachte eigentlich das bezieht sich auf "%f %f".


    Kann es sein, dass ich die Daten "-7.125500e+02 1.566600e+01" auch mit einem Leerzeichen trennen muss?

  • ja genau, die Daten müssen durch einen Leerstring getrennt sein.
    Falls das nicht geht müssen Längenangaben im Formatparameter benutzt werden.
    Sonst kann nicht formatiert werden - der Formatierer kennt ja nicht die Länge der Daten.
    Bei Deinen Daten muss Du das %e benutzen da Du ja das Gleitkommaformat mit Exponent benutzt.
    Das "Leerzeichen" in "%f %f" ist (hier) nicht nötig und in der doku wahrscheinlich unglücklich beschrieben worden.
    Da ich mit %e noch nicht gearbeitet habe bin ich auch nicht sicher mit der nötigen längenangabe. Probiere mal %+#13.6e
    Man kann sich da ein wenig an das Format bein PRINTF in C halten.
    Viel Erfolg

    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