Beispiel #1
0
 public void AnalogInputChange(AnalogInputPoint analogInputPoint, bool isConfigAck)
 {
     try
     {
         proxy.AnalogInputChange(analogInputPoint, isConfigAck);
     }
     catch { }
 }
Beispiel #2
0
        public void AnalogInputChange(AnalogInputPoint analogInputPoint, bool isConfigAck)
        {
            foreach (IPublisher subscriber in PubSubDatabase.Subscribers)
            {
                PublishThreadData threadObj = new PublishThreadData(subscriber, analogInputPoint);

                Thread thread = new Thread(() => threadObj.PublishAnalogInputChangeInfo(analogInputPoint, isConfigAck));
                thread.Start();
            }
        }
Beispiel #3
0
 public void PublishAnalogInputChangeInfo(AnalogInputPoint analogInputPoint, bool isConfigAck)
 {
     try
     {
         subscriber.AnalogInputChange(analogInputPoint, isConfigAck);
     }
     catch (Exception e)
     {
         PubSubDatabase.RemoveSubsriber(subscriber);
     }
 }
        void AnalogInputChanged(AnalogInputPoint newAnalogInputPoint, bool isConfigPresent)
        {
            AnalogInputPoint analogInputPoint;

            lock (Database.lockObject)
            {
                if (!Database.AnalogInputPoints.TryGetValue(newAnalogInputPoint.Index, out analogInputPoint))
                {
                    Database.AnalogInputPoints.Add(newAnalogInputPoint.Index, newAnalogInputPoint);
                }
                else
                {
                    if (isConfigPresent)
                    {
                        Database.AnalogInputPoints.Values.Where(a => a.Index == newAnalogInputPoint.Index).FirstOrDefault().OutValueString    = newAnalogInputPoint.OutValue.ToString();
                        Database.AnalogInputPoints.Values.Where(a => a.Index == newAnalogInputPoint.Index).FirstOrDefault().MasterValueString = newAnalogInputPoint.MasterValue.ToString();
                    }

                    Database.AnalogInputPoints.Values.Where(a => a.Index == newAnalogInputPoint.Index).FirstOrDefault().RawOutValue    = newAnalogInputPoint.RawOutValue;
                    Database.AnalogInputPoints.Values.Where(a => a.Index == newAnalogInputPoint.Index).FirstOrDefault().RawMasterValue = newAnalogInputPoint.RawMasterValue;
                    Database.AnalogInputPoints.Values.Where(a => a.Index == newAnalogInputPoint.Index).FirstOrDefault().Name           = newAnalogInputPoint.Name;
                    Database.AnalogInputPoints.Values.Where(a => a.Index == newAnalogInputPoint.Index).FirstOrDefault().Description    = newAnalogInputPoint.Description;
                    Database.AnalogInputPoints.Values.Where(a => a.Index == newAnalogInputPoint.Index).FirstOrDefault().Description    = newAnalogInputPoint.Units;
                }

                if (Database.ViewModels.TryGetValue(ViewModelType.DNP3_EXTENSION, out SingleShellFillerViewModel singleShellFillerViewModel) && singleShellFillerViewModel.IsOpen)
                {
                    ((DNP3ExtensionViewModel)singleShellFillerViewModel).IsConfigPresent = isConfigPresent;
                    if ((analogInputPoint = ((DNP3ExtensionViewModel)singleShellFillerViewModel).AnalogInputPoints.Where(a => a.Index == newAnalogInputPoint.Index).FirstOrDefault()) == null)
                    {
                        ((DNP3ExtensionViewModel)singleShellFillerViewModel).AnalogInputPoints.Add(newAnalogInputPoint);
                    }
                    else
                    {
                        if (isConfigPresent)
                        {
                            ((DNP3ExtensionViewModel)singleShellFillerViewModel).AnalogInputPoints.Where(a => a.Index == newAnalogInputPoint.Index).FirstOrDefault().OutValueString    = newAnalogInputPoint.OutValue.ToString();
                            ((DNP3ExtensionViewModel)singleShellFillerViewModel).AnalogInputPoints.Where(a => a.Index == newAnalogInputPoint.Index).FirstOrDefault().MasterValueString = newAnalogInputPoint.MasterValue.ToString();
                        }

                        ((DNP3ExtensionViewModel)singleShellFillerViewModel).AnalogInputPoints.Where(a => a.Index == newAnalogInputPoint.Index).FirstOrDefault().RawOutValue    = newAnalogInputPoint.RawOutValue;
                        ((DNP3ExtensionViewModel)singleShellFillerViewModel).AnalogInputPoints.Where(a => a.Index == newAnalogInputPoint.Index).FirstOrDefault().RawMasterValue = newAnalogInputPoint.RawMasterValue;
                        ((DNP3ExtensionViewModel)singleShellFillerViewModel).AnalogInputPoints.Where(a => a.Index == newAnalogInputPoint.Index).FirstOrDefault().Name           = newAnalogInputPoint.Name;
                        ((DNP3ExtensionViewModel)singleShellFillerViewModel).AnalogInputPoints.Where(a => a.Index == newAnalogInputPoint.Index).FirstOrDefault().Description    = newAnalogInputPoint.Description;
                        ((DNP3ExtensionViewModel)singleShellFillerViewModel).AnalogInputPoints.Where(a => a.Index == newAnalogInputPoint.Index).FirstOrDefault().Units          = newAnalogInputPoint.Units;
                    }
                }
            }
        }
        public void ReleaseValue(PointType pointType, int index)
        {
            lock (Database.lockObject)
            {
                FixedValue fixedValue = null;
                if (Database.FixedValues.TryGetValue(new Tuple <int, PointType>(index, pointType), out fixedValue))
                {
                    Database.FixedValues.Remove(new Tuple <int, PointType>(index, pointType));

                    AnalogInputPoint analogInputPoint = null;
                    if (Database.AnalogInputPoints.TryGetValue(index, out analogInputPoint))
                    {
                        analogInputPoint.IsFixed = false;
                    }
                }
            }
        }
        private void ExecuteModifyCommand(object parameter)
        {
            AnalogInputPoint analogInputPoint = (AnalogInputPoint)(((object[])parameter)[1]);

            if ((string)(((object[])parameter)[0]) == "Fix Value")
            {
                AnalogInputPoints.Where(a => a.Index == analogInputPoint.Index).FirstOrDefault().IsFixed = true;

                mITMServiceProxy.FixValue(PointType.ANALOG_INPUT, analogInputPoint.Index);
            }
            else
            {
                AnalogInputPoints.Where(a => a.Index == analogInputPoint.Index).FirstOrDefault().IsFixed = false;

                mITMServiceProxy.ReleaseValue(PointType.ANALOG_INPUT, analogInputPoint.Index);
            }
        }
        public void AcquireOutstationConfiguration()
        {
            string configPath = Directory.GetCurrentDirectory() + "..\\..\\..\\OustationConfiguration\\open_dnp3_slave.xml";

            XDocument  document = XDocument.Load(configPath);
            XNamespace ns       = document.Root.GetDefaultNamespace();

            UniversalConfigurationParser configParser;

            switch (ns.NamespaceName)
            {
            case "http://www.dnp3.org/DNP3/DeviceProfile/Jan2010":

                configParser = new DNP3DeviceProfileJan2010Parser(document);
                ((DNP3DeviceProfileJan2010Parser)configParser).Parse();

                lock (Database.lockObject)
                {
                    foreach (AnalogInputPoint analog in ((DNP3DeviceProfileJan2010Parser)configParser).Configuration.DataPointsListConfiguration.AnalogInputPoints)
                    {
                        AnalogInputPoint analogInputPoint = null;
                        if (Database.AnalogInputPoints.TryGetValue(analog.Index, out analogInputPoint))
                        {
                            analogInputPoint.Name        = analog.Name;
                            analogInputPoint.Description = analog.Description;
                            analogInputPoint.Units       = analog.Units;
                            analogInputPoint.ScaleFactor = analog.ScaleFactor;
                            analogInputPoint.ScaleOffset = analog.ScaleOffset;

                            Database.IsConfigAck = true;

                            publisher.AnalogInputChange(analogInputPoint, Database.IsConfigAck);
                        }
                    }
                }

                break;
            }
        }
        public void FixValue(PointType pointType, int index)
        {
            FixedValue fixedValue = null;

            if (pointType == PointType.ANALOG_INPUT)
            {
                lock (Database.lockObject)
                {
                    AnalogInputPoint analogInputPoint = null;
                    if (Database.AnalogInputPoints.TryGetValue(index, out analogInputPoint))
                    {
                        fixedValue       = new FixedValue();
                        fixedValue.Index = index;
                        fixedValue.Value = analogInputPoint.RawOutValue;

                        Database.FixedValues.Add(new Tuple <int, PointType>(index, pointType), fixedValue);

                        analogInputPoint.IsFixed = true;
                    }
                }
            }
        }
