public Rtu(string name, IPEndpoint hostAddres, ushort localDNP3Addres, ushort remoteDNP3Address) { //Considerando uma RTU por Canal Channel = Core.DNP3Manager.AddTCPServer(name, LogLevels.ALL, ServerAcceptMode.CloseExisting, hostAddres.address, hostAddres.port, ChannelListener.Print()); Config = new OutstationStackConfig(); Config.databaseTemplate = new DatabaseTemplate(4, 0, 1, 1, 1, 1, 1, 0, 0); Config.databaseTemplate.analogs[0].clazz = PointClass.Class2; Config.outstation.config.allowUnsolicited = false; Config.link.remoteAddr = remoteDNP3Address; Config.link.localAddr = localDNP3Addres; Outstation = Channel.AddOutstation(name, RejectingCommandHandler.Instance, DefaultOutstationApplication.Instance, Config); Outstation.Enable(); }
public Rtu(int id, string name, IPEndpoint clientAddress, IPEndpoint hostAddres, ushort localDNP3Addres, ushort remoteDNP3Address, Dictionary<int, int> bins, Dictionary<int, int> analogs, Dictionary<int, int> counters, DatabaseTemplate dt, GeminiMap gmap) { Id = id; Name = name; //Considerando uma RTU por Canal if (Core.LoggingEnabled) { Channel = Core.DNP3Manager.AddTCPServer(name, LogLevels.ALL, ServerAcceptMode.CloseExisting, hostAddres.address, hostAddres.port, ChannelListener.Print()); } else { Channel = Core.DNP3Manager.AddTCPServer(name, LogLevels.NONE, ServerAcceptMode.CloseExisting, hostAddres.address, hostAddres.port, ChannelListener.Print()); } //Configuração Padrão de RTU é Outstation Config = new OutstationStackConfig { databaseTemplate = dt }; Config.link.remoteAddr = remoteDNP3Address; Config.link.localAddr = localDNP3Addres; DNP3ToSNMPBinaries = bins; DNP3ToSNMPAnalogs = analogs; DNP3ToSNMPCounters = counters; Outstation = Channel.AddOutstation(name, RejectingCommandHandler.Instance, DefaultOutstationApplication.Instance, Config); Outstation.Enable(); geminiMap = gmap; Target = new SnmpTarget(clientAddress.address, clientAddress.port, Core.Settings.SNMPTimeout, Core.Settings.SNMPRetry); foreach (KeyValuePair<int, int> map in DNP3ToSNMPBinaries) { Target.InsertObject(Core.OidLibrary.GetLabelFromId(map.Value), Core.OidLibrary.GetOidFromId(map.Value)); } foreach (KeyValuePair<int, int> map in DNP3ToSNMPAnalogs) { Target.InsertObject(Core.OidLibrary.GetLabelFromId(map.Value), Core.OidLibrary.GetOidFromId(map.Value)); } foreach (KeyValuePair<int, int> map in DNP3ToSNMPCounters) { Target.InsertObject(Core.OidLibrary.GetLabelFromId(map.Value), Core.OidLibrary.GetOidFromId(map.Value)); } MonitorThread = new Timer(new TimerCallback(Update), null, TimeSpan.FromMilliseconds(10), TimeSpan.FromSeconds(Core.Settings.GatewayPoolingTime)); }