Posts by davidina

    Though there is no information about the robot and the controller and type of message, depending on if you have message library, I guess you would like to consider using MsgState to display which message and CLEAR_KRLMSG to clear/"acknowledge" the specific message. Something like:

    ;Printing the specific message with index
    MsgState(nHandle[index],"Message to display here","Info")
    ;Clearing the specific message
    DEF RobotManualMoved ()
    bRobotJogged= TRUE ; set to true when someone moved in Teach mode
    bRobotJogged= FALSE ; Reset when robot is in Home position

    Call RobotManualMoved () in sps.sub

    Depending on the structure of your program, if you properly defined it in the main program such that the robot should first be moved back Home after someone has switched to Teach Mode and jogged the robot then using the above variable $IN_HOME to reset bRobotJogged should do it. Otherwise the variable should be reset in a suitable and safe location in the program where the robot can then be started in automatic.

    $IN_HOME is set to True when XHOME is completed (with the condition $H_POS=XHOME)

    There have been a lot of redundant questions about Interrupt handling lately, so I decided to make a heavily-commented example file that should (Hopefully!) point people with the same questions to as a starting point.

    I don't have a KRC handy to test this on, though, so I can't guarantee I haven't missed something subtle here.

    DEF InterruptExample ( )

    Thank you for this work!

    My first VKRC is 4 so I am not completely sure about the old KeyFiles contents. You can only switch to Expert when the "ExternalUserList" configuration file in the KeyFiles is not modified and the file not renamed. They should also be in the first accessible level in the disk. ../ KeyFiles/Key_2.txt does not contain the configuration information. Does your KeyFile contain any ExternalUserList? Did you obtain the right files from the previous owner?

    I am not sure what you meant by changing VKRC1 to KRC1 because they are different controllers.

    Can we change all settings from Safe Operation with the login of Admin, or do we need to login as 'Safety Maintenance'?

    No. This is unfortunately not possible. Each user has certain rights, and safety is strictly restricted to those who have the required qualification.

    "kuka" is the default passport for all user until this is changed during or after commissioning. After every safety adjustment the proper protocol is done with the signatures of the responsible people.

    Since the change is required by the customer I believe the customer must provide the actual login details to you for such changes.

    If you just want to print a message on the KCP you might want to use just msgnotify:

    int E
    MsgNotify("The current value is %1 ",, E)

    The disadvantage here is, the message printed can not be cleared from by a program, but can be acknowledged/cleared by users. Message not cleared will populate the message screen on the panel.

    If this is not your case, if you search in this forum there are several other examples to suit you need or take a closer look at the subprograms in the KUKA message library MsgLib.

    What do you mean by "controller can't recognize this variable to reset it"? Can you change the value of the variable usercont directly from KCP when no robot program is active? If no, then I believe the problem might be as Panic Mode said, or if yes, you put that condition in a wrong place in the submit interpreter.

    Where did you write the IF condition in the sps.sub? It must be written in the loop section (not the initialization section). Everything is run only once at the beginning whenever sps.sub becomes active and then enters the loop.

    Hi SkyeFire,

    I had the same problem last week and it cost me hours to figure out the Ping problem. I wish I had read your post earlier. I used different intervals but I could not find the fault. I had to completely remove it to get the system function again. Does anyone know how the Ping option work with EKI, or is there any material I can read to find out?

    This is a very good idea, Panic Mode. Thank you. I had wanted to make use of the Multisubmit on our test cell for a while now but our versions did not permit it. I will go through those steps and upgrade. While waiting for the approval to do so, I would like to ask if there is any difference between using MultiSubmit or calling various .sub files from the main sps.sub.

    Oh my bad, I forgot to mention: KRC4 and KSS 8.3.2

    I used EKI for the communication. Confirmation if each operation is complete was implemented in each state where necessary and many more. Having many LOC I tried to remove ones that are not particularly related to my question. SendString and RecvString routines were included to show where the string was later used in the code and the execution never reached any of them when I began using a variable and Msgnotify() to follow it. In this case I could only check the content of strBuf[] after the line SWRITE executed, and it was empty. If it is done hard-coded way by writing a dummy string directly in the routines it worked. So I thought the problem is the SWRITE line.
    I can not use Multisubmit because the version does not meet the minimum requirement for it. I will surely try what you guys already suggested on Monday. Thanks a lot.

    I needed to send and receive strings between robot and Keyence 3D vision sensor for Bin-Picking. I often send the trigger scan signal as soon as robot is outside the container area so that sensor controller has enough time for the calculation of the next part(s) to pick during the time robot is doing other jobs like placing in the machine etc. When robot is back in Home position it will request the calculated next pick-positions from sensor.
    This time because of a very small cycle time robot needs to obtain the next data from vision sensor as soon as possible in advance for background calculation during other jobs. I have created a state machine in a .sub file for background communication using submit interpreter.
    Here is my problem:
    Each time a string should be written in buffer strBuf[] but the buffer is always empty after the command is run.

    Running the same program with robot interpreter works fine but at cost of time(up to 2.5 Sec), but by using a submit interpreter:

    My first thought is, it needed more time to perform this than cyclic time submit interpreter allows so no string is received after executing KeySendString(strBuf[]). Is there a way I can get this done correctly?

    My usual approach is to plot out the fence lines and corners on paper or CAD, relative to $WORLD, and create my Cell Perimeter and/or Workspaces from that. Then, test in T1 by attempting to run into the fence or breach a WorkSpace, and making adjustments if the zone boundaries are too tight or too lenient. That part's not too hard.

    I also use this classical approach, but sometimes the safety/working zones in some cells are complex, so much time is need to everything setup. In such case I will recommend defining these zones with Process Simulate software if you are familiar with and have access to it. You can visualize and test everything in simulation (apart from velocity and acceleration). It is very easy to export the parameters into robot controller after. With this method you dont have to adjust the zones each time.

    But where I keep having trouble is the velocity reductions. I often have setups that work fine in T1, with what seems like plenty of margin, but will show unexpected slowdowns near the boundaries that only show up in Auto. And the entire process of making a change, waiting for the robot to reboot, then testing in Auto again gets cumbersome.

    With the velocity, testing the zones in Auto/Ext modes and T1 are not completely the same, especially if you have more PTP motions close to the boundaries.Variables to consider in the custom.dat are $SR_VEL_RED=TRUE and $SR_WORKSPACE_RED. The variables can be used to activate/deactivate the unexpected-slowdowns when approaching the zones.

    The main thing I'm interested in is this: is the a better way to predict the "slow zones" in advance? The SafeOp documentation talks about this, but only in the most general terms. To avoid the slowest parts of the trial-and error way of testing? Heck, if I could just get a warning when the robot is in T1, it would make adjusting the boundaries much faster. Has anyone figured out a more clever testing method, or even a better "rule of thumb" for this?

    One way is to configure some $WORKSPACE[ ] monitoring in custom.dat to monitor where the robot is in order to predict in advance when robot in approaching the "slow zones". You will need to define those boxes close to where you want to predict. The combination of those box-zone monitoring and program-override variable $OV_PRO has done the job for me in the past.

    Remote connection is not possible in this case as the communication, IP address setting are not ok. The usual way is to check with monitor. The monitor must display something. Has this controller functioned before? Have you recently changed a component in the cabinet?

    This is well covered in KUKA training program. There is also a set of tutorials which KUKA has prepared for beginners and this is included in it. On the KUKA download center you can get this .zip file named KUKA.WorkVisual_V4.0_Videotutorials. The sample program include basic palletizing.

    Thank you guys. Load data is correctly set. $ADVANCE is left as default. The robot is KR 180 R2500 extra (with KRC4 and KSS 8.3.2) and not Absolute accuracy robot. There is no message concerning the movement. The positions are calculated but the calculated positions are already assigned in the arrays before the subprogram containing the circular motions is called. At up to 50% speed in Auto Mode the movement is smooth, but it changes as the speed increases.

    I already tried to use CONTINUE before the next loop and it did not help.
    When I get to the cell today I will try to trace with $PRO_IP if it helps

    Using the Spline is like more Centrifugal force is applied to robot perpendicular to the path of inertia before returning to the circular path (around 1.5 - 2mm deviation).

    @Funibi can you please explain what you meant by circ angle instead of approximation?