Пример #1
0
        static void Main(string[] args)
        {
            IDNP3Manager mgr = DNP3ManagerFactory.CreateManager();

            mgr.AddLogHandler(PrintingLogAdapter.Instance); //this is optional
            var channel = mgr.AddTCPServer("server", LogLevel.INFO, 5000, "127.0.0.1", 20000);

            //optionally, add a listener for the channel state
            channel.AddStateListener(state => Console.WriteLine("Server state: " + state));

            var config     = new SlaveStackConfig();
            var outstation = channel.AddOutstation("outstation", LogLevel.INFO, RejectingCommandHandler.Instance, config);

            //optionally, add a listener for the stack state
            outstation.AddStateListener(state => Console.WriteLine("Outstation state: " + state));

            Console.WriteLine("Press <Enter> to randomly change a value");
            var    publisher = outstation.GetDataObserver();
            Random r         = new Random();

            while (true)
            {
                Console.ReadLine();
                int value = r.Next(UInt16.MaxValue);
                System.Console.WriteLine("Change Analog 0 to: " + value);
                publisher.Start();
                publisher.Update(new Analog(value, 1, DateTime.Now), 0);
                publisher.End();
            }
        }
Пример #2
0
        static void Main(string[] args)
        {
            IDNP3Manager mgr = DNP3ManagerFactory.CreateManager();

            mgr.AddLogHandler(PrintingLogAdapter.Instance); //this is optional
            var channel = mgr.AddTCPClient("client", LogLevel.INFO, 5000, "127.0.0.1", 20000);

            //optionally, add a listener for the channel state
            channel.AddStateListener(state => Console.WriteLine("Client state: " + state));

            var config = new MasterStackConfig();

            config.link.useConfirms = true; //setup your stack configuration here.
            var master = channel.AddMaster("master", LogLevel.INFO, PrintingDataObserver.Instance, config);

            //optionally, add a listener for the stack state
            master.AddStateListener(state => Console.WriteLine("Master state: " + state));

            Console.WriteLine("Enter an index to send a command");

            while (true)
            {
                System.UInt32 index  = System.UInt32.Parse(Console.ReadLine());
                var           future = master.GetCommandProcessor().SelectAndOperate(new ControlRelayOutputBlock(ControlCode.CC_PULSE, 1, 100, 100), index);
                CommandStatus result = future.Await();
                Console.WriteLine("Result: " + result);
            }
        }
Пример #3
0
        static void Main(string[] args)
        {
            IDNP3Manager mgr = DNP3ManagerFactory.CreateManager();

            mgr.AddLogHandler(PrintingLogAdapter.Instance); //this is optional
            var channel = mgr.AddTCPServer("server", LogLevels.NORMAL, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(5), "0.0.0.0", 20000);

            // Optional: add a listener for the channel state
            channel.AddStateListener(state => Console.WriteLine("channel state: " + state));

            var config = new OutstationStackConfig();

            // configure the various measurements in our database
            config.databaseTemplate = new DatabaseTemplate(4, 1, 1, 1, 1, 1, 1, 0);
            config.databaseTemplate.binaries[0].clazz = PointClass.Class2;
            // ....
            config.outstation.config.allowUnsolicited = true;

            // Optional: setup your stack configuration here
            config.link.localAddr  = 10;
            config.link.remoteAddr = 1;

            var outstation = channel.AddOutstation("outstation", RejectingCommandHandler.Instance, DefaultOutstationApplication.Instance, config);

            outstation.Enable(); // enable communications

            Console.WriteLine("Press <Enter> to change a value");
            bool   binaryValue = false;
            double analogValue = 0;

            while (true)
            {
                Console.ReadLine();
                binaryValue = !binaryValue;
                ++analogValue;
                System.Console.WriteLine("Change Binary 0 to: " + binaryValue);
                System.Console.WriteLine("Change Analog 9 to: " + analogValue);

                // create a changeset and load it
                var changeset = new ChangeSet();
                changeset.Update(new Binary(binaryValue, 1, DateTime.Now), 0);
                changeset.Update(new Analog(analogValue, 1, DateTime.Now), 0);
                outstation.Load(changeset);
            }
        }
Пример #4
0
        static void Main(string[] args)
        {
            IDNP3Manager mgr = DNP3ManagerFactory.CreateManager();

            mgr.AddLogHandler(PrintingLogAdapter.Instance); //this is optional
            var channel = mgr.AddTCPServer("server", LogLevels.NORMAL, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(5), "0.0.0.0", 20000);

            // Optional: add a listener for the channel state
            channel.AddStateListener(state => Console.WriteLine("channel state: " + state));

            var config = new OutstationStackConfig();

            // configure the various measurements in our database
            config.databaseTemplate = new DatabaseTemplate(4, 1, 1, 1, 1, 1, 1);
            config.databaseTemplate.binaries[0].pointClass = PointClass.Class2;
            // ....

            // Optional: overide the default reporting variations
            config.outstation.eventConfig.binary  = EventBinaryResponse.Group2Var2;
            config.outstation.staticConfig.analog = StaticAnalogResponse.Group30Var5;

            // Optional: setup your stack configuration here
            config.link.localAddr  = 10;
            config.link.remoteAddr = 1;

            var outstation = channel.AddOutstation("outstation", RejectingCommandHandler.Instance, DefaultOutstationApplication.Instance, config);

            outstation.Enable(); // enable communications

            Console.WriteLine("Press <Enter> to randomly change a value");
            var  database = outstation.GetDatabase();
            bool value    = false;

            while (true)
            {
                Console.ReadLine();
                value = !value;
                System.Console.WriteLine("Change Binary 1 to: " + value);
                database.Start();
                database.Update(new Binary(value, 1, DateTime.Now), 0);
                database.End();
            }
        }
