Beispiel #1
0
        public static void Main(string[] args)
        {
            IedConnection con = new IedConnection();

            string hostname;

            if (args.Length > 0)
            {
                hostname = args[0];
            }
            else
            {
                hostname = "127.0.0.1";
            }

            int port = 102;

            if (args.Length > 1)
            {
                port = Int32.Parse(args [1]);
            }

            Console.WriteLine("Connect to " + hostname);

            try
            {
                con.MaxPduSize = 1000;

                con.StateChanged = delegate(IedConnection connection, IedConnectionState newState) {
                    Console.WriteLine("state change: " + newState.ToString());
                };

                con.Connect(hostname, port);

                AutoResetEvent waitForCallback = new AutoResetEvent(false);

                List <string> ldList = null;

                con.GetServerDirectoryAsync(ldList, null, delegate(uint invokeId, object parameter, IedClientError err, System.Collections.Generic.List <string> nameList, bool moreFollows) {
                    if (nameList != null)
                    {
                        ldList = nameList;
                    }
                    else
                    {
                        Console.WriteLine("Get server directory error: " + err.ToString());
                    }

                    waitForCallback.Set();
                }, null);

                waitForCallback.WaitOne();

                if (ldList != null)
                {
                    string firstLdName = null;

                    Console.WriteLine("Server directory:");

                    foreach (string ldName in ldList)
                    {
                        Console.WriteLine("  LD: " + ldName);
                        if (firstLdName == null)
                        {
                            firstLdName = ldName;
                        }
                    }

                    bool   moreVariabesFollows = true;
                    string lastVariableName    = null;

                    List <string> variablesList = new List <string>();

                    while (moreVariabesFollows)
                    {
                        waitForCallback.Reset();

                        con.GetLogicalDeviceVariablesAsync(variablesList, firstLdName, lastVariableName, delegate(uint invokeId, object parameter, IedClientError err, List <string> nameList, bool moreFollows) {
                            if (nameList != null)
                            {
                                if (moreFollows)
                                {
                                    Console.WriteLine("More variables available...");
                                }

                                lastVariableName = nameList[nameList.Count - 1];
                            }
                            else
                            {
                                Console.WriteLine("Get logical device variables error: " + err.ToString());
                            }


                            moreVariabesFollows = moreFollows;

                            waitForCallback.Set();
                        }, null);

                        waitForCallback.WaitOne();
                    }

                    Console.WriteLine("Variables in logical device {0}:", firstLdName);

                    foreach (string variableName in variablesList)
                    {
                        Console.WriteLine("  {0}", variableName);
                    }
                }

                Console.WriteLine("Now read variables...");

                /* read FCDO */
                con.ReadValueAsync("simpleIOGenericIO/GGIO1.AnIn1", FunctionalConstraint.MX, delegate(uint invokeId, object parameter, IedClientError err, MmsValue value) {
                    if (err == IedClientError.IED_ERROR_OK)
                    {
                        if (value.GetType() == MmsType.MMS_STRUCTURE)
                        {
                            Console.WriteLine("Value is of complex type");

                            for (int i = 0; i < value.Size(); i++)
                            {
                                Console.WriteLine("  element: " + value.GetElement(i).GetType());
                                if (value.GetElement(i).GetType() == MmsType.MMS_UTC_TIME)
                                {
                                    Console.WriteLine("   -> " + value.GetElement(i).GetUtcTimeAsDateTimeOffset());
                                }
                            }
                        }
                    }
                    else
                    {
                        Console.WriteLine("Read error: " + err.ToString());
                    }
                }, null);

                con.ReadValueAsync("simpleIOGenericIO/GGIO1.AnIn1", FunctionalConstraint.MX, delegate(uint invokeId, object parameter, IedClientError err, MmsValue value) {
                    if (err == IedClientError.IED_ERROR_OK)
                    {
                        if (value.GetType() == MmsType.MMS_STRUCTURE)
                        {
                            Console.WriteLine("Value is of complex type");

                            for (int i = 0; i < value.Size(); i++)
                            {
                                Console.WriteLine("  element: " + value.GetElement(i).GetType());
                                if (value.GetElement(i).GetType() == MmsType.MMS_UTC_TIME)
                                {
                                    Console.WriteLine("   -> " + value.GetElement(i).GetUtcTimeAsDateTimeOffset());
                                }
                            }
                        }
                    }
                    else
                    {
                        Console.WriteLine("Read error: " + err.ToString());
                    }
                }, null);

                Thread.Sleep(5000);

                con.Abort();

                Console.WriteLine("Aborted");
            }
            catch (IedConnectionException e)
            {
                Console.WriteLine(e.Message);
            }

            System.Threading.Thread.Sleep(2000);

            // release all resources - do NOT use the object after this call!!
            con.Dispose();
        }