public static bool StopServer() { try { UpdateModBus.CloseModBus(); if (_iedServer != null) { if (_iedServer.IsRunning()) { _iedServer.Stop(); _iedServer.Destroy(); _iedServer = null; } } ServerModel.Model?.Clear(); UpdateServer.Clear(); Log.Log.Write(@"ServerIEC61850.StopServer: ServerIEC61850 stoped", @"Stop"); } catch { Log.Log.Write(@"ServerIEC61850.StopServer: No valid ServerIEC61850 found!", @"Error"); Log.Log.Write(@"ServerIEC61850.StopServer: ServerIEC61850 stoped", @"Stop"); return(false); } return(true); }
public static void InitUpdate(IedServer iedServer, IedModel iedModel) { foreach (var item in UpdateDataObj.UpdateListDestination) { item.BaseClass.InitServer(item.NameDataObj, iedServer, iedModel); } }
public void AccessDataModelClientServer() { IedModel iedModel = ConfigFileParser.CreateModelFromConfigFile("../../model.cfg"); ModelNode ind1 = iedModel.GetModelNodeByShortObjectReference("GenericIO/GGIO1.Ind1.stVal"); Assert.IsTrue(ind1.GetType().Equals(typeof(IEC61850.Server.DataAttribute))); IedServer iedServer = new IedServer(iedModel); iedServer.Start(10002); iedServer.UpdateBooleanAttributeValue((IEC61850.Server.DataAttribute)ind1, true); IedConnection connection = new IedConnection(); connection.Connect("localhost", 10002); bool stVal = connection.ReadBooleanValue("simpleIOGenericIO/GGIO1.Ind1.stVal", FunctionalConstraint.ST); Assert.IsTrue(stVal); iedServer.UpdateBooleanAttributeValue((IEC61850.Server.DataAttribute)ind1, false); stVal = connection.ReadBooleanValue("simpleIOGenericIO/GGIO1.Ind1.stVal", FunctionalConstraint.ST); Assert.IsFalse(stVal); connection.Abort(); iedServer.Stop(); iedServer.Destroy(); }
public override void UpdateServer(string path, IedServer iedServer, IedModel iedModel) { try { var vendorPath = (DataAttribute)iedModel.GetModelNodeByShortObjectReference(path + @".vendor"); var vendorVal = vendor; iedServer.UpdateVisibleStringAttributeValue(vendorPath, vendorVal); var swRevPath = (DataAttribute)iedModel.GetModelNodeByShortObjectReference(path + @".swRev"); var swRevVal = swRev; iedServer.UpdateVisibleStringAttributeValue(swRevPath, swRevVal); var configRevPath = (DataAttribute)iedModel.GetModelNodeByShortObjectReference(path + @".configRev"); var configRevVal = configRev; iedServer.UpdateVisibleStringAttributeValue(configRevPath, configRevVal); var dPath = (DataAttribute)iedModel.GetModelNodeByShortObjectReference(path + @".d"); var dVal = d; iedServer.UpdateVisibleStringAttributeValue(dPath, dVal); } catch { // ignored } }
public override void UpdateServer(string path, IedServer iedServer, IedModel iedModel) { try { var vendorPath = (DataAttribute)iedModel.GetModelNodeByShortObjectReference(path + @".vendor"); var vendorVal = vendor; iedServer.UpdateVisibleStringAttributeValue(vendorPath, vendorVal); var serNumPath = (DataAttribute)iedModel.GetModelNodeByShortObjectReference(path + @".serNum"); var serNumVal = serNum; iedServer.UpdateVisibleStringAttributeValue(serNumPath, serNumVal); var modelPath = (DataAttribute)iedModel.GetModelNodeByShortObjectReference(path + @".model"); var modelVal = model; iedServer.UpdateVisibleStringAttributeValue(modelPath, modelVal); var locationPath = (DataAttribute)iedModel.GetModelNodeByShortObjectReference(path + @".location"); var locationVal = location; iedServer.UpdateVisibleStringAttributeValue(locationPath, locationVal); var hwRevPath = (DataAttribute)iedModel.GetModelNodeByShortObjectReference(path + @".hwRev"); var hwRevVal = hwRev; iedServer.UpdateVisibleStringAttributeValue(hwRevPath, hwRevVal); var swRevPath = (DataAttribute)iedModel.GetModelNodeByShortObjectReference(path + @".swRev"); var swRevVal = vendor; iedServer.UpdateVisibleStringAttributeValue(swRevPath, swRevVal); } catch { // ignored } }
public override void InitServer(string path, IedServer iedServer, IedModel iedModel) { UpdateServer(path, iedServer, iedModel); SetCtlModel(path + @".ctlModel", ctlModel, iedModel, iedServer); SetStringValue(path + @".d", d, iedModel, iedServer); }
public void UpdateServerData(NodeData data, NodeData quality, bool updateQuality, NodeData time, bool updateTimestamp) { DataAttribute da = (DataAttribute)data.SCLServerModelObject; IedServer iedSvr = GetIedServer(); if (da != null && iedSvr != null) { iedSvr.LockDataModel(); if (quality != null && updateQuality) { DataAttribute daq = (DataAttribute)quality.SCLServerModelObject; if (daq != null) { daq.UpdateValue(iedSvr, quality.DataValue); } } if (time != null && updateTimestamp) { DataAttribute dat = (DataAttribute)time.SCLServerModelObject; time.DataValue = DateTime.Now; if (dat != null) { dat.UpdateValue(iedSvr, Util.GetTimeInMs()); } } da.UpdateValue(iedSvr, data.DataValue); iedSvr.UnlockDataModel(); } }
internal ControlAction(IntPtr self, IedServer.ControlHandlerInfo info, IedServer iedServer) { this.self = self; this.info = info; this.iedServer = iedServer; }
private void TestServer(object obj) { SCLServer self = (SCLServer)obj; IedModel model = new IedModel("bubak"); LogicalDevice ldevice1 = new LogicalDevice("strasidlo", model); LogicalNode lln0 = new LogicalNode("LLN0", ldevice1); DataObject lln0_mod = CDCFactory.CDC_ENG("Mod", lln0, CDCOptions.NONE); DataObject lln0_health = CDCFactory.CDC_ENG("Health", lln0, CDCOptions.NONE); SettingGroupControlBlock sgcb = new SettingGroupControlBlock(lln0, 1, 1); /* Add a temperature sensor LN */ LogicalNode ttmp1 = new LogicalNode("TTMP1", ldevice1); DataObject ttmp1_tmpsv = CDCFactory.CDC_SAV("TmpSv", ttmp1, 0, false); DataAttribute temperatureValue = ttmp1_tmpsv.GetChild_DataAttribute("instMag.f"); DataAttribute temperatureTimestamp = ttmp1_tmpsv.GetChild_DataAttribute("t"); IEC61850.Server.DataSet dataSet = new IEC61850.Server.DataSet("events", lln0); DataSetEntry dse = new DataSetEntry(dataSet, "TTMP1$MX$TmpSv$instMag$f", -1, null); IEC61850.Common.ReportOptions rptOptions = IEC61850.Common.ReportOptions.SEQ_NUM | IEC61850.Common.ReportOptions.TIME_STAMP | IEC61850.Common.ReportOptions.REASON_FOR_INCLUSION; IEC61850.Server.ReportControlBlock rcb1 = new IEC61850.Server.ReportControlBlock("events01", lln0, "events01", false, null, 1, IEC61850.Common.TriggerOptions.DATA_CHANGED, rptOptions, 50, 0); IEC61850.Server.ReportControlBlock rcb2 = new IEC61850.Server.ReportControlBlock("events02", lln0, "events02", true, null, 1, IEC61850.Common.TriggerOptions.DATA_CHANGED | IEC61850.Common.TriggerOptions.GI, rptOptions, 50, 0); IedServer server = new IedServer(model); server.Start(tcpPort); logger.LogInfo(String.Format("SCL Server Started at port 102!!!")); float val = 0.0f; while (_run) { server.LockDataModel(); temperatureValue.MmsValue.SetFloat(val); temperatureTimestamp.MmsValue.SetUtcTimeMs(Util.GetTimeInMs()); server.UnlockDataModel(); val += 0.1f; int waitres = WaitHandle.WaitAny(_waitHandles, 500); switch (waitres) { case 0: // endthread self._run = false; break; case WaitHandle.WaitTimeout: break; } } logger.LogInfo(String.Format("SCL Server Finished!!!")); }
public override void InitServer(string path, IedServer iedServer, IedModel iedModel) { UpdateServer(path, iedServer, iedModel); SetStringValue(path + @".addr", d, iedModel, iedServer); SetStringValue(path + @".addInfo", d, iedModel, iedServer); SetStringValue(path + @".d", d, iedModel, iedServer); }
public override void UpdateServer(string path, IedServer iedServer, IedModel iedModel) { QualityCheckClass(); SetInt32Value(path + @".stVal", stVal, iedModel, iedServer); SetDataTimeValue(path + @".t", t, iedModel, iedServer); SetQualityValue(path + @".q", q.Validity, iedModel, iedServer); }
internal void SetSingleValue(string name, Single?value, IedModel iedModel, IedServer iedServer) { if (value != null) { var namePath = (DataAttribute)iedModel.GetModelNodeByShortObjectReference(name); var val = Convert.ToSingle(value); iedServer.UpdateAttributeValue(namePath, new MmsValue(val)); } }
internal void SetInt32Value(string name, Int32?value, IedModel iedModel, IedServer iedServer) { if (value != null) { var namePath = (DataAttribute)iedModel.GetModelNodeByShortObjectReference(name); var val = Convert.ToInt32(value); iedServer.UpdateInt32AttributeValue(namePath, val); } }
internal void SetStringValue(string name, String value, IedModel iedModel, IedServer iedServer) { if (!string.IsNullOrEmpty(value)) { var namePath = (DataAttribute)iedModel.GetModelNodeByShortObjectReference(name); var val = value; iedServer.UpdateVisibleStringAttributeValue(namePath, val); } }
internal void SetQualityValue(string name, UInt16?value, IedModel iedModel, IedServer iedServer) { if (value != null) { var namePath = (DataAttribute)iedModel.GetModelNodeByShortObjectReference(name); var val = Convert.ToUInt16(value); iedServer.UpdateQuality(namePath, val); } }
public override void InitServer(string path, IedServer iedServer, IedModel iedModel) { UpdateServer(path, iedServer, iedModel); var dPath = (DataAttribute)iedModel.GetModelNodeByShortObjectReference(path + @".d"); var dVal = d; iedServer.UpdateVisibleStringAttributeValue(dPath, dVal); }
public override void UpdateServer(string path, IedServer iedServer, IedModel iedModel) { QualityCheckClass(); SetSingleValue(path + @".instMag.f", instMag.f, iedModel, iedServer); SetDataTimeValue(path + @".t", t, iedModel, iedServer); SetQualityValue(path + @".q", q.Validity, iedModel, iedServer); }
public void ControlWriteAccessToServer() { IedModel iedModel = ConfigFileParser.CreateModelFromConfigFile("../../model.cfg"); IEC61850.Server.DataAttribute opDlTmms = (IEC61850.Server.DataAttribute)iedModel.GetModelNodeByShortObjectReference("GenericIO/PDUP1.OpDlTmms.setVal"); IEC61850.Server.DataAttribute rsDlTmms = (IEC61850.Server.DataAttribute)iedModel.GetModelNodeByShortObjectReference("GenericIO/PDUP1.RsDlTmms.setVal"); IedServer iedServer = new IedServer(iedModel); int opDlTmmsValue = 0; iedServer.HandleWriteAccess(opDlTmms, delegate(IEC61850.Server.DataAttribute dataAttr, MmsValue value, ClientConnection con, object parameter) { opDlTmmsValue = value.ToInt32(); return(MmsDataAccessError.SUCCESS); }, null); iedServer.HandleWriteAccess(rsDlTmms, delegate(IEC61850.Server.DataAttribute dataAttr, MmsValue value, ClientConnection con, object parameter) { if (value.ToInt32() > 1000) { return(MmsDataAccessError.OBJECT_VALUE_INVALID); } else { return(MmsDataAccessError.SUCCESS); } }, null); iedServer.Start(10002); IedConnection connection = new IedConnection(); connection.Connect("localhost", 10002); connection.WriteValue("simpleIOGenericIO/PDUP1.OpDlTmms.setVal", FunctionalConstraint.SP, new MmsValue((int)1234)); try { connection.WriteValue("simpleIOGenericIO/PDUP1.RsDlTmms.setVal", FunctionalConstraint.SP, new MmsValue((int)1234)); } catch (IedConnectionException e) { Assert.AreEqual(IedClientError.IED_ERROR_OBJECT_VALUE_INVALID, e.GetIedClientError()); } connection.WriteValue("simpleIOGenericIO/PDUP1.RsDlTmms.setVal", FunctionalConstraint.SP, new MmsValue((int)999)); MmsValue rsDlTmmsValue = iedServer.GetAttributeValue(rsDlTmms); Assert.AreEqual(999, rsDlTmmsValue.ToInt32()); connection.Abort(); iedServer.Stop(); Assert.AreEqual((int)1234, opDlTmmsValue); iedServer.Destroy(); }
public override void UpdateServer(string path, IedServer iedServer, IedModel iedModel) { QualityCheckClass(); SetInt64Value(path + @".actVal", actVal, iedModel, iedServer); SetSingleValue(path + @".pulsQty", pulsQty / actVal, iedModel, iedServer); SetDataTimeValue(path + @".t", t, iedModel, iedServer); SetQualityValue(path + @".q", q.Validity, iedModel, iedServer); }
public override void UpdateServer(string path, IedServer iedServer, IedModel iedModel) { QualityCheckClass(); SetUInt32Value(path + @".cnt", cnt, iedModel, iedServer); SetSecurityviolationValue(path + @".sev", sev, iedModel, iedServer); SetDataTimeValue(path + @".t", t, iedModel, iedServer); SetQualityValue(path + @".q", q.Validity, iedModel, iedServer); }
public void ConnectionHandler() { IedModel iedModel = ConfigFileParser.CreateModelFromConfigFile("../../model.cfg"); int handlerCalled = 0; int connectionCount = 0; IedServer iedServer = new IedServer(iedModel); string ipAddress = null; iedServer.SetConnectionIndicationHandler(delegate(IedServer server, ClientConnection clientConnection, bool connected, object parameter) { handlerCalled++; if (connected) { connectionCount++; } else { connectionCount--; } ipAddress = clientConnection.GetPeerAddress(); }, null); iedServer.Start(10002); IedConnection con1 = new IedConnection(); con1.Connect("localhost", 10002); Assert.AreEqual(1, handlerCalled); Assert.AreEqual(1, connectionCount); IedConnection con2 = new IedConnection(); con2.Connect("localhost", 10002); Assert.AreEqual(2, handlerCalled); Assert.AreEqual(2, connectionCount); con1.Abort(); con2.Abort(); Assert.AreEqual(4, handlerCalled); Assert.AreEqual(0, connectionCount); Assert.AreEqual("127.0.0.1:", ipAddress.Substring(0, 10)); iedServer.Stop(); iedServer.Dispose(); }
public override void InitServer(string path, IedServer iedServer, IedModel iedModel) { UpdateServer(path, iedServer, iedModel); SetInt32Value(path + @".units.SIUnit", Unit.SIUnit, iedModel, iedServer); SetInt32Value(path + @".units.multiplier", Unit.Multiplier, iedModel, iedServer); SetSingleValue(path + @".sVC.scaleFactor", sVC.ScaleFactor, iedModel, iedServer); SetSingleValue(path + @".sVC.offset", sVC.Offset, iedModel, iedServer); SetStringValue(path + @".d", d, iedModel, iedServer); }
public void ControlWriteAccessComplexDAToServer() { IedModel iedModel = ConfigFileParser.CreateModelFromConfigFile("../../model2.cfg"); IEC61850.Server.DataAttribute setAnVal_setMag = (IEC61850.Server.DataAttribute)iedModel.GetModelNodeByShortObjectReference("GenericIO/LLN0.SetAnVal.setMag"); IedServer iedServer = new IedServer(iedModel); int handlerCalled = 0; MmsValue receivedValue = null; iedServer.SetWriteAccessPolicy(FunctionalConstraint.SP, AccessPolicy.ACCESS_POLICY_DENY); iedServer.HandleWriteAccessForComplexAttribute(setAnVal_setMag, delegate(IEC61850.Server.DataAttribute dataAttr, MmsValue value, ClientConnection con, object parameter) { receivedValue = value; handlerCalled++; return(MmsDataAccessError.SUCCESS); }, null); iedServer.Start(10002); IedConnection connection = new IedConnection(); connection.Connect("localhost", 10002); MmsValue complexValue = MmsValue.NewEmptyStructure(1); complexValue.SetElement(0, new MmsValue((float)1.0)); connection.WriteValue("simpleIOGenericIO/LLN0.SetAnVal.setMag", FunctionalConstraint.SP, complexValue); Assert.NotNull(receivedValue); Assert.AreEqual(MmsType.MMS_STRUCTURE, receivedValue.GetType()); Assert.AreEqual(1.0, receivedValue.GetElement(0).ToFloat()); receivedValue.Dispose(); receivedValue = null; connection.WriteValue("simpleIOGenericIO/LLN0.SetAnVal.setMag.f", FunctionalConstraint.SP, new MmsValue((float)2.0)); Assert.NotNull(receivedValue); Assert.AreEqual(MmsType.MMS_FLOAT, receivedValue.GetType()); Assert.AreEqual(2.0, receivedValue.ToFloat()); connection.Abort(); iedServer.Stop(); iedServer.Dispose(); }
public static void Main(string[] args) { bool running = true; /* run until Ctrl-C is pressed */ Console.CancelKeyPress += delegate(object sender, ConsoleCancelEventArgs e) { e.Cancel = true; running = false; }; IedModel iedModel = ConfigFileParser.CreateModelFromConfigFile("../../model.cfg"); if (iedModel == null) { Console.WriteLine("No valid data model found!"); return; } DataObject spcso1 = (DataObject)iedModel.GetModelNodeByShortObjectReference("GenericIO/GGIO1.SPCSO1"); IedServer iedServer = new IedServer(iedModel); iedServer.SetControlHandler(spcso1, delegate(DataObject controlObject, object parameter, MmsValue ctlVal, bool test) { bool val = ctlVal.GetBoolean(); if (val) { Console.WriteLine("received binary control command: on"); } else { Console.WriteLine("received binary control command: off"); } return(ControlHandlerResult.OK); }, null); iedServer.Start(102); Console.WriteLine("Server started"); GC.Collect(); while (running) { Thread.Sleep(1); } iedServer.Stop(); Console.WriteLine("Server stopped"); iedServer.Destroy(); }
public override void UpdateServer(string path, IedServer iedServer, IedModel iedModel) { QualityCheckClass(); SetBooleanValue(path + @".general", general, iedModel, iedServer); SetBooleanValue(path + @".phsA", phsA, iedModel, iedServer); SetBooleanValue(path + @".phsB", phsB, iedModel, iedServer); SetBooleanValue(path + @".phsC", phsC, iedModel, iedServer); SetBooleanValue(path + @".neut", neut, iedModel, iedServer); SetDataTimeValue(path + @".t", t, iedModel, iedServer); SetQualityValue(path + @".q", q.Validity, iedModel, iedServer); }
public void ControlHandler() { IedModel iedModel = ConfigFileParser.CreateModelFromConfigFile("../../model.cfg"); DataObject spcso1 = (DataObject)iedModel.GetModelNodeByShortObjectReference("GenericIO/GGIO1.SPCSO1"); Assert.IsNotNull(spcso1); int handlerCalled = 0; IedServer iedServer = new IedServer(iedModel); iedServer.SetControlHandler(spcso1, delegate(ControlAction action, object parameter, MmsValue ctlVal, bool test) { byte [] orIdent = action.GetOrIdent(); string orIdentStr = System.Text.Encoding.UTF8.GetString(orIdent, 0, orIdent.Length); Assert.AreEqual("TEST1234", orIdentStr); Assert.AreEqual(OrCat.MAINTENANCE, action.GetOrCat()); Assert.AreSame(spcso1, action.GetControlObject()); handlerCalled++; return(ControlHandlerResult.OK); }, null); iedServer.Start(10002); IedConnection connection = new IedConnection(); connection.Connect("localhost", 10002); ControlObject controlClient = connection.CreateControlObject("simpleIOGenericIO/GGIO1.SPCSO1"); controlClient.SetOrigin("TEST1234", OrCat.MAINTENANCE); Assert.IsNotNull(controlClient); controlClient.Operate(true); connection.Abort(); Assert.AreEqual(1, handlerCalled); iedServer.Stop(); iedServer.Destroy(); }
private void WorkerThreadProc(object obj) { SCLServer self = (SCLServer)obj; logger.LogInfo(String.Format("SCL Server " + sclModel.iec.Name + " - Creating model. It takes a while...")); IedModel model = makeIecModel(); server = new IedServer(model); InitializeValues(sclModel.iec); server.Start(tcpPort); //Thread.Sleep(100); if (!server.isRunning()) { logger.LogError(String.Format("SCL Server " + sclModel.iec.Name + " Failed at port " + tcpPort.ToString() + "!!!")); self._run = false; } else { logger.LogInfo(String.Format("SCL Server " + sclModel.iec.Name + " Started at port " + tcpPort.ToString() + "!!!")); } while (self._run) { int waitres = WaitHandle.WaitAny(_waitHandles, 500); switch (waitres) { case 0: // endthread self._run = false; break; case WaitHandle.WaitTimeout: if (!server.isRunning()) //logger.LogInfo("Server not running???"); { self._run = false; } break; } } server.Stop(); resetModelObjects(sclModel.iec); server.Dispose(); server = null; model.Dispose(); model = null; sclModel = null; logger.LogInfo(String.Format("SCL Server Stopped")); }
private static void UpdateDateTime(string path, string value, IedServer iedServer, IedModel iedModel) { iedServer.LockDataModel(); try { DateTime str = Convert.ToDateTime(value); iedServer.UpdateUTCTimeAttributeValue((DataAttribute)iedModel.GetModelNodeByShortObjectReference(path), str); } catch { // ignored } iedServer.UnlockDataModel(); }
private static void UpdateUshort(string path, string value, IedServer iedServer, IedModel iedModel) { iedServer.LockDataModel(); try { ushort str = Convert.ToUInt16(value); iedServer.UpdateQuality((DataAttribute)iedModel.GetModelNodeByShortObjectReference(path), str); } catch { // ignored } iedServer.UnlockDataModel(); }
public s61850(ILogger <s61850> logger, IServiceScopeFactory scopeFactory, IHubContext <SignalRHub, IHub> hub) { _logger = logger; _scopeFactory = scopeFactory; _hub = hub; iedModel = ConfigFileParser.CreateModelFromConfigFile("model.cfg"); if (iedModel == null) { _logger.LogError("SYSERR: No Valid DataModel Found!"); return; } config = new IedServerConfig(); config.ReportBufferSize = 100000; iedServer = new IedServer(iedModel, config); }