Beiträge von Micky

    Hallo,

    den Datentyp "anytype" steht für die Programmierung nicht zur Verfügung.
    Die RAPID-Befehle können diesen intern nutzen genauso wie einen alternativen Parameter (z.B. num bzw. dnum).


    Uns als User stehen diese Möglichkeiten aber leider nicht zur Verfügung.
    Du könntest eventuell mit alternativen optionalen Parameter arbeiten, die Du aber dann explizit angeben musst:


    Beispiel:
    PROC MyRoutine(\num nValue|dnum dnValue|string stValue)


    MyRoutine\dnValue:=33;



    Wichtig bei Verwendung der alternativen optionalen Parameter ist, dass man das Zeichen "|" ab dem zweiten Parameter anstelle des Zeichens "\" verwendet, so dass man nur einen der zur Auswahl stehenden Parameter verwenden kann und nicht alle optionalen Parameter.

    Übrigens, die gleiche Frage wurde bereits in dem ABB User Forum gestellt:
    https://forums.robotstudio.com…data-type-function#latest

    Hallo,


    ein 16-Bit breites Signalgruppe kann in dem Parameter "Device Mapping" der Signaldefinition z.B. wie folgt definiert werden:

    • Byteswap "8-15,0-7"
    • Bitswap: "15-0"
    • Byte- und BitSwap: "15-8,7-0"

    Hallo,

    es besteht in RobotWare 6 die Möglichkeit eine externe Achse bei der Weltzonenüberwachung auszuschließen.

    Dieses wird z.B. bei elektrischen Punktschweißzangen benötigt.


    Öffne in den Systemparameter die Domäne "Motion" (MOC) und wähle unter "Single" den Eintrag für Deine externe Achse aus (z.B. Track).

    Öffne den Eintrag und setze den Parameter "Ignore joint world zones" auf TRUE.


    Nach dem Neustart der Steuerung sollte die Weltzonenüberwachung den aktuellen Wert der Achse ignorieren.


    Gruß

    Micky

    Hallo,

    Du könntest deine Bahn mit der Instruktion "PDispSet" bzw. "PDispOn" im Programm verschieben. Dabei musst Du darauf achten, dass die Verschiebung nach der Bewegung wieder mit "PDsipOff" deaktiviert wird.


    Alternativ könntest Du auch den Oframe Deines Werkobjektes anpassen.


    Gruß

    Micky

    Hallo yuminist,


    soweit ich Dein Programm nachvollziehen kann , sollte es bis zum Aufruf von "Cam-Busy" korrekt sein, so dass ich vermute, dass der Fehler innerhalb dieser Routine auftritt.


    Innerhalb der Routine Cam_Busy musst du die Befehle von "Intergrated Vision" mit dem übergebenen Parameter "CameraName" verwenden um darauf zugreifen zu können.

    Code
    Tpwrite "Camera Name"+CamGetName(cam);

    Ein direkter Zugriff auf "CameraName" mit "ValtoStr" oder ähnlichen Befehlen ist nicht möglich.


    Bei welcher Instruktion innerhalb der Routine "Cam_Busy" trat der Fehler auf ?


    Probiere bitte auch einmal aus was passiert, wenn Du Deine Kamera-Definition aus den Systemparametern direkt an die Instruktion "Cam_Busy" übergibst.


    Gruß

    Micky

    Hallo yuminist,


    gemäß Handbuch wird der Datentyp cameradev nur als Übergabeparameter an Routinen oder für den Befehl "AliasCamera" gebraucht, da die Kamera bereits in den Systemparametern definiert wird.

    cameradev (camera device) is used to define the different camera devices which can be controlled and accessed from the RAPID

    program. The data type cameradev is used for instructions and functions communicating with a camera. The names of the camera

    devices are defined in the system parameters and, consequently, must not be defined in the program


    Die zu verwendete Kamera (is7801) kann in der Datendeklarion nicht direkt zuwiwsen werden, da es sich bei "cameradev" um einen Non-Value-Datentyp handelt. Die Zuweisung der zu verwendenden Kamera erfolgt über die Instruktion "AliasKamera".


    Da die Kamera-Instruktionen explizit die Datendeklaration "VAR" und nicht "PERS" erwarten, solltest Du die Kamera-Deklaration wie folgt ändern:

    Code
    VAR cameradev Camera;


    Falls der Kameratyp sich bei einem Tausch ändert, muss dies in den Systemparametern der Kameradefintion eingestellt werden.

    Wenn der Name Kamera so gewählt wird, dass er dessen Funktion (z.B. CAMERA_L) und nicht den Kameratyp (z.B. is7200) beschreibt, muss der Programmcode danach nicht geändert werden.


    Der Befehl "AliasCamera", wird wie im Handbuch beschrieben, verwendet wenn allgemeingültige Module die unverändert und unabhängig von der Kamera in verschiedenen Tasks eingesetzt werden sollen (Ähnlich wie bei AliasIO).


    Du könntest Deine Kameraoperationen ggf. auch in separaten Routinen kapseln, so dass die zu verwendende "CameraDev" übergeben wird. In diesem Fall, kann in der gesamten Routine und der Fehlerbehandlung die übergebene Kamera-Device verwendet werden, ohne das der Name angepasst werden müsste.


    z.B.



    Gruß

    Micky

    Hallo,

    der Trigg-befehl kann bis zu 8 Trigger-Events während einer Bewegung verarbeiten.


    In Deinem Fall musst Du eine weitere Trigger-Definition zum Ausschalten des Ausgangs definieren und als zweites Trigger-Ereignis an die TriggL-Instruktion übergeben.


    Code
    TriggEquip spray1_on,200 \start,0.1\DOp:=doIRB_ventil_auf,1;
    TriggEquip spray1_off,100 \start,0.1\DOp:=doIRB_ventil_auf,0;
    
    TriggL p1_10_1,v50,spray1_on\T2:=spray1_off,z50,TOOL_2\WObj:=wobj0;

    Gruß

    Micky

    Hallo,
    den Systemausgang TCP-Speed kann man nicht ändern.


    Aber schau Dir einmal die RAPID Instruktion "TriggSpeed - Definition der analogen, geschwindigkeitsproportionalen
    Ausgangssignale mit positions- und zeitabhängiger Skalierung" an.


    Bei dieser Triggerfunktion kannst Du einige Konfigurationen vornehmen und die Ausgabe erfolgt in mm/s anstelle von m/s.


    Gruß
    Micky

    Hallo Thomas,


    die Triggerfunktion ist die einzige Möglichkeit um einen Ausgang Positionsgenau zu setzen.
    Die Instruktionen MovelDO, MoveLSync, etc. basieren ebenfalls auf der Triggerinstruktion, setzen aber die Signale immer beim Erreichen der Zone und können nicht angepasst werden.


    Generell sollte man beim Triggern keine Fine-Punkte verwenden, da der Roboter vor dem Erreichen der Position bereits abbremst und dadurch mehr Material in diesem Bereich austritt.


    Du verwendest am besten die Instruktion "TriggL" in Verbindung mit "TriggEquip", den mit dieser kannst Du zum einen den Schaltpunkt sowie die Schaltverzögerung festlegen. Das ist die Zeit, die Dein Ventil vom Setzen des Ausgang bis zum Austritt des Materials bzw. bis kein Material mehr fließt benötigt.


    Code
    VAR triggdata gunon;
    ...
    TriggEquip gunon, 10, 0.1 \DOp:=gun, 1;
    TriggL p1, v500, gunon, z50, gun1;


    Gruß
    Micky

    Hallo,
    die SafeMove-UAS-Rechte sind nicht in den Admin Rechten enthalten.


    Du musst einen separaten Safety User einrichten, der die Adminrechte und zusätzlich die SafeMove-Rechte erhält und dich dann mit diesem User einloggen.


    Eventuell musst du mit diesem User zuerst die alte SafeMove-Konfiguration deaktivieren bevor Du Änderungen durchführen kannst.


    gruß
    Micky

    Hallo Robiman,


    bis zur RobotWare 6.03 waren Signale vom Typ "Non-Value" und konnten nur mit den Funktionen DOutput, GOutput, AOutput und GOutputDnum ausgelesen werden.


    Seit RobotWare 6.03 sind alle Signale vom Typ semi-value und können direkt im Programm verwendet werden, d.h die oben genannten Funktionen sind nicht mehr erforderlich.


    Beispiele:

    Code
    mynum:=do1;
    
    
    IF do1 = 1 THEN


    Die Funktionen zum Auslesen der Signalwerte werden aber weiterhin unterstützt.


    Quelle: Release Note RW 6.03 vom 29-03-2016


    Gruß
    Micky

    Hallo,


    ein Analogsignal liefert bereits einen numerischen Wert, so dass man diesen einfach einer numerischen Variable zuweisen kann oder ihn in einer IF-Bedingung direkt vergleichen kann.


    Beispiel:

    Code
    VAR num nWert1;
      VAR num nWert2;
    
    
      nWert1:=ai1;
      nWert2:=ao1;
    
    
      IF ai1>1 TPWrite "Wert größer 1";


    In älteren RobotWaren musste noch die Funktion "AInput" bzw. "AOutput" zum Einlesen der Werte verwendet werden, dies ist aber jetzt nicht mehr notwendig.


    Beispiel:

    Code
    reg1:=AOutput(ao1);
      reg2:=AInput(ai1);


    Mfg
    Micky

    Hallo,


    prinzipiell ist die Verwendung von Crossconnection eine gute Idee, wenn man Digitale oder Gruppensignale verknüpfen möchte. Leider werden aber Analogsignale nicht unterstützt!


    Warum musst Du unbedingt das Signal als Eingang vorliegen haben?


    Da Eingänge ja nur innerhalb Deines Programmes ausgewertet können, kannst Duch auch direkt den Wert des Analogausgang nutzen, so dass Du einen Analogeingang nicht unbedingt benötigst.


    Mfg
    Micky

    Hallo Haju,


    du solltest hierzu wie folgt vorgehen:


    - Erstelle eine Applikationvariable z.B. bVisible im ScreenMaker
    - Verbinde diese Applikationsvariable mit Eigenschaft Visible des Panels
    - Füge einen ConditionalTrigger zu Deiner Applikation hinzu und stelle dessen Eigenschaften wie folgt ein:
    - Condition: OR
    - LHS: Verbinde LHS mit deiner RAPID Persistenten
    - Value: Verbinde Value mit der Applikationsvariablen "bVisible"


    Deine Applikationsvariable sollte jetzt bei jeder Änderung der Persistenten aktualsiert werden und das Panel sichtbar bzw. unsichtbar machen.


    Gruß
    Micky

    Hallo,


    soweit ich weiß, kann man Volumenkörper nicht mehr nachträglich in der Größe ändern.


    Man kann zwar mehrere Körper miteinader verbinden, von einander subtrahieren oder sich schneiden lassen, aber hierbei wird immer ein neuer Körper erzeugt.


    Am besten Du erzeugst einfach einen Körper in der von der gewünschten Größe und löscht den alten.


    Mfg
    Micky