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"); } }
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); } }
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); } }
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); }
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); }
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 } } } }