Beispiel #9
0
 public void AnalogInputChange(AnalogInputPoint analogInputPoint, bool isConfigPresent)
 {
     publishAnalogInputChangeEvent?.Invoke(analogInputPoint, isConfigPresent);
 }
Beispiel #10
0
        private void ParseDataPointsListConfiguration()
        {
            XElement   root             = configFile.Root;
            XNamespace defaultNamespace = root.GetDefaultNamespace();

            IEnumerable <XElement> elements = root.Descendants(defaultNamespace + "dataPointsList");

            if (elements.Count() > 0)
            {
                XElement element = elements.ElementAt(0).Element(defaultNamespace + "analogInputPoints");

                if (element != null)
                {
                    XElement temp1;
                    if ((temp1 = element.Element(defaultNamespace + "dataPoints")) != null)
                    {
                        foreach (XElement temp2 in temp1.Elements(defaultNamespace + "analogInput"))
                        {
                            AnalogInputPoint analogInputPoint = new AnalogInputPoint();

                            XElement temp3;
                            if ((temp3 = temp2.Element(defaultNamespace + "index")) != null)
                            {
                                analogInputPoint.Index = int.Parse(temp3.Value);
                            }
                            if ((temp3 = temp2.Element(defaultNamespace + "name")) != null)
                            {
                                analogInputPoint.Name = temp3.Value;
                            }
                            if ((temp3 = temp2.Element(defaultNamespace + "changeEventClass")) != null)
                            {
                                analogInputPoint.ChangeEventClass = int.Parse(temp3.Value);
                            }
                            if ((temp3 = temp2.Element(defaultNamespace + "minIntegerTransmittedValue")) != null)
                            {
                                analogInputPoint.MinIntegerTransmittedValue = int.Parse(temp3.Value);
                            }
                            if ((temp3 = temp2.Element(defaultNamespace + "maxIntegerTransmittedValue")) != null)
                            {
                                analogInputPoint.MaxIntegerTransmittedValue = int.Parse(temp3.Value);
                            }
                            if ((temp3 = temp2.Element(defaultNamespace + "scaleFactor")) != null)
                            {
                                analogInputPoint.ScaleFactor = int.Parse(temp3.Value);
                            }
                            if ((temp3 = temp2.Element(defaultNamespace + "scaleOffset")) != null)
                            {
                                analogInputPoint.ScaleOffset = float.Parse(temp3.Value);
                            }
                            if ((temp3 = temp2.Element(defaultNamespace + "units")) != null)
                            {
                                analogInputPoint.Units = temp3.Value;
                            }
                            if ((temp3 = temp2.Element(defaultNamespace + "resolution")) != null)
                            {
                                analogInputPoint.Resolution = int.Parse(temp3.Value);
                            }
                            if ((temp3 = temp2.Element(defaultNamespace + "description")) != null)
                            {
                                analogInputPoint.Description = temp3.Value;
                            }

                            Configuration.DataPointsListConfiguration.AnalogInputPoints.Add(analogInputPoint);
                        }
                    }
                }
            }
        }
