void OnReadProperties() { if (!DeviceViewModel.CompareLocalWithRemoteHashes(Device)) return; var result = ClientManager.RubezhService.GKGetSingleParameter(Device); if (!result.HasError) { foreach (var property in result.Result) { var deviceProperty = Device.Properties.FirstOrDefault(x => x.Name == property.Name); if (deviceProperty == null) { deviceProperty = new GKProperty() { Name = property.Name, DriverProperty = Device.Driver.Properties.FirstOrDefault(x => x.Name == property.Name) }; Device.DeviceProperties.Add(deviceProperty); } deviceProperty.Value = property.Value; deviceProperty.StringValue = property.StringValue; } Update(true); } else { MessageBoxService.ShowError(result.Error); } }
protected void Save(string value, bool useSaveService = true) { if (useSaveService) { ServiceFactory.SaveService.GKChanged = true; } var systemProperty = Device.Properties.FirstOrDefault(x => x.Name == DriverProperty.Name); if (systemProperty != null) { systemProperty.Name = DriverProperty.Name; systemProperty.StringValue = value; } else { var newProperty = new GKProperty() { Name = DriverProperty.Name, StringValue = value }; Device.Properties.Add(newProperty); } UpdateDeviceParameterMissmatchType(); Device.OnChanged(); Device.OnAUParametersChanged(); }
public void SaveValue() { var systemProperty = Device.Properties.FirstOrDefault(x => x.Name == DriverProperty.Name); if (systemProperty != null) { systemProperty.Name = DriverProperty.Name; systemProperty.Value = Value; } else { var newProperty = new GKProperty() { Name = DriverProperty.Name, Value = Value, }; Device.Properties.Add(newProperty); } }
void OnCopy() { DriverCopy = Device.Driver; PropertiesCopy = new List<GKProperty>(); foreach (var property in Device.Properties) { var driverProperty = Device.Driver.Properties.FirstOrDefault(x => x.Name == property.Name); if (driverProperty != null && driverProperty.IsAUParameter) { var propertyCopy = new GKProperty() { StringValue = property.StringValue, Name = property.Name, Value = property.Value, DriverProperty = driverProperty }; PropertiesCopy.Add(propertyCopy); } } }
void SetDeviceProperty(GKDevice device, string propertyName, int value) { var property = device.Properties.FirstOrDefault(x => x.Name == propertyName); if (property == null) { property = new GKProperty() { Name = propertyName, DriverProperty = device.Driver.Properties.FirstOrDefault(x => x.Name == propertyName) }; device.Properties.Add(property); } property.Value = (ushort)value; }
List<GKProperty> GetPropertiesFromBytes(List<byte> bytes) { var properties = new List<GKProperty>(); var binProperties = new List<BinProperty>(); for (int i = 0; i < bytes.Count / 4; i++) { byte paramNo = bytes[i * 4]; ushort paramValue = BytesHelper.SubstructShort(bytes, i * 4 + 1); var binProperty = new BinProperty() { No = paramNo, Value = paramValue }; binProperties.Add(binProperty); } var device = GKBaseDescriptor.GKBase as GKDevice; if (device != null) { foreach (var driverProperty in device.Driver.Properties) { if (!driverProperty.IsAUParameter) continue; var binProperty = binProperties.FirstOrDefault(x => x.No == driverProperty.No); if (binProperty != null) { var paramValue = binProperty.Value; if (driverProperty.IsLowByte) { paramValue = (ushort)(paramValue << 8); paramValue = (ushort)(paramValue >> 8); } if (driverProperty.IsHieghByte) { paramValue = (ushort)(paramValue / 256); } if (driverProperty.Mask != 0) { paramValue = (byte)(paramValue & driverProperty.Mask); } var property = device.DeviceProperties.FirstOrDefault(x => x.Name == driverProperty.Name); if (property == null) { var systemProperty = device.Properties.FirstOrDefault(x => x.Name == driverProperty.Name); property = new GKProperty() { DriverProperty = systemProperty.DriverProperty, Name = systemProperty.Name, Value = paramValue, }; device.DeviceProperties.Add(property); } if (property != null) { property.Value = paramValue; property.DriverProperty = driverProperty; if (property.DriverProperty.DriverPropertyType == GKDriverPropertyTypeEnum.BoolType) property.Value = (ushort)(property.Value > 0 ? 1 : 0); properties.Add(property); } } else throw new Exception("Неизвестный номер параметра"); } } if (binProperties.Count >= 3) { if (GKBaseDescriptor.DescriptorType == DescriptorType.Direction || GKBaseDescriptor.DescriptorType == DescriptorType.Delay || GKBaseDescriptor.DescriptorType == DescriptorType.GuardZone || GKBaseDescriptor.DescriptorType == DescriptorType.PumpStation || GKBaseDescriptor.DescriptorType == DescriptorType.Door) { properties.Add(new GKProperty() { Value = binProperties[0].Value }); properties.Add(new GKProperty() { Value = binProperties[1].Value }); properties.Add(new GKProperty() { Value = binProperties[2].Value }); } } if (GKBaseDescriptor.DescriptorType == DescriptorType.Code && binProperties.Count >= 2) { properties.Add(new GKProperty() { Value = binProperties[0].Value }); properties.Add(new GKProperty() { Value = binProperties[1].Value }); } return properties; }
public void InitializeDefaultProperties() { if (Driver != null) foreach (var driverProperty in Driver.Properties) { if (Properties.Any(x => x.Name == driverProperty.Name) == false) { var property = new GKProperty() { DriverProperty = driverProperty, Name = driverProperty.Name, Value = driverProperty.Default }; Properties.Add(property); } } }
bool Parse(List<byte> bytes, int descriptorNo) { var internalType = BytesHelper.SubstructShort(bytes, 0); var controllerAdress = BytesHelper.SubstructShort(bytes, 2); var adressOnController = BytesHelper.SubstructShort(bytes, 4); var physicalAdress = BytesHelper.SubstructShort(bytes, 6); if (internalType == 0) return true; var description = BytesHelper.BytesToStringDescription(bytes); var driver = GKManager.Drivers.FirstOrDefault(x => x.DriverTypeNo == internalType); if (driver != null) { if (driver.DriverType == GKDriverType.GK && descriptorNo > 1) { if (bytes.Count <= 0x3a) { driver = GKManager.Drivers.FirstOrDefault(x => x.DriverType == GKDriverType.GKMirror); } else if (bytes[0x3a] == 1) { driver = GKManager.Drivers.FirstOrDefault(x => x.DriverType == GKDriverType.RSR2_KAU); } } var shleifNo = (byte)(physicalAdress / 256) + 1; var device = new GKDevice { Driver = driver, DriverUID = driver.UID, IntAddress = (byte)(physicalAdress % 256), }; if (driver.DriverType == GKDriverType.GK) { device.Properties.Add(new GKProperty { Name = "IPAddress", StringValue = IpAddress }); ControllerDevices.Add(controllerAdress, device); DeviceConfiguration.RootDevice.Children.Add(device); GkDevice = device; } if (driver.IsKau) { device.IntAddress = (byte)(controllerAdress % 256); var modeProperty = new GKProperty { Name = "Mode", Value = (byte)(controllerAdress / 256) }; device.DeviceProperties.Add(modeProperty); ControllerDevices.Add(controllerAdress, device); GkDevice.Children.Add(device); for (int i = 0; i < 8; i++) { var shleif = new GKDevice(); shleif.Driver = GKManager.Drivers.FirstOrDefault(x => x.DriverType == GKDriverType.RSR2_KAU_Shleif); shleif.DriverUID = shleif.Driver.UID; shleif.IntAddress = (byte)(i + 1); device.Children.Add(shleif); } } if (driver.DriverType == GKDriverType.GKMirror) { device.IntAddress = (byte)(controllerAdress % 256); var modeProperty = new GKProperty { Name = "Mode", Value = (byte)(controllerAdress / 256) }; device.DeviceProperties.Add(modeProperty); ControllerDevices.Add(controllerAdress, device); GkDevice.Children.Add(device); } if (driver.DriverType != GKDriverType.GK && !driver.IsKau && driver.DriverType != GKDriverType.GKMirror && driver.DriverType != GKDriverType.System) { var controllerDevice = ControllerDevices.FirstOrDefault(x => x.Key == controllerAdress); if (controllerDevice.Value != null) { if (driver.DriverType == GKDriverType.GKIndicator && controllerDevice.Value.Driver.IsKau) { device.Driver = GKManager.Drivers.FirstOrDefault(x => x.DriverType == GKDriverType.KAUIndicator); device.DriverUID = device.Driver.UID; } if (1 <= shleifNo && shleifNo <= 8 && physicalAdress != 0) { var shleif = controllerDevice.Value.Children.FirstOrDefault(x => (x.DriverType == GKDriverType.RSR2_KAU_Shleif) && x.IntAddress == shleifNo); shleif.Children.Add(device); } else { if (controllerDevice.Value.Driver.DriverType == GKDriverType.GK) device.IntAddress = (byte)(controllerDevice.Value.Children.Count(x => !x.Driver.HasAddress) + 2); else device.IntAddress = (byte)(controllerDevice.Value.Children.Count(x => !x.Driver.HasAddress) + 1); controllerDevice.Value.Children.Add(device); } } } return true; } if (internalType == 0x100 || internalType == 0x106 || internalType == 0x108 || internalType == 0x109 || internalType == 0x104) { var isMPT = false; var isPumpStation = false; ushort no = 0; try { if (description.StartsWith("MПТ.")) { isMPT = true; } else { if (description[0] == '0') isPumpStation = true; no = (ushort)Int32.Parse(description.Substring(0, description.IndexOf("."))); } description = description.Substring(description.IndexOf(".") + 1); } catch { Error = "Невозможно получить номер объекта с дескриптором " + descriptorNo; return false; } if (internalType == 0x100) { var zone = new GKZone { Name = description, No = no, GkDatabaseParent = GkDevice }; DeviceConfiguration.Zones.Add(zone); return true; } if (internalType == 0x106) { if (isPumpStation) { var pumpStation = new GKPumpStation() { Name = description, No = no, GkDatabaseParent = GkDevice }; DeviceConfiguration.PumpStations.Add(pumpStation); } else if (isMPT) { var mpt = new GKMPT() { Name = description, GkDatabaseParent = GkDevice }; DeviceConfiguration.MPTs.Add(mpt); } else { var direction = new GKDirection { Name = description, No = no, GkDatabaseParent = GkDevice }; DeviceConfiguration.Directions.Add(direction); } return true; } if (internalType == 0x108) { var guardZone = new GKGuardZone { Name = description, No = no, GkDatabaseParent = GkDevice }; DeviceConfiguration.GuardZones.Add(guardZone); return true; } if (internalType == 0x109) { var code = new GKCode { Name = description, No = no, GkDatabaseParent = GkDevice }; DeviceConfiguration.Codes.Add(code); return true; } if (internalType == 0x104) { var door = new GKDoor { Name = description, No = no, GkDatabaseParent = GkDevice }; DeviceConfiguration.Doors.Add(door); return true; } } return true; }
static void ReadDevices(IEnumerable<GKDevice> devices) { var errorLog = ""; DescriptorsManager.Create(); var i = 0; LoadingService.AddCount(devices.Count()); foreach (var device in devices) { if (LoadingService.IsCanceled) break; i++; LoadingService.DoStep("Запрос параметров объекта " + i); var result = ClientManager.RubezhService.GKGetSingleParameter(device); if (!result.HasError) { foreach (var property in result.Result) { var deviceProperty = device.DeviceProperties.FirstOrDefault(x => x.Name == property.Name); if (deviceProperty == null) { deviceProperty = new GKProperty() { Name = property.Name, DriverProperty = device.Driver.Properties.FirstOrDefault(x => x.Name == property.Name) }; device.DeviceProperties.Add(deviceProperty); } deviceProperty.Value = property.Value; deviceProperty.StringValue = property.StringValue; } device.OnAUParametersChanged(); } else { errorLog += "\n" + device.PresentationName; } } LoadingService.Close(); if (errorLog != "") MessageBoxService.ShowError("Ошибка при получении параметров следующих устройств:" + errorLog); }
static bool IsPropertyValid(GKProperty property, GKDriverProperty driverProperty) { int value; return driverProperty != null && driverProperty.IsAUParameter && driverProperty.DriverPropertyType == GKDriverPropertyTypeEnum.IntType && (!int.TryParse(Convert.ToString(property.Value), out value) || (value < driverProperty.Min || value > driverProperty.Max)); }
static OperationResult<List<GKProperty>> GetDeviceParameters(CommonDatabase commonDatabase, BaseDescriptor descriptor) { var properties = new List<GKProperty>(); var no = descriptor.GetDescriptorNo(); var sendResult = SendManager.Send(commonDatabase.RootDevice, 2, 9, ushort.MaxValue, BytesHelper.ShortToBytes(no)); if (sendResult.HasError) { return OperationResult<List<GKProperty>>.FromError(sendResult.Error); } var binProperties = new List<BinProperty>(); for (int i = 0; i < sendResult.Bytes.Count / 4; i++) { byte paramNo = sendResult.Bytes[i * 4]; ushort paramValue = BytesHelper.SubstructShort(sendResult.Bytes, i * 4 + 1); var binProperty = new BinProperty() { No = paramNo, Value = paramValue }; binProperties.Add(binProperty); } var device = descriptor.GKBase as GKDevice; if (device != null) { foreach (var driverProperty in device.Driver.Properties) { if (!driverProperty.IsAUParameter) continue; var binProperty = binProperties.FirstOrDefault(x => x.No == driverProperty.No); if (binProperty != null) { var paramValue = binProperty.Value; if (driverProperty.IsLowByte) { paramValue = (ushort)(paramValue << 8); paramValue = (ushort)(paramValue >> 8); } if (driverProperty.IsHieghByte) { paramValue = (ushort)(paramValue / 256); } if (driverProperty.Mask != 0) { paramValue = (byte)(paramValue & driverProperty.Mask); } var property = device.DeviceProperties.FirstOrDefault(x => x.Name == driverProperty.Name); if (property == null) { var systemProperty = device.Properties.FirstOrDefault(x => x.Name == driverProperty.Name); property = new GKProperty() { DriverProperty = systemProperty.DriverProperty, Name = systemProperty.Name, Value = paramValue, }; device.DeviceProperties.Add(property); } if (property != null) { property.Value = paramValue; property.DriverProperty = driverProperty; if (property.DriverProperty.DriverPropertyType == GKDriverPropertyTypeEnum.BoolType) property.Value = (ushort)(property.Value > 0 ? 1 : 0); properties.Add(property); } } else return OperationResult<List<GKProperty>>.FromError("Неизвестный номер параметра"); } } if ((descriptor.DescriptorType == DescriptorType.Direction || descriptor.DescriptorType == DescriptorType.Delay || descriptor.DescriptorType == DescriptorType.GuardZone || descriptor.DescriptorType == DescriptorType.PumpStation) && binProperties.Count >= 3) { properties.Add(new GKProperty() { Value = binProperties[0].Value }); properties.Add(new GKProperty() { Value = binProperties[1].Value }); properties.Add(new GKProperty() { Value = binProperties[2].Value }); } if ((descriptor.DescriptorType == DescriptorType.Code || descriptor.DescriptorType == DescriptorType.Door) && binProperties.Count >= 2) { properties.Add(new GKProperty() { Value = binProperties[0].Value }); properties.Add(new GKProperty() { Value = binProperties[1].Value }); } return new OperationResult<List<GKProperty>>(properties); }
void Invalidate() { if (GKManager.ParameterTemplates.Count == 0) { var parameterTemplate = new GKParameterTemplate() { Name = "По умолчанию" }; GKManager.ParameterTemplates.Add(parameterTemplate); } foreach (var parameterTemplate in GKManager.ParameterTemplates) { foreach (var deviceParameterTemplate in parameterTemplate.DeviceParameterTemplates) { deviceParameterTemplate.GKDevice.Driver = GKManager.Drivers.FirstOrDefault(x => x.UID == deviceParameterTemplate.GKDevice.DriverUID); } parameterTemplate.DeviceParameterTemplates.RemoveAll(x => x.GKDevice.Driver == null); foreach (var driver in GKManager.Drivers) { if (driver.IsReal && driver.Properties.Any(x => x.IsAUParameter)) { var deviceParameterTemplate = parameterTemplate.DeviceParameterTemplates.FirstOrDefault(x => x.GKDevice.DriverUID == driver.UID); if (deviceParameterTemplate == null) { deviceParameterTemplate = new GKDeviceParameterTemplate() { GKDevice = new GKDevice() { DriverUID = driver.UID, Driver = driver } }; parameterTemplate.DeviceParameterTemplates.Add(deviceParameterTemplate); } var properties = new List<GKProperty>(); foreach (var driverProperty in driver.Properties) { if (driverProperty.IsAUParameter) { var property = deviceParameterTemplate.GKDevice.Properties.FirstOrDefault(x => x.Name == driverProperty.Name); if (property == null || parameterTemplate.Name == "По умолчанию") { property = new GKProperty() { Name = driverProperty.Name, Value = driverProperty.Default, DriverProperty = driverProperty }; deviceParameterTemplate.GKDevice.Properties.Add(property); } property.DriverProperty = driverProperty; properties.Add(property); } } deviceParameterTemplate.GKDevice.Properties = properties; } } } }