/// <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); } }
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); } }
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); }
public App(UaTcpSessionClient session) { this.session = session; var viewModel = new MainViewModel(this.session); var view = new MainPage { BindingContext = viewModel }; this.MainPage = new NavigationPage(view); }
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); }
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); }
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; }
public MainViewModel(UaTcpSessionClient session) { this.session = session; session.Subscribe(this); }
public MainViewModel(PLC1Session session) { this.session = session; this.subscriptionToken = this.session?.Subscribe(this); }