/// <summary>
        /// Invokes the method Robot1Multiply.
        /// </summary>
        public async void Robot1Multiply()
        {
            try
            {
                // Call the method, passing the input arguments in a Variant[].
                var response = await UaTcpSessionClient.FromModel(this).CallAsync(new CallRequest
                {
                    MethodsToCall = new[]
                    {
                        new CallMethodRequest
                        {
                            ObjectId       = NodeId.Parse("ns=2;s=Robot1"),
                            MethodId       = NodeId.Parse("ns=2;s=Robot1_Multiply"),
                            InputArguments = new Variant[] { this.InputA, this.InputB }
                        }
                    }
                });

                // When the method returns, save the output argument.
                this.Result = (double)response.Results[0].OutputArguments[0];
            }
            catch (Exception ex)
            {
                Debug.WriteLine("Error calling Robot1Multiply method: {0}", ex);
            }
        }
Example #2
0
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            global::Xamarin.Forms.Forms.Init(this, bundle);

            // Setup a logger.
            this.loggerFactory = new LoggerFactory();
            this.loggerFactory.AddDebug(LogLevel.Trace);
            this.logger = this.loggerFactory.CreateLogger <MainActivity>();

            try
            {
                // Create the session client for the app.
                this.session = new UaTcpSessionClient(
                    new ApplicationDescription()
                {
                    ApplicationName = "Workstation.MobileHmi",
                    ApplicationUri  = $"urn:{System.Net.Dns.GetHostName()}:Workstation.MobileHmi",
                    ApplicationType = ApplicationType.Client
                },
                    new DirectoryStore(
                        Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData), "pki"),
                        loggerFactory: loggerFactory),
                    this.ProvideUserIdentity,
                    this.discoveryUrl,
                    this.loggerFactory);

                this.LoadApplication(new App(this.session));
            }
            catch (Exception ex)
            {
                this.logger.LogError("Error creating UaTcpSessionClient. {0}", ex.Message);
            }
        }
Example #3
0
 public MySubscription(UaTcpSessionClient session)
 {
     this.Session            = session;
     this.PublishingInterval = 1000.0;
     this.KeepAliveCount     = 10;
     this.LifetimeCount      = 0;
     this.PublishingEnabled  = true;
     this.MonitoredItems     = new MonitoredItemCollection(this);
     this.Session.Subscribe(this);
 }
Example #4
0
        public App(UaTcpSessionClient session)
        {
            this.session = session;
            var viewModel = new MainViewModel(this.session);
            var view      = new MainPage {
                BindingContext = viewModel
            };

            this.MainPage = new NavigationPage(view);
        }
Example #5
0
        public async Task TestSubscription()
        {
            // get or add application certificate.
            var localCertificate = this.localDescription.GetCertificate();

            if (localCertificate == null)
            {
                throw new ServiceResultException(StatusCodes.BadSecurityChecksFailed, "Application certificate is missing.");
            }

            // discover available endpoints of server.
            var getEndpointsRequest = new GetEndpointsRequest
            {
                EndpointUrl = this.endpointUrl,
                ProfileUris = new[] { TransportProfileUris.UaTcpTransport }
            };

            Console.WriteLine($"Discovering endpoints of '{getEndpointsRequest.EndpointUrl}'.");
            var getEndpointsResponse = await UaTcpDiscoveryClient.GetEndpointsAsync(getEndpointsRequest);

            var selectedEndpoint = getEndpointsResponse.Endpoints.OrderBy(e => e.SecurityLevel).Last();

            IUserIdentity selectedUserIdentity = new UserNameIdentity("root", "secret");

            var session = new UaTcpSessionClient(
                this.localDescription,
                localCertificate,
                selectedUserIdentity,
                selectedEndpoint);

            Console.WriteLine($"Creating session with endpoint '{session.RemoteEndpoint.EndpointUrl}'.");
            Console.WriteLine($"SecurityPolicy: '{session.RemoteEndpoint.SecurityPolicyUri}'.");
            Console.WriteLine($"SecurityMode: '{session.RemoteEndpoint.SecurityMode}'.");

            var sub = new MySubscription(session);

            Console.WriteLine($"Created subscription.");

            await Task.Delay(5000);

            session.Dispose();

            Assert.IsTrue(sub.CurrentTime != DateTime.MinValue);
            Assert.IsTrue(sub.CurrentTimeAsDataValue != null);
            Assert.IsTrue(sub.CurrentTimeQueue.Count > 0);
        }
