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
This Thread
  • Everywhere
  • This Thread
  • This Forum
  • Articles
  • Pages
  • Forum
  • Blog Articles
  • Products
  • More Options
  1. Robotforum - Support and discussion community for industrial robots and cobots
  2. Forum
  3. Industrial Robot Support and Discussion Center
  4. KUKA Robot Forum
Your browser does not support videos RoboDK Software for simulation and programming
Visit our Mainsponsor
IRBCAM
Robotics Channel
Robotics Training
Advertise in robotics
Sponsored Ads

Analog Input Value from SPS loop

  • RoboMan3000
  • March 18, 2025 at 11:31 PM
  • Thread is Resolved
  • RoboMan3000
    Reactions Received
    2
    Trophies
    1
    Posts
    59
    • April 4, 2025 at 9:58 PM
    • #41
    Quote from panic mode

    reading and parsing data from a file is slow. depending on your process it could be unacceptably slow. i would rather use ethernet communication and ring buffer. so one does not need to split anything - just keep on streaming data even if buffer array only has couple of elements (say 5-10, instead of 32k).

    This is the goal in the end. Working our way to this... We don't have a lot of KUKA expertise here. Not sure of how to establish that outside of MxAutomation, which we've already investigated a bit. I just didn't know how to use triggers when we tried MxA... Not sure if they can be passed through.

    In our process, the loading / unloading of spatial data will happen between tool passes. If the delay is on the order of tens of seconds, to read in like 1000 positions, that is probably ok.


    Edit - doing something with EKI, ethernet KRL would be best, MxAutomation does not scale into our end goal. Are there any recommendations you have for learning to set up an ethernet ring buffer system panic mode?


    For now, SkyeFire , I've set up the workflow you advised previously, having E6POS array declared and assigned values in the DAT file, and read by a loop in the SRC file. I get the error "Array name inadmissible" on the array entries... But the name is fine, P1_POS[1] = {X 0, Y 0, Z 0, A 0, B 0, C 0} for example... Not sure if there's something I'm missing here.

    Edited once, last by RoboMan3000 (April 5, 2025 at 5:50 AM).

  • Online
    SkyeFire
    Reactions Received
    1,051
    Trophies
    12
    Posts
    9,421
    • April 7, 2025 at 2:47 PM
    • #42
    Quote from RoboMan3000

    I get the error "Array name inadmissible" on the array entries... But the name is fine, P1_POS[1] = {X 0, Y 0, Z 0, A 0, B 0, C 0} for example... Not sure if there's something I'm missing here.

    I would need to see the file where you are handling your arrays. Which line throws the error?

    I will note that array DECLs and setting in .DAT files can be a bit picky -- if you want to DECL an array and then set its static values in the .DAT file, you must DECL first, then immediately put all the fill values.

    Code
    ;this works
    DECL E6POS PosArray[1000]
    PosArray[1]={X 0}
    PosArray[2]={X 0}
    ; and so on to 1000
    Code
    ;this does NOT work
    DECL E6POS PosArray1[1000]
    DECL E6POS PosArray2[1000]
    PosArray1[1] = {X 0}
    PosArray1[2] = {X 0}
    PosArray2[1] = {X 0}
    PosArray2[2] = {X 0}
  • panic mode
    Reactions Received
    1,278
    Trophies
    11
    Posts
    13,074
    • April 7, 2025 at 4:12 PM
    • #43

    performance of reading file and parsing data depends on file structure and speed of the KPC. i did some tests about a decade ago and if i recall reading/parsing some 1000 lines took perhaps 1-2 seconds. on a new KRC PC is more powerful and that should reflect on performance.

    as for using ring buffer, you can declare an array of some length... say 100 elements. then you need two integers to serve as array index. one would be index being used to populate array (index_fill) and the other would be index used by robot to use/consume data (index_use).

    so when program starts, you would wait for array to be full... then you can start using the fetched data. while the program is running, index_use would increment. and as long as

    ((Index_fill-index_use)<array_len) and (index_fill<total_elements))

    you can fetch more data to populate array (replace used data elements).

    the only thing to keep in mind is that total_elements could reach huge values, such as 10000000 while array length is much smaller. so when fetching data you do not want to write to

    ARRAY_NAME[index_fill]

    you want to use

    ARRAY_NAME[MOD(index_fill+1,array_len) ]

    because that index will also keep incrementing until it reaches value of total_elements.

    similarly, when reading array elements, instead of

    IF index_fill>index_use THEN
    LIN ARRAY_NAME[index_use]
    ENDIF

    you would use

    IF index_fill>index_use THEN
    ARRAY_NAME[MOD(index_use+1,array_len)]
    ENDIF

    as you can see size of array or ring buffer is pretty much irrelevant as long as fetching takes same or less time than using of data points. in KRL advance run pointer works similarly and max value for $ADVANCE is 5. so if you double buffer it, your buffer only needs 10 elements and your fetch only needs to get 5 of the elements at a time.

    1) read pinned topic: READ FIRST...

    2) if you have an issue with robot, post question in the correct forum section... do NOT contact me directly

    3) read 1 and 2

  • RoboMan3000
    Reactions Received
    2
    Trophies
    1
    Posts
    59
    • April 8, 2025 at 1:37 AM
    • #44
    Quote from SkyeFire
    Code
    ;this works
    DECL E6POS PosArray[1000]
    PosArray[1]={X 0}
    PosArray[2]={X 0}
    ; and so on to 1000
    Code
    ;this does NOT work
    DECL E6POS PosArray1[1000]
    DECL E6POS PosArray2[1000]
    PosArray1[1] = {X 0}
    PosArray1[2] = {X 0}
    PosArray2[1] = {X 0}
    PosArray2[2] = {X 0}

    This was the issue. Thanks for clearing that up. Where the heck would I ever find this little tidbit of information?!

    Is there any precondition necessary to run motion smoothly out of a loop? The motion I'm getting appears to have interpolation interrupted, causing a pause at every point.
    My $advance is set to 3 (tried 1, 2 as well), and the points are about 4mm apart at 10 mm/s.
    I'll show some of the code I have here, which is the loop:

    [[ Interruption of interpolation occurs both with SLIN and LIN, I tested both. ]]

    Code
    $VEL.CP = 0.01
    FOR INDEX = 1 TO 114
       SLIN P1_POS[INDEX]
       TRIGGER WHEN PATH = 2 ONSTART DELAY=0 DO SIGNAL_LOG (PASS, INDEX) PRIO=1
    ENDFOR
    
    ........
    .......
    
    GLOBAL DEF SIGNAL_LOG (PASS:IN, INDEX:IN)
    DECL INT PASS
    DECL INT INDEX
    
    SWITCH PASS
    CASE 1
    ; Storing signal data
     P1_DATA [INDEX, 1] = SIG1
     P1_DATA [INDEX, 2] = SIG2
     P1_DATA [INDEX, 3] = SIG3
    ⁠; Storing position data
     P1_POSV [INDEX, 1] = $POS_ACT.X
     P1_POSV [INDEX, 2] = $POS_ACT.Y
     P1_POSV [INDEX, 3] = $POS_ACT.Z
     P1_POSV [INDEX, 4] = $VEL.CP
    
    .....
    .....
    .....
    
    ENDSWITCH
    END
    Display More


    Thanks for the information panic mode. 1-2 seconds per 1k lines is absolutely tolerable for our process. Just concerned over the interruption of the interpolation process at this point, because both relying on a DAT file or a TXT file would require some sort of FOR loop setup.

    Loading in the points from an external file and having basically all the data arrays act as temporary buckets would make this soooooo much more space efficient. Just need to find the error in my ways when it comes to this interpolation process in a FOR loop (if possible)...

    Edited 2 times, last by RoboMan3000 (April 8, 2025 at 2:10 AM).

  • DannyDJ
    Reactions Received
    67
    Trophies
    6
    Posts
    503
    • April 8, 2025 at 6:29 AM
    • #45

    You are calling exact position in the FOR LOOP

    Did you tried to run with C_DIS approximation parameter?

    With $APO.CDIS before motion you set approximation distance in mm.

    $VEL.CP = 0.01

    FOR INDEX = 1 TO 114   

    SLIN P1_POS[INDEX] C_DIS

     TRIGGER WHEN PATH = 2 ONSTART DELAY=0 DO SIGNAL_LOG (PASS, INDEX) PRIO=1

    ENDFOR

  • RoboMan3000
    Reactions Received
    2
    Trophies
    1
    Posts
    59
    • April 8, 2025 at 8:52 AM
    • #46
    Quote from DannyDJ

    Did you tried to run with C_DIS approximation parameter?

    This just mental boomed me I guarantee that's the issue lol
    :party20::guru::fine:


    Edit - This was the issue. Thank you so much everyone. You guys are a treasure from God!

    Edited once, last by RoboMan3000 (April 8, 2025 at 7:07 PM).

  • RoboMan3000
    Reactions Received
    2
    Trophies
    1
    Posts
    59
    • April 9, 2025 at 3:19 AM
    • #47

    Hey - just wondering if anyone has ever had a problem with the tool dipping ever so slightly around corners and when a path starts.

    I've performed load data determination a few different times, with no real difference. Not sure if it's worth getting the exact values from the CAD of my tool, (it's less than 10% the payload of the robot) or if it's not a tool load issue.

    If it's not a tool issue, is there a way I could reduce this? I've messed around quite a bit with the $ACC.CP, to no avail. I've set the ARP high and low, C_DIS high and low. No real effect.

    Does anyone know what could cause this?


    Edit - perhaps some additional information would be useful - I pick up the dipping mostly in the scanner data, while the $POS_ACT_MES reports a deviation about half or a third of the size but concurrent with the deviation in the scan.

  • Online
    SkyeFire
    Reactions Received
    1,051
    Trophies
    12
    Posts
    9,421
    • April 9, 2025 at 4:29 PM
    • #48
    Quote from RoboMan3000

    Hey - just wondering if anyone has ever had a problem with the tool dipping ever so slightly around corners and when a path starts.

    This is one of those things that can have a multitude of causes. And it's endemic to why "can I use a robot as a CNC?" is such a fraught question.

    First off, the switch from brake holding to servo holding isn't perfect, which can have an effect on startup motions.

    Then, turning "corners" on interpolated paths almost always involves reversing direction on at least one axis, which drives that axis' backlash directly into your real-world TCP motion. Even if no axis is reversing, just enough accel/decel can have a similar effect.

    On top of backlash, robots flex, at the bearings and even in the "solid" segments of the arm. with serial kinematics, the effect can be pronounced.

    No robot is perfect, physically, compared to the ideal kinematic model being used to do path planning. To a degree, this can be tuned out with Absolute Accuracy tuning or a 3rd-party tuning like NRK's SARCA.

    Positioning tolerance is also looser on a robot vs a CNC, to accommodate the open serial kinematics of a robot vs the closed parallel kinematics of a CNC. If most robots tried to maintain path as tightly as a CNC does, they'd end up "hunting" badly. So while cornering, a robot will sacrifice some path accuracy in favor of speed/torque/jerk/other limits.

  • RoboMan3000
    Reactions Received
    2
    Trophies
    1
    Posts
    59
    • April 9, 2025 at 8:43 PM
    • #49

    SkyeFire Thanks for the breakdown. All that makes total sense.
    Was just reading some on this thread:
    Robotic Position Accuracy - KUKA Robot Forum - Robotforum - Support and discussion community for industrial robots and cobots

    I really like your approach with laser distance sensors manually checking for sag in the tool. We were cooking up something similar over my way to simply dial in a rough calibration to be near perfect. Eventually I hope we can do something to ensure our joint positions with the RSI interface.

    I keep the tool orientation fixed over the path sweep, and oddly enough for sharp, tight turns the magnitude of max deviation there is less than half that observed in a slight path deviation... For example, imagine I'm traversing along some base frame Y axis which aligned to the world axes. If I take a 30 degree turn towards either +/- X axis (towards or away from the robot) I can clearly see with my eyes the dip of the tool.

    Is this something I can tighten up at all with gear jerk settings? It seems that as I lower $ACC.CP, the deviation is magnified. If this is backlash, we're taking about like 3-5mm observable on the tool... From what I've read, backlash for the KUKAs is only resultant in like +/-0.1mm?

    The robot I'm working with is a KR240, and I only have about 6kg of payload on it (lol). I'd imagine it could execute this path very rigidly in that context! Especially with load data determination completed.

  • Fubini
    Reactions Received
    277
    Trophies
    9
    Posts
    1,884
    • April 9, 2025 at 9:19 PM
    • #50
    Quote from RoboMan3000

    The robot I'm working with is a KR240, and I only have about 6kg of payload on it (lol).

    Thats very unusual. And actually is worst and not best case for robots.

    Usually load is closer to nominal load and machine paramters are tuned to perform best at or close to nominal load. Did you check all loads? There is not only TCP load mounted to flange but also additional loads for a1, a2, a3 to be considered. Load data determination only considers TCP load. The first two a1 and a2 additional load by default are zero but $load_a3 is not. Also load data determination is also best for higher loads. For such small loads precision is not very good. At best use some cad data for such small loads. This type of robot has no torque sensors so load data determination needs to estimate torques from current. For very small loads it quickly gets difficult to get precise torques since the load effects can not easily distinguished from expected estimated torques from the path.


    Is the robot equipped with absolute accuracy? Whats the setting of $adap_acc and $opt_move for your robot. Does your robot type have elasticity compensation (any $eko_dat[] not zero in $robcor.dat).


    What is the exact robot type kr240 has different variants. E.g. if its a quantec it could be e.g. extra ultra or prime. With prime being the best.

  • RoboMan3000
    Reactions Received
    2
    Trophies
    1
    Posts
    59
    • April 9, 2025 at 9:37 PM
    • #51
    Quote from Fubini

    Thats very unusual. Usually load is closer to nominal load and machine paramters are tuned to perform best at or close to nominal load. Did you check all loads? There is not only TCP load mounted to flange but also additional loads for a1, a2, a3 to be considered. Load data determination only considers TCP load. The first two a1 and a2 additional load by default are zero but $load_a3 is not. Also load data determination is also best for higher loads. For such small loads precision is not very good. At best use some cad data for such small loads. Is the robot equipped with absolute accuracy?

    I figured. My executive team did not consult with myself or any engineer when we started the company and got our first robots :wallbash:

    There was a considerable reduction in uncertainty (from 0.5mm max deviation to ~0.3, consistently) measured over the path after I performed load data determination, but yes, the calculated values for COG and MOI it provides are obviously incorrect. Better than nothin lol

    Impossible to know for sure, but does this seem more like an incorrect load calibration issue rather than a slop (backlash) issue?

    We don't have absolute accuracy I imagine it's like 5,000 USD?
    Not sure I'll be able to convince my team on that at the moment

  • Fubini
    Reactions Received
    277
    Trophies
    9
    Posts
    1,884
    • April 9, 2025 at 9:50 PM
    • #52
    Quote from RoboMan3000

    There was a considerable reduction in uncertainty (from 0.5mm max deviation to ~0.3, consistently) measured over the path after I performed load data determination

    If you see it consistently along the path probably more in the direction of load data and overall accuracy. Backlash is a local phenomenon whenever an axis changes its direction.

    Maybe adding some weights on the flange might help.😁

  • RoboMan3000
    Reactions Received
    2
    Trophies
    1
    Posts
    59
    • April 9, 2025 at 10:38 PM
    • #53

    Thank you for the advice Fubini. We're making a new tool fixture now- so I'll pass that on to one of my buddies here. We'll add 10% of its payload with a slab of steel lol

    I've also contacted KUKA regarding absolute accuracy. Seems like it's only something the HA robots use but maybe I'm wrong.


    Aside from all that, I've been running into something odd when I process an array of analog input values. Every once in a while, when the data is being processed - turned into a usable dimension from the 0.2-1 value, I'll get an "array value invalid, message number 1422" error.

    I'll check the array, and it's fully populated with valid values, and oddly enough I can clear the error and continue the program, which would be impossible if it was truly null. Here's the block of code which randomly throws the error:

    Code
    FOR INDEX = 1 TO (# of pts)
      IF P1_ScDat [INDEX] < 0.2 THEN ;ERROR is thrown here.....
        P1_ScDat [INDEX] = 0.6
      ENDIF
      IF P1_ScDat [INDEX] > 0.8 THEN
        P1_ScDat [INDEX] = 0.6
      ENDIF
    
      Value_i = ((((10 * P1_ScDat [INDEX])-2) * 2.5) - 10) / 1000
    
    
    
    ENDFOR
    Display More

    The values are all around 0.5 in the array. Not sure why this error would randomly pop up!!

  • Online
    SkyeFire
    Reactions Received
    1,051
    Trophies
    12
    Posts
    9,421
    • April 9, 2025 at 10:41 PM
    • #54
    Quote from RoboMan3000

    Is this something I can tighten up at all with gear jerk settings? It seems that as I lower $ACC.CP, the deviation is magnified. If this is backlash, we're taking about like 3-5mm observable on the tool... From what I've read, backlash for the KUKAs is only resultant in like +/-0.1mm?

    Oh, no, it's FAR more complex than that. Backlash occurs at every joint, but the effect of one joint's backlash on TCP position depends on the current position, acceleration, rigidity, velocity, and backlash of all the other joints "upstream" of it. This makes it nearly impossible to "model out", which is why Abs-Acc and SARCA exist -- it boils down to tuning the robot in its working state and environment.

    And don't get me started on the effects of thermal expansion, or even the light tugs of festooning....

    Quote from RoboMan3000

    The robot I'm working with is a KR240, and I only have about 6kg of payload on it (lol). I'd imagine it could execute this path very rigidly in that context! Especially with load data determination completed.

    That's not optimal. The robot wants a certain % of its rated payload (remember, this includes mass and CG and inertias). Probably around 30-50% -- IIRC, Load Identification works poorly if the robot is less than 30% rated payload.

    I've attached a KUKA accuracy spec document for a KR500, as an example. You can probably get the same document for your robot from KUKA tech support. But you can see that robots are built far more for repeatability than accuracy.

    One other thing is that the wrist is the worst for accuracy. All the test results I've ever done, changing the TCP orientation drove accuracy errors much faster than changing position.

    Files

    Accuracy KR500-2.pdf 31.21 kB – 4 Downloads
  • RoboMan3000
    Reactions Received
    2
    Trophies
    1
    Posts
    59
    • April 9, 2025 at 11:34 PM
    • #55

    SkyeFire thank you for that detailed breakdown!

    I just found the adjacent accuracy doc for the KR240 we have here.

    For reference, I calibrate the robot to its workpiece with a scanning process before I go about the useful scanning, so the absolute pose accuracy is remedied there.

    The repeatability is actually right on par with what kuka lists - +/-0.4mm for linear path, from ISO 9238 standards. Which probably means worst-case repeatability is 0.4mm for a properly set up process.

    I may have just spent the morning re-validating their results :thinking_face:
    In which case the "droop" I'm seeing is probably some kinda backlash...


    Wondering if you can detect anything from the problem I listed right before you replied :help:


    EDIT - initializing the values to zero seems to have fixed that issue. I think it was the ARP running that calculation loop while the robot was still finishing its motion or something....

    Edited once, last by RoboMan3000 (April 10, 2025 at 2:56 AM).

  • Online
    SkyeFire
    Reactions Received
    1,051
    Trophies
    12
    Posts
    9,421
    • April 10, 2025 at 2:29 PM
    • #56
    Quote from RoboMan3000

    I've also contacted KUKA regarding absolute accuracy. Seems like it's only something the HA robots use but maybe I'm wrong.

    No, any KUKAbot can have AA calibration done, as it's pure software. The HAs are built from more finely-tuned hardware that, in combination with AA, squeezes a bit more blood from the stone.

    AA and HA are no panaceas, though. AA is normally done at the factory, with default loads and full working volume. And then tries to model out the effects of different payloads in actual production use. In my experience, the best performance from AA is to calibrate the robot in its working conditions (mounting, payload, festooning, etc) and limiting the calibration to the segment of the robot's motion volume where you actually need AA.

  • RoboMan3000
    Reactions Received
    2
    Trophies
    1
    Posts
    59
    • April 10, 2025 at 7:36 PM
    • #57

    Ok. Thank you guys again for your guidance.
    This thread can be marked as resolved!

  • RoboMan3000 April 10, 2025 at 7:36 PM

    Selected a post as the best answer.
  • jaiiyer
    Reactions Received
    15
    Trophies
    2
    Posts
    91
    • April 11, 2025 at 1:52 AM
    • #58
    Quote from RoboMan3000

    ; Loop through the array and write each element
    FOR i = 1 TO N
    ; Write the element with a newline (CRLF = 'H0D''H0A')
    CWRITE($FCT_CALL, STAT, MODE, "krl_fputc", HANDLE, "%f'H0D''H0A'", Ln_ScDat [i])
    ENDFOR

    why dont you call writeScanDataToFile() everytime i increments and then use

    CWRITE($FCT_CALL, STAT, MODE, "krl_fopen", "D:\NETWORK_DRIVE\Ln_Scandata.txt", "a", HANDLE)

    instead of

    CWRITE($FCT_CALL, STAT, MODE, "krl_fopen", "D:\NETWORK_DRIVE\Ln_Scandata.txt", "w", HANDLE)


  • RoboMan3000
    Reactions Received
    2
    Trophies
    1
    Posts
    59
    • April 11, 2025 at 7:58 AM
    • #59
    Quote from jaiiyer

    why dont you call writeScanDataToFile() everytime

    Mostly because I imagine that operation would take more time than logging to an array. Worth a shot I suppose

  • jaiiyer
    Reactions Received
    15
    Trophies
    2
    Posts
    91
    • April 11, 2025 at 6:27 PM
    • #60

    Let me know how it goes

    Quote from RoboMan3000

    Mostly because I imagine that operation would take more time than logging to an array. Worth a shot I suppose

Advertising from our partners

IRBCAM
Robotics Channel
Robotics Training
Advertise in robotics
Advertise in Robotics
Advertise in Robotics

Job Postings

  • Anyware Robotics is hiring!

    yzhou377 February 23, 2025 at 4:54 AM
  • How to see your Job Posting (search or recruit) here in Robot-Forum.com

    Werner Hampel November 18, 2021 at 3:44 PM
Your browser does not support videos RoboDK Software for simulation and programming

Tag Cloud

  • abb
  • Backup
  • calibration
  • Communication
  • CRX
  • DCS
  • dx100
  • dx200
  • error
  • Ethernet
  • Ethernet IP
  • external axis
  • Fanuc
  • help
  • hmi
  • I/O
  • irc5
  • IRVIsion
  • karel
  • kawasaki
  • KRC2
  • KRC4
  • KRC 4
  • KRL
  • KUKA
  • motoman
  • Offset
  • PLC
  • PROFINET
  • Program
  • Programming
  • RAPID
  • robodk
  • roboguide
  • robot
  • robotstudio
  • RSI
  • safety
  • Siemens
  • simulation
  • SPEED
  • staubli
  • tcp
  • TCP/IP
  • teach pendant
  • vision
  • Welding
  • workvisual
  • yaskawa
  • YRC1000

Thread Tag Cloud

  • abb
  • Backup
  • calibration
  • Communication
  • CRX
  • DCS
  • dx100
  • dx200
  • error
  • Ethernet
  • Ethernet IP
  • external axis
  • Fanuc
  • help
  • hmi
  • I/O
  • irc5
  • IRVIsion
  • karel
  • kawasaki
  • KRC2
  • KRC4
  • KRC 4
  • KRL
  • KUKA
  • motoman
  • Offset
  • PLC
  • PROFINET
  • Program
  • Programming
  • RAPID
  • robodk
  • roboguide
  • robot
  • robotstudio
  • RSI
  • safety
  • Siemens
  • simulation
  • SPEED
  • staubli
  • tcp
  • TCP/IP
  • teach pendant
  • vision
  • Welding
  • workvisual
  • yaskawa
  • YRC1000

Similar Threads

  • sps.sub user PLC section

    • robot-cnc
    • December 29, 2022 at 1:54 PM
    • KUKA Robot Forum

Tags

  • IO
  • sps
  • KSS8.6
  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