ABB S4c Steuerung und ISRA VISION KAMERA SYSTEM

  • Hallo,
    ich verwende einen ABB Roboter mit S4C Steuerung mit einem Visionsystem der Firma "Isra Vision Oris Version 3.4".
    Ich habe folgendes Problem:
    Das Kamerasystem ist über eine Serielle Schnitstelle mit dem Roboter verbunden.
    Wenn ich über mein Programm (multitasking Betrieb, Task 0 VisionProgramm, Task 1 MainProgramm) zuerst eine Typverifikation und anschließend die Koordinatenrückgabe für das erkannte Teil durchführe habe ich eine Prozesszeit von ca. 10s (gemessen vom drücken der Starttaste bis zu dem Punkt an dem der Roboter gerade die Position anfahren will); wenn ich aber das Programm ohne Typverifikation starte sondern ich sage Ihm z.B. Teil 3 liegt unter der Kamera und er soll mir nur die Koordinaten zurückgeben und das anfahren, dann dauert es nur ca. 1.5s.
    Kann dies an einer vielleicht geschlossenen seriellen Schnittstelle liegen?
    Wenn ja wie kann ich diese die ganze Zeit offen halten?



    Vielen Dank im voraus
    swagner3

  • ANZEIGE
  • Hallo,
    ich habe im Laufe des letzten Jahres mal zwei Vision-Systeme (einmal Matsushita und einmal Eigenbau) seriell mit der S4C gekoppelt, allerdings nicht mit Multitasking, sondern in der Main-Task.
    Ich hatte da auch so meinen "Spaß" mit, aber irgendwann funktionierte es....


    Prinzipiell kann man den seriellen Kanal schon offen lassen indem man die entsprechende iodev Variable in einem globalem Modul deklariert, beim Start des Programms einmal initialisiert usw.
    Ich habe damit aber keine guten Erfahrungen gemacht (mangelnde Stabilität) und könnte mir auch vorstellen, dass das nicht die Lösung des Problems ist. Um die Problematik einzugrenzen und herauszufinden was wann passiert, sollten Sie versuchen den zeitlichen Ablauf zu analysieren, indem Sie den Prozeß in kleinere logische "Häppchen" zerlegen und nach jedem (Teil-)Schritt eine Meldung mit Zeitangabe auf dem TeachPanel oder in eine Logdatei ausgeben. Dann kann man weitersehen....


    Wenn die Koordinatenübergabe reproduzierbar(!) bei 1,5 Sekunden und die Objekterkennung bzw. -verifikation bei 8,5 Sekunden liegt, dann würde ich mich zunächst mal mit dem Vision-System beschäftigen... :wink:


    Gruß
    Rainer

  • Hallo Rainer,


    Am Anfang dachte ich auch das es an dem Vision System liegt; ich habe dann aber den Roboter (als Master) durch einen anderen Computer ersetzt und über das Programm "Digitest" die Befehle (die sonst der Roboter abschickt) zur Typverifiaktion und zur Koordinatenrückgabe eingegeben und siehe da es dauerte noch nicht mal 800 ms für alles. Allso kann es nicht am Vision System liegen.
    Die leute von Isra sagten mir es könnte daran liegen das ABB die schnittstelle z.B. 2 sek. geöffnet hält und danach schließt und diese nach einer gewissen Zeit wieder öffnet. Kann das sein ?


    Wie muß ich denn in meinem Programm den Code eingeben um die Schnittstelle offen zu halten; ich habs folgendermaßen probiert

    Code
    VAR iodev Kamera;
    
    
    Open "Sio1:",Kamera\Bin;


    hat aber leider nicht funktioniert Fehlermeldung war: 40505 Kann nicht öffnen Sio1: Raise Code: Err_Fileopen=1015


    War der Code überhaupt richtig?


    Vielen Dank im voraus.


    Gruß Stefan

  • Hallo Stefan,


    Zitat

    Die leute von Isra sagten mir es könnte daran liegen das ABB die schnittstelle z.B. 2 sek. geöffnet hält und danach schließt und diese nach einer gewissen Zeit wieder öffnet. Kann das sein ?


    Klingt für mich zwar nicht unbedigt logisch, unmöglich ist aber (fast) nichts. (Ich habe es auch geschafft die S4C mit serieller IO "bluescreen-mäßig" abzuballern)


    Hier ein bisschen Code aus einem damaligem Projekt:


    Insbesondere das Löschen des SIO-Buffers (ClearIOBuff) kann manchmal Wunder wirken.
    Auch das Schließen des Kanals im (Timeout-)Fehlerfall nicht vergessen! (=sonst böse Falle).
    Je nachdem in welchem Format das VisionSystem die Kommandos/Parameter erwartet, könnte man ggfls. auch mit angehängten CR und/oder LFs experimentieren.


    Zitat

    hat aber leider nicht funktioniert Fehlermeldung war: 40505 Kann nicht öffnen Sio1: Raise Code: Err_Fileopen=1015


    Das würde auf einen generellen Fehler bei den SIO-Parametern (Baudrate, Handshake, etc) hindeuten, ist aber auszuschließen wenn die ser. Kommunikation über diesen Kanal sonst prinzipiell funktioniert. Möglicherweise ist der Kanal aber auch schon geöffnet, allerdings weiß ich nicht ob das doppelte Öffnen diese Fehlermeldung provozieren würde. Am besten die komplette Kommunikation zw. Roboter und Vision erstmal in einer Proc isolieren (Kapseln mit Open/Close) und testweise in der Maintask laufen lassen (also alle anderen Tasks beenden um Multitasking Probleme auszuschließen). Vielleicht bringt das mehr Hinweise.


    Gruß
    Rainer


    Nachtrag:
    Eine weitere Fehlerquelle könnte die Baudrate sein, deshalb erstmal langsam starten (z.B.: 9600 Baud) und wenns funktioniert langsam steigern.

    Einmal editiert, zuletzt von rmac ()

  • Hallo,
    habe jetz alles versucht.
    Der Rob vertrödelt immer an der gleichen Stelle seine Zeit. Siehe Proc Home zeile mit Fahrbefehl im HAuptprogramm (TAsk1 WMAIN). Dort bleibt er ca 5 sec. stehen


    Ich habe keine Ahnung was da los ist.
    Vielleicht habe ich ja auch irgendwo im Prog einen fehler.
    Es wäre nett wenn sich mal jemand die Progs ansieht.


    Vielen Dank im Voraus


    Gruß Stefan




    Und hier nun das VisionProgramm WVISION im Task0


  • Tach auch,


    also:
    was du da in den GreiferAuf() bzw. GreiferZu() Routinen mit WaitDO machst, ist bestimmt nicht im Sinne des Erfinders. WaitDO wartet so lange bis das entsprechende Signal (Greifer) gesetzt bzw. rückgesetzt wird (oder bis TimeOut), was aber erst im nächsten Befehl ausgelöst wird (!), das kann, glaub ich, so nicht funktionieren. Einfach mal die Reihenfolge der Instruktionen tauschen....


    Bei welcher Zeile der Rob die Zeit vertrödelt habe ich aber jetzt nicht wirklich geblickt :nocheck:
    Beschreibe bitte die Stelle etwas genauer. Wie hast du denn gemessen wieviel Zeit er wofür braucht ?


    Noch was:
    Greifer1 ist doch das Werkzeug (tool). Ich würde die Orientierung des Greifer nicht über die Manipulation der Strukturdaten machen, ist nicht so elegant (vielleicht ist es aber auch völlig genial und ich habe nur das Programm nicht geblickt :wallbash:). Das Verfahren über berechnete Robtargets halte ich für besser (und nachvollziehbarer).


    Gruß
    Rainer

  • Hallo Rainer,


    die Zeit wurde gemessen vom drücken der Start Taste bis zum ersten losfahren des Roboters.


    Wenn ich während der Awrtezeit den Totmaschalter los lasse, dann befindert er sich bei folgender Zeile im Proc HOME


    Code
    MoveL HOMEPOS,vmax,fine,Greifer1\WObj:=wobj0;



    Code
    PROC HOME()
        ! Funktion für die Homeposition anzufahren
         !WaitTime\inpos,0;
         Greifer1.tframe.rot:=[1,0,0,0];  
        !Orientierung des Greifers parallel zum Tisch
        MoveL HOMEPOS,vmax,fine,Greifer1\WObj:=wobj0;


    Ich habe aber leider keine Ahnung warum?


    Gruß Stefan

  • Hallo Stefan,


    also ich glaube das Problem ist das WaitDO in der GreiferAuf() Proc.
    In Haupt() wird zuerst GreiferAuf() und dann Home() aufgerufen.
    Wenn du die Zustimmtaste losläßt, dann ist der Rob noch im Wartezustand (WaitDO), zeigt aber schon den nächsten auszuführenden Befehl an (MoveL in Home()) könnte ich mir vorstellen (?). Probiers mal mit vertauschen der Befehle in GreiferAuf().


    Gruß
    Rainer

  • Hallo Rainer,


    ich habe mal die von Dir angesprochenen Befehle getauscht nur leider Ohne erfolg er steht wie vorher auf dem Fahre Befehl "MoveL.... " :bawling:


    Was könnte ich denn noch probieren?


    Gruß Stefan

  • Hallo,


    habe mir dein Programm jetzt mal was genauer angesehen.
    Gib doch in der NEU Schleife (am besten direkt hinter dem Label "NEU") einen Text (oder besser (Schleifen-)Zählerwert) auf dem Teachpanel aus, dann kann man wenigstens feststellen ob der ProgramCounter steht oder in der Schleife kreist.


    Bis gleich
    Rainer

  • Hallo Stefan


    bau mal in die (NEU-)Schleife in der MainTask folgendes ein:
    TPWrite "Main: " + NumToStr(Schleifenzähler,0) + " " + CTime();


    und in der While Schleife in der VisonTask
    TPWrite "Vision: " + NumToStr(nStep,0) + " " + CTime();


    schau dann mal auf dem TPanel was wann gemacht wird.


    Rainer

  • Stefan,


    übernehme mal die folgende Log-Routine in die Tasks

    Code
    PROC logWrite(string Text)
        CONST string logFileName := "HOME:run.log";
        VAR iodev AFile;
        Open logFileName, AFile \Append;
        Write AFile, Text + CDate() + " " + CTime();
        Close AFile;
      ERROR
        Return;
      ENDPROC


    und bau diese (wie vorher) in die entsprechenden Schleifen ein, also
    in der MainTask Schleife:

    Code
    logWrite("Main: " + NumToStr(Schleifenzähler,0));


    und in der While Schleife in der VisonTask

    Code
    logWrite("Vision: " + NumToStr(nStep,0));


    Nach dem Ausführen steht das Ergebnislog dann in der Datei "run.log".
    Kopier das mal aus der Steuerung und poste den Inhalt hier als Antwort. Mich würde mal interessieren was dabei so rauskommt.....


    Gruß
    Rainer

  • Hallo Rainer,
    hier das Log File. Beim Anfahren habe ich das Programm gestoppt.


  • Stefan,


    scheint ja zumindest vom Ablauf wie gewünscht zu funktionieren.
    Wenn ich das richtig sehe, scheint der Step 4 (ORISRep_GetReslt = Teileerkennung?) des VisionSystems () länger zu brauchen (> 2 Sek.). Das würde auch zu deiner Aussage am Anfang des Threads passen, nämlich das der Ablauf mit vorgegebener Teile-Nr. wesentlich schneller funktioniert. Da läßt sich aber wahrscheinlich von deiner Warte aus nicht viel dran drehen.... :(


    Wie sieht es denn bei den weiteren/folgenden Durchläufen aus?
    Hängt er dann auch genau so lange an der gleichen Stelle ?


    Gruß
    Rainer

  • Hallo Stefan,


    noch ein Nachtrag:
    Man könnte die VisionTask dahingehend optimieren, dass die Initialisierung nur einmal beim Systemstart und nicht bei jeder Messung ausgeführt wird, aber wenn du sonst keine Möglichkeiten zur Anpassung/Parametrierung des Erkennungsprozesses auf dem VisionSystems hast, kannst du zeitlich nicht viel dran machen.... :(


    An dem Programm insgesamt ließe sich schon durchaus einiges ändern :pfeif:
    Hier z.B. ein Vorschlag für haupt() in der MainTask:
    (ACHTUNG: alles ungetestet und OHNE Gewähr !!!!)


    Man könnte noch andere Dinge weiter vereinfachen und besser strukturieren, nur dafür müsste man natürlich die anderen Procedures entsprechend anpassen.


    Noch ein Tip zum Ablegen der verschiedenen Teile:
    Du benutzt zum Aufruf der unterschiedlichen Ablagebewegungen diesen großen Case-Konstrukt (TEST/ENDTEST). Ich würde für jedes Teil eine Ablageroutine schreiben und diese dann über den Namen aufrufen. Ist viel übersichtlicher und pflegbarer..... :supi:
    Beispiel:


    Der Aufruf der Ablage in Saegevorgang() könnte dann in etwa so aussehen:

    Code
    PROC Saegevorgang()
        WaitTime 0;
        Greifer1.tframe.rot:=[1,0,0,0];
        MoveL HOMEPOS,vmax,fine,Greifer1\WObj:=wobj0;
        FindItem:=TRUE;
        %CAblage_Procs{TeileNr}%;
        GreiferAuf;
        MoveL HOMEPOS,vmax,fine,Greifer1\WObj:=wobj0;
     ENDPROC


    Gruß
    Rainer

  • Hallo Rainer,
    vielen vielen Dank für Deine Hilfe. :danke:
    Ich habe mal die von Dir angesprochenen Änderungen durchgeführt.
    Ich versuche mal am Vision Programm noch irgendwie was zu drehen.
    Mal sehen was da noch alles so möglich ist :beerchug:


    Gruß Stefan

  • Hallo Stefan,


    bitte, bitte, gern geschehen.


    Ich hätte noch ein paar andere Anregungen zu deinem Projekt, aber ich will mich nicht aufdrängen... :roll:
    Also wenn du noch Bedarf/Fragen hast, dann sag Bescheid. :meld:


    Grüße und ansonsten noch viel Spaß beim Basteln...
    Rainer

  • Hallo Rainer,


    ich bin für jeden Vorschlag / Anregung dankbar.
    Welche Anregungen kannst Du mir denn noch mit auf den Weg geben?
    Am Donnerstag habe ich einen Termin bei der Fa. ISRA Vision zwecks Benutzung einer zweiten Kamera zur Feinvermessung mal sehen was dabei rauskommt.


    Gruß Stefan

Hilfe und Support für ABB Roboter Programmierung, Konfiguration, Inbetriebnahme finden Sie hier im ABB Roboter Forum. ABB Rapid Programmierung ist einfach, die Roboterforum Community hilft sehr gerne.

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