Posts by rob.target

    Hello everyone,



    My next task is to programme an UR - a dosing application.



    I have read through a lot so far and understand to some extent how the programming works.



    Now I have the question of how to switch the output for my dosing valve on or off on the web without triggering an exact stop?



    Ideally, this should be dependent on, for example, a distance to a start or end point.



    Unfortunately, I haven't found much on this yet. Does anyone have any experience that they can share with me?



    From other manufacturers I know own commands for such things and hope that the UR can also do this...



    Best regards

    I have checked the tool data. Everything fits so far...


    The example works and does exactly what I want:


    SFTON Pxx1 UF#(2)

    MOVL Pxx2 //must be different from Pxx1

    SFTOF


    My question is if I can calculate positions the same way the SFTON command does, so I can create the positions in advance?


    I tried to work with the command MULMAT, but the TCP does not keep its position in UF#(2) during the rotation around RX,RY,RZ. Or is this somehow possible after all?


    Best regards and thanks for the support!

    I will check that again. The tool is a gripper and I have calibrated it. In fact there is only an offset in XYZ without any rotation of the TCP in RX,RY,RZ. Strange - but we will solve the problem.


    Thanks a lot!!!

    Hello Motouser,


    Thanks for the quick reply. I understand what you mean. However, I was expecting when I run the following code that I rotate around RX in the user coordinate system:


    'ADJUST RZ-VALUE

    GETE LD000 LP000 (6)

    ADD LD000 D015

    SETE LP000 (6) LD000


    But I rotate around RZ with the code I posted before:


    'ADJUST RX-VALUE

    GETE LD000 LP000 (4)

    ADD LD000 D013

    SETE LP000 (4) LD000


    This is what I don't understand or wonder about...

    Hello all,



    despite some contributions to the calculation of positions I have somehow problems with the implementation of a calculation program - I am just a MOTOMAN beginner.


    Moving positions in user coordinates is no problem and works wonderfully:


    'GET REF-POSITION

    CNVRT LPX000 PX020 UF#(2) TL#(1)

    '

    'ADJUST X-VALUE

    GETE LD000 LP000 (1)

    ADD LD000 D010

    SETE LP000 (1) LD000


    But now I want to offset the position adjusted in UF#(2) by the X value around the TL#(1) in RX, but unfortunately my robot rotates around RZ!?


    'ADJUST RX-VALUE

    GETE LD000 LP000 (4)

    ADD LD000 D013

    SETE LP000 (4) LD000


    The points should be calculated in advance in the calculation program and and later approached in another program.


    What am I doing wrong or with which command sequence would I get the desired result with MOTOMAN?


    Best regards

    Hello together,


    in the near future I have to programm an UR3e that will be controlled by a Beckhoff PLC via ProfiNet.


    I read the ProfiNet-Documentation and implemented the communication between the Robot and PLC.


    Actually everything is running - means it is possible to read/write all the Process Data on the PLC.


    On the Robot I wrote a small default program for testing and configured the Signals for Remote Control as follow:


    GP_bool_in[0] => Start

    GP_bool_in[1] => Stop

    GP_bool_in[2] => Pause

    GP_bool_in[3] => Freedrive

    GP_bool_in[4] => Auto start the default program in the Run Tab

    GP_bool_in[5] => Auto brake releas the Robot


    GP_bool_out[0] => Low when Program is not running

    GP_bool_out[1] => High when Program is not running

    GP_bool_out[2] => High when Program is running


    From the Process Data the PLC can read the State of the Robot:


    0 = Disconnected

    1 = Confirm_safety

    2 = Booting

    3 = Power_off

    4 = Power_on

    5 = Idle

    6 = Backdrive

    7 = Running


    And some other Flags:


    AOM = Analog output mask

    AOT = Analog output types

    ES = Is emergency stopped

    FT = Is fault

    NO = Is normal mode

    PB = Is power button pressed

    PR = Is program running

    PS = Is protective stopped

    PW = Is power on

    RC = Is recovery mode

    RD = Is reduced mode

    RES = Is robot emergency stopped

    SES = Is system emergency stopped

    SS = Is safeguard stopped

    SSM = Speed slider fraction mask

    ST = Is stopped due to safety

    TAIT = Tool analog input types

    TB = Is teach button pressed

    TDI = Tool digital inputs

    TDO = Tool digital outputs

    TDOM = Tool digital output mask

    VL=Is violation


    Now, my Question. How looks the Handshaking of the Input/Output-Signals to start the Robot remotely in a very reliable way and without using of the Dashboard-Server?


    I have problems to start the robot after turning on the controller. The default programm doesn't start everytime - but sometimes. I think there is a timing issue...:hmmm:


    In the past I programmed a lot of Applications with ABB, Kawasaki or KUKA an I had diagrams like that:


    7079-pasted-from-clipboard-png


    Is there something similar for the UR?


    Thanks in advanced and best regards...:hi-bye:

    You can use the BITS command for integer variables too:


    From PLC to Kawasaki Robot:


    IF (BITS(1033,16)>32767) THEN
    ; negative value
    my_integer = BITS(1033,16) - 65536
    ELSE
    my_integer = BITS(1033,16)
    END


    From Kawasaki Robot to PLC:


    IF (my_integer <0 ) THEN
    ; negative value
    BITS 33,16 = my_integer + 65536
    ELSE
    BITS 33,16 = my_integer
    END



    Best regards...

    Cycle time of SPS.SUB is 12 ms! :hmmm:
    Kawasaki´s autostart is three times faster (4ms) and you can start five independent autostart tasks... :top:


    In your case I think it´s nessecary to monitor your autostart.pc programm in a second task like this:


    .PROGRAM autostart.pc()
    DO
    ;*** your code ***
    UNTIL FALSE
    .END


    .PROGRAM autostart2.pc()
    DO
    IF TASK(1001)<>1 THEN
    PCEXECUTE: autostart.pc
    END
    UNTIL FALSE
    .END

    Me again...


    Think, that an interrupt on Kawasaki robots is different to KUKA (no equal command like RESUME). But if you like to stop and start motion every time you want (like MOVE_ENABLE) you can do that in different ways.


    1. Example for an autostart.pc programm:


    .PROGRAM autostart.pc()
    DO
    ;*** rising edge of input 1001 ***
    IF SIG(1001) AND SIG(-2001) THEN
    SIGNAL(2002)
    ELSE
    SIGNAL(-2002)
    END
    IF SIG(1001) THEN
    SIGNAL(2001)
    ELSE
    SIGNAL(-2001)
    END
    ;*** falling edge of input 1001 ***
    IF SIG(-1001) AND SIG(-2003) THEN
    SIGNAL(2004)
    ELSE
    SIGNAL(-2004)
    END
    IF SIG(-1001) THEN
    SIGNAL(2003)
    ELSE
    SIGNAL(-2003)
    END
    ;****************************
    ;*** I think more conditions are nessesary (look at system switches in as manual).
    IF SIG(2002) THEN
    ;*** Stop motion ***
    MC HOLD
    END
    ;****************************
    ;*** I think more conditions are nessesary (look at system switches in as manual).
    IF SIG(2004) THEN
    ;*** Continue motion ***
    MC CONTINUE
    END
    UNTIL FALSE
    .END



    2. Using the dedicated input signal "EXT_IT":

    When this signal circuit is open robot stops motion in repeat mode.


    3. Using the EXTERNAL HOLD signal on 1TR board (E-Controller), 1KP board (D-Controller) connector X9 Pin 7-8 or TB2 board
    (C-Controller) pin 19-20.


    Best regards...

    Hello, try this:


    .PROGRAM main()
    ;**********************************
    ;*** example for an interrupt **********
    ;**********************************
    DO
    WAIT SIG(-1001)
    ONI 1001 CALL my_interrupt
    JMOVE #p[1]
    JMOVE #p[2]
    JMOVE #p[3]
    UNTIL FALSE
    .END


    .PROGRAM my_interrupt()
    ;**********************************
    ;*** interrupt routine ****************
    ;**********************************
    IGNORE 1001
    BRAKE
    POINT #p[4] = #DEST
    WAIT SIG(-1001)
    JMOVE #p[4]
    RETURN
    .END


    Best regards...

    Hi,


    do you know the $DECODE- command? With this command, it´s very simple to extract information out of a string. But you must use a seperator.


    Example:


    ; semicolon is the seperator between the values.


    $received.string = "01;02;41;42;"


    $temp.string = $received.string ; neccessary to copy, because the $DECODE- command works on the string.


    i = 0


    WHILE($temp.string<>"")DO
    $value = $DECODE($temp.string,";",0) ;extract characters up to the seperator.
    value [i] = VAL($value) ;convert to real
    $seperator = $DECODE($temp.string,";",1) ;extract the seperator.
    i = i+1
    END


    IF(i>0)THEN
    FOR j=0 TO i STEP 1
    TYPE "VALUE", value[j]
    END
    END


    Regards!

Advertising from our partners