Kuka Roboter Programmwechsel und Programmüberprüfung mit einer Keyence Kamera

  • Hallo zusammen,

    ich hoffe dass mir das gebündelte Wissen der Experten hier helfen kann da ich nun seit Stunden ratlos vor meinem Bildschirm sitze.


    Es geht um folgendes, eine Keyence Kamera CV-X 400 soll Positionen von einzelnen Bauteilen in einer Kiste erkennen und der Kuka (KRC5 mit KSS 8.7.6) soll die Daten danach abrufen und abfragen. Das klappt auch soweit und er fährt die Punkte auch richtig an.

    Nun zum eigentlichen Problem: Wenn eine Kiste abgearbeitet wurde und eine neue, volle Kiste eingeschleust wird, dann soll der Kuka den Typ und das auf der Keyence laufende Programm mit dem hinterlegten Programm und Typ vergleichen und gegebenenfalls das Programm auf der Kamera wechseln.

    Hiermit wird der Trigger für ein neues Bild an die Kamera gesendet und ausgewertet.

    Code
          KeySendString("PW")
          KeyRecvString (strBuf[])
          IF NOT STRCOMP (strBuf[],"PW", #CASE_SENS) THEN
            nMessageType=5000
            nMessageNr=27
            RM_MESSAGE = CallMessage(nMessageType, nMessageNr)
            B_Stopp=TRUE
          ENDIF

    Mit dem Befehlt "PW" soll man laut Keyencedoku einen Programmwechsel veranlassen, jedoch bekomme ich die Logik für einen Wechsel zu einem bestimmten Programm je nach Typ nicht hin.

    Die verschiedenen Programme der Kamera habe ich in unter "Typ_Zuweisen" hinterlegt mit verschiedenen Cases je nach Typ.

    Code
    KeySendString ("PR")
       KeyRecvString (strBuf[])   

    Das selbe gilt für den Befehl "PR" damit soll man die einzelnen Werte auslesen können aber auch hier hab ich ein Problem mit der Logik an sich.


    Ich möchte die Werte für den aktiven SD-Kartenslot der Kamera und das aktuelle aktive Programm auslesen damit ich diese mit meinen gespeicherten Variablen "i_SD_akt" und "i_PRG_akt" vergleichen kann um zu entscheiden ob ein Wechsel durch "PW" notwendig ist wenn sich der TYP des Materials in der Kiste ändern sollte.

    Ich weiß dass ich die Integer Variablen mit SWRITE zu einem String umwandeln muss damit ich diese per EthernetKRL an die Kamera leiten kann und auslesen dann vermutlich mit SREAD, jedoch bekomm ich keine Logik hin die keinen Syntaxfehler ausgibt.



    Hoffe mir kann da jemand aushelfen, ich bin langsam am verzweifeln.

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


    Ich habe an meiner CV-X den Programmwechsel wie folgt gelöst.

    Hier ist zwar das Auslesen nicht mit drin, aber die Anwahl deines Programmes ist noch nicht korrekt. Du musst der Kamera nicht nur "PW" schicken, sondern auch den Speicherort (SD-1) und die Programmnummer (nnn).

    Code
    ;Programmwechsel zu Kameraprogramm 1 
    ;(Befehl, SD-Karte, Prog.-Nummer)
             KeySendString("PW,1,001")
             LOOP_MSG("Warte auf Programmwechsel Kamera...", "Keyence")
             KeyRecvString(g_strBuf[])
             WAIT FOR STRCOMP(g_strBuf[], "PW", #CASE_SENS)
             LOOP_MSG(" ")

    Erst stoße ich den Wechsel an.

    Dann schicke ich direkt einen Lesebefehl hinterher, welcher erst von der Kamera ausgewertet wird sobald sie mit dem Programmwechsel fertig ist und warte auf die Bestätigung der Kamera, dass der Programmwechsel vollzogen wird (Recv "PW).


    Wenn ich mich richtig erinnere, müsstest du beim Auslesen deine Daten in das angegebene Array geschrieben bekommen (zum Beispiel g_strBuf[ ] ) und dann per String-Vergleich die Programmnummer der Kamera mit deiner "i_PRG_akt" vergleichen.

    Mal so aus dem Stehgreif:

    Code
    KeySendString ("PR")
    KeyRecvString(g_strBuf[])
    bRet = KeySplitStringBySpace(g_strBuf[], 1, g_rPrm[])
    
    IF NOT STRCOMP (g_rPrm[1],i_PRG_akt, #CASE_SENS) THEN
    ...
        
    IF NOT STRCOMP (g_rPrm[2],i_SD_akt, #CASE_SENS) THEN
    ...

    In welches Array welcher paramter geschrieben wird, kann ich dir grad so nicht sagen. Aber das steht ja in der Bedienungsanleitung.


    Grüße und nen schönes Wochenende

    Wo ein Weg ist, sollte kein Sofa in der Nähe sein.

  • Hey TheSheep, ich musste Freitag spontan zu einem Kunden und bin erst ab Morgen wieder an der Anlage, werde es da dann aber direkt testen. Ich gebe dann bescheid ob es geklappt hat oder nicht. Die Doku werde ich später noch durchforsten nach den Parametern, welcher in welchen Array geschrieben wird.


    Aber trotzdem schonmal vielen Dank für die gut erklärte Antwort, ist auf jeden fall gut verständlich geschrieben :thumbup: :)


    Edit: Der Programmwechsel funktioniert schonmal, bei deinem unteren Beispiel zeigt er mir jedoch bei den beiden IF-Schleifen noch einen Fehler an, den bekomm ich aber auch noch entfernt.


    Vielen dank für deine Hilfe


    Schöne Grüße :)

    Einmal editiert, zuletzt von Revan921 ()

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