Beiträge von Sunny

    Hallo Andy,
    entschuldige bitte die späte Antwort.
    Beim ArcFinder gibt es einen Parameter "[size=3][font="Arial",sans-serif]Properties - Search Mode". [/font][/size]Sofern dieser auf "Best Arc" steht braucht der Arc Finder relativ lange.
    Gruß Sunny

    Hallo pjoker22,
    die automatische bzw. manuelle Methode wird durch die Beantwortung der Fragen im AceSight Camera Calibration Objekt festgelegt.
    Erstelle am Besten ein neues ACESight Camera Calibration Objekt und beantworte entweder die Frage "Specify End-Effector Type" mit "The robot has a tool that can point at the object" oder die nächste Frage "Is the robot free to move?" mit "There are obstacles in the workspace or the work surface is not parallel to the robot XY plane. I want to move the robot manually".


    Grüße
    Sunny

    Für alle Interessierten.


    Die aktuelle ACE Version 3.3.3.0 stellt den Emulationsmodus (Roboter und Kamera) kostenlos zur Verfügung und erlaubt den Import von CAD Daten in die 3D Ansicht (STL Format).


    Gruß
    Sunny

    Hallo Muses,


    ersetze HALT Befehl durch den STOP Befehl. Der STOP Befehl prüft ob noch "Taskzyklen" abzuarbeiten sind. HALT bricht die "Taskzyklen" ab.



    das Roboterprogramm mit EXECUTE 1 rob.main(), -1 aufrufe, dann geht das System direkt in HALT
    Wenn du Task 1 benutzt um einen Roboter zu bewegen musst du diesen vorher ankoppeln. Z.B.
    SELECT robot=1
    ATTACH(0) ;in Schleife mit Fehlerauswertung besser (siehe dein Interrupthandling err.reacti)



    Gruß
    Sunny

    Hallo Muses,


    der ArcFinder arbeitet Framebasierend. D.h. er arbeitet relativ zum Locator und bekommt von diesem einen Frame weitergereicht.
    Daher muss der Schleifenzähler in der Funktion an die letzte Position (frame), d.h.
    SET place = VLOCATION($ip, seq, 3, , 1401, , i)


    Grüße
    Sunny

    Hallo Andre,


    vor einigen Jahren hat ein schweizer V+ Programmierer (Danke Reto ;) ) herausgefunden, dass Windows Pakete sammelt und dadurch verzögert schickt bzw. empfängt.


    Hier ein Auszug
    "Speeding up TCP/IP Speed from 2.5KB/s to >75.0 KB/s when sending data from Adept Controllers to Windows PC !!


    This can be done by adding the following DWORD's to the Windows Registry:
    TcpDelAckTicks = 0
    TcpAckFrequency = 1
    They should be added under:
    HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{***YOUR NETWORK INTERFACE CLSID***}\


    Normaly I'll add them to every CLSID."


    Auf diesen Seiten sind einige Möglichkeiten beschrieben die TCP Geschwindigkeit zu verbessern.
    http://www.speedguide.net/arti…-7-vista-2008-tweaks-2574
    http://support.microsoft.com/kb/214397/en-us
    http://stackoverflow.com/quest…delays-and-retransmission



    Viel Spaß beim Ausprobieren!
    Sunny

    Hallo Foxx,


    der Syntax des MOVES und DEPARTS ist etwas anderst als der des APPROS. Oben im Programm ist der MOVES richtig geschrieben.


    MOVES position
    DEPARTS mm
    APPROS position, mm


    Der Fehler "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt" war gemein. :denk:
    Dein SmartController Objekt hatte am Ende ein Leerzeichen. In C# macht das leider etwas aus. Ich hab es auch erst gesehen nachdem ich das Objekt nochmal in den Script gezogen habe. Hier die richtige und die falsche Zeile (auskommentiert).
    //IQuattro650 quattro6501 = (IQuattro650) ace["/SmartController /R1 Quattro650"];
    IQuattro650 quattro6501 = (IQuattro650) ace["/SmartController/R1 Quattro650"];


    Ich hab dir den Workspace wieder angehängt.


    Gruß
    Sunny

    Hallo Foxx,


    ich befürchte viel kann ich dir hierbei nicht helfen.


    Mir ist zur Zeit keine ACE Version bekannt welches es erlaubt CAD Daten zu importieren.


    ACE erlaubt allerdings den Zugriff auf alle ACE Objekte per C# Scripting.


    Ich hab dir einen kleinen ACE Workspace angehängt. Darin findest du ein V+ Programm und ein C# "Programm". Compiliere das C# Programm aus ACE heraus und dann starte das V+ Programm. Du solltest beobachten können wie der Adept Cobra s600 Roboter einen Zylinder aufnimmt und ihn zu einer Ablageposition bringt. Nicht perfekt aber immerhin etwas 8)


    Gruß
    Sunny

    Hallo Foxx,


    das ACE Monitor Fenster emuliert das frühere AdeptWindows Monitor Fenster, stellt allerdings nicht alle Funktionalität zur Verfügung. Für TYPE Befehle zum Debuggen ist es ok aber für Programmsteurung bzw. Werteeingabe würde ich es nicht nutzen. Insbesondere da es wenn es nicht explizit geöffnet ist die TYPE und PROMPT Ausgabe nicht durchführen kann und diese Befehle dadurch überspringen muss.


    Da du ACE nutzt kannst du z.B. ein Graphical User Interface Objekt einfügen und dir eine kleines GUI mit ein paar Mausklicks zusammenbauen.
    1. Ein eigener Ordner für das GUI ist übersichtlicher.
    Rechte Maustaste im Workspace Explorer und mit "New Folder" einen neuen Unterordner anlegen.
    2. User Interface Form Objekt hinzufügen.
    Rechte Maustaste "New -Program - User Interface Form".
    3. Ein Label hinzufügen welches als Text "Anzahl Zyklen ?" hat einfügen
    In der User Interface Form aus der "Toolbox" ein Label mit der Maus anklicken und auf die Form ziehen.
    Das Label anklicken und in den Properties unter "Appearance - Text" den Text "Anzahl Zyklen ?" eingeben.
    4. Ein Textfeld hinzufügen welches mit der V+ Variablen "Zyklen" verlinkt ist.
    In der User Interface Form aus der "Toolbox" ein Textfeld mit der Maus anklicken und auf die Form ziehen.
    Das Textfeld anklicken und in den Properties unter "Property Links - Item Text" dein "V+ Global Variables" Objekt anklicken und die Variable zyklen auswählen.


    Jetzt könnten wir die User Interface Form schon Kompilieren und Ausführen (Compile and Run) und sobald du einen Wert im Textfeld eingibst ändert sich auch der Wert in V+. Allerdings sollten wir das V+ Programm noch leicht modifizieren.
    Zum Beispiel:


    zyklen = 0
    DO
    WAIT
    UNTIL zyklen <> 0 ;hiermit warten wir darauf, dass im Textfeld ein Wert ungleich 0 eingegeben wird.


    roboter.zyklen = zyklen ;hat den Vorteil, dass sobald das Programm ausgefuehrt wird eine neue Eingabe im Textfeld unseren Schleifenendwert nicht veraendert
    FOR i = 1 to roboter.zyklen
    ;Roboterzyklus
    END



    Wenn du die User Interface Form noch etwas verschönern willst kannst du ein Start-Button hinzufügen.
    5. Ein Toggle Button hinzufügen welcher mit einer neuen V+ REAL Variablen start.roboter verlinkt ist.
    In der User Interface Form aus der "Toolbox" ein Toogle Button mit der Maus anklicken und auf die Form ziehen.
    Den Toggle Button anklicken und in den Properties unter "Property Links - Item Text" dein "V+ Global Variables" Objekt anklicken und die Variable "start.roboter" auswählen.


    Die User interface Form neu kompilieren und ausführen. Wenn du jetzt auf den Button klickst wird in V+ der Wert der Variablen start.roboter auf TRUE gesetzt. Wenn du loslässt wieder auf FALSE. Dein V+ Programm würde sich dann ändern in
    zyklen = 0
    DO
    WAIT
    UNTIL start.roboter == TRUE ; == TRUE kannst du auch weglassen wenn du moechtest


    roboter.zyklen = zyklen ;hat den Vorteil, dass sobald das Programm ausgefuehrt wird eine neue Eingabe im Textfeld unseren Schleifenendwert nicht veraendert
    FOR i = 1 to roboter.zyklen
    ;Roboterzyklus
    END



    Ich hoffe ich konnte dir weiterhelfen.



    Gruß und viel Spaß
    Sunny

    Hallo Staind,


    du kannst die derzeitige Armkonfiguration z.B. über die aktuelle Roboterposition als Precision Point auslesen oder mit der Funktion CONFIG().


    1.
    HERE #aktuell ;hiermit speicherst du die Achswerte der derzeitigen Roboterposition in die Variable #aktuell. Hierbei handelt es sich um einen Precision Point (am "#" Zeichen erkennbar).
    Jetzt kannst du die Variable mit dem DECOMPOSE Befehl in 4 Real Arrayvariablen zerlegen. (Syntax steht im V+ Language Reference Guide)
    Danach stellt sich die Quizfrage welche Achse/Achsen beim SCARA anzeigen ob er in Links- oder Rechtsarm steht . :angel:


    2.
    Schau dir mal die Funktion CONFIG() im V+ Language Reference Guide an. Es gibt einen Wert den man in die Klammern einfügt und bekommt dann die Armkonfiguration des Roboters in 3 Bit zurück. (3 Bit da V+ universell für "alle" Roboterarten ist). Beim SCARA intersessiert allerdings nur das Bit für Links- und Rechtsarm.



    Weiterhin viel Erfolg
    Sunny

    Hallo Voxe,


    hier sind die korrekten Formeln in einem V+ Programm getestet. Die Ergebnisse entsprechen den Werten in der Datei.


    mat[0] = -SIN(y)*SIN(r)+COS(y)*COS(p)*COS(r)
    mat[1] = COS(y)*SIN(r)+SIN(y)*COS(p)*COS(r)
    mat[2] = -SIN(p)*COS(r)
    mat[3] = -SIN(y)*COS(r)-COS(y)*COS(p)*SIN(r)
    mat[4] = COS(y)*COS(r)-SIN(y)*COS(p)*SIN(r)
    mat[5] = SIN(p)*SIN(r)
    mat[6] = COS(y)*SIN(p)
    mat[7] = SIN(y)*SIN(p)
    mat[8] = COS(p)



    mat[0] -0.847553
    mat[1] -0.3958015
    mat[2] -0.3535465
    mat[3] -0.2799298
    mat[4] -0.8993776
    mat[5] -0.3357964
    mat[6] 0.4508805
    mat[7] -0.185637
    mat[8] -0.873067


    Gruß
    Sunny



    ps angehängt das V+ Programm inkl. Variablen als txt-Datei

    Hallo Voxe,


    die Lösung habe ich auch noch nicht gefunden.


    Was an deinen Ergebnissen auffällt ist, dass 7 deiner Ergebnisse identisch sind mit der Matrix der Datei. Allerdings an anderer Position. Dies deutet daraufhin, dass die Reihenfolge beim Speichern anderst ist.


    Datei entspricht deinem Ergebnis
    mat[0] = -0.847554 mat[0] = -0.847554
    mat[1] = -0.395798
    mat[2] = -0.353544 mat[6] = -0.353546
    mat[3] = -0.279929 mat[1] = -0.279929
    mat[4] = 0.899379
    mat[5] = -0335792 mat[7] = -0.335796
    mat[6] = 0.450877 mat[2] = -0.450880
    mat[7] = -0.185635 mat[5] = -0.185637
    mat[8] = -0.873068 mat[8] = -0.873066


    Bei mat[3] hast du dich in der Formel vertan
    deine mat[3] := -cos(y)*cos(p)*sin(r)-sin(y)*cos(r)
    pdf mat[3] := -cos(y)*cos(p)*sin(y)-sin(y)*cos(r)


    Bei mat[4] habe ich verschiedene Berechnungen im Internet gefunden. Leider fehlt mir ein entsprechendes Mathematikbuch.
    Deine Berechnung
    mat[4] := -sin(y)*cos(p)*sin(r)-cos(y)*cos(r)
    Hier die Berechnung auf Wikipedia
    mat[4] := cos(y)*cos(r)-sin(y)*cos(p)*sin(r)


    Ich hoffe ich konnte dir damit wenigstens ein wenig weiterhelfen.



    Gruß
    Sunny

    Hallo Voxe,


    du musst dem Roboter die Positionen nicht unbedingt in diesem Format zur Verfügung stellen.


    Alternativ kannst du die Werte z.B. als Zahlen mit Trennzeichen in eine Datei schreiben und diese in V+ einlesen.
    Name;X;Y;Z;yaw;pitch;roll
    aufnahme;102.5;66;305;0;180;-270 (wichtig! Das Zeichen für Nachkommastellen ist in V+ der Punkt ".")


    Im V+ Language User's Guide im Bereich "Input/Output Operations " - "Disk i/O" findest du ein Programmbeispiel welches Daten in eine Datei schreibt und danach diese auch wieder ausliest.
    http://www1.adept.com/main/KE/…er/V+Programming_TOC.html



    Das Erstellen einer Position anhand von einem Positionsnamen und Werten als Strings funktioniert mit dem DOS-Befehl.
    $x = "102.6" (wird aus der Datei ausgelesen)
    $y = "66" (wird aus der Datei ausgelesen)
    $pos = "aufnahme" (wird aus der Datei ausgelesen)
    DOS "SET " + $pos + "=TRANS(" + $x + "," + $y + ")" (erzeugt eine Transformation mit dem Namen aufnahme und den beiden Werten x und y)



    Gruß
    Sunny

    Hallo Johannes,


    alternativ kannst du in Adept Desktop über den Menupunkt "Utilities" - "Controller IP Config" ein Hilfsprogramm starten.


    Wichtig!
    Als erstes auf "SCAN" klicken! (nicht auf "NEXT")
    Nachdem nach allen verfügbaren IP Adressen gescannt wurden bitte die richtige auswählen. Im darauffolgenden Fenster kannst du dann ein Häckchen bei "Enable Autostart (Auto.v2)"setzen und mit Update abspeichern.


    Hier der Link zum Handbuch von AdeptDesktop. Du findest diesen Punkt im Kapitel "Adept DeskTop Online User Guide" - "Controller IP Configuration Wizard"
    http://www1.adept.com/main/KE/DATA/ENGLISH/ADT.pdf



    Grüße
    Sunny