1. Home
    1. Dashboard
    2. Search
  2. Forum
    1. Unresolved Threads
    2. Members
      1. Recent Activities
      2. Users Online
      3. Team Members
      4. Search Members
      5. Trophys
  3. Articles
  4. Blog
  5. Videos
  6. Jobs
  7. Shop
    1. Orders
  • Login or register
  • Search
Everywhere
  • Everywhere
  • Articles
  • Pages
  • Forum
  • Blog Articles
  • Products
  • More Options
  1. Robotforum - Support and discussion community for industrial robots and cobots
  2. Members
  3. mil3k

Posts by mil3k

  • Height measurement

    • mil3k
    • June 23, 2025 at 6:07 PM

    I think you should try 800mm above the pBagPos1 and then start searching on the way down.

    Code
        movel(pHome,tPartTool,mTravelFast)
        					movej(appro(pPickPartFromTable,trAbovePickPart[0]),tPartTool,mTravelFast[2])
        movel(pPickPartFromTable,tPartTool,mPickFast[1])
        waitEndMove()
      	//
        // Turn on vacuum
        oPickPartVacON=true
        //
        setMoveId(10100)
        if (bLastPosPickedPart==true)
          movel(pLastPickedPart,tPartTool,mPickPart)
        endIf
        waitEndMove()
    
        do
          // Move down 1mm until find plate or get minimum height
          if l_bPickFailed==true
            if (l_nNumberOfFails<2)
              oPickPartVacON=true
            endIf
            movel(LP_pLastPickPOS,tPartTool,mPickPart)
            waitEndMove()
          else
            while (iPickPartVacON==false and iPartInGripper==false)
              link(LP_pLastPickPOS,fTtable)
              LP_pLastPickPOS=here(tPartTool,fTtable)
              LP_pLastPickPOS.trsf.z=LP_pLastPickPOS.trsf.z-0.5
              // Check if Z limit *TO DO change z minimum height, table height!
              if LP_pLastPickPOS.trsf.z<-415
                // *TO DO, what to do when there is no parts
                // replace line below with recovery code
                wait(true)
              else
                movel(LP_pLastPickPOS,tPartTool,mPickPart)
              endIf
              waitEndMove()
              delay(0)
            endWhile
          endIf
    
          //Save the position of last picked plate and set the flag
          pLastPickedPart=here(tPartTool,world)
          bLastPosPickedPart=true
    
          // Press down to compress vacuum cup
          LP_pLastPickPOS=here(tPartTool,fTtable)
          LP_pLastPickPOS.trsf.z=LP_pLastPickPOS.trsf.z-0.49
          movel(LP_pLastPickPOS,tPartTool,mPickPart)
          waitEndMove()
    
          // Wait for vaccum ON signal
          l_bPartVacOk=watch(iPickPartVacON==true,3)
          l_bPickFailed=false
          //
          movel(appro(pPickPartFromTable,trAbovePickPart[1]),tPartTool,mTravelSlow[0])
          waitEndMove()
          if (!iPickPartVacON)
            // Vacuum fail
            popUpMsg("Plate vac fail",2)
            // *TO DO, what should the robot do if it fails?
            l_bPickFailed=true
            oPickPartVacON=false
    
            l_nNumberOfFails=l_nNumberOfFails+1
            //Do two attempts to pick the part from the jig. Send an error when failed.
            if (l_nNumberOfFails>=2)
              do_REQ_Robot_Error=true
              wait(di_ACK_Robot_Error==true)
              do_REQ_Robot_Error=false
              stopMove()
              taskSuspend("MainTask")
            endIf
          endIf
    
          //
        until l_bPickFailed==false
    Display More

    I use this snippet for many jobs when I use vacuum generator feedback signal to detect the part.


    As for the line 80: trBag is a transformation ARRAY containing 6 values. In your calculations you ask robot to deduct from single value of aiDistSensor an array of six values. You should point to the 3rd element of trBag[3]

    Quote from Simple

    Does Stäubli has some thing like: ShiftFrame.Z like Kuka? Does it have some like getPosition so i can minus that z value with my distance sensor value? What would be the right way to do this?

    VAL3 is more powerful and modern than KRL even thou it is older language than KRL. It uses command HERE to save the current position. You can use l_pCurrentPOS=here(tTool,fFrame) to save the current position and than change it by pointing to the element you want to change l_pCuurentPOS.z=50.0 or you can approach the point by using transformation:

    Code
    movej(appro(l_pCurrentPOS,trApproachArray[0]),tPart,mTravelFast[2])
    movel(appro(l_pCurrentPOS,trApproachArray[1]),tPart,mTravelFast[0])
    movej(appro(l_pCurrentPOS,trApproachArray[2]),tPart,mTravelFast[1])
    movej(appro(l_pCurrentPOS,trApproachArray[3]),tPart,mTravelFast[5])
    movel(pPickPartFromTable,tPartTool,mTravelFast[3])
  • Stäubli IO configuration and mapping

    • mil3k
    • June 23, 2025 at 2:08 PM

    The pdf is general CS9 safery manual. The ZIP file is something called uniVALpi, and there is a TIA Portal project as well as a manual. It may help you to understand.

    I believe that I downloaded it from Staubli's page few years ago, but never use it as for the safety stuff I asked control engineer to deal with it. :winking_face:

    Files

    CS9 Safety Manual.PDF 3.97 MB – 0 Downloads software-20240104_082349.zip 3.29 MB – 0 Downloads
  • How to see the program execution pointer

    • mil3k
    • June 23, 2025 at 1:54 PM

    You can't see it, if you don't run it in step by step mode. In Auto program stops only at Break Points. All programs I did with the SRS and online debugging, but if I remember correctly there is an option to set a Break Points on the teach pendant's editor.

  • Stäubli IO configuration and mapping

    • mil3k
    • June 23, 2025 at 1:29 PM
    Quote from DJoseph

    Is there any field available in Staubli Robot to enter F Destination Address based on the configuration in TIA Portal ?

    Keep your PLC jargon to PLC forums. :winking_face_with_tongue: Explain in plain English what exactly are you talking about.

  • Czy mogę pominąć część linijek programu tak żeby robot jechał dalej ale wykonywał dane warunki

    • mil3k
    • May 15, 2025 at 1:35 PM

    Pewny jesteś, że pominięcie czekania na te sygnały nie spowoduje kolizji?

    Co się stanie kiedy wypychacz nie zdąży osiągnąć pozycji DI125 "Wypychacz tył" a robot wyśle sygnał forma wolna DO121 i zamknij formę DO122. Czy PLC nie przekaże tego sygnału dalej i nie wyśle czegoś do wnętrza formy kiedy tam nadal jest wypychacz w ruchu?

    Ja w takich wypadkach robię subprogram z dwoma alternatywami, który wywołuję z parametrem, czekania na sygnał zwrotny lub pominięciem ich.

  • Error KSS36014 after installation at client site.

    • mil3k
    • May 11, 2025 at 11:32 AM

    Hi All,

    The background

    From what I was told the cell was originally build and setup at KUKA Systems premises, pass FAT and sent to the client. It was on client side of the contract to install it on site, carry on the commissioning and SAT. The cell was installed but never fully commissioned. The access was locked for next 18 months due to construction of the rest of the site. I was asked by the control engineer, who design the whole system to support the client's commissioning team to finish the installation and run SAT.

    The cell: KR270 R2700 ultra with KRC4 (KSS 8.5.8) and turntable set as external rotary axis E1, made of two servos (ME-60_110_30_S0 connected to KPP2-40) set in master-slave setup. Servos are connected to the gear train with a clutch in the middle.

    After power up and fix all errors related to mistakes in wiring the site I stuck with below set of errors on the Smartpad:

    1. KSS36014 - Synchronization run, master-slave position deviation E1 active
    2. KSS36001 - Master-slave position deviation {Slave drive}
    3. KSS26024 - Ackn. Max. following error exceeded (E1,S1)

    Unfortunately I couldn't find any solutions in Kuka Expert Pro database for the first two errors. I hope that during the installation servos were mechanically misalign from the factory alignment, so some kind of setting up process could fix it and KSS26024 is just a result of the first two. When I tried to jog the E1 on the Smartpad in T1 and watched the actual position with motor and slave boxes selected, I saw that the value of the slave motor angle changes but the value on the master almost didn't change at all.

    Display Spoiler

    I was told, the installation (mechanical and electrical) was done by construction workers under supervision of client's commissioning team which non has any experience in industrial automation. Half of the buried in walls cabling for this cell was installed wrong direction.

    It would be much appreciated if you guys could share some knowledge how to do the synchronization or point me to a manual where I can find more information about the subject.

    Update: I did a fault finding and found out that each clutch engage turntable at different angles. Looks like clutches are mechanically misaligned.

  • MotoSimEG-VRC to Visual Components 4.10 connectivity plugin.

    • mil3k
    • April 6, 2025 at 8:27 PM

    The problem was solved by running MotoSim as an Administrator. I never run it in that mode and MotoSim didn't create a key: HKEY_CLASSES_ROOT\MotoSimEG_VCR.Application in the windows registry. There was only: HKEY_CLASSES_ROOT\MotoSimEG_VCR.Documents, before I run it as and Administrator.

    Cause: Missing entry in Windows Register: HKEY_CLASSES_ROOT\MotoSimEG_VCR.Application
    Solution: Run MotoSim at least once as an administrator.

    Display Spoiler
    1. Insert the hardware key of MotoSimEG-VRC effective.
    2. Right-Click on the MotoSimEG-VRC icon and choose “Run this program as an Administrator”.
    3. Registy registration is automatically performed at a start-up, and the following key is created in the registry: HKEY_CLASSES_ROOT\MotoSimEG_VCR.Application

    Install the plug-in:

    Display Spoiler
    1. Run VC-MotoSim-Installer-x64.bat. This action should copy files to the correct location and return an error. That’s fine
    2. Right-click at VC-MotoSim-Installer-x64 and choose “Run this program as an Administrator”. This time registration should be successful as per video.


    Note: In the Visual Components Premium 4.10 OLP Yaskawa Pulse Solver is no longer in the Postprocesses tab as per video, but in the next tab: Tools

  • MotoSimEG-VRC to Visual Components 4.10 connectivity plugin.

    • mil3k
    • April 3, 2025 at 2:15 PM

    Did anyone manage to connect MotoSim to Visual Components 4.10 by use of VC connectivity plugin?

    I followed this video: https://youtu.be/eW7q9kPp5es from the VC Academy but the connectivity tab didn't show on my MotoSim2023SP1 at Win 11PRO 24H2. I repeat the same process on another PC with Win7Pro with MotoSim2019SP1 with the same result. I suppose the problem is wrong path to the plugin folder.

  • Where to find IO numbers, e.g. ext. input, int. mem, int. contact

    • mil3k
    • March 13, 2025 at 1:01 PM

    Look at motoman.com for "DX200 Options Instructions for concurrent I/O", manual no.: RE-CKI-A465 also known under part number 165294-1CD

  • Can anyone identify the model of the robot? And a few questions...

    • mil3k
    • March 10, 2025 at 10:42 PM

    Mate, don't start every sentence with KUKA. These guys over here are more patient than PanicMode from KUKA corner of this forum, but you may piss them off and they won't help you.
    It's Yaskawa and everything yo know about KUKA wont work over here. Motoman robots don't run on industrial PC with Windows or Linux but on dedicated hardware with it's own firmware.

    The main way to program these robots is a teach pendant. So, find the missing one, read the manuals, befriend your local Yaskawa representative to help you fix it... And enjoy of fun with this little MH20.

  • Issue with Context Menu Button

    • mil3k
    • March 10, 2025 at 10:13 PM

    Why do you want to edit program on the pendant? Every time I will choose a pain in the ass than edit on Staubli's PT. From my experience it is second worst TP, just before Mitsubishi R32.

    You have a SRS use it to edit the program and then debug on the target. It means that you will edit program on the PC and run it on the robot. After you finish the program you may transfer it to the robots memory and run it from the TP.

  • Stäubli IO configuration and mapping

    • mil3k
    • March 10, 2025 at 9:56 PM

    Here is a white paper document form Staubli explaining how to setup different protocol fieldbus.

    Files

    CS9 FIELDBUS CONFIGURATION_TSS000000104C.pdf 6.57 MB – 52 Downloads
  • Vision systems for dimensional or feature checks?

    • mil3k
    • March 10, 2025 at 9:38 PM

    Bobsmith Did you concert to use vision sensors like Keyence IV series? It is simplified system which you teach with a nominal feature and then every time it detects the feature you have high signal on DI or network protocol.

  • Help with transfering Variable data between jobs

    • mil3k
    • January 30, 2025 at 10:54 AM
    Quote

    GETPOS PX010 STEP#(1) " I have PX010 defined in the variables table. This step is meant to copy current position of the turntable & Robot and save it into PX010.

    PX010 will store robot axes in P010 and station axes in EX010. When you call the move you need to use both of them. Here is an example with local position and external axis position variables. In this case we used aliases (LP_, LBP_):
    MOVL LP_RobSafeApp LBP_TmpRailPos V=1600.0 PL=8 ACC=20

    You didn't show the code inside the rotation-180 job. The error may be, if you have something like this:

    +MOVJ E000 VJ=5 " this is where the table should rotate for 180° "

    instead of that:

    +MOVJ E010 VJ=5 " this is where the table should rotate for 180° "

    inside the called job.

  • Applying Vision Offsets with a KUKA Robot

    • mil3k
    • January 29, 2025 at 10:48 PM

    Why do you want to use PLC in the middle between Keyence (which one?) and robot? Ask your Keyence support for all manuals for your vision system and read them. Keyence vision systems CV-X and XG-X both can control robots as slaves as long as you run provided solution.

    I hope your camera is not IV series, as these are not vision systems but vision sensors and can not give you coordinates.

  • KUKA.ConveyorTech DLIN movement does not perform CONT with the next movement.

    • mil3k
    • January 29, 2025 at 10:24 PM

    Go to Variables/Single type $ADVANCE to see how many steps ahead controller read. Then run the program at slow speed and watch if this parameter is not changed to 0.

    Learn the command CONTINUE and how to use it.


    btw.: Before panic mode tell you off, paste a snippet of your program so we can understand better. :winking_face:

  • JC Creative Tech - second hand robots from China.

    • mil3k
    • November 4, 2024 at 8:53 PM

    Has anyone bought any robots from this company? https://www.jcctauto.com

    I'm wondering, if is legit company, but I don't have any experience with direct import from China to the UK industrial equipment.

  • Melfa Basic VI - If...Then...Elseif...Endif Syntax Help / Examples

    • mil3k
    • May 30, 2024 at 5:11 PM

    Why don't you read whole byte from in8 and use that number as a CASE number in SELECT CASE command?


    M_In8()

    [Function]

    Returns the value of the input signal.

    M_In: Returns a bit.

    M_Inb or M_In8: Returns a byte (8 bits).

    M_Inw or M_In16: Returns a word (16 bits).


    [Format]

    Example) <Numeric Variable>=M_In(<Equation>)

    Example) <Numeric Variable>=M_Inb(<Equation>) or M_In8(<Equation>)

    Example) <Numeric Variable>=M_Inw(<Equation>) or M_In16(<Equation>)


    [Terminology]

    <Numeric Variable> Specifies the numerical variable to assign.

    <Equation> Enter the input signal number.

    (1)CR800-R/Q series

    10000 to 18191: Multi-CPU share device

    716 to 731: Multi-hand input.

    900 to 907: Hand input.

    (2)CR800-D series

    0 to 255: Standard remote inputs.

    716 to 731: Multi-hand input.

    900 to 907: Hand input.

    2000 to 5071: Input signal of PROFIBUS.

    6000 to 8047: Remote input for CC-Link.


    [Reference Program]

    1 M1%=M_In(0) ' M1 will contain the value of the input signal 0 (1 or 0).

    2 M2%=M_Inb(0) ' M2 will contain the 8-bit information starting from input signal 0.

    3 M3%=M_Inb(3) And &H7 ' M3 will contain the 3-bit information starting from input signal 3.

    4 M4%=M_Inw(5) ' M4 will contain the 16-bit information starting from input signal 5.


    [Explanation]

    (1) Returns the status of the input signal.

    (2) M_Inb/M_In8 and M_Inw/M_In16 will return 8- or 16-bit information starting from the specified number.

    (3) Although the signal number can be as large as 32767, only the signal numbers with corresponding hardware will return a valid value. Value for a signal number without corresponding hardware is set as undefined.

    (4) This variable only reads the data.(4) This variable only reads the data.

    Select Case

    [Function]

    Executes one of multiple statement blocks according to the condition expression value.


    [Format]

    Select[] <Condition>

    Case[] <Expression>

    [ <Process> ]

    Break

    Case[] <Expression>

    [ <Process> ]

    Break

    :

    Default

    [ <Process> ]

    Break

    End[] Select

    [Terminology]

    <Condition> Describe a numeric operation expression.

    <Expression> Describe an expression using the following format. The type must be the same as the condition expression.
    *IS <Comparison operator> <Constant>
    *<Constant>
    *<Constant>TO<Constant>

    <Process> Writes any instruction (other than the GoToGoTo instruction) provided by MELFA-BASIC VI.


    [Reference Program]

    1 Select MCNT

    2 M1=10 ' This line is not executed

    3 Case Is <= 10 ' MCNT <=10

    4 Mov P1

    5 Break

    6 Case 11 'MCNT=11 OR MCNT = 12

    6 Case 12

    7 Mov P2

    8 Break

    9 Case 13 To 18 '13 <= MCNT <=18

    10 Mov P4

    11 Break

    12 Default ' Other than the above.

    13 M_Out(10)=1

    14 Break

    15 End Select


    [Explanation]

    1. If the condition matches one of the Case items, the process will be executed until the next Case, Default or End Select. If the case does not match with any of the Case items but Default is described, that block will be executed.

    2. If there is no Default, the program will jump to the step after End Select without processing.

    3. The Select Case and End Select statements must always correspond. If a GoToGoTo instruction forces the program to jump out from a Case block of the Select Case statement, the free memory available for control structure (stack memory) decreases. Thus, if a program is executed continuously, an error will eventually occur.

    4. If an End Select statement that does not correspond to Select Case is executed, an execution error will occur.

    5. It is possible to write While - WEndWhile-WEnd and For-Next within a Case block.

    6. Use "Case IS", when using the comparison operators (<, =, >, etc.) for the "<Expression>".

    Code
    "Read value from input 8 to 15
    
    mCase=M_In8(8)
    
    'Use read value to 
    
    Select mCase
    
    case 8
    
    'Box1 routine 
    
    break
    
    case 16
    
    'Box2 routine 
    
    break
    
    case 32
    
    'Box3 routine 
    
    break
    
    default
    
    'Bloody hell mate! Something went wrong... CALL FOR HELP :)
    
    break
    
    End Select
    Display More
  • Cell with a large number of P Variables - YRC1000

    • mil3k
    • February 23, 2024 at 12:50 AM

    csabizalan I was going to suggest very similar solution.

    Woebot You can create a job exactly as csabizalan suggested and use it as a storage of positions which you can call from your main job with a parameter pointing to the step# with position you are interested.

    Let me use csabizalan's example:

    //name:PointJob

    0000 NOP

    0001 Jump *LABEL

    0002

    0003 0001 MOVJ VJ=100.00 PL=0

    0004

    0005 *LABEL

    0006 GETARG LI000 IARG#(1) //Store first argument to first local integer variable

    0007 GETPOS LPX000 STEP#(LI000)

    0008 CNVRT PX000 LPX000 UF#(1) TL#(1) //You can use local variable instead of (1) and control with call parameters: 2 and 3

    0009 END

    From the top bar turn on display step number for better visibility. You can have up to 999 steps.

    Create at least one local Integer variable to make GETARG# instruction available in the Instruction List and to store the call parameter.

    Store your positions between Jump*LABEL and *LABEL, (I suggest to turn on line comment for each point).

    Create main job where you will call PointsJob.jbl from:

    Switch I000 (or Alias)

    CASE 1

    SET LI000 1

    CASE 2

    SET LI000 2 //Step# were the point is stored

    SET LI001 1 //UF# for converting to

    ...

    DEFAULT

    MSG: Something went wrong, mate!

    PAUSE

    ENDSWITCH

    CALL JOB: PointJob (LI000) or CALL JOB: PointJob (LI000,LI001) //You can use up to 8 arguments.

    Unfortunately, the number of steps and they order must be under strict control and can not be removed without messing steps with higher numbers. To make life easier I suggest to use as step 1 HOME position and use 1 as call argument set in CASE which point you want to delete.

  • Can I connect external input directly to external output by ladder editor?

    • mil3k
    • February 22, 2024 at 11:00 PM

    In other words, when you open CIO.PRG and search for the input you want to use check if it is linked with command STR or GSTR:

    STR #20010

    OUT #30010

    or

    GSTR #20010

    GOUT #30010

    The first example links one bit of EXT input #20010 to EXT output #30010

    The second one links one byte () of EXT inputs #20010 to #20017 to EXT output #30010 to #30017

    Bits #xxxx8 and xxxx9 doesn't exist in Yaskawa robots, so the next group (byte) starts from #xxx20

    There is BMOV instruction on a top of that, to link bigger number of I/O in one go.

    STR #70017

    BMOV #20010,297,#30010

    Auxiliary relay #70017 is used by system as a marker of "CONTROL POWER ON COMPLETED (NORMALITY ON)". System powered up without problems.

    BMOV instruction is an output and something must be used as an input. #70017 in the example it is used for that purpose.

    So the example means:

    "If Control Power On is completed without problems then link (map) 297 consecutive bytes of external inputs from #20010 to consecutive external outputs starting from #30010"

Advertising from our partners

IRBCAM
Robotics Channel
Robotics Training
Advertise in robotics
Advertise in Robotics
Advertise in Robotics
  1. Privacy Policy
  2. Legal Notice
Powered by WoltLab Suite™
As a registered Member:
* You will see no Google advertising
* You can translate posts into your local language
* You can ask questions or help the community with your knowledge
* You can thank the authors for their help
* You can receive notifications of replies or new topics on request
* We do not sell your data - we promise

JOIN OUR GREAT ROBOTICS COMMUNITY.
Don’t have an account yet? Register yourself now and be a part of our community!
Register Yourself Lost Password
Robotforum - Support and discussion community for industrial robots and cobots in the WSC-Connect App on Google Play
Robotforum - Support and discussion community for industrial robots and cobots in the WSC-Connect App on the App Store
Download