Beispiel #11
0
 public PublishThreadData(IPublisher subscriber, AnalogInputPoint analogInputPoint)
 {
     this.subscriber       = subscriber;
     this.analogInputPoint = analogInputPoint;
 }
        void ProcessObjects(List <UserLevelObject> userLevelObjects, PacketStruct packetStruct)
        {
            try
            {
                foreach (UserLevelObject userObject in userLevelObjects)
                {
                    if (userObject.FunctionCode == ApplicationFunctionCodes.RESPONSE)
                    {
                        if (!userObject.IndicesPresent)
                        {
                            if (userObject.RangeFieldPresent)
                            {
                                if (userObject.RangePresent)
                                {
                                    for (int i = userObject.StartIndex; i <= userObject.StopIndex; i++)
                                    {
                                        AnalogInputPoint analogInputPoint;
                                        if (!Database.AnalogInputPoints.TryGetValue(i, out analogInputPoint))
                                        {
                                            analogInputPoint = new AnalogInputPoint();

                                            lock (Database.lockObject)
                                            {
                                                Database.AnalogInputPoints.Add(i, analogInputPoint);
                                            }
                                        }

                                        lock (Database.lockObject)
                                        {
                                            analogInputPoint.RawOutValue = BitConverter.ToInt32(userObject.Values[i], 0);
                                            analogInputPoint.OutValue    = analogInputPoint.RawOutValue * analogInputPoint.ScaleFactor + analogInputPoint.ScaleOffset;

                                            FixedValue fixedValue = null;
                                            if (Database.FixedValues.TryGetValue(new Tuple <int, PointType>(i, PointType.ANALOG_INPUT), out fixedValue))
                                            {
                                                userObject.Values[i] = BitConverter.GetBytes(fixedValue.Value);
                                            }
                                            else
                                            {
                                                analogInputPoint.RawMasterValue = analogInputPoint.RawOutValue;
                                                analogInputPoint.MasterValue    = analogInputPoint.OutValue;
                                            }
                                        }

                                        publisher.AnalogInputChange(analogInputPoint, Database.IsConfigAck);
                                    }
                                }
                            }
                        }
                    }
                }

                List <byte[]> segments = applicationHandler.PackDown(userLevelObjects, userLevelObjects[0].FunctionCode, dataLinkHandler.IsMaster, dataLinkHandler.IsPrm);

                int offset    = packetStruct.dataOffset;
                int actualLen = packetStruct.dataLength;

                segments[0].CopyTo(packetStruct.packet, packetStruct.dataOffset);

                byte[] transmiterTarget = new byte[6];
                for (int i = 0; i < 6; i++)
                {
                    transmiterTarget[i] = packetStruct.packet[i + 6];
                }

                byte[] receiverTarget;
                if (AreEqual(transmiterTarget, Database.ARPSpoofParticipantsInfo.Target1MACAddress))
                {
                    receiverTarget = Database.ARPSpoofParticipantsInfo.Target2MACAddress;
                }
                else
                {
                    receiverTarget = Database.ARPSpoofParticipantsInfo.Target1MACAddress;
                }

                byte[] myAddress = Database.ARPSpoofParticipantsInfo.MyMACAddress;

                receiverTarget.CopyTo(packetStruct.packet, 0);
                myAddress.CopyTo(packetStruct.packet, 6);
                packetStruct.size = offset + actualLen;

                Task.Factory.StartNew(() => PreparePacketForSending(ref packetStruct));
            }
            catch (Exception e) { }
        }