This time I will talk about my struggle to use the I/O unit on the ABB IRC5 Compact Controller. Online resources are not as abundant as other robotics arm like Universal Robot. So I hope this article can help.

Knowing your Hardware

The configuration of the robot arm is pretty complex. After assembly and wiring up, we can start working on the configuration.
1) For the standalone route, we can control the robot arm with FlexPendant. FlexPendant is essentially a device with a screen and joystick where you can carry around and interact with the robot.
2) For the PC route, we can connect use the RobotStudio from ABB. The added benefit of using RobotStudio is that it provides a virtual(simulated) robot to work on. The workflow is to program everything with the virtual controller and sync it to the real one. However, keep in mind that some configuration cannot be transferred with a simple click and thus make sure you double check everything.

Installing ABB RobotStudio

To use the advanced features of RobotStudio, you need a license from ABB. The year 2020 is special that ABB relaxed the requirements and allowed everyone to download the RobotStudio premium version. Contact ABB Support if you need the license.

Finding the Datasheet for your Hardware

This is one of the hardest part of the journey. ABB does not include any useful diagram or manual together in the shipping crate, and the online documentation is also incomplete. In my case, I got a IRC5 Compact Controller and the “datasheet” is more like a sales brochure.

I come across this 3HAC049406-003 document after quite a while of Google Search. This includes the drawing and schematic of the device.

The I/O component we get in the IRC5 Compact Controller is DSQC 652 I/O Unit, which appears on page 23.a ~ 23.b in 3HAC049406-003.

ABB DSQC652 Circuit

From this schematic, we can notice a few things:

  • The physical connection is labeled CAN_H and CAN_L, which indicates that the device is external
  • The corresponding physical socket is XS12&XS13 for Inputs, XS14&XS15 for Outputs
  • The I/O is isolated using opto-couplers
  • The I/O channels are labeled staring with CH.1
  • The Keyword 24V appeared twice, 24Vdevicenet and INPUT 24V DC

which can explain a lot of confusion later in the programming part.

Follow Existing Online Resources

I started following Guide: How to Set Up I/O on an ABB Robot with an IRC5 Controller on the ABB forum. PDF version archived here, just in case. It was written back in 2016 so stuff may have changed. Here is my updated version.

RobotStudio Config

Adding ABB DSQC652 to the Virtual Controller

  1. Click the Controller tab at the top
  2. On the left sidebar, select the current station (IRB_1200_5kg_0.9m in my case) and navigate to Configuration > I/O System (double-click)
  3. In the main window, on the refreshed content, find the DeviceNet Device on the left
  4. In the pop-up window, choose form the top drop-down menu DSQC 652 24 VDC I/O Device
  5. Inspect the default value and click OK
  6. Remember to do a Warm Restart for the config to take effect
  7. After that, you can edit the Signal (as in step 3) and register our custom signal
  8. In the New Signal... prompt, choose d652 in the Assigned to Device and fill in the rest

Configuring the Signal

Just keep in mind:

  • Assigned to Device choose d652
  • Device Mapping starts with index 0
  • Invert Physical Value related options can be useful depending on your hardware

At this point, you can start your program in RoboStudio with the simulated I/O.
Choosing Controller tab, and expanding the left sidebar, you can find the I/O System options (NOT Configuration > I/O System). Your newly constructed I/O signal should appear here after a Warm Restart. The status of the I/O can be toggled by double-clicking on each item.

Configuring System Input & System Output

You can also configure the I/O to interact directly to the system (instead of your RAPID program). Clicking Configuration > I/O System, on the main window we also have System Input & System Output. Here we can configure the I/O to perform system level actions, such as Reset Emergence Stop, PP to Main, Motor On and Start etc.

Deploying to the Physical(Real) Hardware

From the forum post, we can see the author struggle a lot when setting up the hardware.

Fun fact! The internal logic of the DSQC652 is powered, but the digital outputs are NOT. You have to power them externally by connecting 24V and 0V (GND) …

Another fun fact! By now you’re probably realizing that every time I say “fun fact” I actually mean “days of fury, frustration, wailing and gnashing of teeth”. Remember when we were creating our Signal and we set “Unit Mapping” to 0? A zero in Unit Mapping corresponds to the pin 1 on the X1. A one in Unit Mapping corresponds to pin 2, etc. Real intuitive, I know.

This is very valid concerns if you don’t have the schematic in hand or not very into electronics (like me).

So there is the list of tricky stuffs from my perspective

  • The I/O part of the DSQC652 requires external power, as a result of opto-isolation
    • Connect to the internal power supply (XS16 in IRC5 Compact) OR go external power if you need more current
    • The opto-coupler need roughly takes 5mA when the Input is connected directly to 24V, giving the estimation of the current limiting resistor ~5kΩ
    • The minimum HIGH input can go as low as 10V base on my trial & error (caution needed!!)
  • DSQC652 is an external device on the DeviceNet
    • If you accidentally short 24V to GND on internal power, the device will go offline
    • A Warm Restart is needed to bring to online again
  • The numbering scheme is different in the configuration vs hardware
    • On the software side, the Device Mapping starts from 0
    • On the hardware side, the I/O channels are labeled staring with CH.1
  • Sync the virtual and physical controllers (RAPID)
    1. In the top RAPID tab, do Synchronize to RAPID to update the RAPID file
    2. Connect the physical controller ot the PC, and Request Write Access on the correct target
    3. Right-click one of the stations and Create Relation
    4. Do the Transfer and double check the direction of upload is correct
    5. Always check on the FlexPendant if the settings/program is updated. For example, the RAPID program may not be updating (after upload) when the Production Window is active on the FlexPedant
    6. Warm Restart is needed when you modified Signal
  • Sync the virtual and physical controllers (I/O Systems)
    • In the previous parts, I mostly highlighted the configuration of the virtual controller,
      you have to transfer all the configuration to the real one (in parallel to your RAPID program)
    • This should be as simple as right-clicking Configuration and Load Parameters..., the restoring on the other one
    • In case this route doesn’t work, just manually create the entries (on FlexPendant, or RobotStudio after Request Write Access)
    • Make sure you have the matching Signal Name

Closing Thoughts

ABB robot arms are generally more industrial and designed to be interfaced with Programmable Logic Controller(PLC). Therefore, the control and UI interface is much harder then some modern alternatives like Universal Robots. I can also find some packages supporting controlling ABB with ROS, but I never have time to look into.