Posts by Galet


    Modbus TCP is different with all PLC, and some type are not possible with someone.

    Perhaps the solution is to multiply the value to transfer an integer.

    An example on CS8 with one Float Input and one Float Output :

    <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
        <TOPIC Name="Modbus" Card="0" Channel="0" Equipment="0" RefreshPeriod="200" Actif="1">
            <MODULE Tag_name_root="Bit" IDModule="BOOLEAN" InputSize="" OutputSize="0">
            <MODULE Tag_name_root="Word" IDModule="WORD" InputSize="" OutputSize="64">
                <ITEM Name="MbInputFloat" Syntaxe="%QF0" Offset="0"/><ITEM Name="MbOutputFloat" Syntaxe="%IF2" Offset="2"/></MODULE>
        <GENERAL_PARAMETERS TopicName="Modbus" TCP_Port="502" ConnectionNumber="2"/>

    and the .dtx file for the datas :


    You need SRS to configure the robot fieldbus.

    You can edit the configuration of the board with Sycon and change the repartition between all the signals (change each 64 bytes modules from Bytes to Signed32).

    Be careful because Sycon is always looking from Master part.

    After change, you can create the new Gsdml file.



    To read the current TCP position :

    pActual=here(tTool,fFrame) where pActual is a PointRx, tTool the your Tcp and fFrame the target frame.

    To send the position, you need to add analogic board on the Ethercat module, declare it on J206 configuration, declare aio variable, and write the value :

    nValue=aioSet(aoXVal,pActual.trsf.x), where nValue is a result num, aoXVal an aio.

    To be sure that the value is correct (in range of the aio) you can control that nValue is egal to pActual.trsf.x).

    It's difficult to analyze the application direct on the controller.

    You can make a backup (on Usb Key) to read the files with an editor but the best way is to install SRS. Without any license, you can read all the programs and find variable...

    Without SRS, the definition of all the global variables are in the file NameOfApplication.dtx (in the folder Usr/UsrApp/NameOfApplication/). It's Xml file type so, you can read it with Excel (if you have it)...

    It's difficult to give you all the information without all the programs.


    For example, the principal program only calls G7_Chg_Cint if io:E_Chg_Cint==true or DioGet(io:G7_Chg_Cint) != 1



    Since the program hasn’t been called yet, io:G7_Chg_Cint=1 (right?)

    Not sure.

    In your example program (G7_Chg_Cint_A), the grafcet Step variable is "io:G7_Chg_Cint_A" (probably an array of digital output because the program read and write this variable). In the picture, we don't see the initialization of this variable. Without reset, the output keep the last value. Necessary the program need to initialize it somewhere...


    Where does the io:E_Chg_Cint come from? I thought it came from the plc because I can’t find it anywhere on the robot

    Probably from the PLC...or direct from the machine.

    Some question to help you :

    Do you have the SRS (Stäubli Robotic Suite) ?

    Witch version is installed on your CS8 (Menu / Control Panel / Version / System on SP1) ?

    Witch type of IO use you controller (Menu / Control Panel / IO) ?


    Plc send order on Digital inputs :

    - io:E_Dech_Ader

    - io:E_Dec_Der ...

    The principal program call different subprogram for each task.

    All the subprogram are build on Grafcet structure (typical Switch Case...)

    The active Step is contain in output group like io:G7_Chg_Cint__A.

    In each step, the Jump to another step is programmed with DioGet(StepVariable,NextStep)

    It's very special (to use Output group to memorize the active Step) but I think it's to inform, in real time, the Plc


    Yeah the issue with not giving out any sort of service manuals is frustrating. They sent me their "manuals" last week but they really don't offer much help or guidance.

    If I had the option I would replace these Staubli robots immediately.

    Bigger problem is that the company that built this piece of automation is no long in business so we have ZERO support and things are starting to fail more frequently.

    Service and help are very important in the choise of company and material !!

    Can you give us more information about your geographic location ?

    EP2338-1001 is Ethercat Slave modul and just need to be configured on your fieldbus (Standart J206 but possible on J207/J208)

    Why do you want to read the Ip adress ?

    Complement : On CS9 like CS9, you can use diolink function to link the new output to the configured output button 1 to 3.

    dioLink(doNew, doConfiguredButton)

    Magical Tip for CS9 : You can reboot the SP2 pendant (Not the main CPU) by pressing simultaneously the Home, Back and Legacy Mode buttons...

    Hidden feature :)

    SP1 (with CS8) and SP2 (on CS9) are really different !

    SP1 is a interface (neutral), SP2 is independent and exchange information with controller.

    The 16000lc problem's is to reload the application after an external modification (SRS or ftp transfer...). For this point the procedure are the same on SP1 and SP2 :

    For the main application, you need to stop it, reload (or close and load) the new version (from disk to ram), and run the application.

    If this application is auto-run configured, the simple way is to turn off the controller, wait all the leds switch off and turn on again the controller.

    That's not quite right, setMonitorSpeed() allows you to reduce the speed always, but only increases if the selected profile doesn't have control over the speed monitor.

    Nothing to do with the remote mode...

    Sorry EIEsgalho :

    num setMonitorSpeed(num nSpeed)

    This instruction modifies the current monitor speed of the robot. setMonitorSpeed() is always able to reduce the monitor speed. To increase it, setMonitorSpeed() is effective only if the robot is in remote working mode and if the operator does not have access to the monitor speed (when the current user profile does not allow use of the speed buttons, or the MCP has been disconnected).

    You can read and write variables with OPC Server and OPC UA. The other solution is to use the same protocols as SRS : Soap or Rest (web protocols)...

    It all depends on the version of your robot.

    Fanuc/Motoman/Yaskawan came from Japan and the first level for programmer is easy but closed. Stäubli (ABB/KUKA) use a computer logic very open but harder.

    To program in Val3, the best is to know a language like C or Pascal, and obviously robot data (Tool, Frame...)

    The concept Fanuc and Stäubli are really different !

    By Stäubli, you have different versions of software (Val3 is the language like TPE+Karel by Fanuc).

    On Internet, I find Version 5.3 (very old version, the actual is Version 8.15 !).

    Witch robot and controller would you program ? Why don(t contact Stäubli in your country to have the good document and information accordingly with the hardware ?


    Your program is correct but you call the program with the value 0 (call Depose(0)).

    In your program, you don't test this value in the Switch case.

    The value of nMoveIdDegDep keep the last value ( probably a low value, less than getMoveId).


    1- Change the call function if 0 is wrong.

    2- Test always all the values in your Switch function , for example :

    switch x_nNumDepose

    case 1

    // vers dépose 1 = côté aval rivière




    case 2

    // vers dépose 2 = côté amont rivière





    // Defaut de parametre




    Best regards