/// <summary> /// Completes an asynchronous get status request and updates the control. /// </summary> private void OnGetStatus(IAsyncResult result) { if (InvokeRequired) { Invoke(new AsyncCallback(OnGetStatus), result); return; } try { GetServerStatusEventHandler callback = (GetServerStatusEventHandler)result.AsyncState; OpcServerStatus status = callback.EndInvoke(result); ShowPanels = true; InfoPN.Text = status.VendorInfo; StatePN.Text = (status.StatusInfo == null)?status.ServerState.ToString():status.StatusInfo; TimePN.Text = status.CurrentTime.ToString(); } catch (Exception e) { ShowPanels = false; Text = e.Message; } }
/// <summary> /// Returns the current server status. /// </summary> /// <returns>The current server status.</returns> public OpcServerStatus GetServerStatus() { if (_server == null) { throw new NotConnectedException(); } OpcServerStatus status = ((ITsCAeServer)_server).GetServerStatus(); if (status != null) { if (status.StatusInfo == null) { status.StatusInfo = GetString(String.Format("serverState.{0}", status.ServerState)); } } else { if (_server == null) { throw new NotConnectedException(); } } return(status); }
/// <summary> /// Unmarshals and deallocates a OPCEVENTSERVERSTATUS structure. /// </summary> internal static OpcServerStatus GetServerStatus(ref IntPtr pInput, bool deallocate) { OpcServerStatus output = null; if (pInput != IntPtr.Zero) { OpcRcw.Ae.OPCEVENTSERVERSTATUS status = (OpcRcw.Ae.OPCEVENTSERVERSTATUS)Marshal.PtrToStructure(pInput, typeof(OpcRcw.Ae.OPCEVENTSERVERSTATUS)); output = new OpcServerStatus(); output.VendorInfo = status.szVendorInfo; output.ProductVersion = String.Format("{0}.{1}.{2}", status.wMajorVersion, status.wMinorVersion, status.wBuildNumber); output.MajorVersion = status.wMajorVersion; output.MinorVersion = status.wMinorVersion; output.BuildNumber = status.wBuildNumber; output.ServerState = (OpcServerState)status.dwServerState; output.StatusInfo = null; output.StartTime = Technosoftware.DaAeHdaClient.Com.Interop.GetFILETIME(Convert(status.ftStartTime)); output.CurrentTime = Technosoftware.DaAeHdaClient.Com.Interop.GetFILETIME(Convert(status.ftCurrentTime)); output.LastUpdateTime = Technosoftware.DaAeHdaClient.Com.Interop.GetFILETIME(Convert(status.ftLastUpdateTime)); if (deallocate) { Marshal.DestroyStructure(pInput, typeof(OpcRcw.Ae.OPCEVENTSERVERSTATUS)); Marshal.FreeCoTaskMem(pInput); pInput = IntPtr.Zero; } } return(output); }
/// <summary> /// Get the status of the server. /// </summary> private void GetStatus() { try { OpcServerStatus status = m_server.GetServerStatus(); VendorInfoTB.Text = status.VendorInfo; ProductVersionTB.Text = status.ProductVersion; ServerStateTB.Text = OpcClientSdk.OpcConvert.ToString(status.ServerState); StatusInfoTB.Text = status.StatusInfo; StartTimeTB.Text = OpcClientSdk.OpcConvert.ToString(status.StartTime); CurrentTimeTB.Text = OpcClientSdk.OpcConvert.ToString(status.CurrentTime); MaxReturnValuesTB.Text = OpcClientSdk.OpcConvert.ToString(status.MaxReturnValues); } catch (Exception e) { VendorInfoTB.Text = null; ProductVersionTB.Text = null; ServerStateTB.Text = null; StatusInfoTB.Text = e.Message; StartTimeTB.Text = null; CurrentTimeTB.Text = null; MaxReturnValuesTB.Text = null; } }
/// <summary> /// Returns the current server status. /// </summary> /// <returns>The current server status.</returns> public OpcServerStatus GetServerStatus() { LicenseHandler.ValidateFeatures(LicenseHandler.ProductFeature.AlarmsConditions); if (Server == null) { throw new NotConnectedException(); } OpcServerStatus status = ((ITsCAeServer)Server).GetServerStatus(); if (status != null) { if (status.StatusInfo == null) { status.StatusInfo = GetString($"serverState.{status.ServerState}"); } } else { if (Server == null) { throw new NotConnectedException(); } } return(status); }
/// <summary> /// Completes an asynchronous get status request and updates the control. /// </summary> private void OnGetStatus(IAsyncResult result) { if (InvokeRequired) { BeginInvoke(new AsyncCallback(OnGetStatus), result); return; } try { OpcGetStatusDelegate callback = (OpcGetStatusDelegate)result.AsyncState; OpcServerStatus status = callback.EndInvoke(result); //ShowPanels = true; infoPn_.Text = status.VendorInfo; statePn_.Text = (status.StatusInfo == null)?status.ServerState.ToString():status.StatusInfo; timePn_.Text = status.CurrentTime.ToString(); } catch (Exception e) { //ShowPanels = false; Text = e.Message; } }
/// <summary> /// Get the status of the server. /// </summary> private void GetStatus() { try { OpcServerStatus status = mServer_.GetServerStatus(); vendorInfoTb_.Text = status.VendorInfo; productVersionTb_.Text = status.ProductVersion; serverStateTb_.Text = Technosoftware.DaAeHdaClient.OpcConvert.ToString(status.ServerState); statusInfoTb_.Text = status.StatusInfo; startTimeTb_.Text = Technosoftware.DaAeHdaClient.OpcConvert.ToString(status.StartTime); currentTimeTb_.Text = Technosoftware.DaAeHdaClient.OpcConvert.ToString(status.CurrentTime); lastUpdateTimeTb_.Text = Technosoftware.DaAeHdaClient.OpcConvert.ToString(status.LastUpdateTime); } catch (Exception e) { vendorInfoTb_.Text = null; productVersionTb_.Text = null; serverStateTb_.Text = null; statusInfoTb_.Text = e.Message; startTimeTb_.Text = null; currentTimeTb_.Text = null; lastUpdateTimeTb_.Text = null; } }
/// <summary> /// Set things in motion so your service can do its work. /// </summary> protected override void OnStart(string[] args) { const string serverName = "opcda://localhost/Technosoftware.DaSample"; try { myDaServer = new TsCDaServer(); myDaServer.Connect(serverName); OpcServerStatus status = myDaServer.GetServerStatus(); // Add a group with default values Active = true and UpdateRate = 500ms TsCDaSubscriptionState groupState = new TsCDaSubscriptionState(); groupState.Name = "MyGroup"; // Group Name group = (TsCDaSubscription)myDaServer.CreateSubscription(groupState); // Add Items TsCDaItem[] items = new TsCDaItem[3]; TsCDaItemResult[] itemResults; items[0] = new TsCDaItem(); items[0].ItemName = "SimulatedData.Ramp"; // Item Name items[0].ClientHandle = 100; // Client Handle items[0].MaxAgeSpecified = true; items[0].MaxAge = Int32.MaxValue; items[1] = new TsCDaItem(); items[1].ItemName = "SimulatedData.Random"; // Item Name items[1].ClientHandle = 150; // Client Handle items[2] = new TsCDaItem(); items[2].ItemName = "InOut_I4"; // Item Name items[2].ClientHandle = 200; // Client Handle TsCDaItem[] arAddedItems; itemResults = group.AddItems(items); for (int i = 0; i < itemResults.GetLength(0); i++) { if (itemResults[i].Result.IsError()) { Console.WriteLine(" Item " + itemResults[i].ItemName + "could not be added to the group"); } } arAddedItems = itemResults; group.DataChangedEvent += new TsCDaDataChangedEventHandler(DataChangeHandler); Console.WriteLine("Wait 5 seconds ..."); //System.Threading.Thread.Sleep(5000); } catch (OpcResultException e) { Console.WriteLine(" " + e.Message); return; } catch (Exception e) { Console.WriteLine(" " + e.Message); return; } }
/// <summary> /// Allocates and marshals a OPCSERVERSTATUS structure. /// </summary> internal static OpcRcw.Da.OPCSERVERSTATUS GetServerStatus(OpcServerStatus input, int groupCount) { OpcRcw.Da.OPCSERVERSTATUS output = new OpcRcw.Da.OPCSERVERSTATUS(); if (input != null) { output.szVendorInfo = input.VendorInfo; output.wMajorVersion = 0; output.wMinorVersion = 0; output.wBuildNumber = 0; output.dwServerState = (OpcRcw.Da.OPCSERVERSTATE)input.ServerState; output.ftStartTime = Convert(Technosoftware.DaAeHdaClient.Com.Interop.GetFILETIME(input.StartTime)); output.ftCurrentTime = Convert(Technosoftware.DaAeHdaClient.Com.Interop.GetFILETIME(input.CurrentTime)); output.ftLastUpdateTime = Convert(Technosoftware.DaAeHdaClient.Com.Interop.GetFILETIME(input.LastUpdateTime)); output.dwBandWidth = -1; output.dwGroupCount = groupCount; output.wReserved = 0; if (input.ProductVersion != null) { string[] versions = input.ProductVersion.Split(new char[] { '.' }); if (versions.Length > 0) { try { output.wMajorVersion = System.Convert.ToInt16(versions[0]); } catch { output.wMajorVersion = 0; } } if (versions.Length > 1) { try { output.wMinorVersion = System.Convert.ToInt16(versions[1]); } catch { output.wMinorVersion = 0; } } output.wBuildNumber = 0; for (int ii = 2; ii < versions.Length; ii++) { try { output.wBuildNumber = (short)(output.wBuildNumber * 100 + System.Convert.ToInt16(versions[ii])); } catch { output.wBuildNumber = 0; break; } } } } return(output); }
public void Run() { try { const string serverUrl = "opcda://localhost/Technosoftware.DaSample"; Console.WriteLine(); Console.WriteLine("Simple OPC DA Client based on the OPC DA/AE/HDA Client SDK .NET Standard"); Console.WriteLine("------------------------------------------------------------------------"); Console.Write(" Press <Enter> to connect to "); Console.WriteLine(serverUrl); Console.ReadLine(); Console.WriteLine(" Please wait..."); TsCDaServer myDaServer = new TsCDaServer(); // Connect to the server myDaServer.Connect(serverUrl); // Get the status from the server OpcServerStatus status = myDaServer.GetServerStatus(); Console.WriteLine($" Status of Server is {status.ServerState}"); Console.WriteLine(" Connected, press <Enter> to create an active group object and add several items."); Console.ReadLine(); // Add a group with default values Active = true and UpdateRate = 500ms TsCDaSubscriptionState groupState = new TsCDaSubscriptionState { Name = "MyGroup" /* Group Name*/ }; var group = (TsCDaSubscription)myDaServer.CreateSubscription(groupState); // Add Items TsCDaItem[] items = new TsCDaItem[4]; items[0] = new TsCDaItem { ItemName = "SimulatedData.Ramp", ClientHandle = 100, MaxAgeSpecified = true, MaxAge = 0, Active = true, ActiveSpecified = true }; // Item Name // Client Handle // Read from Cache items[1] = new TsCDaItem { ItemName = "CTT.SimpleTypes.InOut.Integer", ClientHandle = 150, Active = true, ActiveSpecified = true }; // Item Name // Client Handle items[2] = new TsCDaItem { ItemName = "CTT.SimpleTypes.InOut.Short", ClientHandle = 200, Active = false, ActiveSpecified = true }; // Item Name // Client Handle items[3] = new TsCDaItem { ItemName = "CTT.Arrays.InOut.Word[]", ClientHandle = 250, Active = false, ActiveSpecified = true }; // Item Name // Client Handle // Synchronous Read with server read function (DA 3.0) without a group TsCDaItemValueResult[] itemValues = myDaServer.Read(items); for (int i = 0; i < itemValues.GetLength(0); i++) { if (itemValues[i].Result.IsError()) { Console.WriteLine($" Item {itemValues[i].ItemName} could not be read"); } } var itemResults = group.AddItems(items); for (int i = 0; i < itemResults.GetLength(0); i++) { if (itemResults[i].Result.IsError()) { Console.WriteLine($" Item {itemResults[i].ItemName} could not be added to the group"); } } Console.WriteLine(""); Console.WriteLine(" Group and items added, press <Enter> to create a data change subscription"); Console.WriteLine(" and press <Enter> again to deactivate the data change subscription."); Console.WriteLine(" This stops the reception of data change notifications."); Console.ReadLine(); group.DataChangedEvent += OnDataChangeEvent; Console.ReadLine(); // Set group inactive groupState.Active = false; group.ModifyState((int)TsCDaStateMask.Active, groupState); Console.WriteLine(" Data change subscription deactivated, press <Enter> to remove all"); Console.WriteLine(" and disconnect from the server."); group.Dispose(); myDaServer.Disconnect(); myDaServer.Dispose(); Console.ReadLine(); Console.WriteLine(" Disconnected from the server."); Console.WriteLine(); } catch (OpcResultException e) { Console.WriteLine(" " + e.Message); Console.ReadLine(); } catch (Exception e) { Console.WriteLine(" " + e.Message); Console.ReadLine(); } }
/////////////////////////////////////////////////////////////////////// #region OPC Sample Functionality void DoOPCCalls() { try { const string serverUrl = "opcda://localhost/Technosoftware.DaSample"; Console.WriteLine(); Console.WriteLine("Simple OPC DA Client based on the OPC DA/AE/HDA Client SDK .NET"); Console.WriteLine("--------------------------------------------------------------"); Console.Write(" Press <Enter> to connect to "); Console.WriteLine(serverUrl); Console.ReadLine(); Console.WriteLine(" Please wait..."); //OpcBase.ValidateLicense("License Key"); TsCDaServer myDaServer = new TsCDaServer(); // Connect to the server myDaServer.Connect(serverUrl); OpcServerStatus status = myDaServer.GetServerStatus(); Console.WriteLine(" Connected, press <Enter> to create an active group object and add several items."); Console.ReadLine(); // Add a group with default values Active = true and UpdateRate = 500ms TsCDaSubscription group; TsCDaSubscriptionState groupState = new TsCDaSubscriptionState { Name = "MyGroup" /* Group Name*/ }; group = (TsCDaSubscription)myDaServer.CreateSubscription(groupState); // Add Items TsCDaItem[] items = new TsCDaItem[2]; TsCDaItemResult[] itemResults; items[0] = new TsCDaItem(); items[0].ItemName = "SimpleTypes.InOut.Integer"; // Item Name items[0].ClientHandle = 100; // Client Handle items[0].Active = true; items[0].ActiveSpecified = true; items[1] = new TsCDaItem(); items[1].ItemName = "SimpleTypes.InOut.Short"; // Item Name items[1].ClientHandle = 200; // Client Handle items[1].Active = false; items[1].ActiveSpecified = true; TsCDaItem[] arAddedItems; itemResults = group.AddItems(items); for (int i = 0; i < itemResults.GetLength(0); i++) { if (itemResults[i].Result.IsError()) { Console.WriteLine(String.Format(" Item {0} could not be added to the group", itemResults[i].ItemName)); } } arAddedItems = itemResults; OpcItemResult[] res; IOpcRequest m_ITRequest; TsCDaItemValue[] arItemValues = new TsCDaItemValue[1]; arItemValues[0] = new TsCDaItemValue(); arItemValues[0].ClientHandle = 100; arItemValues[0].ItemName = "SimpleTypes.InOut.Short"; int val = 0; do { arItemValues[0].Value = val; res = group.Write(arItemValues, 321, new TsCDaWriteCompleteEventHandler(OnWriteCompleteEvent), out m_ITRequest); val++; } while (val < 1000); Console.ReadLine(); group.Dispose(); // optionally, it's not required myDaServer.Disconnect(); // optionally, it's not required Console.ReadLine(); Console.WriteLine(" Disconnected from the server."); Console.WriteLine(); } catch (OpcResultException e) { Console.WriteLine(" " + e.Message); Console.ReadLine(); return; } catch (Exception e) { Console.WriteLine(" " + e.Message); Console.ReadLine(); return; } }