コード例 #1
0
        /// <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;
            }
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
        /// <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;
            }
        }
コード例 #5
0
        /// <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;
            }
        }
コード例 #7
0
        /// <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;
            }
        }
コード例 #8
0
        /// <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;
            }
        }
コード例 #9
0
        /// <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);
        }
コード例 #10
0
        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();
            }
        }
コード例 #11
0
        ///////////////////////////////////////////////////////////////////////
        #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;
            }
        }