Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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)));
        }
Ejemplo n.º 3
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);
Ejemplo n.º 5
0
        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);
        }