Example #6
0
        protected override void OnStartup(StartupEventArgs e)
        {
            // Setup a logger.
            this.loggerFactory = new LoggerFactory();
            this.loggerFactory.AddDebug(LogLevel.Trace);

            // discover available endpoints of server.
            var getEndpointsRequest = new GetEndpointsRequest
            {
                EndpointUrl = StatusHmi.Properties.Settings.Default.EndpointUrl,
                ProfileUris = new[] { TransportProfileUris.UaTcpTransport }
            };
            var getEndpointsResponse = UaTcpDiscoveryClient.GetEndpointsAsync(getEndpointsRequest).Result;

            var endpoint = getEndpointsResponse.Endpoints
                           .Where(d => d.SecurityPolicyUri == SecurityPolicyUris.Basic256 &&
                                  d.SecurityMode == MessageSecurityMode.SignAndEncrypt)
                           .First();

            // Create the session client for the app.
            this.session = new UaTcpSessionClient(
                new ApplicationDescription()
            {
                ApplicationName = "Workstation.StatusHmi",
                ApplicationUri  = $"urn:{System.Net.Dns.GetHostName()}:Workstation.StatusHmi",
                ApplicationType = ApplicationType.Client
            },
                new DirectoryStore(
                    Environment.ExpandEnvironmentVariables(@"%LOCALAPPDATA%\Workstation.StatusHmi\pki"),
                    loggerFactory: this.loggerFactory),
                this.ProvideUserIdentity,
                endpoint,
                this.loggerFactory);

            // Create the main view model.
            var viewModel = new MainViewModel(this.session);

            // Create and show the main view.
            var view = new MainView {
                DataContext = viewModel
            };

            view.Show();

            base.OnStartup(e);
        }
Example #7
0
        public async Task TestSubscription()
        {
            // discover available endpoints of server.
            var getEndpointsRequest = new GetEndpointsRequest
            {
                EndpointUrl = this.endpointUrl,
                ProfileUris = new[] { TransportProfileUris.UaTcpTransport }
            };

            Console.WriteLine($"Discovering endpoints of '{getEndpointsRequest.EndpointUrl}'.");
            var getEndpointsResponse = await UaTcpDiscoveryClient.GetEndpointsAsync(getEndpointsRequest);

            var selectedEndpoint = getEndpointsResponse.Endpoints.OrderBy(e => e.SecurityLevel).Last();

            var session = new UaTcpSessionClient(
                this.localDescription,
                this.certificateStore,
                ed => Task.FromResult <IUserIdentity>(new UserNameIdentity("root", "secret")),
                selectedEndpoint,
                loggerFactory: this.loggerFactory);

            Console.WriteLine($"Creating session with endpoint '{session.RemoteEndpoint.EndpointUrl}'.");
            Console.WriteLine($"SecurityPolicy: '{session.RemoteEndpoint.SecurityPolicyUri}'.");
            Console.WriteLine($"SecurityMode: '{session.RemoteEndpoint.SecurityMode}'.");

            var sub = new MySubscription();

            session.Subscribe(sub);

            Console.WriteLine($"Created subscription.");

            await Task.Delay(5000);

            session.Dispose();

            Assert.IsTrue(sub.CurrentTime != DateTime.MinValue, "CurrentTime");
            Assert.IsTrue(sub.CurrentTimeAsDataValue != null, "CurrentTimeAsDataValue");
            Assert.IsTrue(sub.CurrentTimeQueue.Count > 0, "CurrentTimeQueue");
        }
 /// <summary>
 /// Sets the Robot1Mode to Auto.
 /// </summary>
 public async void Robot1ModeAuto()
 {
     try
     {
         await UaTcpSessionClient.FromModel(this).WriteAsync(new WriteRequest
         {
             NodesToWrite = new[]
             {
                 new WriteValue
                 {
                     NodeId      = NodeId.Parse("ns=2;s=Robot1_Mode"),
                     AttributeId = AttributeIds.Value,
                     IndexRange  = null,
                     Value       = new DataValue((short)HandOffAuto.Auto)
                 }
             }
         });
     }
     catch (Exception ex)
     {
         Debug.WriteLine("Error writing to NodeId {0} : {1}", "ns=2;s=Robot1_Mode", ex);
     }
 }
 public TrafficLightViewModel(UaTcpSessionClient session)
 {
     this.session = session;
 }
Example #10
0
 public MainViewModel(UaTcpSessionClient session)
 {
     this.session = session;
     session.Subscribe(this);
 }
Example #11
0
 public MainViewModel(PLC1Session session)
 {
     this.session           = session;
     this.subscriptionToken = this.session?.Subscribe(this);
 }