public static async Task <int> GetSystemLatencyMaximumAsync(AmsNetId target, CancellationToken cancel) { var buffer = new Memory <byte>(new byte[8]); using (AdsClient client = new AdsClient()) { client.Connect(new AmsAddress(target, AmsPort.R0_Realtime)); var result = await client.ReadAsync(0x01, 0x02, buffer, cancel); result.ThrowOnError(); } return(BitConverter.ToInt32(buffer.ToArray(), 4)); }
public static async Task <DateTime> GetTimeAsync(AmsNetId target, CancellationToken cancel) { var buffer = new Memory <byte>(new byte[16]); using (AdsClient client = new AdsClient()) { await client.ConnectAsync(new AmsAddress(target, AmsPort.SystemService), cancel); var result = await client.ReadAsync(400, 1, buffer, cancel); result.ThrowOnError(); } return(DateTime.FromBinary(BitConverter.ToInt64(buffer.ToArray(), 0))); }
public async Task Should_read_32Bytes_from_Server() { // arrange var ig = 1u; var io = 123u; var buffer = new byte[256]; _Mock.RegisterBehavior(new ReadIndicationBehavior(ig, io, Enumerable.Range(1, buffer.Length).Select(i => (byte)i).ToArray())); using (var client = new AdsClient()) { client.Connect(_Mock.ServerAddress.Port); // act var result = await client.ReadAsync(ig, io, buffer, CancellationToken.None); // assert Assert.IsTrue(result.Succeeded); Assert.AreEqual(result.ReadBytes, buffer.Length); } }
static async Task Main(string[] args) { using (var serviceProvider = new ServiceCollection() .AddLogging(cfg => cfg.AddConsole()) .Configure <LoggerFilterOptions>(cfg => cfg.MinLevel = LogLevel.Information) .BuildServiceProvider()) { var logger = serviceProvider.GetService <ILogger <Program> >(); // setup mocking server ushort port = 12345; string portName = "MyTestAdsServer"; using (var mockServer = new Mock(port, portName, logger)) { var serverBuffer = new byte[65535]; mockServer.RegisterBehavior(new ReadIndicationBehavior(IndexGroup: 1, IndexOffset: 123, Enumerable.Range(1, 32).Select(i => (byte)i).ToArray())) .RegisterBehavior(new ReadIndicationBehavior(1, 1, Encoding.UTF8.GetBytes("acting as a ADS server"))) .RegisterBehavior(new ReadIndicationBehavior(0, 0, null, AdsErrorCode.DeviceAccessDenied)) .RegisterBehavior(new WriteIndicationBehavior(0, 0, 22)); Console.WriteLine("Server up and running"); // now the actual Ads Read/WriteRequests... // create TwinCAT Ads client using (var client = new AdsClient(logger)) { // connect to our mocking server client.Connect(mockServer.ServerAddress.Port); if (client.IsConnected) { // . . . var readBuffer = new byte[65535]; var readMemory = new Memory <byte>(readBuffer); var writeBuffer = new byte[65535]; var writeMemory = new Memory <byte>(writeBuffer); // 1st behavior var resRd = await client.ReadAsync(1, 123, readMemory[..32], CancellationToken.None);
public static async Task <DeviceInfo> GetDeviceInfoAsync(AmsNetId target, CancellationToken cancel) { var buffer = new Memory <byte>(new byte[2048]); DeviceInfo device = new DeviceInfo(); using (AdsClient client = new AdsClient()) { client.Connect(new AmsAddress(target, AmsPort.SystemService)); var result = await client.ReadAsync(700, 1, buffer, cancel); result.ThrowOnError(); String data = System.Text.Encoding.ASCII.GetString(buffer.ToArray()); device.TargetType = GetValueFromTag("<TargetType>", data); device.HardwareModel = GetValueFromTag("<Model>", data); device.HardwareSerialNo = GetValueFromTag("<SerialNo>", data); device.HardwareVersion = GetValueFromTag("<CPUArchitecture>", data); device.HardwareDate = GetValueFromTag("<Date>", data); device.HardwareCPU = GetValueFromTag("<CPUVersion>", data); device.ImageDevice = GetValueFromTag("<ImageDevice>", data); device.ImageVersion = GetValueFromTag("<ImageVersion>", data); device.ImageLevel = GetValueFromTag("<ImageLevel>", data); device.ImageOsName = GetValueFromTag("<OsName>", data); device.ImageOsVersion = GetValueFromTag("<OsVersion>", data); var major = GetValueFromTag("<Version>", data); var minor = GetValueFromTag("<Revision>", data); var build = GetValueFromTag("<Build>", data); device.TwinCATVersion = Version.Parse(major + "." + minor + "." + build); } return(device); }