Example #1
0
		public JournalViewModel(GKDevice device)
		{
			Title = "Журнал событий ГК " + device.GetGKIpAddress();
			ReadCommand = new RelayCommand(OnRead);
			SaveToFileCommand = new RelayCommand(OnSaveToFile);
			JournalItems = new ObservableCollection<JournalItemViewModel>();
			Device = device;

			GKManager.UpdateConfiguration();
			GKManager.CreateStates();
			DescriptorsManager.Create();
		}
Example #2
0
		override public bool ReadConfiguration(GKDevice gkControllerDevice, Guid clientUID)
		{
			var progressCallback = GKProcessorManager.StartProgress("Чтение конфигурации " + gkControllerDevice.PresentationName, "Проверка связи", 2, true, GKProgressClientType.Administrator, clientUID);
			var result = DeviceBytesHelper.Ping(gkControllerDevice);
			if (result.HasError)
			{
				Error = "Устройство " + gkControllerDevice.PresentationName + " недоступно";
				return false;
			}
			IpAddress = gkControllerDevice.GetGKIpAddress();
			ControllerDevices = new Dictionary<ushort, GKDevice>();
			DeviceConfiguration = new GKDeviceConfiguration();
			var rootDriver = GKManager.Drivers.FirstOrDefault(x => x.DriverType == GKDriverType.System);
			DeviceConfiguration.RootDevice = new GKDevice
			{
				Driver = rootDriver,
				DriverUID = rootDriver.UID
			};
			GKProcessorManager.DoProgress("Перевод ГК в технологический режим", progressCallback, clientUID);
			if (!DeviceBytesHelper.GoToTechnologicalRegime(gkControllerDevice, progressCallback, clientUID))
			{
				Error = "Не удалось перевести " + gkControllerDevice.PresentationName + " в технологический режим\n" +
						"Устройство не доступно, либо вашего " +
						"IP адреса нет в списке разрешенного адреса ГК";
				GKProcessorManager.StopProgress(progressCallback, clientUID);
				return false;
			}

			ReadConfiguration(gkControllerDevice, progressCallback, clientUID);

			GKProcessorManager.DoProgress("Перевод ГК в рабочий режим", progressCallback, clientUID);
			if (!DeviceBytesHelper.GoToWorkingRegime(gkControllerDevice, progressCallback, clientUID))
			{
				Error = "Не удалось перевести устройство в рабочий режим в заданное время";
			}
			GKProcessorManager.StopProgress(progressCallback, clientUID);
			if (Error != null)
				return false;
			DeviceConfiguration.Update();
			return true;
		}
Example #3
0
		public static string GetIpAddress(GKDevice device)
		{
			GKDevice gkControllerDevice = null;
			switch (device.DriverType)
			{
				case GKDriverType.GK:
					gkControllerDevice = device;
					break;

				case GKDriverType.RSR2_KAU:
				case GKDriverType.GKMirror:
					gkControllerDevice = device.Parent;
					break;

				default:
					{
						Logger.Error("GKManager.GetIpAddress Получить IP адрес можно только у ГК или в КАУ или в ПМФ");
						throw new Exception("Получить IP адрес можно только у ГК или в КАУ или в ПМФ");
					}
			}
			var ipAddress = gkControllerDevice.GetGKIpAddress();
			return ipAddress;
		}
Example #4
0
		public static bool IsValidIpAddress(GKDevice device)
		{
			if (device.DriverType == GKDriverType.GK)
			{
				const string pattern = @"^([01]\d\d?|[01]?[1-9]\d?|2[0-4]\d|25[0-3])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$";
				var address = device.GetGKIpAddress();
				if (string.IsNullOrEmpty(address) || !Regex.IsMatch(address, pattern))
				{
					return false;
				}
			}
			return true;
		}
