/* * Copyright 2013-2025 Michael Zillgith, MZ Automation GmbH * * This file is part of MZ Automation IEC 61850 SDK * * All rights reserved. */ using System.Xml; namespace IEC61850.SCL { public class SclServices { public enum BufMode { UNBUFFERED, BUFFERED, BOTH } public XmlNode XmlNode = null; private XmlDocument xmlDocument = null; private SclDocument sclDocument = null; private bool dynAssociationExists = false; private int dynAssociationMax = -1; /* -1 => not available */ private bool settingGroupsExists = false; private bool sgEditExists = false; private bool confSgExists = false; private bool sgEditResvTms = false; private bool confSgResvTms = false; private bool getDirectoryExists = false; private bool getDataObjectDefinitionExists = false; private bool getDataSetValueExists = false; private bool setDataSetValueExists = false; private bool dataSetDirectoryExists = false; private bool confDataSetExists = false; private int confDataSetMax = 0; /* maximum number of data sets including the preconfigured ones */ private int confDataSetMaxAttributes = -1; /* maximum number of data attributes in a data set */ private bool confDataSetModify = true; /* preconfigured data sets may be modified */ private bool dynDataSetExists = false; private int dynDataSetMax = -1; /* maximum number of dynamic data sets including the preconfigured ones */ private int dynDataSetMaxAttributes = -1; /* maximum number of data attributes in a data set */ private bool readWriteExists = false; /* GetData, SetData, Operate */ private bool timerActivatedControlExists; private bool confReportControlExists = false; /* Capability of static (by configuration via SCL) creation of report control blocks */ private int confReportControlMax = 0; /* maximum number of RCBs including preconfigured ones */ private int confReportControlMaxBuf = 0; /* he maximum number of instantiable buffered control blocks. If it is missing, its value is equal to the max value. If supplied, its value shall be smaller than the max value */ private bool confReportControlBufConf = false; /* if the buffered attribute of a preconfigured report control block can be changed via SCL */ private BufMode confReportControlBufMode = BufMode.BOTH; private bool getCBValuesExists = false; private bool confLogControlExists = false; /* Capability of static creation of log control blocks */ private int confLogControlMax = 0; private bool reportSettingsExists = false; /* Capability of online setting of RCB attributes */ private string reportSettingsCbName = null; private string reportSettingsDatSet = null; private string reportSettingsRptID = null; private string reportSettingsOptFields = null; private string reportSettingsBufTime = null; private string reportSettingsTrgOps = null; private string reportSettingsIntgPd = null; private bool reportSettingsResvTms = false; private bool reportSettingsOwner = false; private bool logSettingsExists = false; /* Capability of online setting of LCB attributes */ private string logSettingsCbName = null; private string logSettingsDatSet = null; private string logSettingsLogEna = null; private string logSettingsTrgOps = null; private string logSettingsIntgPd = null; private bool gseSettingsExists = false; /* Capability of online setting of GSE-CB attributes */ private bool gseSettingsCbName = false; private string gseCbName = null; private string gseDataSet = null; private string gseAppID = null; private string gseDataLabel = null; private bool gseSettingsDatSet = false; private bool gseSettingsKdaParticipant = false; private bool gseSettingsMcSecurity = false; private bool gseSettingsAppId = false; private bool gseSettingsDataLabel = false; /* only for GSSE control blocks */ private bool smvSettingsExists = false; /* Capability of online setting of SMV-CB attributes */ private string smvSettingsCbName = null; private string smvSettingsDatSet = null; private string smvSettingsSvId = null; private string smvSettingsOptFields = null; private string smvSettingsSmpRate = null; private string smvSettingsNofASDU = null; private bool smvSettingsSamplesPerSec = false; private bool smvSettingsSynchrSrcId = false; private bool smvSettingsPdcTimeStamp = false; private bool smvSettingsKdaParticipant = false; private bool smvSettingsSmpRateElement = false; private int smvSettingsSmpRateElementVal = 0; private bool smvSettingsSamplesPerSecElement = false; private int smvSettingsSamplesPerSecElementVal = 0; private bool smvSettingsSecPerSamplesElement = false; private int smvSettingsSecPerSamplesElementVal = 0; private bool confLNsExists = false; /* Defines what can be configured for LNs defined in an ICD file */ private bool confLNsFixPrefix = true; private bool confLNsFixLnInst = true; private bool confLdNameExists = false; private bool valueHandlingExists = false; private bool gseDirExists = false; private bool gooseExists = false; private bool gooseFixedOffs = false; private bool gooseGoose = false; private bool gooseRGOOSE = false; private int gooseMax = 0; /* max number of GOOSE CBs that are configurable for publishing; 0 = only client */ private bool gsseExists = false; private int gsseMax = 0; /* max number of GSSE CBs that are configurable for publishing; 0 = only client */ private bool smvScExists = false; /* IED can be a SMV server or client */ private bool smvScDeliveryConf = false; private bool smvScSv = false; private bool smvScRSV = false; private int smvScMax = 0; /* max number of SMV CBs that are configurable for publishing; 0 = only client */ private bool fileHandlingExists = false; private bool fileHandlingFtps = false; private bool fileHandlingMms = false; private bool fileHandlingFtp = false; private bool commProtExists = false; private bool commProtIpv6 = false; private bool timeSyncProtExists = false; private bool timeSyncProtOther = false; private bool timeSyncProtIc61850_9_3 = false; private bool timeSyncProtC37_238 = false; private bool timeSyncProtSntp = false; private bool redProtExists = false; private bool redProtRstp = false; private bool redProtPrp = false; private bool redProtHsr = false; private bool mcSecurityExists = false; private bool mcSecurityEncryption = false; private bool mcSecuritySignature = false; private bool dataObjectDirectoryExists = false; private bool supSubscriptionExists = false; /* Capability to supervise GOOSE or SMV subscriptions */ //private int supSubscriptionMaxGO = 0; /* maximum number of subscription supervision LNs to be instantiated in the IED */ private int supSubscriptionMaxGo = 0; private int supSubscriptionMaxSv = 0; private bool confSigRefExists = false; /* Capability to include input references into logical nodes */ private int confSigRefMax = 0; private int nameLength = 32; public bool DynDataSetExists { get { return dynDataSetExists; } set { dynDataSetExists = value; } } public DynDataSet DynDataSet { get { return dynDataSet; } set { dynDataSet = value; } } public bool DeleteDynDataSetServices() { if (dynDataSet != null) { XmlNode.RemoveChild(dynDataSet.XmlNode); dynDataSet = null; DynDataSetExists = false; return true; } return false; } public int DynDataSetMax { get { return dynDataSetMax; } set { dynDataSetMax = value; } } public int DynDataSetMaxAttributes { get { return dynDataSetMaxAttributes; } set { dynDataSetMaxAttributes = value; } } public bool ReadWriteExists { get { return readWriteExists; } set { readWriteExists = value; } } public ReadWrite ReadWrite { get { return readWrite; } set { readWrite = value; } } public bool DeleteReadWriteServices() { if (readWrite != null) { XmlNode.RemoveChild(readWrite.XmlNode); readWrite = null; ReadWriteExists = false; return true; } return false; } public bool TimerActivatedControlExists { get { return timerActivatedControlExists; } set { timerActivatedControlExists = value; } } public TimerActivatedControl TimerActivatedControl { get { return timerActivatedControl; } set { timerActivatedControl = value; } } public bool DeleteTimerActivatedControlServices() { if (timerActivatedControl != null) { XmlNode.RemoveChild(timerActivatedControl.XmlNode); timerActivatedControl = null; TimerActivatedControlExists = false; return true; } return false; } public bool ConfReportControlExists { get { return confReportControlExists; } set { confReportControlExists = value; } } public ConfReportControl ConfReportControl { get { return confReportControl; } set { confReportControl = value; } } public bool DeleteConfReportControlServices() { if (confReportControl != null) { XmlNode.RemoveChild(confReportControl.XmlNode); confReportControl = null; ConfReportControlExists = false; return true; } return false; } public int ConfReportControlMax { get { return confReportControlMax; } set { confReportControlMax = value; } } public int ConfReportControlMaxBuf { get { return confReportControlMaxBuf ; } set { confReportControlMaxBuf = value; } } public BufMode ConfReportControlBufMode { get { return confReportControlBufMode; } set { confReportControlBufMode = value; } } public bool ConfReportControlBufConf { get { return confReportControlBufConf; } set { confReportControlBufConf = value; } } public bool GetCBValuesExists { get { return getCBValuesExists; } set { getCBValuesExists = value; } } public GetCBValues GetCBValues { get { return getCBValues; } set { getCBValues = value; } } public bool DeleteGetCBValuesServices() { if (getCBValues != null) { XmlNode.RemoveChild(getCBValues.XmlNode); getCBValues = null; GetCBValuesExists = false; return true; } return false; } public bool ConfLogControlExists { get { return confLogControlExists; } set { confLogControlExists = value; } } public ConfLogControl ConfLogControl { get { return confLogControl; } set { confLogControl = value; } } public bool DeleteConfLogControlServices() { if (confLogControl != null) { XmlNode.RemoveChild(confLogControl.XmlNode); confLogControl = null; ConfLogControlExists = false; return true; } return false; } public int ConfLogControlMax { get { return confLogControlMax; } set { confLogControlMax = value; } } public bool ReportSettingsExists { get { return reportSettingsExists; } set { reportSettingsExists = value; } } public ReportSettings ReportSettings { get { return reportSettings; } set { reportSettings = value; } } public bool DeleteReportSettingsServices() { if (reportSettings != null) { XmlNode.RemoveChild(reportSettings.XmlNode); reportSettings = null; ReportSettingsExists = false; return true; } return false; } public string ReportSettingsCbName { get { return reportSettingsCbName; } set { reportSettingsCbName = value; } } public string ReportSettingsDatSet { get { return reportSettingsDatSet; } set { reportSettingsDatSet = value; } } public string ReportSettingsRptID { get { return reportSettingsRptID; } set { reportSettingsRptID = value; } } public string ReportSettingsOptFields { get { return reportSettingsOptFields; } set { reportSettingsOptFields = value; } } public string ReportSettingsBufTime { get { return reportSettingsBufTime; } set { reportSettingsBufTime = value; } } public string ReportSettingsTrgOps { get { return reportSettingsTrgOps; } set { reportSettingsTrgOps = value; } } public string ReportSettingsIntgPd { get { return reportSettingsIntgPd; } set { reportSettingsIntgPd = value; } } public bool ReportSettingsResvTms { get { return reportSettingsResvTms; } set { reportSettingsResvTms = value; } } public bool ReportSettingsOwner { get { return reportSettingsOwner; } set { reportSettingsOwner = value; } } public bool LogSettingsExists { get { return logSettingsExists; } set { logSettingsExists = value; } } public LogSettings LogSettings { get { return logSettings; } set { logSettings = value; } } public bool DeleteLogSettingsServices() { if (logSettings != null) { XmlNode.RemoveChild(logSettings.XmlNode); logSettings = null; LogSettingsExists = false; return true; } return false; } public string LogSettingsCbName { get { return logSettingsCbName; } set { logSettingsCbName = value; } } public string LogSettingsDatSet { get { return logSettingsDatSet; } set { logSettingsDatSet = value; } } public string LogSettingsLogEna { get { return logSettingsLogEna; } set { logSettingsLogEna = value; } } public string LogSettingsTrgOps { get { return logSettingsTrgOps; } set { logSettingsTrgOps = value; } } public string LogSettingsIntgPd { get { return logSettingsIntgPd; } set { logSettingsIntgPd = value; } } public bool GseSettingsExists { get { return gseSettingsExists; } set { gseSettingsExists = value; } } public GSESettings GSESettings { get { return gseSettings; } set { gseSettings = value; } } public bool DeleteGSESettingsServices() { if (gseSettings != null) { XmlNode.RemoveChild(gseSettings.XmlNode); gseSettings = null; GseSettingsExists = false; return true; } return false; } public string GseCbName { get { return gseCbName; } set { gseCbName = value; } } public string GseDatSet { get { return gseDataSet; } set { gseDataSet = value; } } public string GseAppID { get { return gseAppID; } set { gseAppID = value; } } public string GseDataLabel { get { return gseDataLabel; } set { gseDataLabel = value; } } public bool GseSettingsKdaParticipant { get { return gseSettingsKdaParticipant; } set { gseSettingsKdaParticipant = value; } } public bool GseSettingsMcSecurity { get { return gseSettingsMcSecurity; } set { gseSettingsMcSecurity = value; } } public bool GseSettingsCbName { get { return gseSettingsCbName; } set { gseSettingsCbName = value; } } public bool GseSettingsDatSet { get { return gseSettingsDatSet; } set { gseSettingsDatSet = value; } } public bool GseSettingsAppId { get { return gseSettingsAppId; } set { gseSettingsAppId = value; } } public bool GseSettingsDataLabel { get { return gseSettingsDataLabel; } set { gseSettingsDataLabel = value; } } public bool SmvSettingsExists { get { return smvSettingsExists; } set { smvSettingsExists = value; } } public SMVSettings SMVSettings { get { return smvSettings; } set { smvSettings = value; } } public bool DeleteSMVSettingsServices() { if (smvSettings != null) { XmlNode.RemoveChild(smvSettings.XmlNode); smvSettings = null; SmvSettingsExists = false; return true; } return false; } public string SmvSettingsCbName { get { return smvSettingsCbName; } set { smvSettingsCbName = value; } } public string SmvSettingsDatSet { get { return smvSettingsDatSet; } set { smvSettingsDatSet = value; } } public string SmvSettingsSvId { get { return smvSettingsSvId; } set { smvSettingsSvId = value; } } public string SmvSettingsOptFields { get { return smvSettingsOptFields; } set { smvSettingsOptFields = value; } } public string SmvSettingsSmpRate { get { return smvSettingsSmpRate; } set { smvSettingsSmpRate = value; } } public string SmvSettingsNofASDU { get { return smvSettingsNofASDU; } set { smvSettingsNofASDU = value; } } public bool SmvSettingsSamplesPerSec { get { return smvSettingsSamplesPerSec; } set { smvSettingsSamplesPerSec = value; } } public bool SmvSettingsSynchrSrcId { get { return smvSettingsSynchrSrcId; } set { smvSettingsSynchrSrcId = value; } } public bool SmvSettingsPdcTimeStamp { get { return smvSettingsPdcTimeStamp; } set { smvSettingsPdcTimeStamp = value; } } public bool SmvSettingsKdaParticipant { get { return smvSettingsKdaParticipant; } set { smvSettingsKdaParticipant = value; } } public bool SmvSettingsSamplesPerSecElement { get { return smvSettingsSamplesPerSecElement; } set { smvSettingsSamplesPerSecElement = value; } } public int SmvSettingsSamplesPerSecElementVal { get { return smvSettingsSamplesPerSecElementVal; } set { smvSettingsSamplesPerSecElementVal = value; } } public bool SmvSettingsSmpRateElement { get { return smvSettingsSmpRateElement; } set { smvSettingsSmpRateElement = value; } } public int SmvSettingsSmpRateElementVal { get { return smvSettingsSmpRateElementVal; } set { smvSettingsSmpRateElementVal = value; } } public bool SmvSettingsSecPerSamplesElement { get { return smvSettingsSecPerSamplesElement; } set { smvSettingsSecPerSamplesElement = value; } } public int SmvSettingsSecPerSamplesElementVal { get { return smvSettingsSecPerSamplesElementVal; } set { smvSettingsSecPerSamplesElementVal = value; } } public bool ConfLNsExists { get { return confLNsExists; } set { confLNsExists = value; } } public ConfLNs ConfLNs { get { return confLNs; } set { confLNs = value; } } public bool DeleteConfLNsServices() { if (confLNs != null) { XmlNode.RemoveChild(confLNs.XmlNode); confLNs = null; ConfLNsExists = false; return true; } return false; } public bool ConfLNsFixPrefix { get { return confLNsFixPrefix; } set { confLNsFixPrefix = value; } } public bool ConfLNsFixLnInst { get { return confLNsFixLnInst; } set { confLNsFixLnInst = value; } } public bool ConfLdNameExists { get { return confLdNameExists; } set { confLdNameExists = value; } } public ConfLdName ConfLdName { get { return confLdName; } set { confLdName = value; } } public bool DeleteConfLdNameServices() { if (confLdName != null) { XmlNode.RemoveChild(confLdName.XmlNode); confLdName = null; ConfLdNameExists = false; return true; } return false; } public bool GseDirExists { get { return gseDirExists; } set { gseDirExists = value; } } public GSEDir GSEDir { get { return gseDir; } set { gseDir = value; } } public bool DeleteGSEDirServices() { if (gseDir != null) { XmlNode.RemoveChild(gseDir.XmlNode); gseDir = null; GseDirExists = false; return true; } return false; } public bool GooseExists { get { return gooseExists; } set { gooseExists = value; } } public GOOSE GOOSE { get { return goose; } set { goose = value; } } public bool DeleteGOOSEServices() { if (goose != null) { XmlNode.RemoveChild(goose.XmlNode); goose = null; GooseExists = false; return true; } return false; } public bool GooseFixedOffs { get { return gooseFixedOffs; } set { gooseFixedOffs = value; } } public bool GooseGoose { get { return gooseGoose; } set { gooseGoose = value; } } public bool GooseRGOOSE { get { return gooseRGOOSE; } set { gooseRGOOSE = value; } } public int GooseMax { get { return gooseMax; } set { gooseMax = value; } } public bool GsseExists { get { return gsseExists; } set { gsseExists = value; } } public GSSE GSSE { get { return gsse; } set { gsse = value; } } public bool DeleteGSSEServices() { if (gsse != null) { XmlNode.RemoveChild(gsse.XmlNode); gsse = null; GsseExists = false; return true; } return false; } public int GsseMax { get { return gsseMax; } set { gsseMax = value; } } public bool SmvScExists { get { return smvScExists; } set { smvScExists = value; } } public SMVsc SMVsc { get { return sMVsc; } set { sMVsc = value; } } public bool DeleteSMVscServices() { if (sMVsc != null) { XmlNode.RemoveChild(sMVsc.XmlNode); sMVsc = null; SmvScExists = false; return true; } return false; } public bool SmvScDeliveryConf { get { return smvScDeliveryConf; } set { smvScDeliveryConf = value; } } public bool SmvScSv { get { return smvScSv; } set { smvScSv = value; } } public bool SmvScRSV { get { return smvScRSV; } set { smvScRSV = value; } } public int SmvScMax { get { return smvScMax; } set { smvScMax = value; } } public bool FileHandlingExists { get { return fileHandlingExists; } set { fileHandlingExists = value; } } public FileHandling FileHandling { get { return fileHandling; } set { fileHandling = value; } } public bool DeleteFileHandlingServices() { if (fileHandling != null) { XmlNode.RemoveChild(fileHandling.XmlNode); fileHandling = null; FileHandlingExists = false; return true; } return false; } public bool FileHandlingFtps { get { return fileHandlingFtps; } set { fileHandlingFtps = value; } } public bool FileHandlingMms { get { return fileHandlingMms; } set { fileHandlingMms = value; } } public bool FileHandlingFtp { get { return fileHandlingFtp; } set { fileHandlingFtp = value; } } public bool SupSubscriptionExists { get { return supSubscriptionExists; } set { supSubscriptionExists = value; } } public SupSubscription SupSubscription { get { return supSubscription; } set { supSubscription = value; } } public bool DeleteSupSubscriptionServices() { if (supSubscription != null) { XmlNode.RemoveChild(supSubscription.XmlNode); supSubscription = null; SupSubscriptionExists = false; return true; } return false; } public int SupSubscriptionMaxGo { get { return supSubscriptionMaxGo; } set { supSubscriptionMaxGo = value; } } public int SupSubscriptionMaxSv { get { return supSubscriptionMaxSv; } set { supSubscriptionMaxSv = value; } } public bool ConfSigRefExists { get { return confSigRefExists; } set { confSigRefExists = value; } } public ConfSigRef ConfSigRef { get { return confSigRef; } set { confSigRef = value; } } public bool DeleteConfSigRefServices() { if (confSigRef != null) { XmlNode.RemoveChild(confSigRef.XmlNode); confSigRef = null; ConfSigRefExists = false; return true; } return false; } public int ConfSigRefMax { get { return confSigRefMax; } set { confSigRefMax = value; } } public bool CommProtExists { get { return commProtExists; } set { commProtExists = value; } } public CommProt CommProt { get { return commProt; } set { commProt = value; } } public bool DeleteCommProtServices() { if (commProt != null) { XmlNode.RemoveChild(commProt.XmlNode); commProt = null; CommProtExists = false; return true; } return false; } public bool CommProtIpv6 { get { return commProtIpv6; } set { commProtIpv6 = value; } } public bool TimeSyncProtExists { get { return timeSyncProtExists; } set { timeSyncProtExists = value; } } public TimeSyncProt TimeSyncProt { get { return timeSyncProt; } set { timeSyncProt = value; } } public bool DeleteTimeSyncProtServices() { if (timeSyncProt != null) { XmlNode.RemoveChild(timeSyncProt.XmlNode); timeSyncProt = null; TimeSyncProtExists = false; return true; } return false; } public bool TimeSyncProtC37_238 { get { return timeSyncProtC37_238; } set { timeSyncProtC37_238 = value; } } public bool TimeSyncProtIc61850_9_3 { get { return timeSyncProtIc61850_9_3; } set { timeSyncProtIc61850_9_3 = value; } } public bool TimeSyncProtOther { get { return timeSyncProtOther; } set { timeSyncProtOther = value; } } public bool TimeSyncProtSntp { get { return timeSyncProtSntp; } set { timeSyncProtSntp = value; } } public bool RedProtExists { get { return redProtExists; } set { redProtExists = value; } } public RedProt RedProt { get { return redProt; } set { redProt = value; } } public bool DeleteRedProtServices() { if (redProt != null) { XmlNode.RemoveChild(redProt.XmlNode); redProt = null; RedProtExists = false; return true; } return false; } public bool RedProtHsr { get { return redProtHsr; } set { redProtHsr = value; } } public bool RedProtPrp { get { return redProtPrp; } set { redProtPrp = value; } } public bool RedProtRstp { get { return redProtRstp; } set { redProtRstp = value; } } public bool ValueHandlingExists { get { return valueHandlingExists; } set { valueHandlingExists = value; } } public ValueHandling ValueHandling { get { return valueHandling; } set { valueHandling = value; } } public bool DeleteValueHandlingServices() { if (valueHandling != null) { XmlNode.RemoveChild(valueHandling.XmlNode); valueHandling = null; ValueHandlingExists = false; return true; } return false; } public bool McSecurityExists { get { return mcSecurityExists; } set { mcSecurityExists = value; } } public McSecurity McSecurity { get { return mcSecurity; } set { mcSecurity = value; } } public bool DeleteMcSecurityServices() { if (mcSecurity != null) { XmlNode.RemoveChild(mcSecurity.XmlNode); mcSecurity = null; McSecurityExists = false; return true; } return false; } public bool McSecurityEncryption { get { return mcSecurityEncryption; } set { mcSecurityEncryption = value; } } public bool McSecuritySignature { get { return mcSecuritySignature; } set { mcSecuritySignature = value; } } public bool DataObjectDirectoryExists { get { return dataObjectDirectoryExists; } set { dataObjectDirectoryExists = value; } } public DataObjectDirectory DataObjectDirectory { get { return dataObjectDirectory; } set { dataObjectDirectory = value; } } public bool DeleteDataObjectDirectoryServices() { if (dataObjectDirectory != null) { XmlNode.RemoveChild(dataObjectDirectory.XmlNode); dataObjectDirectory = null; DataObjectDirectoryExists = false; return true; } return false; } public int NameLength { get { return nameLength; } set { nameLength = value; } } public ClientServices ClientServices { get { return clientServices; } set { clientServices = value; } } public bool DeleteClientServices() { if (clientServices != null) { XmlNode.RemoveChild(clientServices.XmlNode); clientServices = null; return true; } return false; } public bool DynAssociationExists { get { return dynAssociationExists; } set { dynAssociationExists = value; } } public DynAssociation DynAssociation { get { return dynAssociation; } set { dynAssociation = value; } } public bool DeleteDynAssociation() { if (dynAssociation != null) { XmlNode.RemoveChild(dynAssociation.XmlNode); dynAssociation = null; dynAssociationExists = false; return true; } return false; } public int DynAssociationMax { get { return dynAssociationMax; } set { dynAssociationMax = value; } } public bool SettingGroupsExists { get { return settingGroupsExists; } set { settingGroupsExists = value; } } public SettingGroups SettingGroups { get { return settingGroups; } set { settingGroups = value; } } public bool SgEditExists { get { return sgEditExists; } set { sgEditExists = value; } } public bool SgEditResvTms { get { return sgEditResvTms; } set { sgEditResvTms = value; } } public bool ConfSgExists { get { return confSgExists; } set { confSgExists = value; } } public bool ConfSgResvTms { get { return confSgResvTms; } set { confSgResvTms = value; } } public bool DeleteSettingGroups() { if (settingGroups != null) { XmlNode.RemoveChild(settingGroups.XmlNode); settingGroups = null; settingGroupsExists = false; return true; } return false; } public bool GetDirectoryExists { get { return getDirectoryExists; } set { getDirectoryExists = value; } } public GetDirectory GetDirectory { get { return getDirectory; } set { getDirectory = value; } } public bool DeleteGetDirectoryServices() { if (getDirectory != null) { XmlNode.RemoveChild(getDirectory.XmlNode); getDirectory = null; getDirectoryExists = false; return true; } return false; } public bool GetDataObjectDefinitionExists { get { return getDataObjectDefinitionExists; } set { getDataObjectDefinitionExists = value; } } public GetDataObjectDefinition GetDataObjectDefinition { get { return getDataObjectDefinition; } set { getDataObjectDefinition = value; } } public bool DeleteGetDataObjectDefinitionServices() { if (getDataObjectDefinition != null) { XmlNode.RemoveChild(getDataObjectDefinition.XmlNode); getDataObjectDefinition = null; GetDataObjectDefinitionExists = false; return true; } return false; } public bool GetDataSetValueExists { get { return getDataSetValueExists; } set { getDataSetValueExists = value; } } public GetDataSetValue GetDataSetValue { get { return getDataSetValue; } set { getDataSetValue = value; } } public bool DeleteGetDataSetValueServices() { if (getDataSetValue != null) { XmlNode.RemoveChild(getDataSetValue.XmlNode); getDataSetValue = null; GetDataSetValueExists = false; return true; } return false; } public bool SetDataSetValueExists { get { return setDataSetValueExists; } set { setDataSetValueExists = value; } } public SetDataSetValue SetDataSetValue { get { return setDataSetValue; } set { setDataSetValue = value; } } public bool DeleteSetDataSetValueServices() { if (setDataSetValue != null) { XmlNode.RemoveChild(setDataSetValue.XmlNode); setDataSetValue = null; SetDataSetValueExists = false; return true; } return false; } public bool DataSetDirectoryExists { get { return dataSetDirectoryExists; } set { dataSetDirectoryExists = value; } } public DataSetDirectory DataSetDirectory { get { return dataSetDirectory; } set { dataSetDirectory = value; } } public bool DeleteDataSetDirectoryServices() { if (dataSetDirectory != null) { XmlNode.RemoveChild(dataSetDirectory.XmlNode); dataSetDirectory = null; DataSetDirectoryExists = false; return true; } return false; } public bool ConfDataSetExists { get { return confDataSetExists; } set { confDataSetExists = value; } } public ConfDataSet ConfDataSet { get { return confDataSet; } set { confDataSet = value; } } public bool DeleteConfDataSetServices() { if (confDataSet != null) { XmlNode.RemoveChild(confDataSet.XmlNode); confDataSet = null; ConfDataSetExists = false; return true; } return false; } public int ConfDataSetMax { get { return confDataSetMax; } set { confDataSetMax = value; } } public int ConfDataSetMaxAttributes { get { return confDataSetMaxAttributes; } set { confDataSetMaxAttributes = value; } } public bool ConfDataSetModify { get { return confDataSetModify; } set { confDataSetModify = value; } } private ClientServices clientServices = null; private TimeSyncProt timeSyncProt = null; private McSecurity mcSecurity = null; private DynAssociation dynAssociation = null; private SettingGroups settingGroups = null; private GetDirectory getDirectory = null; private GetDataObjectDefinition getDataObjectDefinition = null; private DataObjectDirectory dataObjectDirectory = null; private GetDataSetValue getDataSetValue = null; private SetDataSetValue setDataSetValue = null; private DataSetDirectory dataSetDirectory = null; private ConfDataSet confDataSet = null; private DynDataSet dynDataSet = null; private ReadWrite readWrite = null; private TimerActivatedControl timerActivatedControl = null; private ConfReportControl confReportControl = null; private GetCBValues getCBValues = null; private ConfLogControl confLogControl = null; private ReportSettings reportSettings = null; private LogSettings logSettings = null; private GSESettings gseSettings = null; private SMVSettings smvSettings = null; private ConfLNs confLNs = null; private ConfLdName confLdName = null; private GSEDir gseDir = null; private GOOSE goose = null; private GSSE gsse = null; private SMVsc sMVsc = null; private FileHandling fileHandling = null; private SupSubscription supSubscription = null; private ConfSigRef confSigRef = null; private CommProt commProt = null; private RedProt redProt = null; private ValueHandling valueHandling = null; public SclServices(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { XmlNode = xmlNode; xmlDocument = xmlDocument; this.sclDocument = sclDocument; string nameLengthAttribute = XmlHelper.GetAttributeValue(xmlNode, "nameLength"); if (nameLengthAttribute != null) { if (int.TryParse(nameLengthAttribute, out int intNameLength)) { if (intNameLength != 64 && intNameLength != 32) { sclDocument.AddIssue(xmlNode, "ERROR", "Model integrity", "NameLength attribute on IED services should be 32 default or 64. Value is " + nameLengthAttribute, this, "nameLength"); nameLength = intNameLength; } } else { sclDocument.AddIssue(xmlNode, "ERROR", "Model integrity", "NameLength attribute on IED services is not a integer. Value is " + nameLengthAttribute, this, "nameLength"); } } else { sclDocument.AddIssue(xmlNode, "ERROR", "Model integrity", "No nameLength attribute on IED services", this, "nameLength"); } XmlNode clientServices = xmlNode.SelectSingleNode("scl:ClientServices", nsManager); if (clientServices != null) { ClientServices = new ClientServices(sclDocument, clientServices, nsManager); } XmlNode DynAssociationNode = xmlNode.SelectSingleNode("scl:DynAssociation", nsManager); if (DynAssociationNode != null) { DynAssociationExists = true; DynAssociation = new DynAssociation(sclDocument, DynAssociationNode, nsManager); } XmlNode SettingGroupsNode = xmlNode.SelectSingleNode("scl:SettingGroups", nsManager); if (SettingGroupsNode != null) { SettingGroupsExists = true; SettingGroups = new SettingGroups(sclDocument, SettingGroupsNode, nsManager); //XmlNode SGEditNode = SettingGroupsNode.SelectSingleNode("scl:SGEdit", nsManager); //if (SGEditNode != null) //{ // SgEditExists = true; // string resvTms = XmlHelper.GetAttributeValue(SGEditNode, "resvTms"); // if (resvTms != null) // { // if (resvTms == "true") // SgEditResvTms = true; // else // SgEditResvTms = false; // } //} //else // SgEditExists = false; //XmlNode confSGNode = SettingGroupsNode.SelectSingleNode("scl:ConfSG", nsManager); //if (confSGNode != null) //{ // ConfSgExists = true; // string resvTms = XmlHelper.GetAttributeValue(confSGNode, "resvTms"); // if (resvTms != null) // { // if (resvTms == "true") // ConfSgResvTms = true; // else // ConfSgResvTms = false; // } //} //else // ConfSgExists = false; } XmlNode GetDirectoryNode = xmlNode.SelectSingleNode("scl:GetDirectory", nsManager); if (GetDirectoryNode != null) { GetDirectoryExists = true; GetDirectory = new GetDirectory(sclDocument, GetDirectoryNode, nsManager); } XmlNode GetDataObjectDefinitionNode = xmlNode.SelectSingleNode("scl:GetDataObjectDefinition", nsManager); if (GetDataObjectDefinitionNode != null) { GetDataObjectDefinitionExists = true; GetDataObjectDefinition = new GetDataObjectDefinition(sclDocument, GetDataObjectDefinitionNode, nsManager); } XmlNode DataObjectDirectoryNode = xmlNode.SelectSingleNode("scl:DataObjectDirectory", nsManager); if (DataObjectDirectoryNode != null) { DataObjectDirectoryExists = true; DataObjectDirectory = new DataObjectDirectory(sclDocument, DataObjectDirectoryNode, nsManager); } XmlNode GetDataSetValueNode = xmlNode.SelectSingleNode("scl:GetDataSetValue", nsManager); if (GetDataSetValueNode != null) { GetDataSetValueExists = true; GetDataSetValue = new GetDataSetValue(sclDocument, GetDataSetValueNode, nsManager); } XmlNode SetDataSetValueNode = xmlNode.SelectSingleNode("scl:SetDataSetValue", nsManager); if (SetDataSetValueNode != null) { SetDataSetValueExists = true; SetDataSetValue = new SetDataSetValue(sclDocument, SetDataSetValueNode, nsManager); } XmlNode DataSetDirectoryNode = xmlNode.SelectSingleNode("scl:DataSetDirectory", nsManager); if (DataSetDirectoryNode != null) { DataSetDirectoryExists = true; DataSetDirectory = new DataSetDirectory(sclDocument, DataSetDirectoryNode, nsManager); } XmlNode ConfDataSetNode = xmlNode.SelectSingleNode("scl:ConfDataSet", nsManager); if (ConfDataSetNode != null) { ConfDataSetExists = true; ConfDataSet = new ConfDataSet(sclDocument, ConfDataSetNode, nsManager); //string attribute = XmlHelper.GetAttributeValue(ConfDataSetNode, "max"); //if (attribute != null) // ConfDataSetMax = int.Parse(attribute); //string maxAttributes = XmlHelper.GetAttributeValue(ConfDataSetNode, "maxAttributes"); //if (maxAttributes != null) // ConfDataSetMaxAttributes = int.Parse(maxAttributes); //string modify = XmlHelper.GetAttributeValue(ConfDataSetNode, "modify"); //if (modify != null) //{ // if (modify == "true") // ConfDataSetModify = true; //} } XmlNode DynDataSetNode = xmlNode.SelectSingleNode("scl:DynDataSet", nsManager); if (DynDataSetNode != null) { DynDataSetExists = true; DynDataSet = new DynDataSet(sclDocument, DynDataSetNode, nsManager); //string max = XmlHelper.GetAttributeValue(DynDataSetNode, "max"); //if (max != null) // DynDataSetMax = int.Parse(max); //string maxAttributes = XmlHelper.GetAttributeValue(DynDataSetNode, "maxAttributes"); //if (maxAttributes != null) // DynDataSetMaxAttributes = int.Parse(maxAttributes); } XmlNode ReadWriteNode = xmlNode.SelectSingleNode("scl:ReadWrite", nsManager); if (ReadWriteNode != null) { ReadWriteExists = true; ReadWrite = new ReadWrite(sclDocument, ReadWriteNode, nsManager); } XmlNode TimerActivatedControlNode = xmlNode.SelectSingleNode("scl:TimerActivatedControl", nsManager); if (TimerActivatedControlNode != null) { TimerActivatedControlExists = true; TimerActivatedControl = new TimerActivatedControl(sclDocument, TimerActivatedControlNode, nsManager); } XmlNode ConfReportControlNode = xmlNode.SelectSingleNode("scl:ConfReportControl", nsManager); if (ConfReportControlNode != null) { ConfReportControlExists = true; ConfReportControl = new ConfReportControl(sclDocument, ConfReportControlNode, nsManager); //string max = XmlHelper.GetAttributeValue(ConfReportControlNode, "max"); //if (max != null) // ConfReportControlMax = int.Parse(max); //string bufMode = XmlHelper.GetAttributeValue(ConfReportControlNode, "bufMode"); //if (bufMode != null) // if (bufMode == "UNBUFFERED") // ConfReportControlBufMode = BufMode.UNBUFFERED; // else if (bufMode == "BUFFERED") // ConfReportControlBufMode = BufMode.BUFFERED; // else // ConfReportControlBufMode = BufMode.BOTH; //string bufConf = XmlHelper.GetAttributeValue(ConfReportControlNode, "bufConf"); //if (bufConf != null) // if (bufConf == "true") // ConfReportControlBufConf = true; //string maxBuf = XmlHelper.GetAttributeValue(ConfReportControlNode, "maxBuf"); //if (maxBuf != null) // ConfReportControlMaxBuf = int.Parse(maxBuf); } XmlNode GetCBValuesNode = xmlNode.SelectSingleNode("scl:GetCBValues", nsManager); if (GetCBValuesNode != null) { GetCBValuesExists = true; GetCBValues = new GetCBValues(sclDocument, GetCBValuesNode, nsManager); } XmlNode ConfLogControlNode = xmlNode.SelectSingleNode("scl:ConfLogControl", nsManager); if (ConfLogControlNode != null) { ConfLogControlExists = true; ConfLogControl = new ConfLogControl(sclDocument, ConfLogControlNode, nsManager); //string max = XmlHelper.GetAttributeValue(ConfLogControlNode, "max"); //if (max != null) // ConfLogControlMax = int.Parse(max); } XmlNode ReportSettingsNode = xmlNode.SelectSingleNode("scl:ReportSettings", nsManager); if (ReportSettingsNode != null) { ReportSettingsExists = true; ReportSettings = new ReportSettings(sclDocument, ReportSettingsNode, nsManager); //string cbName = XmlHelper.GetAttributeValue(ReportSettingsNode, "cbName"); //if (cbName != null) // ReportSettingsCbName = cbName; //string datSet = XmlHelper.GetAttributeValue(ReportSettingsNode, "datSet"); //if (datSet != null) // ReportSettingsDatSet = datSet; //string rptID = XmlHelper.GetAttributeValue(ReportSettingsNode, "rptID"); //if (rptID != null) // ReportSettingsRptID = rptID; //string optFields = XmlHelper.GetAttributeValue(ReportSettingsNode, "optFields"); //if (optFields != null) // ReportSettingsOptFields = optFields; //string bufTime = XmlHelper.GetAttributeValue(ReportSettingsNode, "bufTime"); //if (bufTime != null) // ReportSettingsBufTime = bufTime; //string trgOps = XmlHelper.GetAttributeValue(ReportSettingsNode, "trgOps"); //if (trgOps != null) // ReportSettingsTrgOps = trgOps; //string intgPd = XmlHelper.GetAttributeValue(ReportSettingsNode, "intgPd"); //if (intgPd != null) // ReportSettingsIntgPd = intgPd; //string resvTms = XmlHelper.GetAttributeValue(ReportSettingsNode, "resvTms"); //if (resvTms != null) //{ // if (resvTms == "true") // ReportSettingsResvTms = true; //} //string owner = XmlHelper.GetAttributeValue(ReportSettingsNode, "owner"); //if (owner != null) //{ // if (owner == "true") // ReportSettingsOwner = true; //} } XmlNode LogSettingsNode = xmlNode.SelectSingleNode("scl:LogSettings", nsManager); if (LogSettingsNode != null) { LogSettingsExists = true; LogSettings = new LogSettings(sclDocument, LogSettingsNode, nsManager); //string cbName = XmlHelper.GetAttributeValue(LogSettingsNode, "cbName"); //if (cbName != null) // LogSettingsCbName = cbName; //string datSet = XmlHelper.GetAttributeValue(LogSettingsNode, "datSet"); //if (datSet != null) // LogSettingsDatSet = datSet; //string logEna = XmlHelper.GetAttributeValue(LogSettingsNode, "logEna"); //if (logEna != null) // LogSettingsLogEna = logEna; //string trgOps = XmlHelper.GetAttributeValue(LogSettingsNode, "trgOps"); //if (trgOps != null) // LogSettingsTrgOps = trgOps; //string intgPd = XmlHelper.GetAttributeValue(LogSettingsNode, "intgPd"); //if (intgPd != null) // LogSettingsIntgPd = intgPd; } XmlNode GSEControlNode = xmlNode.SelectSingleNode("scl:GSESettings", nsManager); if (GSEControlNode != null) { GseSettingsExists = true; GSESettings = new GSESettings(sclDocument, GSEControlNode, nsManager); //string cbName = XmlHelper.GetAttributeValue(GSEControlNode, "cbName"); //if (cbName != null) //{ // GseCbName = cbName; // GseSettingsCbName = true; //} //string datSet = XmlHelper.GetAttributeValue(GSEControlNode, "datSet"); //if (datSet != null) //{ // GseDatSet = datSet; // GseSettingsDatSet = true; //} //string appID = XmlHelper.GetAttributeValue(GSEControlNode, "appID"); //if (datSet != null) //{ // GseAppID = appID; // GseSettingsAppId = true; //} //string dataLabel = XmlHelper.GetAttributeValue(GSEControlNode, "dataLabel"); //if (dataLabel != null) //{ // GseDataLabel = dataLabel; // GseSettingsDataLabel = true; //} //string kdaParticipant = XmlHelper.GetAttributeValue(GSEControlNode, "kdaParticipant"); //if (kdaParticipant != null) //{ // if (kdaParticipant == "true") // GseSettingsKdaParticipant = true; //} //XmlNode McSecurity = GSEControlNode.SelectSingleNode("scl:McSecurity", nsManager); //if(McSecurity != null) //{ // GseSettingsMcSecurity = true; //} } XmlNode SMVSettingsNode = xmlNode.SelectSingleNode("scl:SMVSettings", nsManager); if (SMVSettingsNode != null) { SmvSettingsExists = true; SMVSettings = new SMVSettings(sclDocument, SMVSettingsNode, nsManager); //string cbName = XmlHelper.GetAttributeValue(SMVSettingsNode, "cbName"); //if (cbName != null) // SmvSettingsCbName = cbName; //string datSet = XmlHelper.GetAttributeValue(SMVSettingsNode, "datSet"); //if (datSet != null) // SmvSettingsDatSet = datSet; //string svID = XmlHelper.GetAttributeValue(SMVSettingsNode, "svID"); //if (svID != null) // SmvSettingsSvId = svID; //string optFields = XmlHelper.GetAttributeValue(SMVSettingsNode, "optFields"); //if (optFields != null) // SmvSettingsOptFields = optFields; //string smpRate = XmlHelper.GetAttributeValue(SMVSettingsNode, "smpRate"); //if (smpRate != null) // SmvSettingsSmpRate = smpRate; //string samplesPerSec = XmlHelper.GetAttributeValue(SMVSettingsNode, "samplesPerSec"); //if (samplesPerSec != null) //{ // if (samplesPerSec == "true") // SmvSettingsSamplesPerSec = true; //} //string synchrSrcId = XmlHelper.GetAttributeValue(SMVSettingsNode, "synchrSrcId"); //if (synchrSrcId != null) //{ // if (synchrSrcId == "true") // SmvSettingsSynchrSrcId = true; //} //string nofASDU = XmlHelper.GetAttributeValue(SMVSettingsNode, "nofASDU"); //if (nofASDU != null) // SmvSettingsNofASDU = nofASDU; //string pdcTimeStamp = XmlHelper.GetAttributeValue(SMVSettingsNode, "pdcTimeStamp"); //if (pdcTimeStamp != null) //{ // if (pdcTimeStamp == "true") // SmvSettingsPdcTimeStamp = true; //} //string kdaParticipant = XmlHelper.GetAttributeValue(SMVSettingsNode, "kdaParticipant"); //if (kdaParticipant != null) //{ // if (kdaParticipant == "true") // SmvSettingsKdaParticipant = true; //} //XmlNode SmpRate = SMVSettingsNode.SelectSingleNode("scl:SmpRate", nsManager); //if (SmpRate != null) //{ // SmvSettingsSmpRateElement = true; // string val = SmpRate.InnerText; // if (val != null) // SmvSettingsSmpRateElementVal = int.Parse(val); //} //XmlNode SamplesPerSec = SMVSettingsNode.SelectSingleNode("scl:SamplesPerSec", nsManager); //if (SamplesPerSec != null) //{ // SmvSettingsSamplesPerSecElement = true; // string val = SamplesPerSec.InnerText; // if (val != null) // SmvSettingsSamplesPerSecElementVal = int.Parse(val); //} //XmlNode SecPerSamples = SMVSettingsNode.SelectSingleNode("scl:SecPerSamples", nsManager); //if (SecPerSamples != null) //{ // SmvSettingsSecPerSamplesElement = true; // string val = SecPerSamples.InnerText; // if (val != null) // SmvSettingsSecPerSamplesElementVal = int.Parse(val); //} } XmlNode ConfLNsNode = xmlNode.SelectSingleNode("scl:ConfLNs", nsManager); if (ConfLNsNode != null) { ConfLNsExists = true; ConfLNs = new ConfLNs(sclDocument, ConfLNsNode, nsManager); //string fixPrefix = XmlHelper.GetAttributeValue(ConfLNsNode, "fixPrefix"); //if (fixPrefix != null) //{ // if (fixPrefix == "true") // ConfLNsFixPrefix = true; //} //string fixLnInst = XmlHelper.GetAttributeValue(ConfLNsNode, "fixLnInst"); //if (fixLnInst != null) //{ // if (fixLnInst == "true") // ConfLNsFixLnInst = true; //} } XmlNode ConfLdNameNode = xmlNode.SelectSingleNode("scl:ConfLdName", nsManager); if (ConfLdNameNode != null) { ConfLdNameExists = true; ConfLdName = new ConfLdName(sclDocument, ConfLdNameNode, nsManager); } XmlNode GSEDirNode = xmlNode.SelectSingleNode("scl:GSEDir", nsManager); if (GSEDirNode != null) { GseDirExists = true; GSEDir = new GSEDir(sclDocument, GSEDirNode, nsManager); } XmlNode GOOSENode = xmlNode.SelectSingleNode("scl:GOOSE", nsManager); if (GOOSENode != null) { GooseExists = true; GOOSE = new GOOSE(sclDocument, GOOSENode, nsManager); //string max = XmlHelper.GetAttributeValue(GOOSENode, "max"); //if (max != null) //{ // GooseMax = int.Parse(max); //} //string fixedOffs = XmlHelper.GetAttributeValue(GOOSENode, "fixedOffs"); //if (fixedOffs != null) //{ // if (fixedOffs == "true") // GooseFixedOffs = true; //} //string goose = XmlHelper.GetAttributeValue(GOOSENode, "goose"); //if (goose != null) //{ // if (goose == "true") // GooseGoose = true; //} //string rGOOSE = XmlHelper.GetAttributeValue(GOOSENode, "rGOOSE"); //if (rGOOSE != null) //{ // if (rGOOSE == "true") // GooseRGOOSE = true; //} } XmlNode GSSENode = xmlNode.SelectSingleNode("scl:GSSE", nsManager); if (GSSENode != null) { GsseExists = true; GSSE = new GSSE(sclDocument, GSSENode, nsManager); //string max = XmlHelper.GetAttributeValue(GSSENode, "max"); //if (max != null) //{ // GsseMax = int.Parse(max); //} } XmlNode SMVscNode = xmlNode.SelectSingleNode("scl:SMVsc", nsManager); if (SMVscNode != null) { SmvScExists = true; SMVsc = new SMVsc(sclDocument, SMVscNode, nsManager); //string max = XmlHelper.GetAttributeValue(SMVscNode, "max"); //if (max != null) //{ // SmvScMax = int.Parse(max); //} //string deliveryConf = XmlHelper.GetAttributeValue(ConfLNsNode, "deliveryConf"); //if (deliveryConf != null) //{ // if (deliveryConf == "true") // SmvScDeliveryConf = true; // else // SmvScDeliveryConf = false; //} //string sv = XmlHelper.GetAttributeValue(ConfLNsNode, "sv"); //if (sv != null) //{ // if (sv == "true") // SmvScSv = true; // else // SmvScSv = false; //} //string rSV = XmlHelper.GetAttributeValue(ConfLNsNode, "rSV"); //if (rSV != null) //{ // if (rSV == "true") // SmvScRSV = true; // else // SmvScRSV = false; //} } XmlNode FileHandlingNode = xmlNode.SelectSingleNode("scl:FileHandling", nsManager); if (FileHandlingNode != null) { FileHandlingExists = true; FileHandling = new FileHandling(sclDocument, FileHandlingNode, nsManager); //string mms = XmlHelper.GetAttributeValue(FileHandlingNode, "mms"); //if (mms != null) //{ // if (mms == "true") // FileHandlingMms = true; // else // FileHandlingMms = false; //} //string ftp = XmlHelper.GetAttributeValue(FileHandlingNode, "ftp"); //if (ftp != null) //{ // if (ftp == "true") // FileHandlingFtp = true; // else // FileHandlingFtp = false; //} //string ftps = XmlHelper.GetAttributeValue(FileHandlingNode, "ftps"); //if (ftps != null) //{ // if (ftps == "true") // FileHandlingFtps = true; // else // FileHandlingFtps = false; //} } XmlNode SupSubscriptionNode = xmlNode.SelectSingleNode("scl:SupSubscription", nsManager); if (SupSubscriptionNode != null) { SupSubscriptionExists = true; SupSubscription = new SupSubscription(sclDocument, SupSubscriptionNode, nsManager); //string maxGo = XmlHelper.GetAttributeValue(SupSubscriptionNode, "maxGo"); //if (maxGo != null) //{ // SupSubscriptionMaxGo = int.Parse(maxGo); //} //string maxSv = XmlHelper.GetAttributeValue(SupSubscriptionNode, "maxSv"); //if (maxSv != null) //{ // SupSubscriptionMaxSv = int.Parse(maxSv); //} } XmlNode ConfSigRefNode = xmlNode.SelectSingleNode("scl:ConfSigRef", nsManager); if (ConfSigRefNode != null) { ConfSigRefExists = true; ConfSigRef = new ConfSigRef(sclDocument, ConfSigRefNode, nsManager); //string max = XmlHelper.GetAttributeValue(ConfSigRefNode, "max"); //if (max != null) //{ // ConfSigRefMax = int.Parse(max); //} } XmlNode CommProtNode = xmlNode.SelectSingleNode("scl:CommProt", nsManager); if (CommProtNode != null) { CommProtExists = true; CommProt = new CommProt(sclDocument, CommProtNode, nsManager); //string ipv6 = XmlHelper.GetAttributeValue(FileHandlingNode, "ipv6"); //if (ipv6 != null) //{ // if (ipv6 == "true") // CommProtIpv6 = true; // else // CommProtIpv6 = false; //} } XmlNode TimeSyncProtNode = xmlNode.SelectSingleNode("scl:TimeSyncProt", nsManager); if (TimeSyncProtNode != null) { TimeSyncProtExists = true; TimeSyncProt = new TimeSyncProt(sclDocument, TimeSyncProtNode, nsManager); //// //string sntp = XmlHelper.GetAttributeValue(TimeSyncProtNode, "sntp"); //if (sntp != null) //{ // if (sntp == "true") // TimeSyncProtSntp = true; // else // TimeSyncProtSntp = false; //} //string c37_238 = XmlHelper.GetAttributeValue(TimeSyncProtNode, "c37_238"); //if (c37_238 != null) //{ // if (c37_238 == "true") // TimeSyncProtC37_238 = true; // else // TimeSyncProtC37_238 = false; //} //string iec61850_9_3 = XmlHelper.GetAttributeValue(TimeSyncProtNode, "iec61850_9_3"); //if (iec61850_9_3 != null) //{ // if (iec61850_9_3 == "true") // TimeSyncProtIc61850_9_3 = true; // else // TimeSyncProtIc61850_9_3 = false; //} //string other = XmlHelper.GetAttributeValue(TimeSyncProtNode, "other"); //if (other != null) //{ // if (other == "true") // TimeSyncProtOther = true; // else // TimeSyncProtOther = false; //} } XmlNode RedProtNode = xmlNode.SelectSingleNode("scl:RedProt", nsManager); if (RedProtNode != null) { RedProtExists = true; RedProt = new RedProt(sclDocument, RedProtNode, nsManager); //string hsr = XmlHelper.GetAttributeValue(RedProtNode, "hsr"); //if (hsr != null) //{ // if (hsr == "true") // RedProtHsr = true; // else // RedProtHsr = false; //} //string prp = XmlHelper.GetAttributeValue(RedProtNode, "prp"); //if (prp != null) //{ // if (prp == "true") // RedProtPrp = true; // else // RedProtPrp = false; //} //string rstp = XmlHelper.GetAttributeValue(RedProtNode, "rstp"); //if (rstp != null) //{ // if (rstp == "true") // RedProtRstp = true; // else // RedProtRstp = false; //} } XmlNode ValueHandlingNode = xmlNode.SelectSingleNode("scl:ValueHandling", nsManager); if (ValueHandlingNode != null) { ValueHandlingExists = true; ValueHandling = new ValueHandling(sclDocument, ValueHandlingNode, nsManager); } XmlNode McSecurityNode = xmlNode.SelectSingleNode("scl:McSecurity", nsManager); if (McSecurityNode != null) { McSecurityExists = true; McSecurity = new McSecurity(sclDocument, McSecurityNode, nsManager); //// //string signature = XmlHelper.GetAttributeValue(McSecurityNode, "signature"); //if (signature != null) //{ // if (signature == "true") // McSecuritySignature = true; // else // McSecuritySignature = false; //} //string encryption = XmlHelper.GetAttributeValue(McSecurityNode, "encryption"); //if (encryption != null) //{ // if (encryption == "true") // McSecurityEncryption = true; // else // McSecurityEncryption = false; //} } } } public class ClientServices { private XmlDocument xmlDocument; private XmlNode xmlNode; private SclDocument sclDocument; public XmlNode XmlNode { get { return xmlNode; } } public int MaxAttributes { get { string valueStr = XmlHelper.GetAttributeValue(xmlNode, "maxAttributes"); if (valueStr != null) { int retVal = -1; int.TryParse(valueStr, out retVal); return retVal; } else return -1; } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "maxAttributes", value.ToString()); } } public int MaxReports { get { string valueStr = XmlHelper.GetAttributeValue(xmlNode, "maxReports"); if (valueStr != null) { int retVal = -1; int.TryParse(valueStr, out retVal); return retVal; } else return -1; } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "maxReports", value.ToString()); } } public int MaxGOOSE { get { string valueStr = XmlHelper.GetAttributeValue(xmlNode, "maxGOOSE"); if (valueStr != null) { int retVal = -1; int.TryParse(valueStr, out retVal); return retVal; } else return -1; } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "maxGOOSE", value.ToString()); } } public int MaxSMV { get { string valueStr = XmlHelper.GetAttributeValue(xmlNode, "maxSMV"); if (valueStr != null) { int retVal = -1; int.TryParse(valueStr, out retVal); return retVal; } else return -1; } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "maxSMV", value.ToString()); } } public bool RGOOSE { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "rGOOSE", false); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "rGOOSE", value.ToString()); } } public bool RSV { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "rSV", false); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "rSV", value.ToString()); } } public bool NoIctBinding { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "noIctBinding", false); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "noIctBinding", value.ToString()); } } public TimeSyncProt TimeSyncProt = null; public McSecurity McSecurity = null; public void DeleteMcSecurity() { if (McSecurity != null) { XmlNode.RemoveChild(McSecurity.XmlNode); McSecurity = null; } } public void DeleteTimeSyncProt() { if (TimeSyncProt != null) { XmlNode.RemoveChild(TimeSyncProt.XmlNode); TimeSyncProt = null; } } public ClientServices(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { this.sclDocument = sclDocument; xmlDocument = sclDocument.XmlDocument; this.xmlNode = xmlNode; XmlNode timeSync = xmlNode.SelectSingleNode("scl:TimeSyncProt", nsManager); if (timeSync != null) { TimeSyncProt = new TimeSyncProt(sclDocument, timeSync, nsManager); } XmlNode mcSecurity = xmlNode.SelectSingleNode("scl:McSecurity", nsManager); if (mcSecurity != null) { McSecurity = new McSecurity(sclDocument, mcSecurity, nsManager); } } } public class TimeSyncProt { private XmlDocument xmlDocument; private XmlNode xmlNode; private SclDocument sclDocument; public bool Sntp { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "sntp", true); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "sntp", value.ToString()); } } public bool C37_238 { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "c37_238", false); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "c37_238", value.ToString()); } } public bool Iec61850_9_3 { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "iec61850_9_3", false); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "iec61850_9_3", value.ToString()); } } public bool Other { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "other", false); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "other", value.ToString()); } } public XmlNode XmlNode { get { return xmlNode; } } public TimeSyncProt(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { this.sclDocument = sclDocument; xmlDocument = sclDocument.XmlDocument; this.xmlNode = xmlNode; } } public class McSecurity { private XmlDocument xmlDocument; private XmlNode xmlNode; private SclDocument sclDocument; public bool Signature { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "signature", false); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "signature", value.ToString()); } } public bool Encryption { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "encryption", false); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "encryption", value.ToString()); } } public XmlNode XmlNode { get { return xmlNode; } } public McSecurity(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { this.sclDocument = sclDocument; xmlDocument = sclDocument.XmlDocument; this.xmlNode = xmlNode; } } public class DynAssociation { private XmlDocument xmlDocument; private XmlNode xmlNode; private SclDocument sclDocument; public XmlNode XmlNode { get { return xmlNode; } } public int Max { get { string valueStr = XmlHelper.GetAttributeValue(xmlNode, "max"); if (valueStr != null) { int retVal = -1; int.TryParse(valueStr, out retVal); return retVal; } else return -1; } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "max", value.ToString()); } } public DynAssociation(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { this.sclDocument = sclDocument; xmlDocument = sclDocument.XmlDocument; this.xmlNode = xmlNode; } } public class SettingGroups { private XmlDocument xmlDocument; private XmlNode xmlNode; private SclDocument sclDocument; bool sgEditExists = false; bool confSgExists = false; bool confSgResvTms = false; bool sgEditResvTms = false; public XmlNode XmlNode { get { return xmlNode; } } public bool SgEditExists { get { return sgEditExists; } set { sgEditExists = value; } } public bool ConfSgExists { get { return confSgExists; } set { confSgExists = value; } } public bool SgEditResvTms { get { return sgEditResvTms; } set { sgEditResvTms = value; } } public bool ConfSgResvTms { get { return confSgResvTms; } set { confSgResvTms = value; } } public SGEdit SGEdit = null; public ConfSG ConfSG = null; public SettingGroups(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { this.sclDocument = sclDocument; xmlDocument = sclDocument.XmlDocument; this.xmlNode = xmlNode; XmlNode sGEdit = xmlNode.SelectSingleNode("scl:SGEdit", nsManager); if (sGEdit != null) { SGEdit = new SGEdit(sclDocument, sGEdit, nsManager); sgEditExists = true; } XmlNode confSG = xmlNode.SelectSingleNode("scl:ConfSG", nsManager); if (confSG != null) { ConfSG = new ConfSG(sclDocument, confSG, nsManager); confSgExists = true; } } } public class SGEdit { private XmlDocument xmlDocument; private XmlNode xmlNode; private SclDocument sclDocument; public bool resvTms { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "resvTms", false); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "resvTms", value.ToString()); } } public bool SGCB { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "SGCB", false); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "SGCB", value.ToString()); } } public bool file { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "file", false); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "file", value.ToString()); } } public XmlNode XmlNode { get => xmlNode; set => xmlNode = value; } public SGEdit(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { this.sclDocument = sclDocument; xmlDocument = sclDocument.XmlDocument; this.xmlNode = xmlNode; } } public class ConfSG { private XmlDocument xmlDocument; private XmlNode xmlNode; private SclDocument sclDocument; public XmlNode XmlNode { get => xmlNode; set => xmlNode = value; } public bool resvTms { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "resvTms", false); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "resvTms", value.ToString()); } } public bool SGCB { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "SGCB", false); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "SGCB", value.ToString()); } } public bool file { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "file", false); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "file", value.ToString()); } } public ConfSG(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { this.sclDocument = sclDocument; xmlDocument = sclDocument.XmlDocument; this.xmlNode = xmlNode; } } public class GetDirectory { private XmlDocument xmlDocument; private XmlNode xmlNode; private SclDocument sclDocument; public XmlNode XmlNode { get { return xmlNode; } } public GetDirectory(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { this.sclDocument = sclDocument; xmlDocument = sclDocument.XmlDocument; this.xmlNode = xmlNode; } } public class GetDataObjectDefinition { private XmlDocument xmlDocument; private XmlNode xmlNode; private SclDocument sclDocument; public XmlNode XmlNode { get { return xmlNode; } } public GetDataObjectDefinition(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { this.sclDocument = sclDocument; xmlDocument = sclDocument.XmlDocument; this.xmlNode = xmlNode; } } public class DataObjectDirectory { private XmlDocument xmlDocument; private XmlNode xmlNode; private SclDocument sclDocument; public XmlNode XmlNode { get { return xmlNode; } } public DataObjectDirectory(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { this.sclDocument = sclDocument; xmlDocument = sclDocument.XmlDocument; this.xmlNode = xmlNode; } } public class GetDataSetValue { private XmlDocument xmlDocument; private XmlNode xmlNode; private SclDocument sclDocument; public XmlNode XmlNode { get { return xmlNode; } } public GetDataSetValue(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { this.sclDocument = sclDocument; xmlDocument = sclDocument.XmlDocument; this.xmlNode = xmlNode; } } public class SetDataSetValue { private XmlDocument xmlDocument; private XmlNode xmlNode; private SclDocument sclDocument; public XmlNode XmlNode { get { return xmlNode; } } public SetDataSetValue(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { this.sclDocument = sclDocument; xmlDocument = sclDocument.XmlDocument; this.xmlNode = xmlNode; } } public class DataSetDirectory { private XmlDocument xmlDocument; private XmlNode xmlNode; private SclDocument sclDocument; public XmlNode XmlNode { get { return xmlNode; } } public DataSetDirectory(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { this.sclDocument = sclDocument; xmlDocument = sclDocument.XmlDocument; this.xmlNode = xmlNode; } } public class ConfDataSet { private XmlDocument xmlDocument; private XmlNode xmlNode; private SclDocument sclDocument; public XmlNode XmlNode { get { return xmlNode; } } public int Max { get { string valueStr = XmlHelper.GetAttributeValue(xmlNode, "max"); if (valueStr != null) { int retVal = -1; int.TryParse(valueStr, out retVal); return retVal; } else return -1; } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "max", value.ToString()); } } public int MaxAttributes { get { string valueStr = XmlHelper.GetAttributeValue(xmlNode, "maxAttributes"); if (valueStr != null) { int retVal = -1; int.TryParse(valueStr, out retVal); return retVal; } else return -1; } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "maxAttributes", value.ToString()); } } public bool Modify { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "modify", true); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "modify", value.ToString()); } } public ConfDataSet(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { this.sclDocument = sclDocument; xmlDocument = sclDocument.XmlDocument; this.xmlNode = xmlNode; } } public class DynDataSet { private XmlDocument xmlDocument; private XmlNode xmlNode; private SclDocument sclDocument; public XmlNode XmlNode { get { return xmlNode; } } public int Max { get { string valueStr = XmlHelper.GetAttributeValue(xmlNode, "max"); if (valueStr != null) { int retVal = -1; int.TryParse(valueStr, out retVal); return retVal; } else return -1; } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "max", value.ToString()); } } public int MaxAttributes { get { string valueStr = XmlHelper.GetAttributeValue(xmlNode, "maxAttributes"); if (valueStr != null) { int retVal = -1; int.TryParse(valueStr, out retVal); return retVal; } else return -1; } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "maxAttributes", value.ToString()); } } public DynDataSet(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { this.sclDocument = sclDocument; xmlDocument = sclDocument.XmlDocument; this.xmlNode = xmlNode; } } public class ReadWrite { private XmlDocument xmlDocument; private XmlNode xmlNode; private SclDocument sclDocument; public XmlNode XmlNode { get { return xmlNode; } } public ReadWrite(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { this.sclDocument = sclDocument; xmlDocument = sclDocument.XmlDocument; this.xmlNode = xmlNode; } } public class TimerActivatedControl { private XmlDocument xmlDocument; private XmlNode xmlNode; private SclDocument sclDocument; public XmlNode XmlNode { get { return xmlNode; } } public TimerActivatedControl(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { this.sclDocument = sclDocument; xmlDocument = sclDocument.XmlDocument; this.xmlNode = xmlNode; } } public class ConfReportControl { public enum BufMode { UNBUFFERED, BUFFERED, BOTH } private XmlDocument xmlDocument; private XmlNode xmlNode; private SclDocument sclDocument; public XmlNode XmlNode { get { return xmlNode; } } private BufMode confReportControlBufMode = BufMode.BOTH; public int Max { get { string valueStr = XmlHelper.GetAttributeValue(xmlNode, "max"); if (valueStr != null) { int retVal = -1; int.TryParse(valueStr, out retVal); return retVal; } else return -1; } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "max", value.ToString()); } } public int MaxBuf { get { string valueStr = XmlHelper.GetAttributeValue(xmlNode, "maxBuf"); if (valueStr != null) { int retVal = -1; int.TryParse(valueStr, out retVal); return retVal; } else return -1; } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "maxBuf", value.ToString()); } } public bool bufConf { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "bufConf", false); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "bufConf", value.ToString()); } } public BufMode ConfReportControlBufMode { get { return confReportControlBufMode; } set { confReportControlBufMode = value; } } public ConfReportControl(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { this.sclDocument = sclDocument; xmlDocument = sclDocument.XmlDocument; this.xmlNode = xmlNode; } } public class GetCBValues { private XmlDocument xmlDocument; private XmlNode xmlNode; private SclDocument sclDocument; public XmlNode XmlNode { get { return xmlNode; } } public GetCBValues(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { this.sclDocument = sclDocument; xmlDocument = sclDocument.XmlDocument; this.xmlNode = xmlNode; } } public class ConfLogControl { private XmlDocument xmlDocument; private XmlNode xmlNode; private SclDocument sclDocument; public XmlNode XmlNode { get { return xmlNode; } } public int Max { get { string valueStr = XmlHelper.GetAttributeValue(xmlNode, "max"); if (valueStr != null) { int retVal = -1; int.TryParse(valueStr, out retVal); return retVal; } else return -1; } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "max", value.ToString()); } } public ConfLogControl(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { this.sclDocument = sclDocument; xmlDocument = sclDocument.XmlDocument; this.xmlNode = xmlNode; } } public class ReportSettings { private XmlDocument xmlDocument; private XmlNode xmlNode; private SclDocument sclDocument; public enum CBName { Fix, Conf } public enum DATSet { Fix, Conf, Dyn } public XmlNode XmlNode { get { return xmlNode; } } private CBName cbName = CBName.Fix; private DATSet datSet = DATSet.Fix; public CBName CbName { get { return cbName; } set { cbName = value; } } public DATSet DatSet { get { return datSet; } set { datSet = value; } } public string RptID { get { return XmlHelper.GetAttributeValue(xmlNode, "rptID"); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "rptID", value.ToString()); } } public string OptFields { get { return XmlHelper.GetAttributeValue(xmlNode, "optFields"); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "optFields", value.ToString()); } } public string BufTime { get { return XmlHelper.GetAttributeValue(xmlNode, "bufTime"); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "bufTime", value.ToString()); } } public string TrgOps { get { return XmlHelper.GetAttributeValue(xmlNode, "trgOps"); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "trgOps", value.ToString()); } } public string IntgPd { get { return XmlHelper.GetAttributeValue(xmlNode, "intgPd"); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "intgPd", value.ToString()); } } public bool ResvTms { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "resvTms", false); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "resvTms", value.ToString()); } } public bool Owner { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "owner", false); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "owner", value.ToString()); } } public ReportSettings(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { this.sclDocument = sclDocument; xmlDocument = sclDocument.XmlDocument; this.xmlNode = xmlNode; } } public class LogSettings { private XmlDocument xmlDocument; private XmlNode xmlNode; private SclDocument sclDocument; public enum CBName { Fix, Conf } public enum DATSet { Fix, Conf, Dyn } private CBName cbName = CBName.Fix; private DATSet datSet = DATSet.Fix; public XmlNode XmlNode { get { return xmlNode; } } public CBName CbName { get { return cbName; } set { cbName = value; } } public DATSet DatSet { get { return datSet; } set { datSet = value; } } public string LogEna { get { return XmlHelper.GetAttributeValue(xmlNode, "logEna"); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "logEna", value.ToString()); } } public string TrgOps { get { return XmlHelper.GetAttributeValue(xmlNode, "trgOps"); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "trgOps", value.ToString()); } } public string IntgPd { get { return XmlHelper.GetAttributeValue(xmlNode, "intgPd"); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "intgPd", value.ToString()); } } public LogSettings(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { this.sclDocument = sclDocument; xmlDocument = sclDocument.XmlDocument; this.xmlNode = xmlNode; } } public class GSESettings { private XmlDocument xmlDocument; private XmlNode xmlNode; private SclDocument sclDocument; public enum CBName { Fix, Conf } public enum DATSet { Fix, Conf, Dyn } private CBName cbName = CBName.Fix; private DATSet datSet = DATSet.Fix; public XmlNode XmlNode { get { return xmlNode; } } public CBName CbName { get { return cbName; } set { cbName = value; } } public DATSet DatSet { get { return datSet; } set { datSet = value; } } public string AppID { get { return XmlHelper.GetAttributeValue(xmlNode, "appID"); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "appID", value.ToString()); } } public string DataLabel { get { return XmlHelper.GetAttributeValue(xmlNode, "dataLabel"); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "dataLabel", value.ToString()); } } public bool kdaParticipant { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "kdaParticipant", false); } //set { XmlHelper.SetBooleanAttributeCreateIfNotExists(xmlDocument, xmlNode, "kdaParticipant", value); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "kdaParticipant", value.ToString()); } } public McSecurity McSecurity = null; public void DeleteMcSecurity() { if (McSecurity != null) { XmlNode.RemoveChild(McSecurity.XmlNode); McSecurity = null; } } public GSESettings(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { this.sclDocument = sclDocument; xmlDocument = sclDocument.XmlDocument; this.xmlNode = xmlNode; XmlNode mcSecurity = xmlNode.SelectSingleNode("scl:McSecurity", nsManager); // //this.XmlNode.InsertAfter(TimeSyncProt.XmlNode, this.XmlNode.FirstChild); // if (mcSecurity != null) { McSecurity = new McSecurity(sclDocument, mcSecurity, nsManager); } } } public class SMVSettings { private XmlDocument xmlDocument; private XmlNode xmlNode; private SclDocument sclDocument; public enum CBName { Fix, Conf } public enum DATSet { Fix, Conf, Dyn } public enum SMPRate { Fix, Conf, Dyn } public enum NOFASDU { Fix, Conf } private CBName cbName = CBName.Fix; private DATSet datSet = DATSet.Fix; private SMPRate sMPRate = SMPRate.Fix; private NOFASDU nOFASDU = NOFASDU.Fix; public XmlNode XmlNode { get { return xmlNode; } } public CBName CbName { get { return cbName; } set { cbName = value; } } public DATSet DatSet { get { return datSet; } set { datSet = value; } } public SMPRate SmpRate { get { return sMPRate; } set { sMPRate = value; } } public NOFASDU NofASDU { get { return nOFASDU; } set { nOFASDU = value; } } public string SvID { get { return XmlHelper.GetAttributeValue(xmlNode, "svID"); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "svID", value.ToString()); } } public string OptFields { get { return XmlHelper.GetAttributeValue(xmlNode, "optFields"); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "optFields", value.ToString()); } } public string smpRate { get { return XmlHelper.GetAttributeValue(xmlNode, "smpRate"); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "smpRate", value.ToString()); } } public int SamplesPerSec { get { string valueStr = XmlHelper.GetAttributeValue(xmlNode, "samplesPerSec"); if (valueStr != null) { int retVal = -1; int.TryParse(valueStr, out retVal); return retVal; } else return -1; } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "samplesPerSec", value.ToString()); } } public bool SynchrSrcId { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "synchrSrcId", false); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "synchrSrcId", value.ToString()); } } public bool PdcTimeStamp { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "pdcTimeStamp", false); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "pdcTimeStamp", value.ToString()); } } public bool KdaParticipant { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "kdaParticipant", false); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "kdaParticipant", value.ToString()); } } //SubElements public int SmpRateValue { get { string valueStr = XmlHelper.GetAttributeValue(xmlNode, "SmpRate"); if (valueStr != null) { int retVal = -1; int.TryParse(valueStr, out retVal); return retVal; } else return -1; } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "SmpRate", value.ToString()); } } public int SamplesPerSecValue { get { string valueStr = XmlHelper.GetAttributeValue(xmlNode, "SamplesPerSec"); if (valueStr != null) { int retVal = -1; int.TryParse(valueStr, out retVal); return retVal; } else return -1; } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "SamplesPerSec", value.ToString()); } } public int SecPerSamplesValue { get { string valueStr = XmlHelper.GetAttributeValue(xmlNode, "SecPerSamples"); if (valueStr != null) { int retVal = -1; int.TryParse(valueStr, out retVal); return retVal; } else return -1; } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "SecPerSamples", value.ToString()); } } // public McSecurity McSecurity = null; public void DeleteMcSecurity() { if (McSecurity != null) { XmlNode.RemoveChild(McSecurity.XmlNode); McSecurity = null; } } public SMVSettings(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { this.sclDocument = sclDocument; xmlDocument = sclDocument.XmlDocument; this.xmlNode = xmlNode; XmlNode mcSecurity = xmlNode.SelectSingleNode("scl:McSecurity", nsManager); if (mcSecurity != null) { McSecurity = new McSecurity(sclDocument, mcSecurity, nsManager); } } } public class ConfLNs { private XmlDocument xmlDocument; private XmlNode xmlNode; private SclDocument sclDocument; public XmlNode XmlNode { get { return xmlNode; } } public bool FixPrefix { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "fixPrefix", false); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "fixPrefix", value.ToString()); } } public bool FixLnInst { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "fixLnInst", false); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "fixLnInst", value.ToString()); } } public ConfLNs(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { this.sclDocument = sclDocument; xmlDocument = sclDocument.XmlDocument; this.xmlNode = xmlNode; } } public class ConfLdName { private XmlDocument xmlDocument; private XmlNode xmlNode; private SclDocument sclDocument; public XmlNode XmlNode { get { return xmlNode; } } public ConfLdName(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { this.sclDocument = sclDocument; xmlDocument = sclDocument.XmlDocument; this.xmlNode = xmlNode; } } public class GSEDir { private XmlDocument xmlDocument; private XmlNode xmlNode; private SclDocument sclDocument; public XmlNode XmlNode { get { return xmlNode; } } public GSEDir(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { this.sclDocument = sclDocument; xmlDocument = sclDocument.XmlDocument; this.xmlNode = xmlNode; } } public class GOOSE { private XmlDocument xmlDocument; private XmlNode xmlNode; private SclDocument sclDocument; public XmlNode XmlNode { get { return xmlNode; } } public int Max { get { string valueStr = XmlHelper.GetAttributeValue(xmlNode, "max"); if (valueStr != null) { int retVal = -1; int.TryParse(valueStr, out retVal); return retVal; } else return -1; } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "max", value.ToString()); } } public bool FixedOffs { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "fixedOffs", false); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "fixedOffs", value.ToString()); } } public bool Goose { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "goose", true); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "goose", value.ToString()); } } public bool RGOOSE { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "rGOOSE", false); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "rGOOSE", value.ToString()); } } public GOOSE(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { this.sclDocument = sclDocument; xmlDocument = sclDocument.XmlDocument; this.xmlNode = xmlNode; } } public class GSSE { private XmlDocument xmlDocument; private XmlNode xmlNode; private SclDocument sclDocument; public XmlNode XmlNode { get { return xmlNode; } } public int Max { get { string valueStr = XmlHelper.GetAttributeValue(xmlNode, "max"); if (valueStr != null) { int retVal = -1; int.TryParse(valueStr, out retVal); return retVal; } else return -1; } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "max", value.ToString()); } } public GSSE(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { this.sclDocument = sclDocument; xmlDocument = sclDocument.XmlDocument; this.xmlNode = xmlNode; } } public class SMVsc { private XmlDocument xmlDocument; private XmlNode xmlNode; private SclDocument sclDocument; public XmlNode XmlNode { get { return xmlNode; } } public int Max { get { string valueStr = XmlHelper.GetAttributeValue(xmlNode, "max"); if (valueStr != null) { int retVal = -1; int.TryParse(valueStr, out retVal); return retVal; } else return -1; } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "max", value.ToString()); } } public bool DeliveryConf { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "deliveryConf", false); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "deliveryConf", value.ToString()); } } public bool Sv { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "sv", true); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "sv", value.ToString()); } } public bool RSV { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "rSV", false); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "rSV", value.ToString()); } } public SMVsc(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { this.sclDocument = sclDocument; xmlDocument = sclDocument.XmlDocument; this.xmlNode = xmlNode; } } public class FileHandling { private XmlDocument xmlDocument; private XmlNode xmlNode; private SclDocument sclDocument; public XmlNode XmlNode { get { return xmlNode; } } public bool Mms { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "mms", true); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "mms", value.ToString()); } } public bool Ftp { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "ftp", false); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "ftp", value.ToString()); } } public bool Ftps { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "ftps", false); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "ftps", value.ToString()); } } public FileHandling(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { this.sclDocument = sclDocument; xmlDocument = sclDocument.XmlDocument; this.xmlNode = xmlNode; } } public class SupSubscription { private XmlDocument xmlDocument; private XmlNode xmlNode; private SclDocument sclDocument; public XmlNode XmlNode { get { return xmlNode; } } public int MaxGo { get { string valueStr = XmlHelper.GetAttributeValue(xmlNode, "maxGo"); if (valueStr != null) { int retVal = -1; int.TryParse(valueStr, out retVal); return retVal; } else return -1; } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "maxGo", value.ToString()); } } public int MaxSv { get { string valueStr = XmlHelper.GetAttributeValue(xmlNode, "maxSv"); if (valueStr != null) { int retVal = -1; int.TryParse(valueStr, out retVal); return retVal; } else return -1; } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "maxSv", value.ToString()); } } public SupSubscription(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { this.sclDocument = sclDocument; xmlDocument = sclDocument.XmlDocument; this.xmlNode = xmlNode; } } public class ConfSigRef { private XmlDocument xmlDocument; private XmlNode xmlNode; private SclDocument sclDocument; public XmlNode XmlNode { get { return xmlNode; } } public int Max { get { string valueStr = XmlHelper.GetAttributeValue(xmlNode, "max"); if (valueStr != null) { int retVal = -1; int.TryParse(valueStr, out retVal); return retVal; } else return -1; } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "max", value.ToString()); } } public ConfSigRef(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { this.sclDocument = sclDocument; xmlDocument = sclDocument.XmlDocument; this.xmlNode = xmlNode; } } public class CommProt { private XmlDocument xmlDocument; private XmlNode xmlNode; private SclDocument sclDocument; public XmlNode XmlNode { get { return xmlNode; } } public bool Ipv6 { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "ipv6", false); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "ipv6", value.ToString()); } } public CommProt(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { this.sclDocument = sclDocument; xmlDocument = sclDocument.XmlDocument; this.xmlNode = xmlNode; } } public class RedProt { private XmlDocument xmlDocument; private XmlNode xmlNode; private SclDocument sclDocument; public XmlNode XmlNode { get { return xmlNode; } } public bool Hsr { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "hsr", false); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "hsr", value.ToString()); } } public bool Prp { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "prp", false); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "prp", value.ToString()); } } public bool Rstp { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "rstp", false); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "rstp", value.ToString()); } } public RedProt(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { this.sclDocument = sclDocument; xmlDocument = sclDocument.XmlDocument; this.xmlNode = xmlNode; } } public class ValueHandling { private XmlDocument xmlDocument; private XmlNode xmlNode; private SclDocument sclDocument; public XmlNode XmlNode { get { return xmlNode; } } public bool SetToRo { get { return XmlHelper.ParseBooleanAttribute(xmlNode, "setToRo", false); } set { XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "setToRo", value.ToString()); } } public ValueHandling(SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager) { this.sclDocument = sclDocument; xmlDocument = sclDocument.XmlDocument; this.xmlNode = xmlNode; } } }