Posts by Galet

    On CS8/CS9, you have a special task to manage the robot movment.

    In your Movement() program you repeat all the time a new movment even if you don't change the value !

    In this case, the robot execute same position as if it weren't moving.

    1- You can control that the position is changing before to send a new position

    2- It's bad to have a loop (even if you configure the task with low priority) without delay()


    Be carefull, because you don't control the PLC transmission ! If the receive wrong value, the robot can become dangerous !

    Other solution : To use Alter function...but you need option on the controller.

    Have a good day !


    On SP1 (CS8 / before SRC7), you need to clear the display (cls()) and rewrite the new page.

    On SP1 (CS8 / SRC7.xx.xx) you can have different page and change with Userpage(scVariable) (scVariable is Screen type)

    On SP2 (CS9) you can create as much as you want with SRS in Interface. You can create menu and change with Userpage("PageName").

    I never us, in robot's program, random Number. Can you explain us why you need this function ?

    Have a good day...

    The door control is composed by 2 contacts (Safety signals).

    For all safety fonctionnalities (Emergency Stop, Doors...) the 2 signals need to arrive (and leave) in the same Time.

    Be sure that the 2 contacts of the doors are Ok (Solve the electrical issue)

    and before to aknoledge the issue, you need to open the 2 circuits and, after, close the 2 circuits (Normaly, you open the door and close the door).


    Hello Ycrideas,

    With Val3, it's really easy to build workspace...but you need to program all the functionnality (even if i remeber that you have an example on the Stäubli webside).

    First is to decide if the workspace is to protect human (and you need to use Safety functionnality) or not).

    In the second case :

    - Read the robot position (hereJ() or here(...). You can read the joint position or cartesian position of all tool in all frame.

    - Compare the coordinates memorized to the volume (all form, in all the frame you want)

    - Send the result to a bool variable or directly to an Output.

    - If you want, you can add this calcul in a "loop" program called in a task (taskcreate)

    For example, for 1 cube, the program WorkSpace()

    To run the functionnality :

    taskCreate "WorkSpaceTsk",100,WorkSpace()

    With this method, you can create all the form, as much as you want...

    Have a nice day...

    Hello to everybody,

    Personaly, I never had compatibility problem with all version of SP1 on CS8.

    ... but, why you don't ask directly this question to Stäubli service ?

    Hello Ycrideas,

    Your question is very (too) open !!

    I think that you can find all description in the different documentation of the arm and the controller.

    About Izone1 and 2, this inputs are received from the internal Safety PLC. You can find description in the Safety documentation.

    To use it, you need firstly to confirgure the safety on the controller.

    Have a good day...


    I will call resetmotion (maybe not needed as the emergency stop will have entered)

    Emergency stop don't reset the movment memory. It's the reason why, after an emergency stop, you can restart from the same position.


    Understood, in this case I can afford to just cancel the movements as the robots will have to move upwards till a vertical coordinate and then move home, where they will release the part to fall in a box.

    Yes, It's very easy with a scara robot.

    Have a good day...


    delay(0) I guess to avoid collapsing the CPU in case of infinite loops without much to do inside.

    Yes. Remember that the main task (Started with the running of Start program) have only 10 to priority.


    About sending a bool to the task to get it stopped itself... how this works? I mean, I understand a task as a function (that restarts automatically) and in case that task is controlling movements, I should be capable to check the variable only after each movement and only if I check it manually there... Could you post a small sample about that?

    When the controler receive an Emergency Stop, the robot is stopped (Power off), and normaly, the pointer of the "robot task" is stopped on WaitEndMove() or something similar (waiting function). If you kill directly the task, you loose the pointer synchronisation and you need, to restart, to reset the point's memorization (ResetMotion), controle the actual robot's position and send the new trajectory. If you control, the Boolean variable, you can prepare the restart before loose the pointer.

    Like all the robot, it's easier after a issue, to controle the restart rather than to close all and search the next trajectory.

    Best regards,

    Hello Robtecnic,

    2 or 3 small things :

    - You can't use the Start() program in your taskcreate ! (You can use the Start only if this program belongs to a library)

    - Take the habit, when you have a quick loop like While/Endwhile, to add automatically a Delay(0) (for example before the EndWhile.

    - After the taskKill, you can wait that the task is dead (taskStatus...)

    - Same thing before the task create (a small taskstatus and you control that the task don't exist already)

    - diEmOK : Look about esStatus function

    - You need to add ==True when you control an Input (like diGoHome). If you work with SRS you have a Syntax control button.

    Better than Taskill (kill the task anywhere), you can use a bool variable to give an order to the task. I think in all Partx program you have a loop. Stop the loop whith your Bool and the task will be stop properly.

    There is different ways to use the tasks and mostly the movments. The best is to use one task for all the movment (to be sure that you can't send different trajectories in the same time (In this case, your robot will be totaly crazy :(). Use the main program to take the big job (like a small PLC include), and a second task to control the robot. In this case, it will be easy to add asynchonous fonctionnality !


    Have a good day.

    Hello JoanM !

    Some quick answers :


    Customer only have one pendant for those 2 robots. I guess they will have to use some kind of connector to remove the emergency stop alarm

    There is a connector 'Shunt' for all the robot to work witout SPx. The customer receive one for each controler.


    Is there any manual with system IO? signals used to power on the motors, to put the program pointer to the beginning, and to start the program? If that manual is not available, could you explain me a little how to configure those 3 signals?

    With SRS, you can "link" the systems Input/output signal to real Input/Output in the menu Physical IOs/Iomap Editor.

    There is one input to realize the Power ON, but nothing to Start/Stop the program.

    The Stäubli concept is like an PLC program. There is no way to start the program by an external command. The program need to be started in manual (on Teach Pendant), or automatically after the boot if configured.


    Is there any manual out there that explains how to use the pendant? I'll have to search for the manual I got when I did the training, but it was in paper and I don't have access to it till this weekend so anything digital would be nice.

    Open an internet account to find the global documentation. If you have learn the programmation by Stäubli Trainning Service, I think, you can call it to retreeve à new paper or the pdf file...

    Have a good WE...


    As EIEsgalho say, you need a loop in the program's task to keep it alive.

    But you don't need a synchronous task to realize an interrupt, you can make it with a normal task if you don't need to know the exact polling time.

    To Stop the robot with an Input, a normal task is enought.

    Have a good day,


    +1 to EiEsgalho.

    In reality, the APPRO function don't work on the TCP but on the POINT. It's the reason why you don't need to indicate, in the calcul, the tool name. When your robot is in the position, the TCP and the POINT are in the same position,so it's easier to say that it work arround the TCP.

    Very often the Z value of the offset is negative.

    With COMPOSE, the result take the frame of the reference point (in the #4 image, p's frame is pFirst's frame) , but the offset can be in other frame ( #4 : fPallet). Often, Reference point's frame is the offset frame.

    If the frame Z axis is to the top, the Z value is often positive !

    To use COMPOSE is clearer to modifie the values...and faster :)


    What about orientation Rx Ry and Rz ?

    You can rotate your point arrount the reference point with an offset like {0,0,0,10,0,0} (turn 10 degrees arround Rx). It's possible with the both functions. Be carreful that Stäubli calculate all the points, tools, and Frame, in the order :

    1- Tx, TY,TZ

    2- Rx

    3- RY

    4- RZ

    Some other materlal (like Fanuc or Kuka) don't calculate in the same order !

    Have a good day...


    If you have a other SP1, you can try to change it.

    Control the connection and the cable between the SP1 and the controler.

    What's happen when you stop all the applications ?

    Have a good day...


    1- why in srs 3d software the z axes decrement when the robot move down while in the real robot the z axes increment when the robot move down?

    I'm agree with EIEsgalho. control the actual Frame and the actual tool...


    2- How can i send a z of the picking point to the robot ? the z axes not start from a origin (0

    On a Stäubli robot, the reference frame (World) is not on the floor but at the height of shoulder.


    3-when I teach the points from the pendant are they persistent when the application is restarted?

    When you teach or modifie a point, you change it in the ram of the controler. If you want to keep the modifications after a switch Off/On, you need to save the application in the rom (disque)... If the value is forced in the program you need to change the program...

    Have a good day !



    You need to extract it (The memory board is easily accessible), use an adapter (cFlash) and the tool to make the ghost is disponible on the Stäubli Internet (usbit).

    Have a good day,


    On the 2 chanels control (like Emergency Stop and Door), the 2 contacts need to be synchronized otherwise the controler memorize a default.

    Try to go in menu :

    MENU / Control Panel / Controler Status / Hardware Safety Fault.

    If the electrical wrong contact is solved, you can acknoledge the default on panel, otherwise you have an information on this line.

    To solve an electrical issue on Safety double chanel, you need

    1- to solve the electrical issue

    2- Open and Close the 2 contacts (synchronized) to show to the controler that all is now Ok

    3- Acknoledge

    If the default is on Door control : Make it in Automatic Mode (In manual mode the doors are not monitored !)

    On old CS8C (before the Acknoledge key), I remember that with some software version, you need to delete 2 files on controler. Call Stäubli service to have some help !



    Another question. Is there anyway to edit a point through his coordinates on the pendant?

    Eg: Point A ( 10,10,10,20,20,20) change to (15,10,10,20,20,20). Is there a simpler way to edit it other than manually moving the robot to the point?

    I know through SRS I can do it, I just dont know if its possible on the pendant.

    On CS8 / SP1 :

    MENU / Application Manager/Val3 Applications/"Your Application"/Global Datas/"Type of Data"...

    Your points are in "Joint" for all the Joint positions and in "World" for all cartesian positions and frames.

    Select your Data then "Edit=F3" key...

    Be carreful when you change directly one point : Any safety for collision :)

    "Save=F8" when the modification is tested.

    ... a little backup after that.

    Have a good day !