Beckhoff.TwinCAT.Ads.TcpRouter
6.0.155
Prefix Reserved
Install-Package Beckhoff.TwinCAT.Ads.TcpRouter -Version 6.0.155
dotnet add package Beckhoff.TwinCAT.Ads.TcpRouter --version 6.0.155
<PackageReference Include="Beckhoff.TwinCAT.Ads.TcpRouter" Version="6.0.155" />
paket add Beckhoff.TwinCAT.Ads.TcpRouter --version 6.0.155
#r "nuget: Beckhoff.TwinCAT.Ads.TcpRouter, 6.0.155"
// Install Beckhoff.TwinCAT.Ads.TcpRouter as a Cake Addin
#addin nuget:?package=Beckhoff.TwinCAT.Ads.TcpRouter&version=6.0.155
// Install Beckhoff.TwinCAT.Ads.TcpRouter as a Cake Tool
#tool nuget:?package=Beckhoff.TwinCAT.Ads.TcpRouter&version=6.0.155
Description
The package 'Beckhoff.TwinCAT.Ads.TcpRouter' implements a lean TCP ADS Router class to use on systems where no standard TwinCAT router is established or available.
It is running in UserMode only (no realtime characteristics) and contains no further functionality than distributing the ADS Frames (e.g. no Port 10000, no ADS Secure). It is just used to route ADS frames locally between AdsServers and to/from remote ADS devices.
Implemented in asynchronous .NET Code it can be run in your own services/daemon, as standalone console application and also in your customized application.
Requirements
- .NET 6.0, .NET Core 3.1, .NET Framework 4.61 or .NET Standard 2.0 compatible SDK or later.
- No other System allocating the same port (e.g. a regular TwinCAT installation).
- Installed Nuget package manager or Dotnet CLI.
Installation
Along with the deployment of the application where the TcpRouter is implemented, a valid Router / ADS configuration must be placed to specify the Local Net ID, the name and the default port of the Router system.
The preferred way to configure the system is with standard Configuration providers, which are part of the .NET Core / ASP .NET Core infrastructure.
See further information: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-3.1
This enables common options for application configuration that can be used 'out-of-the-box':
- Via the file appsettings.json
- With the StaticRoutesConfigurationProvider (StaticRoutes.xml)
- Using Environment Variables.
- Command line arguments
- etc.
The configuration has to be loaded during application startup and is placed into the 'TwinCAT.Ads.TcpRouter.AmsTcpIpRouter' class via constructor dependency injection and must contain the following information:
- The name of the local System (usually the Computer or Hostname)
- The Local AmsNetId of the local system as Unique Address in the network
- Optionally the used TcpPort (48898 or 0xBF02 by default)
- The static routes in the 'RemoteConnections' list.
- Logging configuration.
Actually the configuration is not reloaded during the runtime of the 'TwinCAT.Ads.TcpRouter.AmsTcpIpRouter' class. Please be aware that the "Backroute" from the Remote system linking to the local system (via AmsNetId) is necessary also to get functional routes.
Example for a valid 'appSettings.json' file (please change the Addresses for your network/systems.)
{
"AmsRouter": {
"Name": "MyLocalSystem",
"NetId": "192.168.1.20.1.1",
"TcpPort": 48898,
"RemoteConnections": [
{
"Name": "RemoteSystem1",
"Address": "RemoteSystem1",
"NetId": "192.168.1.21.1.1",
"Type": "TCP_IP"
},
{
"Name": "RemoteSystem2",
"Address": "192.168.1.22",
"NetId": "192.168.1.22.1.1",
"Type": "TCP_IP"
},
]
},
"Logging": {
"LogLevel": {
"Default": "Information",
"System": "Information",
"Microsoft": "Information"
},
"Console": {
"IncludeScopes": true
}
}
}
Alternatively a "StaticRoutes.Xml" Xml File can configure the system equally. Don't forget to add the 'StaticRoutesXmlConfigurationProvider' to the Host configuration during startup (see FirstSteps below).
An example of the local "StaticRoutes.xml" is given here:
<?xml version="1.0" encoding="utf-8"?>
<TcConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:\TwinCAT3\Config\TcConfig.xsd">
<Local>
<Name>MyLocalSystem</Name>
<NetId>192.168.1.20.1.1</NetId>
<TcpPort>48898</TcpPort>
</Local>
<RemoteConnections>
<Route>
<Name>RemoteSystem1</Name>
<Address>RemoteSytem</Address>
<NetId>192.168.1.21.1.1</NetId>
<Type>TCP_IP</Type>
</Route>
<Route>
<Name>RemoteSystem2</Name>
<Address>192.168.1.22</Address>
<NetId>192.168.1.21.1.1</NetId>
<Type>TCP_IP</Type>
</Route>
</RemoteConnections>
</TcConfig>
Alternatively, the configuration can also be set via Environment variables.
PS> $env:AmsRouter:Name = 'MyLocalSystem'
PS> $env:AmsRouter:NetId = '192.168.1.20.1.1'
PS> $env:AmsRouter:TcpPort = 48898
PS> $env:AmsRouter:RemoteConnections:0:Name = 'RemoteSystem1'
PS> $env:AmsRouter:RemoteConnections:0:Address = 'RemoteSystem1'
PS> $env:AmsRouter:RemoteConnections:0:NetId = '192.168.1.21.1.1'
PS> $env:AmsRouter:RemoteConnections:1:Name = 'RemoteSystem2'
PS> $env:AmsRouter:RemoteConnections:1:Address = '192.168.1.22'
PS> $env:AmsRouter:RemoteConnections:1:NetId = '192.168.1.22.1.1'
PS> $env:AmsRouter:Logging:LogLevel:Default = 'Information'
PS> dir env: | where Name -like AmsRouter* | format-table -AutoSize
Name Value
---- -----
AmsRouter:Name MyLocalSystem
AmsRouter:NetId 192.168.1.20.1.1
AmsRouter:TcpPort 48898
AmsRouter:RemoteConnections:0:Name RemoteSystem1
AmsRouter:RemoteConnections:0:Address RemoteSystem1
AmsRouter:RemoteConnections:0:NetId 192.168.1.21.1.1
AmsRouter:RemoteConnections:1:Name RemoteSystem2
AmsRouter:RemoteConnections:1:Address 192.168.1.22
AmsRouter:RemoteConnections:1:NetId 192.168.1.22.1.1
AmsRouter:Logging:LogLevel:Default Information
Version Support lifecycle
Package | Description | .NET Framework | TwinCAT | Active Support |
---|---|---|---|---|
6.x | Actual package supporting .NET 6.0 | net6.0, netcoreapp3.1, netstandard2.0, net461 | >= 3.1.4024.10 [^1] | X |
5.x | Package supporting .NET 5.0[^3] | net5.0, netcoreapp3.1, netstandard2.0, net461 | >= 3.1.4024.10 [^1] | |
4.x | Package basing on .NET Framework 4.0 | net4 | All | X |
[^1]: Requirement on the Host system. No version limitation in remote system communication.
[^2]: Microsoft support for .NET5 ends with May 8, 2022. Therefore it is recommended to update Beckhoff.TwinCAT packages from Version 5 to Version 6.
Migrate from ASP.NET Core 5.0 to 6.0
migrating to the latest .NET Microsoft .NET support lifecycle
First Steps
Example of starting the TcpIpRouter from a simple Console application with logging.
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace TwinCAT.Ads.AdsRouterService
{
class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<RouterWorker>();
})
.ConfigureAppConfiguration((hostingContext, config) =>
{
// Uncomment to overwrite configuration
//config.Sources.Clear(); // Clear all default config sources
//config.AddEnvironmentVariables("AmsRouter"); // Use Environment variables
//config.AddCommandLine(args); // Use Command Line
//config.AddJsonFile("appSettings.json"); // Use Appsettings
//config.AddStaticRoutesXmlConfiguration(); // Overriding settings with StaticRoutes.Xml
})
.ConfigureLogging(logging =>
{
// Uncomment to overwrite logging
// Microsoft.Extensions.Logging.Console Nuget package
// Namespace Microsoft.Extensions.Logging;
//logging.ClearProviders();
//logging.AddConsole();
})
;
}
}
public class RouterWorker : BackgroundService
{
private readonly ILogger<RouterWorker> _logger;
public RouterWorker(ILogger<RouterWorker> logger)
{
_logger = logger;
}
protected override async Task ExecuteAsync(CancellationToken cancel)
{
AmsTcpIpRouter router = new AmsTcpIpRouter(_logger);
//Use this overload to instantiate a Router without support of StaticRoutes.xml and parametrize by code
//AmsTcpIpRouter router = new AmsTcpIpRouter(new AmsNetId("1.2.3.4.5.6"), AmsTcpIpRouter.DEFAULT_TCP_PORT, _logger);
//router.AddRoute(...);
await router.StartAsync(cancel); // Start the router
}
}
Further documentation
The actual version of the documentation is available in the Beckhoff Infosys. Beckhoff Information System
Sample Code
Product | Versions |
---|---|
.NET | net5.0 net5.0-windows net6.0 net6.0-android net6.0-ios net6.0-maccatalyst net6.0-macos net6.0-tvos net6.0-windows |
.NET Core | netcoreapp2.0 netcoreapp2.1 netcoreapp2.2 netcoreapp3.0 netcoreapp3.1 |
.NET Standard | netstandard2.0 netstandard2.1 |
.NET Framework | net461 net462 net463 net47 net471 net472 net48 |
MonoAndroid | monoandroid |
MonoMac | monomac |
MonoTouch | monotouch |
Tizen | tizen40 tizen60 |
Xamarin.iOS | xamarinios |
Xamarin.Mac | xamarinmac |
Xamarin.TVOS | xamarintvos |
Xamarin.WatchOS | xamarinwatchos |
-
.NETCoreApp 3.1
- Beckhoff.TwinCAT.Ads.Abstractions (>= 6.0.155)
- Microsoft.Extensions.Configuration (>= 6.0.0)
- Microsoft.Extensions.Configuration.Binder (>= 6.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 6.0.0)
- System.Collections.Immutable (>= 6.0.0)
- System.Reactive (>= 5.0.0)
-
.NETFramework 4.6.1
- Beckhoff.TwinCAT.Ads.Abstractions (>= 6.0.155)
- Microsoft.Extensions.Configuration (>= 6.0.0)
- Microsoft.Extensions.Configuration.Binder (>= 6.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 6.0.0)
- System.Collections.Immutable (>= 6.0.0)
- System.Reactive (>= 5.0.0)
-
.NETStandard 2.0
- Beckhoff.TwinCAT.Ads.Abstractions (>= 6.0.155)
- Microsoft.Extensions.Configuration (>= 6.0.0)
- Microsoft.Extensions.Configuration.Binder (>= 6.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 6.0.0)
- System.Collections.Immutable (>= 6.0.0)
- System.Reactive (>= 5.0.0)
-
net6.0
- Beckhoff.TwinCAT.Ads.Abstractions (>= 6.0.155)
- Microsoft.Extensions.Configuration (>= 6.0.0)
- Microsoft.Extensions.Configuration.Binder (>= 6.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 6.0.0)
- System.Collections.Immutable (>= 6.0.0)
- System.Reactive (>= 5.0.0)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on Beckhoff.TwinCAT.Ads.TcpRouter:
Package | Downloads |
---|---|
Beckhoff.TwinCAT.Ads.AdsRouterConsole
Simple TCP/IP ADS Router Console Application for use on systems without TwinCAT installation / setup. |
|
dsian.TwinCAT.Ads.Server.Mock
Mocking a TwinCAT Ads Server, for unit testing code with ADS read/write requests. |
GitHub repositories
This package is not used by any popular GitHub repositories.