This library is 100% managed, has no external dependency, and is compiled for every version of .NET still in use.

- .NET Framework : 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
- .NET Standard : 2.0, 2.1
- .NET Core : 3.0
- .NET : 5.0, 6.0, 8.0, 9.0

For [Mono](https://www.mono-project.com) or [Universal Windows Platform](https://en.wikipedia.org/wiki/Universal_Windows_Platform) (UWP), use .NET Standard 2.1. For the [Unity](https://unity.com) engine, any .NET Framework or .NET Standard version works.

For each of these versions, the assembly `UnderAutomation.ABB.dll` is provided compiled in `AnyCPU`. Recent .NET implementations run on Windows, Linux and macOS, on x64, x86, ARM and ARM64.

The asynchronous methods are the only part that is not available everywhere: .NET Framework 3.5 and 4.0 have no `async` / `await`, so they only get the synchronous API. Everything else is identical on every target.

## Install from NuGet

The NuGet package manager is the recommended way. It picks the right .NET version for your project and makes updates easy.

In Visual Studio, right click the `Dependencies` node of your project and select `Manage NuGet Packages...`. Search for `UnderAutomation` and install the latest version of the package.

From the command line:

```bash
dotnet add package UnderAutomation.ABB
```

See on NuGet.org : [https://www.nuget.org/packages/UnderAutomation.ABB](https://www.nuget.org/packages/UnderAutomation.ABB)

## Direct download

You can also download `UnderAutomation.ABB.dll` and reference the assembly directly in your project.

Go to the [download page](/abb/download) to get the assemblies and the compiled example.

The sources of the Windows Forms example are [on GitHub](https://github.com/underautomation/ABB.NET).

## First program

Import the namespace `UnderAutomation.ABB`, create an `AbbController`, connect, and call a service.

**C# : GetStartedNet**
```csharp
using UnderAutomation.ABB;

public class GetStartedNet
{
    static void Main()
    {
        /**/
        // The whole SDK is reachable from a single object
        AbbController robot = new AbbController();
        robot.Connect("192.168.0.1");

        // Controller identity
        var identity = robot.Rws.Controller.GetIdentity();
        Console.WriteLine($"Connected to {identity.Name}");

        // RAPID tasks
        foreach (var task in robot.Rws.Rapid.GetTasks())
        {
            Console.WriteLine($"{task.Name} : {task.ExecutionState}");
        }

        robot.Disconnect();
        /**/
    }
}
```

The default parameters target an OmniCore controller. For an IRC5 running RobotWare 6, set the RWS version. See [Connect to your robot](/abb/documentation/connect) for the full list of connection parameters.

## What to read next

- [Connect to your robot](/abb/documentation/connect) : connection parameters, IRC5 and OmniCore, errors, asynchronous API.
- [Test with a RobotStudio virtual controller](/abb/documentation/virtual-controller) : run everything without a real robot.
- [Robot Web Services overview](/abb/documentation/rws) : the list of services and what each one covers.
- [Licensing](/abb/documentation/license) : the 30 day trial and how to register your key.