Пример #5
0
 // Static Constructor
 static DNP3InputAdapter()
 {
     s_adapters = new List <DNP3InputAdapter>();
     s_manager  = DNP3ManagerFactory.CreateManager(Environment.ProcessorCount);
     s_manager.AddLogHandler(new IaonProxyLogHandler());
 }
Пример #6
0
        static int Main(string[] args)
        {
            IDNP3Manager mgr = DNP3ManagerFactory.CreateManager(1);

            mgr.AddLogHandler(PrintingLogAdapter.Instance); //this is optional
            var channel = mgr.AddTCPClient("client", LogLevels.ALL, ChannelRetry.Default, "127.0.0.1", 20000);

            //optionally, add a listener for the channel state
            channel.AddStateListener(state => Console.WriteLine("channel state: " + state));

            var config = new MasterStackConfig();

            //setup your stack configuration here.
            config.link.localAddr  = 1;
            config.link.remoteAddr = 10;

            var key = new byte[16];

            for (int i = 0; i < key.Length; ++i)
            {
                key[i] = 0xFF;
            }

            var master = channel.AddMaster("master", PrintingSOEHandler.Instance, DefaultMasterApplication.Instance, config);

            // you a can optionally add various kinds of polls
            var integrityPoll = master.AddClassScan(ClassField.AllClasses, TimeSpan.FromMinutes(1), TaskConfig.Default);
            var rangePoll     = master.AddRangeScan(30, 2, 5, 7, TimeSpan.FromSeconds(20), TaskConfig.Default);
            var classPoll     = master.AddClassScan(ClassField.AllEventClasses, TimeSpan.FromSeconds(5), TaskConfig.Default);

            /* you can also do very custom scans
             * var headers = new Header[] { Header.Range8(1, 2, 7, 8), Header.Count8(2, 3, 7) };
             * var weirdPoll = master.AddScan(headers, TimeSpan.FromSeconds(20));
             */

            master.Enable(); // enable communications

            Console.WriteLine("Enter a command");

            while (true)
            {
                switch (Console.ReadLine())
                {
                case "a":
                    // perform an ad-hoc scan of all analogs
                    master.ScanAllObjects(30, 0, TaskConfig.Default);
                    break;

                case "c":
                    var task = master.SelectAndOperate(GetCommandHeaders(), TaskConfig.Default);
                    task.ContinueWith((result) => Console.WriteLine("Result: " + result.Result));
                    break;

                case "o":
                    var crob   = new ControlRelayOutputBlock(ControlCode.PULSE_ON, 1, 100, 100);
                    var single = master.SelectAndOperate(crob, 1, TaskConfig.Default);
                    single.ContinueWith((result) => Console.WriteLine("Result: " + result.Result));
                    break;

                case "l":
                    // add interpretation to the current logging level
                    var filters = channel.GetLogFilters();
                    channel.SetLogFilters(filters.Add(LogFilters.TRANSPORT_TX | LogFilters.TRANSPORT_RX));
                    break;

                case "i":
                    integrityPoll.Demand();
                    break;

                case "r":
                    rangePoll.Demand();
                    break;

                case "e":
                    classPoll.Demand();
                    break;

                case "x":
                    return(0);

                default:
                    break;
                }
            }
        }
Пример #7
0
        static int Main(string[] args)
        {
            IDNP3Manager mgr = DNP3ManagerFactory.CreateManager();

            mgr.AddLogHandler(PrintingLogAdapter.Instance); //this is optional
            var channel = mgr.AddTCPClient("client", LogLevels.NORMAL, TimeSpan.FromSeconds(5), TimeSpan.FromMinutes(2), "127.0.0.1", 20000);

            //optionally, add a listener for the channel state
            channel.AddStateListener(state => Console.WriteLine("channel state: " + state));

            var config = new MasterStackConfig();

            //setup your stack configuration here.
            config.link.localAddr  = 1;
            config.link.remoteAddr = 10;

            var master = channel.AddMaster("master", PrintingSOEHandler.Instance, DefaultMasterApplication.Instance, config);

            // you a can optionally add various kinds of polls
            var integrityPoll = master.AddClassScan(ClassField.AllClasses, TimeSpan.FromMinutes(1));
            var rangePoll     = master.AddRangeScan(30, 2, 5, 7, TimeSpan.FromSeconds(20));
            var classPoll     = master.AddClassScan(ClassField.AllEventClasses, TimeSpan.FromSeconds(5));

            // you a can optionally add state callbacks for monitoring these polls
            integrityPoll.AddScanCallback((PollState state) => Console.WriteLine("integrity poll state change: " + state));
            classPoll.AddScanCallback((PollState state) => Console.WriteLine("class poll state change: " + state));
            rangePoll.AddScanCallback((PollState state) => Console.WriteLine("range poll state change: " + state));


            master.Enable(); // enable communications

            Console.WriteLine("Enter an index to send a command");

            while (true)
            {
                switch (Console.ReadLine())
                {
                case "c":
                    var crob   = new ControlRelayOutputBlock(ControlCode.PULSE, 1, 100, 100);
                    var future = master.GetCommandProcessor().SelectAndOperate(crob, 0);
                    future.Listen((result) => Console.WriteLine("Result: " + result));
                    break;

                case "l":
                    // add interpretation to the current logging level
                    var filters = channel.GetLogFilters();
                    channel.SetLogFilters(filters.Add(LogFilters.TRANSPORT_TX | LogFilters.TRANSPORT_RX));
                    break;

                case "i":
                    integrityPoll.Demand();
                    break;

                case "r":
                    rangePoll.Demand();
                    break;

                case "e":
                    classPoll.Demand();
                    break;

                case "x":
                    return(0);

                default:
                    break;
                }
            }
        }