Posts by dhindhimathai

    Hi all dears,

    I hope you all are doing well.

    At our company, we are experiencing a problem with our Kawasaki RS013N. We got a couple of times the following error: Torque of motor is over limit. JT5

    As a matter of fact, the robot does not seem precise anymore. I would have the following doubts:

    - Is it possible that we lost calibration on the JT5 joint?

    - Is there a clear method that you guys know to detect that the robot needs joint re-zeroing?

    - If so, what is the safest method for recalibration?

    Any help would be much appreciated.

    Thank you so much in advance.


    Hi all,

    I'm stuck with a quite curios problem and I was not able to find a solution for it yet.

    Suppose the main program is executing a motion command (JMOVE or LMOVE for example), and the E-Stop is triggered. This last motion is resumed when the emergency is cleared and the motor power (and cycle) are turned on.

    I see that in my program it is not safe to use from a PC program MC EXECUTE NEXT since it's not certain which instruction will be skipped. I tried to use BREAK, but I see that when the robot is not actually moving, BREAK does not skip the current instruction.

    Is there a way to cancel a motion instruction while the robot is not moving (the program points at the motion instruction but the robot is not moving (like in HOLD), hence before the motors turn on).

    Alternatively, is there a way to understand if the program being executed is on hold at a motion instruction? In this way, I can safely do MC EXECUTE NEXT.

    Thank you so much in advance.

    Hi all! :smiling_face:

    Hope you all are doing great.

    I was wondering what is the proper way to control the deceleration at which a HOLD command stops the robot. Also, when restarting the program with CONTINUE, the NEXT parameter can help reprise operation from the successive instruction, but is there a way to already specify it in the HOLD command, for example..?

    Thank you so much in advance for your awesome work. :smiling_face:


    I apologize for carelessly phrasing the question. It is indeed important to be careful when discussing safety.

    It's of paramount importance, in industrial robotics, to never turn on motor power (especially automatically) when this might be the reason for danger, especially to humans. For example, it's a good practice to perform such an automatic "motor on" only when all safety checks have been passed and after ensuring that the robot is in a predictable initial condition to start operation from and only if all human operators are outside the robotic self and at a safety distance.

    Thank you so much for pointing out this issue.

    Hi all,

    I'm here again for help from this awesome community.

    I'm trying to write an automatic recovery procedure for a Kawasaki RS013N robot. When a user presses the emergency stop, a PC program checks if the same is released and if so, it executes a routine to turn on the motors again and start the cycle.

    WARNING: Automatically turning on the motor in an industrial robotics setting should be done with all due safety and after ensuring safe working conditions, especially for the human operators that might be in the robotic cell: e.g., no human operator should be in the workspace of the robot when the motor is turned on!

    I have been looking at the manuals for a day now and cannot find a proper way to do it. I found the SWITCH command to see if the motor power is off with POWER or if an ERROR is ongoing... Also, the ZPOWER command to turn on/off the motors. Even though I am not able to use ZPOWER in my robot programs. It gives the errors "Cannot use in current mode." or "Cannot use in Robot Program.".

    I'm very confused and it is tiring to look at the manuals without proper explanations. I would be grateful if someone could explain to me the suggested procedures for the following:

    - How to catch from a program, if E-Stop is pressed or released.

    - How to restart automatically a program that has been stopped... Hence, switch on the motors and restart the cycle.

    Thank you so much in advance.

    Hi all,

    Once again I'm here to ask for your help to solve a problem regarding Kawasaki robots and KROSET Lite simulator.

    I have a Main program in Kawasaki Robotics IDE that runs a communication thread and then enters a while loop to execute commands. You guys from this forum ( kwakisaki) have helped me write this and it works perfectly! :smiling_face: The code is roughly as follows:

    My question is more regarding KROSET and KIDE.

    I do the following at the beginning from KIDE (see the attached figure 1.png):

    1) I connect to the Kawasaki robot in KROSET simulation.

    2) I load the program onto the robot.

    3) I execute the program. Then, I can communicate and send commands to the robot in the simulation.

    However, how do I stop the simulation properly? How can I stop the program running on the robot simulation in KROSET?

    I tried to kill the background and foreground processes using the buttons highlighted in 2.png in the attachments... But, I'm sure there is a proper way to terminate the main program and the thread run from it.

    Thank you so much in advance for you help.

    Dear all,

    Once again, another difficult problem to solve... :face_with_rolling_eyes:

    I'm trying to communicate over TCP/IP with the robot. Currently, I'm using a Windows PC with KROSET (Robot-Side) and an Ubuntu Linux PC from which I am starting a TCP/IP client.

    On the Robot-Side, I am using the following function found in the Kawasaki TCP/IP manual to recieve a string data.

    I am using this function twice and subsequently to recieve two messages: a header and a command. Let's say that the header has 19 characters and the command has 85. So, I am doing the following in my communication program:

    From the client side, I have a python script sending the data all together, hence the header and command are sent in a single string.

    On the second CALL recv, I am receiving the error **ERROR: Something went wrong recieving the message.** because in recv() the TCP_RECV returns rret < 0.

    The error code in rret = -34024. What is this error all about?

    I tried to cross-check the string that I am sending and other possible bugs on the client side... With just one recv() in the Communication program, I don't get any error!

    Please help me guys. Thanks in advance. :smiling_face:

    Hi kwakisaki

    Again, great and complete answer. I fully understood.

    Regarding your last question: the idea is to have two "threads": one for communication (send robot status and recieve commands) and a second to execute commands from a queue.

    So, at this point the idea would be to do the following: 1) Start the main and prepare necessary variables and initialize communication, 2) PCEXECUTE the communication "thread", and 3) after that in the main, use a WHILE loop execute commands. Something like this:

    I implemented a binary semaphore on my own to manage the queue properly. Hope this works.

    Thank you again for all your help. :smiling_face:

    Dear guys,

    I'm coming to you again with another doubt.

    I'm using KROSET to simulate a RS013N and KIDE to code programs in AS language.

    When I try to use the instrution EXECUTE to call a program from my Main, it gives me the error P0111: Cannot use this command/instruction in current mode. This happens when I try to send the AS file to the robot (simulation).

    My code looks something like this:

    Basically, I am trying to run the program Communication and then enter the WHILE after it.

    I assume it is something that has to do with the mode that has been set in KROSET. I have turned TEACH/REPEAT to REPEAT and also turned on the MOTOR...

    Is there something I am missing?

    Thank you so much again in advance.

    Hi kwakisaki

    Thank you very much as usual for your prompt answer.

    I didn't actually undestand how to get a sub array. What you seem to show me is getting individual elements of an array, right?

    For example, if I have an array with 5 elements and I want to create another array containing elements from 3 to 5, how can I do?

    If I do array[2:4] it gives me P0119: Incorrect array suffix error.

    Thanks again in advance.

    Hi all,

    I have been stuck on this for some time now. It seems to be a very trivial thing but can't find a solution to it.

    How do I extract a subarray from an array?

    Suppose I have a two-dimensional array called array_var, how do I get the subarray array_var[0:3,1:2]?

    I tried to go through the AS manual but could not find anything...

    Thank you in advance for your help.

    Thank you so much for your detailed answer kwakisaki! :smiling_face:

    I got your point and I think I will use real variables instead of integers. So, something like this would work:

    $packet_msg = $ENCODE (/I3, .packet_size)

    And, it indeed seems to work. I am using the /I3 format to keep only tehe non decimal part of the integer since these variables are intended to be integers.

    Regarding the format of string I am trying to construct, it is basically some integer values like counters, that are stored in the robot and also the current joint position of the robot with the separator being "/".

    So, I would do something like this:

    This seems to work. But I am encountering another problem now. Because if I want to also pass the current tcp pose to the function and encode it in the same way I did for the .#joint_values, I get an error.

    Here, I get a runtime error "(E0102) Variable is not defined." when I first use .tcp_pose inside the program.

    I really don't understand what I am doing wrong and I'm stuck here from several hours. Could you please help me understand?

    Thank you very much in advance.

    Hi everyone!

    First of all, thank you for this forum. It's the hope and a great help for every robot programmer. :grinning_face_with_smiling_eyes:

    I'm writing a driver for a Kawasaki RS013N with F60 controller. I'm using KIDE and I need to encode an integer into a string to send it over TCP/IP.

    To do this, I am writing a program named .PROGRAM PackStatus(.@packet_size, ...), which takes as local variable an integer .@packet_size. This should be encoded into a string $packet_msg.

    I understood that I need to use the function $ENCODE to do this, but this cannot take as input an integer. So, following this thread, I decided to use BITS to convert the integer and encode it. However, if I try to do the following

    .PROGRAM PackStatus (.@packet_size)
      ; Fill the packet size
      $packet_msg = $ENCODE (/I3, BITS(.@packet_size, 16))

    I get the syntax error "0012: Illegal variable type" for .@packet_size. And, this is not a problem with local variables, because if I do the following in my Main

    $packet_msg = $ENCODE (/I3, BITS(@packet_size, 16))

    I get the syntax error""0025: Illegal argument of function" for @packet_size.

    Could you please help me understand where I am going wrong? What is the correct way to convert and integer into a string and encoding it. I would prefer to do it in a program using a local variable integer.

    Thank you so much in advance.

Advertising from our partners