Die offizielle Antwort ist dass es nicht geht.
Viele Grüße,
-Pitl
Die offizielle Antwort ist dass es nicht geht.
Viele Grüße,
-Pitl
Hallo,
einfach im Controllerobjekt auf Configure >> Configure Controller >> SAFETY_ZONE_SECTION gehen und dann den Power Timeout auf 0 stellen.
Viele Grüße,
-Pitl
Hallo,
der Code den du zeigst benötigt eine Voraussetzungen damit es finktioniert. Ich habe hier ein kleines Programm, welches dir den Tooloffset eines Tips aus dem Greiferobjekt ausliest und dieses Tool dann setzt. Du musst eigentlich nur den Link zur Variable $object zum Grieferobjekt in deiner Workspace anpassen.
AUTO $object
AUTO REAL rob, wait.time, status, tip
AUTO LOC tool.trans
rob = 1
; Link zum Greiferobjekt in der Workspace
$object = "/SmartController 155/Gripper R1 Cobra800 (Pro)"
; Setzen des Indexes für den die Tooltransformation ausgelesen werden soll (0-basierend)
wait.time = 3
tip = 1
CALL rm.write.num($object, "SelectedIndex", wait.time, tip, status)
IF status < 0 THEN
HALT
END
;Auslesen der Tooltransformation des gesetzten Tips
CALL rm.read.trns($object, "ToolOffset", wait.time, tool.trans, status)
IF status < 0 THEN
HALT
ELSE
; Setzen des Tooloffsets
SELECT ROBOT = rob
TOOL tool.trans
END
Viele Grüße,
-Pitl
Kannst du bitte etwas näher erklären was du machst? Zur Not kannst du auch einen Screen Shot schicken.
-Pitl
So sollte es gehen:
using Ace.Core.Server.Program;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using Ace.Adept.Server.Controls;
using Ace.Adept.Server.Device;
using Ace.Core.Server.Sim3d;
using Ace.Adept.Server.Motion.Robots;
using Ace.HSVision.Server.Parameters;
using Ace.Core.Server;
namespace Ace.Custom {
public class Program {
public AceServer ace;
public void Main () {
//IQuattro650 quattro6501 = (IQuattro650) ace["/SmartController /R1 Quattro650"];
IQuattro650 quattro6501 = (IQuattro650) ace["/SmartController/R1 Quattro650"];
IAdeptController contr = quattro6501.Controller;
IBox box = (IBox) ace["/Box"];
IIODrivenEndEffector iODrivenEndEffector = (IIODrivenEndEffector) ace["/SmartController/Gripper R1 Quattro650"];
IVariableNumeric varSchritt = (IVariableNumeric) ace["/Numeric Variable Schritt"];
IVPlusGlobalVariableCollection vPlusGlobalVariableCollection = (IVPlusGlobalVariableCollection) ace["/V+ Global Variables"];
quattro6501.Parent = null;
switch ((int) varSchritt.CurrentValue)
{
case 1:
box.Visible = false;
box.Parent = null; //keine Ahnung wie man einen Parent NULLen kann
Transform3D transPick1;
transPick1 = contr.Link.ListL("pick1");
box.WorldLocation= transPick1;
box.Visible = true;
break;
case 2:
box.Visible = false;
box.OffsetFromParent = new Transform3D(0,0,0,0,0,0);
box.Parent = (ICartesianObject) quattro6501;
box.Visible = true;
break;
case 3:
box.Visible = false;
box.Parent = quattro6501.Parent; //keine Ahnung wie man einen Parent NULLen kann
Transform3D transPlace1;
transPlace1 = contr.Link.ListL("place1");
box.WorldLocation = transPlace1;
box.Visible = true;
break;
}
}
}
}
Viele Grüße,
-Pitl
Hallo,
mit DECOMPOSE kannst du eine Transformation in ihre 6 einzelnen Bestandteile zerlegen. Das geht wie folgt:
; Zerlegen der Transformation position in ein Array
DECOMPOSE world[] = position
; Zurordenen der einzelne Werte des Arrays
x = world[0]
y = world[1]
z = world[2]
yaw = world[3]
pitch = world[4]
roll = world[5]
Ich habe noch nie Transformationen multipliziert aber schon oft addiert. Das geht so:
trans3 = trans1:trans2
Viele Grüße,
Pitl
Frag mal hier nach: http://www.robo-technology.de oder http://www.robotif.de .
Ich halte es allerdings für sehr riskant bis nicht zulässig ein so altes Gerät in die Produktion zu nehmen.
Viele Grüße,
-Pitl
Dann schalte doch den Schlüsselschalter einmal auf Automatik und schaue ob es dann geht.
Pitl
OK, dann sieht es ja soweit richtig aus.
Hast du ein Frontpanel am XFP angeschlossen, wenn ja auf welcher Position steht der Schlüsselschalter?
Was hat dein Controller für eine Typennummer. Das ist der erste Teil der Seriennummer.
Hast du einen Blindstecker für den XMPC - Anschluss. Dann diesen mal aufstecken und dann das ENABLE POWER versuchen.
Viele Grüße,
-Pitl
Was sagt den die ES Led des SmartControllers? Ist das Pendant am XMCP - Anschluss des Controllers angeschlossen und wenn ja was für ein MCP has du denn? Wenn kein MCP angeschlossen ist, was ist dann am XMCP angeschlossen.
Viele Grüße,
-Pitl
Sorry für die späte Antwort. Ich war für eine Weile offline, tut auch mal gut.
Das du von der Bootdiskette aus kein CALIBRATE starten konntest liegt whrscheinlich daran, dass auf der Diskette kein Verzeichnis CALIB vorhanden war, bzw. nicht die entsprechenden Dateien in diesem Verzeichnis vorhanden waren. Leider hast du diese zerschossen, ist halt ein UNIX Format und kein DOS.
Ich habe aber noch eine Idee. Wenn die High Power, trotz Power Timeout von 15s, das ist der Timeout für das Blinken, sofort reinkommt, kann das an zwei Sachen liegen.
Die erste hätte mit deinem NVRAM zu tun. Wenn du keine CAT-1 Lizenz hast, kommt die High Power ohne Drücken des Knopfes sofort rein, auch wenn der Timeout gesetzt ist. Welche Lizenzen installiert sind siehst du ebenfalls in Config_c unter dem Menüpunkt Controller NVRAM --> Display NVRAM contents.
Das zweite wäre dass das Drücken des Knopfes durch eine externe Hardwareverschaltung realisiert wird sobald die High Power angefordert wird.
Viele Grüße,
-Pitl
Das hört sich ganz danach an, wie wenn dein Power Timeout in der Config_c auf 0 steht. Nur wenn dieser nicht auf 0 steht fängt die Taste an zu blinken.
Das System schaltet jetzt die Leistung direkt ein und das scheint für deinen Robbi zu schnell zu sein. Ich sehe aber noch keinen Zusammenhang zu der leeren Batterie deines NVRAM's. Alle Daten für deinen Roboter stehen im Betriebssystem und das hat mit dem NVRAM nur indsofern zu tun, dass es schaut welche Lizenzen in deinem NVRAM freigeschaltet sind.
Da du Dallas Chip sagst gehe ich davon aus, dass du eine SIO hast. Wie es aussieht ist da noch etwas mehr defekt als nur die Batterie des Chips leer. Hast du den ein Backup des Betriebssystems auf Disketten, welches du einmal booten könntest.
-Pitl
Ich bin nicht sicher ob delta.v2 an dieser Stelle das richtige Tool ist. Leider ist bei Adept die Erfahrung mit von Stäubli entwickelten Tools begrenzt.
Bitte setz dich noch einmal mit Robotif in Verbindung. Auch wenn die deinen Roboter nicht hochpräzise kalibrieren könnten, sollten die mit den vorhandenen Mitteln zu einem Ergebnis kommen, das besser ist als das jetzige. Es kann natürlich sein, dass die dafür, zu Recht, Geld sehen möchten, bei der Historie des Roboters.
-Pitl
OK, dann scheinen die Roboterdaten zu stimmen. Die erste Achse kannst du um 90 Grad verfahren und dann visuell checken ob das auch stimmt. Ich denke aber das deine Kalibrierung einfach nicht mehr in Ordnung ist.
-Pitl
Du kannst dir wie oben geschrieben eine Flankenauswertung programmieren.
Zu deinem Beispiel:
i.part.avail = 1001
MOVE lc.pick.prepos
IF NOT SIG(i.part.avail) THEN
DO
WAIT
UNTIL SIG (i.part.avail)
END
MOVE lc.pick
BREAK
-Pitl
Wenn der Roboter nichts machen soll so lange ein Signal 0 ist geht das so:
i.rob.start = 1001
IF NOT SIG(i.rob.start) THEN
DO
WAIT
UNTIL SIG(i.rob.start)
END
Wenn der Roboter nur etwas machen soll so lange ein Signal 1 ist geht das so:
WHILE SIG(i.rob.start) DO
Robbie mach was
END
-Pitl
Da hat Adept doch alles richtig gemacht. Wir stellen uns das nächste Mal wieder neben den Denso Stand, die können dann die Frauen verkaufen und wir die Roboter.
Ich bin selber auch da gewesen. Bei uns (Adept) gibt es sehr großes Interesse an den Mobilrobotern, so dass wir seit der Automatica schone eine Inhouse Show für die kleinen Flitzer nachgelegt haben und demnächst noch eine machen.
-Pitl
Einfach laden. Aus dem Monitor mit load Pfad\xyz.lib und aus dem Programm mit MCS "load Pfad\xyz.lib. V+ ist die Dateiendung von der Sache her egal, die Struktur der zu ladenden Daten müssen stimmen.
-Pitl