public void AnalogInputChange(AnalogInputPoint analogInputPoint, bool isConfigAck) { try { proxy.AnalogInputChange(analogInputPoint, isConfigAck); } catch { } }
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(); } }
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; } } } }
public void AnalogInputChange(AnalogInputPoint analogInputPoint, bool isConfigPresent) { publishAnalogInputChangeEvent?.Invoke(analogInputPoint, isConfigPresent); }
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); } } } } }
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) { } }