Example #5
0
		public static bool RemoveAllUsers(GKDevice device, int usersCount, GKProgressCallback progressCallback, Guid clientUID)
		{
			var removeAllUsersInternalResult = RemoveAllUsersInternal(device, usersCount, progressCallback);
			if (removeAllUsersInternalResult.HasError)
				return false;
			var cardsCount = removeAllUsersInternalResult.Result;
			if (cardsCount == 0)
				return false;

			using (var skdDatabaseService = new RubezhDAL.DataClasses.DbService())
			{
				GKProcessorManager.DoProgress("Удаление пользователей прибора из БД", progressCallback, clientUID);
				skdDatabaseService.GKCardTranslator.RemoveAll(device.GetGKIpAddress(), cardsCount);
			}
			return true;
		}
Example #6
0
		public static OperationResult<bool> RemoveCard(GKDevice device, SKDCard card, RubezhDAL.DataClasses.DbService dbService = null)
		{
			var no = 1;
			if (dbService == null)
			{
				using (var skdDatabaseService = new RubezhDAL.DataClasses.DbService())
				{
					no = skdDatabaseService.GKCardTranslator.GetGKNoByCardNo(device.GetGKIpAddress(), card.Number);
				}
			}
			else
				no = dbService.GKCardTranslator.GetGKNoByCardNo(device.GetGKIpAddress(), card.Number);
			if (no == -1)
			{
				return OperationResult<bool>.FromError("По номеру карты не найдена порядковая запись");
			}

			var bytes = new List<byte>();
			bytes.Add(0);
			bytes.AddRange(BytesHelper.ShortToBytes((ushort)(no)));
			bytes.Add(0);
			bytes.Add(1);
			var nameBytes = BytesHelper.StringDescriptionToBytes("-");
			bytes.AddRange(nameBytes);
			bytes.AddRange(BytesHelper.IntToBytes(-1));
			bytes.Add(0);
			bytes.Add(0);

			for (int i = 0; i < 256 - 42; i++)
			{
				bytes.Add(0);
			}

			var sendResult = SendManager.Send(device, (ushort)(bytes.Count), 26, 0, bytes);
			if (sendResult.HasError)
			{
				return OperationResult<bool>.FromError(sendResult.Error);
			}

			using (var skdDatabaseService = new RubezhDAL.DataClasses.DbService())
			{
				skdDatabaseService.GKCardTranslator.Remove(device.GetGKIpAddress(), no, card.Number);
			}

			return new OperationResult<bool>(true);
		}
