Posts by blizz1993

    Hello everyone,

    I have question. Is it possible to send from Q-Track module (DSQC 2000) Trigger signal to the camera every 1mm of the conveyor ?

    Where I can change it and where i should turn on auto trigger mode option? Should I set cXTrigAutoMode on 1 in my EIO file (default value = 1)? Then should I set also default value on variable cXTrigAutoDist?

    Thank you for help

    Yes, I use DSQC2000 Q-Track module, where I have connected two encoders (one for one conveyor). I use also PickMaster RAPID program without adding more conveyor tracking functions.

    No. Each robot use it's own conveyor work area in normal work. One robot - one conveyor - one conveyor work area. Resetting start bits, stops only this one conveyor.

    The space between items are big enough - 8cm

    Yes. The sequence looks like below:

    1) Robot picks items from moving conveyor.

    2) Too much items on picking area - reset start conveyor bit in PickMaster ConveyorWork Area settings. Conveyor stopps

    3) Robot picking items from stopped conveyor.

    4) Starting conveyor

    5) Robot missing picking few next items from running conveyors (small pick error) - robot moves to picktarget but misses it

    6) Stopping conveyor

    7) Starting conveyor. Picking error increases


    I have a problem with Start/Stop sequence in PickMaster program.

    Machine has got two IRB360 robots and each of them has it's own conveyor for picking.

    I use Start/Stop bits in PickMaster to start or stop conveyors - send bits via Profinet to PLC.

    I have to use small pick areas, because there is a risk of collision between robots, so their areas are limited.

    Below i described my problem:

    If there is too much items on the conveyor pick area for robot, then PickMaster reset start bit and stop the conveyor. The problem is, that sometimes conveyor stops and starts few times in short time by PickMaster. This cause, that robots can't pick the item - miss pick position (error +/- in conveyor X-axis). Robots starts make good picks after missed 3-5 items (probably number of items in it's last queue/area) only if conveyor doesn't stop again in short time.

    How can I solve this problem? Should I write some additional functions in RAPID program or this problem is not possible to resolve? If not, the only way is to not stops conveyors, but slow them down?

    Thank you for answers.


    I am writting on forum, because I have got a problem with PROFINET connection between ABB IRC5 Compact (DSQC688) and B&R PLC (PROFINET card X20IF10E1-1) which is master.

    Firts of all, I am using RobotStudio 6.08.01 and on IRC5 is installed RobotWare 6.09.01.

    1) I configured PROFINET Anybus ike on manual, so in I/O System i configure PROFINET Internal Anybus Device like this:

    -Name "PN_Internal_Anybus" -VendorName "ABB Robotics"\

    -ProductName "PROFINET Internal Anybus Device" -OutputSize 64\

    -InputSize 64

    2) Then I go on Industry Network and set options for PROFINET (but I couldn't change PROFINET name).

    -Name "PROFINET_Anybus" -Label "PROFINET Anybus Network"\

    -Address "" -SubnetMask "" -Gateway ""\

    3) After then I created signals like this:

    -Name "PN_Internal_Anybus_DI1" -SignalType "DI" -Device "PN_Internal_Anybus" -DeviceMap "1" ... "64"

    -Name "PN_Internal_Anybus_DO1" -SignalType "DO" -Device "PN_Internal_Anybus" -DeviceMap "1" ... "64"

    4) Then I connected PROFINET cables between IRC5 and B&R PROFINET card but It doesn't work.

    Configuration in B&R PLC looks like in attachments (zip file with screens).

    The problem is, that after connection I have got on IRC5 PROFINET AnyBus LINKS: Green light, and Module status: RED, 2 flashes, what means IP address error.

    Then also on B&R module (X20IF10E1-1) BF LED was blinking in RED colour (Configuration error: Not all configured I/O modules are connected).

    I checked many times configuration (IP, data lenght etc.) but I don't know where is the problem.

    What should I change in my steps? Should I do something more on ABB IRC5 side?

    Thanks for your help and answers.


    For example I want to use InitSpeed procedure in each cycle in PickPlaceSeq() procedure, like this:
    PROC InitSpeed()
    VelSet 100,10000;

    PROC PickPlaceSeq()
    Vtcp := gi_Speed;
    Is it good way to change the speed value ? PickMaster will not overwrite this value?

    Hello everyone,
    I am writting here, because I have a question about robot speed setting in PickMaster 3. I know, how to change this value in PickMaster project (right click on robot symbol and then Settings), but I want to change the speed from my PLC. I send commands like, open project, run project etc. via RIS plug-in (TCP/IP protocol) to PickMaster, but RIS can't send the speed value. There is a speed value in PERS type variable Vtcp in ppaBase system module. Can I change this value from PLC (PLC is conected with IRC5 by PROFINET) or not? What if I will use MoveL command in RAPID with higher speed, than the one set in PickMaster project? Will PickMaster overwrite this value and will take the value from the PickMaster project?

    Thanks for any reply.

    I have an application for FlexPicker robot, which is created on PickMaster3. The application should works with external sensor from SICK but I have a problem. Let me explain this.

    Controler IRC5 Compact has got RobotWare in 6.07.01 version with PickMaster3, one conveyor area and other communication options.
    Controller is connnected to DSQC 377B QTrack module via CAN (DeviceNet) and via EthernetIP to DSQC 1030 LOCAL IO module.
    I use DSQC 377B input 9 as Strobe output from the external sensor (SICK 3D camera). Other data with coordinates are sending from the camera via UDP protocol and received by PickMaster.
    There we have two encoders - one is used by SICK camera used probably to coordinate in third dimenson. The second one is connected to DSQC 377B module and send position to IRC5.
    I created PickMaster project. I added controler, conveyor and external sensor and configured at this moment only Pick Area as Conveyor Work Area. There I used only strobe signal as "c1NewObjStrobe", because the camera itself trigger pictures every time (screen in attachment).

    I do all the steps to configure picking, as calculate countsPerMeter and calibrate BaseFrame for the conveyor. I check it and I get position from the encoder.

    When I start the program robot moves to his start position. Then I start the conveyor. After few second I get this information in PickMaster (screen in attachment) and robot doesn't move.
    I turned off firewall on PC with PickMaster. In additional I checked strobe signal duration and it equals +/- 0.02s. Does it long enough?

    Thanks for your help.

    Thank you for your help. I changed background task to "SemiStatic" and set "Continous mode" program and thanks to that my program starts working with expectation.
    I'm sorry for writing with a trivial problem, but as I wrote, I am beginner in Robot Studio and RAPID.

    I have one additional question. IRC5 doesn't have common signal, on which it sets error, when it occurs? I mean, when robot falls into error, IRC5 set system DO on true and reset it after ACK on Flexpendant or something like that?


    Yes I add multitasking to my virtual controller in options and turn on continous mode in simulation settings of the controller. I also run background task where I operate TRAP and as I said it works for example from RAPID technical reference manual, where divided by zero error occurs. Below part of my SYS.cfg file:

    -Name "T_ROB1" -Type "NORMAL" -MotionTask

    -Name "T_BCK1" -Task_in_forground "T_ROB1" -Type "NORMAL"

    I also attach to this post my T_ROB1 and T_BCK1 programs.
    When I run simulation and robot moves to last point, which is out of his range, then I get "50027: Joint Out of Range error". Then program stops and err_number variable from ReadErrData is 0 and it doesn't set my "do1", so it means that program interrupt and doesn't enter the TRAP procedure.

    Do you have any ideas?

    Yes, I know about never ending counter, but I do it to check if WHILE function is working. I change this for
    WHILE DOutput(do1)=0 DO
    I also put IDelete err_interrupt before CONNECT but I didn't update this. My mistake.
    I will use Get and Read for the future - to write error to variable.
    I set do1 to LOW in main, before Robot begin first move.

    My problem now is, that program can't run TRAP when "Joint out of range" error occurs (do1 always equals 0).

    Thank you for your reply.
    I created RAPID code like SomeTekk wrote but my problem is that I can't get into TRAP routine.
    I made new normal type task with foreground task T_ROB1 (Motion task, only move instructions) where i wrote this code:

    MODULE Background
    VAR intnum err_interrupt;
    VAR trapdata err_data;
    VAR errdomain err_domain := 5;
    VAR num err_number;
    VAR errtype err_type;
    VAR num counter := 0;

    PROC main()
    CONNECT err_interrupt WITH trap_err;
    IError MOTION_ERR, TYPE_ERR, err_interrupt;
    counter := counter + 1;
    IDelete err_interrupt;
    WaitTime 1;
    TRAP trap_err
    GetTrapData err_data;
    ReadErrData err_data, err_domain, err_number, err_type;
    SetDO do1,HIGH;

    First of all I want to simply set do1, when error occurs, but as I said it can't go into TRAP routine (do1 is still equals to 0).

    What is more it works for Division by zero error. I comment Path_10 in main and write:
    result := val1/val2; ! val2 := 0
    and then the TRAP working fine. What I'm doing wrong with joint out of range error?

    Yes, I did it like in your example. Below is my code in RAPID.
    MODULE Module1
    VAR errnum ERR_MY_ERR := -1;
    VAR num ErrorNr := 0;
    PROC Path_10()
    MoveL Target_10,v1000,z100,AW_Gun\WObj:=wobj0;
    MoveL Target_20,v1000,z100,AW_Gun\WObj:=wobj0;
    MoveL Target_30,v100,z100,AW_Gun\WObj:=wobj0;
    MoveC Target_40,Target_50,v200,z100,AW_Gun\WObj:=wobj0;
    MoveC Target_60,Target_70,v200,z100,AW_Gun\WObj:=wobj0;
    MoveL Target_80,v100,z100,AW_Gun\WObj:=wobj0;
    MoveL Target_100,v1000,fine,AW_Gun\WObj:=wobj0;
    MoveL Target_110,v200,fine,AW_Gun\WObj:=wobj0;
    MoveL Target_120,v200,z200,AW_Gun\WObj:=wobj0;

    PROC main()
    SETDO do1,LOW;
    CASE 50027:
    SETDO do1,HIGH;

    But I see that ERRNO is 0 although Event Log shows me this Error:
    "50027: Joint Out of Range
    Position for ROB_1 joint rob1_4 is out of working range.
    Use the joystick to move the joint into its working range."

    Maybe this error number is not stored in ERRNO variable ?

    Thank you for your reply. I tried to use example from Technical reference manual, where are used both RAISE and BookErrNo functions but it doesn't work for me. Using BookErrNo i always get the same value (if error occured or not). In addition when program pointer move to RAISE
    then i get Error: "40229: Execution error".

    I need to check if error occured cyclic. Adding this in my Path_10 caused, that RAISE was set in the end of MoveL function (thanks to z200) once. Does RAPID have a function to read system error number directly? Check cyclis if errors occurs. If occured write errornum to variable. Something like this.

    I registered on this forum because I am beginner in Robot Studio and RAPID language and I have a question.

    I need to get a number of current robot error from IRC5 controller (like emergency stopped, axis error etc.) and write this value to integer type variable. Then I have to send this value to PLC via PROFINET.

    My questions are:
    1) How can i read, that robot is in Error state - which variable from IRC5 controller give us this information?
    2) How to read actual error number (Events List code) in every step of program ?

    I wanted to get "Position outside reach (50436)" error. The X-axis value of Target_30 is that Robot can't reach this point. I tried to do this in simulation mode with "ERROR" instruction but It didn't work. After "ERROR" instruction I write ERRNO to num type variable "ErrorNb" and then SETDO if this value is higher than 0. Below I put my code from RAPID.

    MODULE Module1
    VAR num ErrorNb; !value to write ERRNO
    PROC Path_10()
    MoveL Target_10,v1000,z100,AW_Gun\WObj:=wobj0;
    MoveL Target_20,v1000,z100,AW_Gun\WObj:=wobj0;
    MoveL Target_30,v100,z200,AW_Gun\WObj:=wobj0;

    PROC main()
    ErrorNb := ERRNO;
    IF ErrorNb > 0 THEN
    SETDO do_Error,HIGH;

Advertising from our partners