Beckhoff.TwinCAT.Ads.TcpRouter
6.2.244
Prefix Reserved
dotnet add package Beckhoff.TwinCAT.Ads.TcpRouter --version 6.2.244
NuGet\Install-Package Beckhoff.TwinCAT.Ads.TcpRouter -Version 6.2.244
<PackageReference Include="Beckhoff.TwinCAT.Ads.TcpRouter" Version="6.2.244" />
paket add Beckhoff.TwinCAT.Ads.TcpRouter --version 6.2.244
#r "nuget: Beckhoff.TwinCAT.Ads.TcpRouter, 6.2.244"
// Install Beckhoff.TwinCAT.Ads.TcpRouter as a Cake Addin #addin nuget:?package=Beckhoff.TwinCAT.Ads.TcpRouter&version=6.2.244 // Install Beckhoff.TwinCAT.Ads.TcpRouter as a Cake Tool #tool nuget:?package=Beckhoff.TwinCAT.Ads.TcpRouter&version=6.2.244
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 only limited functionality than distributing the ADS Frames and Route handling (no ADS Secure). It is just used to route ADS frames locally between AdsServers and to/from remote ADS devices. A minimal support of the AdsServers Port 1 (Router) and Port 10000 is given for route handling.
The Package is 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 8.0, .NET 6.0 or .NET Standard 2.0 (e.g. >= .NET Framework 4.61) compatible SDK
- No other System allocating the same port (e.g. a regular TwinCAT installation).
Installation
Along with the deployment of the application where the TcpRouter is implemented (a host application), 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.
For more information how to implement and deploy your own Router please have a look at: Beckhoff GitHub RouterSamples Beckhoff GitHub DockerSamples [Microsoft]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>
As further option, 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
Configuration Parameters
Name | Description |
---|---|
Name | Name of the local System/Device |
NetId | The AmsNetId of the local System/device |
TcpPort | The TCP port used for external communication (communication to the routes/RemoteConnections) |
LoopbackIP | This is the IPAddress, that is used by the TcpRouter for its Loopback Connections (in combination with the LoopbackPort. By default this is set to IPAddress.Loopback (127.0.0.1) and is only accessible from the local machine. If AdsClient/AdsServers should run seperated from the Router System, this LoopbackIP must be set to valid local IPAddress. Furthermore valid external addresses (where the AdsClients/AdsServer lives) must be specified via LoopbackExternalIPs or LoopbackExternalSubnet. Only those connections will be accepted |
LoopbackPort | Sets the TCP Port that is used for the loopback. The LoopbackPort defines the Loopback TcpEndpoints in combination with the LoopbackIP |
LoopbackExternalIPs | The Loopback externals are IPAddresses, that are allowed to use the Loopback connection. Use this IP list or specify alternatively the LoopbackExternalSubnet |
LoopbackExternalSubnet | Sets the loopback externals subnet. This is an alternative approach to set the allowed 'LoopbackIPs' for loopback communication. In docker/virtual enviroments often a whole subnet will be spanned |
RemoteConnections | Sets the list of remote Routes/Connections. This is the list of external devices which can be reached via the route. |
Version Support lifecycle
Package | Description | .NET Framework | Active Support |
---|---|---|---|
6.2 | Package basing on .NET 8.0/6.0 | net8.0, net6.0, netstandard2.0 | X |
6.1 | Package basing on .NET 7.0/6.0 | net7.0, net6.0, netstandard2.0 | X |
6.0 | Package basing on .NET 6.0 | net6.0, netcoreapp3.1, netstandard2.0, net461 | X |
Migrating to the latest .NET Microsoft .NET support lifecycle
First Steps
For first steps, please have a look at: Beckhoff GitHub RouterSamples
Further documentation and Sample Code
The actual version of the documentation is available in the Beckhoff Infosys. Beckhoff Information System Beckhoff GitHub RouterSamples Beckhoff GitHub DockerSamples
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Beckhoff.TwinCAT.Ads.Abstractions (>= 6.2.244)
- Beckhoff.TwinCAT.Ads.ConfigurationProviders (>= 6.2.244)
- 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 (>= 6.0.0)
-
net6.0
- Beckhoff.TwinCAT.Ads.Abstractions (>= 6.2.244)
- Beckhoff.TwinCAT.Ads.ConfigurationProviders (>= 6.2.244)
- 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 (>= 6.0.0)
-
net8.0
- Beckhoff.TwinCAT.Ads.Abstractions (>= 6.2.244)
- Beckhoff.TwinCAT.Ads.ConfigurationProviders (>= 6.2.244)
- Microsoft.Extensions.Configuration (>= 8.0.0)
- Microsoft.Extensions.Configuration.Binder (>= 8.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.0)
- System.Collections.Immutable (>= 8.0.0)
- System.Reactive (>= 6.0.0)
NuGet packages (3)
Showing the top 3 NuGet packages that depend on Beckhoff.TwinCAT.Ads.TcpRouter:
Package | Downloads |
---|---|
Beckhoff.TwinCAT.Ads.SystemServer
The Beckhoff.TwinCAT.Ads.SystemServer Package implements an TwinCAT System Service ADS Server (Port 10000) for usage in combination with the Beckhoff.TwinCAT.Ads.TcpRouter Package. |
|
dsian.TwinCAT.Ads.Server.Mock
Mocking a TwinCAT Ads Server, for unit testing code with ADS read/write requests. |
|
AdsSimplifiedInterface
A library for simplifying access to a TwinCAT PLC over ADS |
GitHub repositories
This package is not used by any popular GitHub repositories.
### 6.2
Enh: TargetFramework dependencies changed to net8.0, net6.0, netstandard2.0
BreakingChange: Replacing ILogger parameter in constructors (AdsSession,AdsClient,AdsServer,AmsTcpIpRouter) by ILoggerFactory to enable more flexible category based logging.
BreakingChange: TwinCAT.Ads.TcpRouter.StaticRoutesXmlConfigurationSource moved to nuget package 'Beckhoff.TwinCAT.Ads.ConfigurationProviders'
(TwinCAT.Ads.ConfigurationProviders.StaticRoutesXmlConfigurationSource).
BreakingChange: TwinCAT.Ads.TcpRouter.AmsRouterSettings moved to nuget package 'Beckhoff.TwinCAT.Ads.ConfigurationProviders'
(TwinCAT.Ads.ConfigurationProviders.AmsRouterSettings).