Example #7
0
		public JournalParser(GKDevice gkControllerDevice, List<byte> bytes)
		{
			JournalItem = new JournalItem();
			JournalItem.JournalObjectType = JournalObjectType.GKDevice;

			GKJournalRecordNo = BytesHelper.SubstructInt(bytes, 0);
			if (GKJournalRecordNo > 0)
				JournalItem.JournalDetalisationItems.Add(new JournalDetalisationItem("Запись ГК", GKJournalRecordNo.ToString()));

			GKObjectNo = BytesHelper.SubstructShort(bytes, 4);
			JournalItem.ObjectUID = gkControllerDevice.UID;
			var controllerAddress = BytesHelper.SubstructShort(bytes, 32 + 10);
			if (controllerAddress != 0x200)
			{
				var kauDevice = gkControllerDevice.AllChildren.FirstOrDefault(x => (x.Driver.IsKau || x.DriverType == GKDriverType.GKMirror) && x.IntAddress == controllerAddress);
				if (kauDevice != null)
					JournalItem.ObjectUID = kauDevice.UID;
				KauJournalRecordNo = BytesHelper.SubstructInt(bytes, 0x20);
			}
			InitializeFromObjectUID(gkControllerDevice);
			var kauObjectNo = BytesHelper.SubstructShort(bytes, 54);

			InitializeDateTime(bytes);

			JournalSourceType = (JournalSourceType)(int)(bytes[32 + 12]);
			var code = bytes[32 + 13];

			switch (JournalSourceType)
			{
				case JournalSourceType.Controller:
					switch (code)
					{
						case 0:
							JournalItem.JournalEventNameType = JournalEventNameType.Перевод_в_технологический_режим;
							break;

						case 2:
							JournalItem.JournalEventNameType = JournalEventNameType.Синхронизация_времени_прибора_с_временем_ПК;
							break;

						case 4:
							JournalItem.JournalEventNameType = JournalEventNameType.Смена_ПО;
							break;

						case 5:
							JournalItem.JournalEventNameType = JournalEventNameType.Смена_БД;
							break;

						case 6:
							JournalItem.JournalEventNameType = JournalEventNameType.Перевод_в_рабочий_режим;
							break;

						case 7:
							JournalItem.JournalEventNameType = JournalEventNameType.Вход_пользователя_в_прибор;
							JournalItem.JournalEventDescriptionType = JournalStringsHelper.ToUser(bytes[32 + 15], true);
							var bytes1 = bytes.GetRange(6, 31 - 6 + 1);
							var bytes2 = bytes.GetRange(48, 53 - 48 + 1);
							bytes1.AddRange(bytes2);
							JournalItem.UserName = Encoding.Default.GetString(bytes1.ToArray(), 0, bytes1.Count);
							JournalItem.JournalObjectType = JournalObjectType.GKDevice;
							break;

						case 8:
							JournalItem.JournalEventNameType = JournalEventNameType.Выход_пользователя_из_прибора;
							JournalItem.JournalEventDescriptionType = JournalStringsHelper.ToUser(bytes[32 + 15], false);
							bytes1 = bytes.GetRange(6, 31 - 6 + 1);
							bytes2 = bytes.GetRange(48, 53 - 48 + 1);
							bytes1.AddRange(bytes2);
							JournalItem.UserName = Encoding.Default.GetString(bytes1.ToArray(), 0, bytes1.Count);
							JournalItem.JournalObjectType = JournalObjectType.GKDevice;
							break;

						case 9:
							JournalItem.JournalEventNameType = JournalEventNameType.Ошибка_управления;
							GKObjectNo = BytesHelper.SubstructShort(bytes, 18);
							break;

						case 10:
							JournalItem.JournalEventNameType = JournalEventNameType.Введен_новый_пользователь;
							bytes1 = bytes.GetRange(6, 31 - 6 + 1);
							bytes2 = bytes.GetRange(48, 53 - 48 + 1);
							bytes1.AddRange(bytes2);
							JournalItem.UserName = Encoding.Default.GetString(bytes1.ToArray(), 0, bytes1.Count);
							JournalItem.JournalObjectType = JournalObjectType.GKDevice;
							break;

						case 11:
							JournalItem.JournalEventNameType = JournalEventNameType.Изменена_учетная_информация_пользователя;
							bytes1 = bytes.GetRange(6, 31 - 6 + 1);
							bytes2 = bytes.GetRange(48, 53 - 48 + 1);
							bytes1.AddRange(bytes2);
							JournalItem.UserName = Encoding.Default.GetString(bytes1.ToArray(), 0, bytes1.Count);
							JournalItem.JournalObjectType = JournalObjectType.GKDevice;
							break;

						case 12:
							JournalItem.JournalEventNameType = JournalEventNameType.Произведена_настройка_сети;
							break;

						case 13:
							JournalItem.JournalEventNameType = JournalEventNameType.Проход_пользователя_разрешен;
							var gkCardNo = BytesHelper.SubstructInt(bytes, 32 + 24);
							JournalItem.CardNo = gkCardNo;

							var door = GKManager.Doors.FirstOrDefault(x => x.GKDescriptorNo == GKObjectNo && x.GkDatabaseParent.GKParent == gkControllerDevice);
							if (door != null)
							{
								var readerDevice = GKManager.Devices.FirstOrDefault(x => x.GKDescriptorNo == kauObjectNo && x.GkDatabaseParent.GKParent == gkControllerDevice);
								if (readerDevice != null)
								{
									if (door.EnterDeviceUID == readerDevice.UID)
									{
										JournalItem.JournalEventDescriptionType = JournalEventDescriptionType.Вход_Глобал;
									}
									else if (door.ExitDeviceUID == readerDevice.UID)
									{
										JournalItem.JournalEventDescriptionType = JournalEventDescriptionType.Выход_Глобал;
									}
								}
							}

							using (var databaseService = new RubezhDAL.DataClasses.DbService())
							{
								var cardNo = databaseService.GKCardTranslator.GetCardNoByGKNo(gkControllerDevice.GetGKIpAddress(), (int)gkCardNo);
								var operationResult = databaseService.CardTranslator.GetEmployeeByCardNo(cardNo);
								if (!operationResult.HasError)
								{
									var employeeUID = operationResult.Result;
									JournalItem.EmployeeUID = employeeUID;
									if (employeeUID != Guid.Empty)
									{
										var employee = databaseService.EmployeeTranslator.GetSingle(employeeUID);
										if (employee != null)
										{
											JournalItem.UserName = employee.Result.Name;
										}
									}
								}
							}

							break;

						case 14:
							JournalItem.JournalEventNameType = JournalEventNameType.Рабочий_график;
							var scheduleNo = (uint)BytesHelper.SubstructInt(bytes, 32 + 24);
							bytes1 = bytes.GetRange(6, 31 - 6 + 1);
							bytes2 = bytes.GetRange(48, 53 - 48 + 1);
							bytes1.AddRange(bytes2);
							var scheduleName = Encoding.Default.GetString(bytes1.ToArray(), 0, bytes1.Count).TrimEnd(' ');
							if (string.IsNullOrEmpty(scheduleName))
								scheduleName = scheduleNo.ToString();
							JournalItem.DescriptionText = scheduleName;
							break;

						case 15:
							JournalItem.JournalEventNameType = JournalEventNameType.Проход_пользователя_запрещен;
							gkCardNo = BytesHelper.SubstructInt(bytes, 32 + 24);
							JournalItem.CardNo = gkCardNo;

							door = GKManager.Doors.FirstOrDefault(x => x.GKDescriptorNo == GKObjectNo && x.GkDatabaseParent.GKParent == gkControllerDevice);
							if (door != null)
							{
								var readerDevice = GKManager.Devices.FirstOrDefault(x => x.GKDescriptorNo == kauObjectNo && x.GkDatabaseParent.GKParent == gkControllerDevice);
								if (readerDevice != null)
								{
									if (door.EnterDeviceUID == readerDevice.UID)
									{
										JournalItem.JournalEventDescriptionType = JournalEventDescriptionType.Вход_Глобал;
									}
									else if (door.ExitDeviceUID == readerDevice.UID)
									{
										JournalItem.JournalEventDescriptionType = JournalEventDescriptionType.Выход_Глобал;
									}
								}
							}

							using (var databaseService = new RubezhDAL.DataClasses.DbService())
							{
								var cardNo = databaseService.GKCardTranslator.GetCardNoByGKNo(gkControllerDevice.GetGKIpAddress(), (int)gkCardNo);
								var operationResult = databaseService.CardTranslator.GetEmployeeByCardNo(cardNo);
								if (!operationResult.HasError)
								{
									var employeeUID = operationResult.Result;
									JournalItem.EmployeeUID = employeeUID;
									if (employeeUID != Guid.Empty)
									{
										var employee = databaseService.EmployeeTranslator.GetSingle(employeeUID);
										if (employee != null)
										{
											JournalItem.UserName = employee.Result.Name;
										}
									}
								}
							}

							break;

						default:
							JournalItem.JournalEventNameType = JournalEventNameType.Неизвестный_код_события_контроллекра;
							JournalItem.DescriptionText = code.ToString();
							break;
					}
					break;

				case JournalSourceType.Device:
					var unknownType = BytesHelper.SubstructShort(bytes, 32 + 14);
					var unknownAddress = BytesHelper.SubstructShort(bytes, 32 + 16);
					var presentationAddress = (unknownAddress / 256 + 1).ToString() + "." + (unknownAddress % 256).ToString();
					var driverName = unknownType.ToString();
					var driver = GKManager.Drivers.FirstOrDefault(x => x.DriverTypeNo == unknownType);
					if (driver != null)
					{
						driverName = driver.ShortName;
					};
					var unknownDescription = "Тип: " + driverName + " Адрес: " + presentationAddress;
					switch (code)
					{
						case 0:
							JournalItem.JournalEventNameType = JournalEventNameType.Неизвестный_тип;
							JournalItem.DescriptionText = unknownDescription;
							break;

						case 1:
							JournalItem.JournalEventNameType = JournalEventNameType.Устройство_с_таким_адресом_не_описано_при_конфигурации;
							JournalItem.DescriptionText = unknownDescription;
							break;

						default:
							JournalItem.JournalEventNameType = JournalEventNameType.Неизвестный_код_события_устройства;
							JournalItem.DescriptionText = code.ToString();
							break;
					}
					break;

				case JournalSourceType.Object:
					var UNUSED_ObjectNo = BytesHelper.SubstructShort(bytes, 32 + 18);
					var descriptorType = BytesHelper.SubstructShort(bytes, 32 + 20);
					JournalItem.JournalDetalisationItems.Add(new JournalDetalisationItem("Тип дескриптора", descriptorType.ToString()));
					var descriptorAddress = BytesHelper.SubstructShort(bytes, 32 + 22);
					JournalItem.JournalDetalisationItems.Add(new JournalDetalisationItem("Адрес дескриптора", descriptorAddress.ToString()));
					var objectFactoryNo = (uint)BytesHelper.SubstructInt(bytes, 32 + 24);
					if (objectFactoryNo > 0)
						JournalItem.JournalDetalisationItems.Add(new JournalDetalisationItem("Заводской номер", objectFactoryNo.ToString()));
					ObjectState = BytesHelper.SubstructInt(bytes, 32 + 28);
					switch (code)
					{
						case 0:
							JournalItem.JournalEventNameType = JournalEventNameType.При_конфигурации_описан_другой_тип;
							var realType = BytesHelper.SubstructShort(bytes, 32 + 14);
							var realDriverString = "Неизвестный тип " + realType.ToString();
							var realDriver = GKManager.Drivers.FirstOrDefault(x => x.DriverTypeNo == realType);
							if (realDriver != null)
							{
								realDriverString = realDriver.ShortName;
							}
							JournalItem.DescriptionText = "Действительный тип: " + realDriverString;
							break;
						case 1:
							JournalItem.JournalEventNameType = JournalEventNameType.Изменился_заводской_номер;
							JournalItem.DescriptionText = "Старый заводской номер: " + BytesHelper.SubstructInt(bytes, 32 + 14).ToString() + " Новый заводской номер: " + objectFactoryNo.ToString();
							break;
						case 2:
							JournalItem.JournalEventNameType = JournalEventNameType.Пожар_1;
							if (JournalItem.JournalObjectType == JournalObjectType.GKDevice)
							{
								JournalItem.JournalEventNameType = JournalEventNameType.Сработка_1;
							}
							if (JournalItem.JournalObjectType == JournalObjectType.GKGuardZone || JournalItem.JournalObjectType == JournalObjectType.GKDoor)
							{
								JournalItem.JournalEventNameType = JournalEventNameType.Тревога;
							}
							JournalItem.JournalEventDescriptionType = JournalStringsHelper.ToFire(bytes[32 + 15]);
							break;

						case 3:
							JournalItem.JournalEventNameType = JournalEventNameType.Пожар_2;
							if (JournalItem.JournalObjectType == JournalObjectType.GKDevice)
							{
								JournalItem.JournalEventNameType = JournalEventNameType.Сработка_2;
							}
							JournalItem.JournalEventDescriptionType = JournalStringsHelper.ToFire(bytes[32 + 15]);
							break;

						case 4:
							JournalItem.JournalEventNameType = JournalEventNameType.Внимание;
							break;

						case 5:
							JournalItem.JournalEventNameType = JournalEventNameType.Неисправность;
							if (bytes[32 + 14] == 0)
							{
								JournalItem.JournalEventNameType = JournalEventNameType.Неисправность_устранена;
							}
							bool isFailure = JournalItem.JournalEventNameType == JournalEventNameType.Неисправность;
							switch (descriptorType)
							{
								case 0xD6:
									JournalItem.JournalEventDescriptionType = JournalStringsHelper.ToBatteryFailure(bytes[32 + 15], isFailure);
									break;
								default:
									JournalItem.JournalEventDescriptionType = JournalStringsHelper.ToFailure(bytes[32 + 15], isFailure, descriptorType == 0xE5);
									if (bytes[32 + 15] >= 241 && bytes[32 + 15] <= 254)
									{
										var firstAdditionalDescription = bytes[32 + 16].ToString();
										var secondAdditionalDescription = bytes[32 + 17].ToString();
										if (JournalItem.JournalEventDescriptionType == JournalEventDescriptionType.ОЛС_Неисправность || JournalItem.JournalEventDescriptionType == JournalEventDescriptionType.ОЛС_Неисправность_устранена)
										{
											var gkDevice = GKManager.Devices.FirstOrDefault(x => x.UID == JournalItem.ObjectUID);
											if (gkDevice != null)
											{
												var kauCount = gkDevice.AllChildren.FindAll(x => x.Driver.IsKau || x.DriverType == GKDriverType.GKMirror).Count;
												if (firstAdditionalDescription == "0")
													firstAdditionalDescription = "ГК";
												else
													firstAdditionalDescription = "КАУ " + bytes[32 + 16];
												if (bytes[32 + 17] > kauCount)
													secondAdditionalDescription = "ГК";
												else
												{
													var device = gkDevice.Children.FirstOrDefault(x => (x.Driver.IsKau || x.DriverType == GKDriverType.GKMirror) && x.IntAddress == bytes[32 + 17]);
													if (device != null)
														secondAdditionalDescription = device.PresentationName;
												}
											}
										}
										else
										{
											var kauDevice = GKManager.Devices.FirstOrDefault(x => x.UID == JournalItem.ObjectUID);
											if (kauDevice != null)
											{
												var device1 = kauDevice.AllChildren.FirstOrDefault(x => x.IntAddress == bytes[32 + 16]);
												var device2 = kauDevice.AllChildren.FirstOrDefault(x => x.IntAddress == bytes[32 + 17]);
												if (firstAdditionalDescription == "0" || (device1 != null && device1.DriverType == GKDriverType.RSR2_KAU_Shleif))
													firstAdditionalDescription = "КАУ";
												if (secondAdditionalDescription == "0" || (device2 == null || device2.DriverType == GKDriverType.RSR2_KAU_Shleif))
													secondAdditionalDescription = "КАУ";
											}
										}
										if (JournalItem.JournalEventNameType == JournalEventNameType.Неисправность_устранена)
											break;

										JournalItem.DescriptionText = "устройства " + firstAdditionalDescription + " _ " + secondAdditionalDescription;
									}
									break;
							}
							break;

						case 6:
							JournalItem.JournalEventNameType = JournalEventNameType.Тест;
							if (bytes[32 + 14] == 0)
							{
								JournalItem.JournalEventNameType = JournalEventNameType.Тест_устранен;
							}
							break;

						case 7:
							JournalItem.JournalEventNameType = JournalEventNameType.Запыленность;
							if (bytes[32 + 14] == 0)
							{
								JournalItem.JournalEventNameType = JournalEventNameType.Запыленность_устранена;
							}
							bool isDust = JournalItem.JournalEventNameType == JournalEventNameType.Запыленность;
							switch (bytes[32 + 15])
							{
								case 1:
									JournalItem.JournalEventDescriptionType = isDust ? JournalEventDescriptionType.Предварительная_Запыленность : JournalEventDescriptionType.Предварительная_Запыленность_устранена;
									break;

								case 2:
									JournalItem.JournalEventDescriptionType = isDust ? JournalEventDescriptionType.Критическая_Запыленность : JournalEventDescriptionType.Критическая_Запыленность_устранена;
									break;
							}
							break;

						case 8:
							JournalItem.JournalEventNameType = JournalEventNameType.Информация;
							JournalItem.JournalEventDescriptionType = JournalStringsHelper.ToInformation(bytes[32 + 15]);
							if (Device != null && (Device.DriverType == GKDriverType.RSR2_Valve_KV || Device.DriverType == GKDriverType.RSR2_Valve_KVMV || Device.DriverType == GKDriverType.RSR2_Valve_DU))
							{
								JournalItem.JournalEventDescriptionType = JournalStringsHelper.ToValveInformation(bytes[32 + 15]);
							}
							break;

						case 9:
							JournalItem.JournalEventNameType = JournalStringsHelper.ToState(bytes[32 + 15]);
							if (Device != null && (Device.DriverType == GKDriverType.RSR2_Valve_KV || Device.DriverType == GKDriverType.RSR2_Valve_KVMV || Device.DriverType == GKDriverType.RSR2_Valve_DU
								|| Device.DriverType == GKDriverType.RSR2_Buz_KV || Device.DriverType == GKDriverType.RSR2_Buz_KVMV || Device.DriverType == GKDriverType.RSR2_Buz_KVDU))
							{
								JournalItem.JournalEventNameType = JournalStringsHelper.ToValveState(bytes[32 + 15]);
							}
							if (GuardZone != null)
							{
								JournalItem.JournalEventNameType = JournalStringsHelper.ToGuardZoneState(bytes[32 + 15]);
							}
							break;

						case 10:
							switch (bytes[32 + 15])
							{
								case 0:
									JournalItem.JournalEventNameType = JournalEventNameType.Перевод_в_автоматический_режим;
									break;

								case 1:
									JournalItem.JournalEventNameType = JournalEventNameType.Перевод_в_ручной_режим;
									break;

								case 2:
									JournalItem.JournalEventNameType = JournalEventNameType.Перевод_в_отключенный_режим;
									break;

								case 3:
									JournalItem.JournalEventNameType = JournalEventNameType.Перевод_в_неопределенный_режим;
									break;

								default:
									JournalItem.JournalEventNameType = JournalEventNameType.Неизвестный_код_события_объекта;
									break;
							}
							break;

						case 12:
							JournalItem.JournalEventNameType = JournalEventNameType.Управление_ПМФ;
							switch (bytes[32 + 15])
							{
								case 1:
									JournalItem.JournalEventDescriptionType = JournalEventDescriptionType.Перевод_в_автоматический_режим_Управление_ПМФ;
									break;

								case 2:
									JournalItem.JournalEventDescriptionType = JournalEventDescriptionType.Перевод_в_ручной_режим_Управление_ПМФ;
									break;

								case 4:
									JournalItem.JournalEventDescriptionType = JournalEventDescriptionType.Постановка_на_охрану;
									break;

								case 5:
									JournalItem.JournalEventDescriptionType = JournalEventDescriptionType.Снятие_с_охраны;
									break;

								case 8:
									JournalItem.JournalEventDescriptionType = JournalEventDescriptionType.Сброс_Управление_ПМФ;
									break;

								case 9:
									JournalItem.JournalEventDescriptionType = JournalEventDescriptionType.Пуск;
									break;

								case 10:
									JournalItem.JournalEventDescriptionType = JournalEventDescriptionType.Стоп;
									break;
							}
							break;

						case 13:
							JournalItem.JournalEventNameType = JournalEventNameType.Запись_параметра;
							break;

						case 14:
							JournalItem.JournalEventNameType = JournalEventNameType.Норма;
							break;

						default:
							JournalItem.JournalEventNameType = JournalEventNameType.Неизвестный_код_события_объекта;
							JournalItem.DescriptionText = code.ToString();
							break;
					}
					break;
			}
			JournalItem.JournalSubsystemType = EventDescriptionAttributeHelper.ToSubsystem(JournalItem.JournalEventNameType);
			InitializeMAMessage();
		}