Beispiel #1
0
 private static void LoadLineImpedanceAttributes(LineImpedance lineImpedance, XElement impedancesElement)
 {
     lineImpedance.R0 = Convert.ToDouble((string)impedancesElement.Element("R0"));
     lineImpedance.X0 = Convert.ToDouble((string)impedancesElement.Element("X0"));
     lineImpedance.R1 = Convert.ToDouble((string)impedancesElement.Element("R1"));
     lineImpedance.X1 = Convert.ToDouble((string)impedancesElement.Element("X1"));
 }
Beispiel #2
0
        public LineImpedance CreateLineImpedance(LineView record)
        {
            LineImpedance li = new LineImpedance();

            li.R0     = record.R0;
            li.R1     = record.R1;
            li.X0     = record.X0;
            li.X1     = record.X1;
            li.LineID = record.ID;
            return(li);
        }
Beispiel #3
0
        private void UpdateConfigurationData(MeterDataSet meterDataSet)
        {
            using (TransactionScope transaction = new TransactionScope(TransactionScopeOption.Required, GetTransactionOptions()))
            {
                if (meterDataSet.Meter.MeterLines.Count != 1)
                {
                    return;
                }

                Line line = meterDataSet.Meter.MeterLines
                            .Select(meterLine => meterLine.Line)
                            .Single();

                if (meterDataSet.Configuration.LineLength.HasValue)
                {
                    line.Length = meterDataSet.Configuration.LineLength.GetValueOrDefault();
                    m_meterInfo.SubmitChanges();
                }

                if (meterDataSet.Configuration.R1.HasValue && meterDataSet.Configuration.X1.HasValue && meterDataSet.Configuration.R0.HasValue && meterDataSet.Configuration.X0.HasValue)
                {
                    DataContextLookup <int, LineImpedance> lookup = new DataContextLookup <int, LineImpedance>(m_faultLocationInfo, impedance => impedance.LineID);
                    LineImpedance lineImpedance = lookup.GetOrAdd(line.ID, id => new LineImpedance()
                    {
                        LineID = id
                    });

                    if (meterDataSet.Configuration.R1.HasValue)
                    {
                        lineImpedance.R1 = meterDataSet.Configuration.R1.GetValueOrDefault();
                    }

                    if (meterDataSet.Configuration.X1.HasValue)
                    {
                        lineImpedance.X1 = meterDataSet.Configuration.X1.GetValueOrDefault();
                    }

                    if (meterDataSet.Configuration.R0.HasValue)
                    {
                        lineImpedance.R0 = meterDataSet.Configuration.R0.GetValueOrDefault();
                    }

                    if (meterDataSet.Configuration.X0.HasValue)
                    {
                        lineImpedance.X0 = meterDataSet.Configuration.X0.GetValueOrDefault();
                    }

                    m_faultLocationInfo.SubmitChanges();
                }

                transaction.Complete();
            }
        }
Beispiel #4
0
        private static void LoadLineImpedanceAttributes(LineImpedance lineImpedance, XElement impedancesElement)
        {
            object r0 = (string)impedancesElement.Element("R0");
            object x0 = (string)impedancesElement.Element("X0");
            object r1 = (string)impedancesElement.Element("R1");
            object x1 = (string)impedancesElement.Element("X1");

            if (r0 != null && x0 != null && r0 != null && x0 != null)
            {
                lineImpedance.R0 = Convert.ToDouble(r0);
                lineImpedance.X0 = Convert.ToDouble(x0);
                lineImpedance.R1 = Convert.ToDouble(r1);
                lineImpedance.X1 = Convert.ToDouble(x1);
            }
        }
Beispiel #5
0
        private void SyncLineImpedances(string address, LinesToDataPush selectedLine)
        {
            // ensure remote and local line impedance matches
            LineImpedance localLineImpedance  = DataContext.Table <LineImpedance>().QueryRecordWhere("LineID = {0}", selectedLine.LocalXDALineID);
            LineImpedance remoteLineImpedance = (LineImpedance)WebAPIHub.GetRecordsWhere(address, "LineImpedance", $"LineID = {selectedLine.RemoteXDALineID}").FirstOrDefault();

            // if there is a local record but not a remote record
            if (localLineImpedance != null && remoteLineImpedance == null)
            {
                JObject record = new JObject();
                record.Add("LineID", selectedLine.RemoteXDALineID);
                record.Add("R0", localLineImpedance.R0);
                record.Add("R1", localLineImpedance.R1);
                record.Add("X0", localLineImpedance.X0);
                record.Add("X1", localLineImpedance.X1);

                WebAPIHub.CreateRecord(address, "LineImpedance", record);
            }
        }
Beispiel #6
0
        private void UpdateConfigurationData(MeterDataSet meterDataSet)
        {
            bool updateLineLength = meterDataSet.Configuration.LineLength.HasValue;

            bool updateLineImpedance =
                meterDataSet.Configuration.R1.HasValue &&
                meterDataSet.Configuration.X1.HasValue &&
                meterDataSet.Configuration.R0.HasValue &&
                meterDataSet.Configuration.X0.HasValue;

            if (!updateLineLength && !updateLineImpedance)
            {
                return;
            }

            using (AdoDataConnection connection = meterDataSet.CreateDbConnection())
            {
                TableOperations <Line> lineTable = new TableOperations <Line>(connection);

                List <Line> lines = lineTable.QueryRecordsWhere("ID IN (SELECT LineID FROM MeterLocationLine WHERE MeterLocationID = {0})", meterDataSet.Meter.MeterLocationID).ToList();

                if (lines.Count != 1)
                {
                    return;
                }

                Line line = lines[0];

                if (updateLineLength)
                {
                    line.Length = meterDataSet.Configuration.LineLength.GetValueOrDefault();
                    lineTable.UpdateRecord(line);
                }

                if (updateLineImpedance)
                {
                    TableOperations <LineImpedance> lineImpedanceTable = new TableOperations <LineImpedance>(connection);
                    LineImpedance lineImpedance = lineImpedanceTable.QueryRecordWhere("LineID = {0}", line.ID);

                    if ((object)lineImpedance == null)
                    {
                        lineImpedance = new LineImpedance()
                        {
                            ID = line.ID
                        }
                    }
                    ;

                    if (meterDataSet.Configuration.R1.HasValue)
                    {
                        lineImpedance.R1 = meterDataSet.Configuration.R1.GetValueOrDefault();
                    }

                    if (meterDataSet.Configuration.X1.HasValue)
                    {
                        lineImpedance.X1 = meterDataSet.Configuration.X1.GetValueOrDefault();
                    }

                    if (meterDataSet.Configuration.R0.HasValue)
                    {
                        lineImpedance.R0 = meterDataSet.Configuration.R0.GetValueOrDefault();
                    }

                    if (meterDataSet.Configuration.X0.HasValue)
                    {
                        lineImpedance.X0 = meterDataSet.Configuration.X0.GetValueOrDefault();
                    }

                    try
                    {
                        lineImpedanceTable.AddNewOrUpdateRecord(lineImpedance);
                    }
                    catch (Exception ex)
                    {
                        // Ignore errors regarding unique key constraints
                        // which can occur as a result of a race condition
                        bool isUniqueViolation = ExceptionHandler.IsUniqueViolation(ex);

                        if (!isUniqueViolation)
                        {
                            throw;
                        }
                    }
                }
            }
        }