Esempio n. 1
1
        static void Main(string[] args)
        {
            var sm = new StackManager();
            sm.AddLogHandler(new PrintingLogAdapter()); //this is optional
            sm.AddTCPClient("client", FilterLevel.LEV_INFO, 5000, "127.0.0.1", 20000);
            var config = new MasterStackConfig();
            config.link.useConfirms = true; //setup your stack configuration here.
            var commandAcceptor = sm.AddMaster("client", "master", FilterLevel.LEV_INFO, new PrintingDataObserver(), config);

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

            while (true)
            {
                System.UInt32 index = System.UInt32.Parse(Console.ReadLine());
                DateTime start = DateTime.Now;
                var future = commandAcceptor.AcceptCommand(new BinaryOutput(ControlCode.CC_PULSE, 1, 100, 100), index);
                CommandStatus result = future.Await();
                DateTime end = DateTime.Now;
                TimeSpan duration = end - start;
                Console.WriteLine("Result: " + result + " and took " + duration.Ticks + " Ticks");
            }
        }
Esempio n. 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);
            }
        }
Esempio n. 3
0
 private void MasterSettingsForm_FormClosed(object sender, FormClosedEventArgs e)
 {
     if (DialogResult == DialogResult.OK && OnAddMaster != null)
     {
         MasterStackConfig config = new MasterStackConfig();
         config.link = this.linkLayerSettingsControl1.Config;
         OnAddMaster(this.textBoxName.Text, FilterLevel.LEV_INTERPRET, config);
     }
 }
Esempio n. 4
0
        private void stackBrowser1_OnAddMaster(string name, string port, FilterLevel level, MasterStackConfig config)
        {
            //create the new form
            var observer = new EventedDataObserver(this);
            var display = new MasterDataDisplay(observer.MeasurementSource); //synchronize all updates on this form

            display.Dock = DockStyle.Fill;
            TabPage page = new TabPage(name);
            this.tabControlDisplay.TabPages.Add(page);
            page.Controls.Add(display);
            display.CommandAcceptor = sm.AddMaster(port, name, level, observer, config);
        }
Esempio n. 5
0
 void dialog_OnAddMaster(String name, FilterLevel level, MasterStackConfig config, TreeNode portNode)
 {
     if (this.OnAddMaster != null)
     {
         if (portNode.Nodes.ContainsKey(name))
         {
             MessageBox.Show("Port already contains a stack called: " + name);
         }
         else
         {
             this.OnAddMaster(name, portNode.Text, level, config);
             TreeNode master = portNode.Nodes.Add(name, name);
             EventHandler removeStackAction = (obj, e) => this.RemoveStackClick(portNode, master);
             master.ContextMenuStrip = this.WireNewMasterMenuStrip(removeStackAction);
         }
     }
 }
 private void stackBrowser1_OnAddMaster(string name, string port, FilterLevel level, MasterStackConfig config)
 {
     var observer = new EventedDataObserver(this);
     var control = this.stackDisplayControl.AddMaster(name, observer.MeasurementSource);
     control.CommandAcceptor = sm.AddMaster(port, name, level, observer, config);
 }
Esempio n. 7
0
        public void AddOutstations(List<Outstation> outstations)
        {
            foreach (Outstation o in outstations)
            {
                if (o.OutstationChannelMappings.Count > 0)
                {
                    // Only load the first mapping
                    OutstationChannelMapping m = o.OutstationChannelMappings[0];

                    // Select the first (and should be only) channel that matches the mapping
                    ChannelWrapper cw = null;
                    if ((cw = Channels.SingleOrDefault(x => x.Model.Id == m.ChannelID)) != null)
                    {
                        var config = new MasterStackConfig();
                        config.master.integrityPeriod = TimeSpan.FromSeconds(60);
                        config.master.taskRetryPeriod = TimeSpan.FromSeconds(60);
                        config.link.localAddr = 30001;
                        config.link.remoteAddr = Convert.ToUInt16(o.Address);
                        config.link.timeout = TimeSpan.FromSeconds(10);
                        config.link.useConfirms = true; //setup your stack configuration here.
                        config.app.rspTimeout = TimeSpan.FromSeconds(50);

                        OutstationWrapper OW = new OutstationWrapper(o);
                        var master = cw.Channel.AddMaster("master", LogLevel.Debug, OW, config);
                        OW.Master = master;
                        OW.OnStateChanged += this.Callback_OutstationStateChanged;
                        OW.OnMeasurementsReceived += this.Callback_OutstationMeasurementReceived;

                        master.AddStateListener(new Action<StackState>(OW.StateChanged));

                        var classMask = PointClassHelpers.GetMask(PointClass.PC_CLASS_1, PointClass.PC_CLASS_2, PointClass.PC_CLASS_3);
                        var classScan = master.AddClassScan(classMask, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(60));

                        Outstations.Add(OW);

                        master.Enable(); // enable communications

                    }
                }
            }
        }