public virtual IList <int> ProcessDevices( string devicesStr, Device.IDeviceManager deviceManager) { Match match = Regex.Match(devicesStr, Device.DeviceManager.DESCRIPTION_PATTERN, RegexOptions. IgnoreCase); var validDevices = new List <int>(); while (match.Success) { string str = match.Groups["name"].Value; Device.IDevice device = deviceManager .GetDeviceByEplanName(str); bool isValid = ValidateDevice(device); if (isValid) { int tmpDeviceIndex = deviceManager.GetDeviceIndex(str); if (tmpDeviceIndex >= 0 && !validDevices.Contains(tmpDeviceIndex)) { validDevices.Add(tmpDeviceIndex); } } match = match.NextMatch(); } return(validDevices); }
/// <summary> /// Проверка действий в шаге /// </summary> /// <returns>Строка с ошибками</returns> public string Check() { var errors = string.Empty; List <int> devicesInAction = new List <int>(); foreach (Action a in actions) { if (a.GetType().Name == "Action" && (a.DisplayText[0].Contains("Включать") || a.DisplayText[0].Contains("Выключать"))) { devicesInAction.AddRange(a.DeviceIndex); } } List <int> FindEqual = devicesInAction.GroupBy(x => x) .SelectMany(y => y.Skip(1)).Distinct().ToList(); foreach (int i in FindEqual) { State state = Owner; Mode mode = state.Owner; ModesManager modesManager = mode.Owner; TechObject techObject = modesManager.Owner; Device.IDevice device = Device.DeviceManager.GetInstance() .GetDeviceByIndex(i); string msg = $"Неправильно заданы устройства в шаге " + $"\"{GetStepName()}\", операции \"{mode.Name}\"," + $"технологического объекта " + $"\"{techObject.DisplayText[0]}\"\n"; errors += msg; } return(errors); }
private string CheckOpenAndCloseActions(string techObjName, string modeName) { var errors = string.Empty; var devicesInAction = new List <int>(); var checkingActionsDevs = actions .Where(x => x.Name == openDevicesActionName || x.Name == closeDevicesActionName) .Select(y => y.DeviceIndex); foreach (var devList in checkingActionsDevs) { devicesInAction.AddRange(devList); } List <int> FindEqual = devicesInAction.GroupBy(x => x) .SelectMany(y => y.Skip(1)).Distinct().ToList(); foreach (int i in FindEqual) { Device.IDevice device = Device.DeviceManager.GetInstance() .GetDeviceByIndex(i); string msg = $"Неправильно задано устройство {device.Name} " + $"в действиях \"{openDevicesActionName}\" и " + $"\"{closeDevicesActionName}\", в шаге " + $"\"{GetStepName()}\", операции \"{modeName}\"," + $"технологического объекта " + $"\"{techObjName}\"\n"; errors += msg; } return(errors); }
virtual public void ModifyDevNames(int newTechObjectN, int oldTechObjectN, string techObjectName) { List <int> tmpIndex = new List <int>(); foreach (int index in deviceIndex) { tmpIndex.Add(index); } Device.IDeviceManager deviceManager = Device.DeviceManager .GetInstance(); foreach (int index in deviceIndex) { var newDevName = string.Empty; Device.IDevice device = deviceManager.GetDeviceByIndex(index); int objNum = device.ObjectNumber; string objName = device.ObjectName; if (objNum > 0) { //Для устройств в пределах объекта меняем номер объекта. if (techObjectName == objName) { // COAG2V1 --> COAG1V1 if (objNum == newTechObjectN && oldTechObjectN != -1) { newDevName = objName + oldTechObjectN + device.DeviceType.ToString() + device. DeviceNumber; } if (oldTechObjectN == -1 || oldTechObjectN == objNum) { //COAG1V1 --> COAG2V1 newDevName = objName + newTechObjectN + device.DeviceType.ToString() + device .DeviceNumber; } } } if (newDevName != string.Empty) { int indexOfDeletingElement = tmpIndex.IndexOf(index); tmpIndex.Remove(index); int tmpDevInd = Device.DeviceManager.GetInstance() .GetDeviceIndex(newDevName); if (tmpDevInd >= 0) { tmpIndex.Insert(indexOfDeletingElement, tmpDevInd); } } } deviceIndex = tmpIndex; }
/// <summary> /// Функция проверки добавляемого устройства /// </summary> /// <param name="deviceName">Имя устройства</param> /// <returns></returns> private bool ValidateDevice(string deviceName) { bool isValidType = false; Device.IDevice device = Device.DeviceManager.GetInstance(). GetDeviceByEplanName(deviceName); Device.DeviceType deviceType = device.DeviceType; Device.DeviceSubType deviceSubType = device.DeviceSubType; GetDisplayObjects(out Device.DeviceType[] validTypes, out Device.DeviceSubType[] validSubTypes, out _); if (validTypes == null) { return(true); } else { foreach (Device.DeviceType type in validTypes) { if (type == deviceType) { isValidType = true; break; } else { isValidType = false; } } if (validSubTypes != null) { bool isValidSubType = false; foreach (Device.DeviceSubType subType in validSubTypes) { if ((subType == deviceSubType) && isValidType) { isValidSubType = true; } } if (isValidSubType && isValidSubType) { return(true); } else { return(false); } } } return(isValidType); }
/// <summary> /// Функция проверки добавляемого устройства /// </summary> /// <param name="device">Устройство</param> /// <returns></returns> private bool ValidateDevice(Device.IDevice device) { bool isValidType = false; Device.DeviceType deviceType = device.DeviceType; Device.DeviceSubType deviceSubType = device.DeviceSubType; Action.GetDisplayObjects(out Device.DeviceType[] validTypes, out Device.DeviceSubType[] validSubTypes, out _); if (validTypes == null) { return(true); } else { foreach (Device.DeviceType type in validTypes) { if (type == deviceType) { isValidType = true; break; } else { isValidType = false; } } if (validSubTypes != null) { bool isValidSubType = false; foreach (Device.DeviceSubType subType in validSubTypes) { if ((subType == deviceSubType) && isValidType) { isValidSubType = true; } } if (isValidSubType && isValidSubType) { return(true); } else { return(false); } } } return(isValidType); }
/// <summary> /// 方法:初始化设备列表中的设备 /// </summary> public void DeviceListInit() { System.Collections.IDictionaryEnumerator mDicEnumerator = DeviceList.GetEnumerator(); while (mDicEnumerator.MoveNext()) { Device.IDevice mIDevice = mDicEnumerator.Value as Device.IDevice;//调用实现该接口的类 try { mIDevice.Init(); } catch /*(ProCommon.Communal.InitException initex)*/ { //ProCommon.Communal.LogWriter.WriteException(_exLogFilePath, initex); //ProCommon.Communal.LogWriter.WriteLog(_sysLogFilePath, string.Format("错误:初始化设备列表失败!\n异常描述:{0}", initex.Message)); } } }
/// <summary> /// 方法:释放设备列表的设备 /// </summary> public void DeviceListRelease() { System.Collections.IDictionaryEnumerator mDicEnumerator = this.DeviceList.GetEnumerator(); while (mDicEnumerator.MoveNext()) { Device.IDevice mIDevice = mDicEnumerator.Value as Device.IDevice; //强制转换到实现该接口的类的接口引用 try { mIDevice.Release(); } catch { //ProCommon.Communal.LogWriter.WriteException(_exLogFilePath, releaseex); //ProCommon.Communal.LogWriter.WriteLog(_sysLogFilePath, string.Format("错误:释放设备列表失败!\n异常描述:{0}", releaseex.Message)); } } }
virtual public void ModifyDevNames(string newTechObjectName, int newTechObjectNumber, string oldTechObjectName, int oldTechObjNumber) { List <int> tmpIndex = new List <int>(); foreach (int index in deviceIndex) { tmpIndex.Add(index); } Device.IDeviceManager deviceManager = Device.DeviceManager .GetInstance(); foreach (int index in deviceIndex) { string newDevName = string.Empty; Device.IDevice device = deviceManager.GetDeviceByIndex(index); int objNum = newTechObjectNumber; string objName = device.ObjectName; if (objName == oldTechObjectName && device.ObjectNumber == oldTechObjNumber) { newDevName = newTechObjectName + objNum + device.DeviceType.ToString() + device.DeviceNumber; } if (newDevName != string.Empty) { int indexOfDeletingElement = tmpIndex.IndexOf(index); tmpIndex.Remove(index); int tmpDevInd = Device.DeviceManager.GetInstance() .GetDeviceIndex(newDevName); if (tmpDevInd >= 0) { tmpIndex.Insert(indexOfDeletingElement, tmpDevInd); } } } deviceIndex = tmpIndex; }
/// <summary> /// Создание экземпляра класса DrawInfo /// </summary> /// <param name="style">Стиль отображения</param> /// <param name="dev">Устройство</param> public DrawInfo(Style style, Device.IDevice dev) { this.style = style; this.dev = dev; }
private static void SetUpMock(Mock <Device.IDeviceManager> devManagerMock) { Device.IDevice stubDev = MakeMockedDevice(string.Empty, 0, Device.DeviceType.NONE, 0, Device.DeviceSubType.NONE); const string TANK = "TANK"; const string KOAG = "KOAG"; Device.IDevice tank1V1Dev = MakeMockedDevice(TANK, 1, Device.DeviceType.V, 1, Device.DeviceSubType.V_IOLINK_MIXPROOF); Device.IDevice tank1V2Dev = MakeMockedDevice(TANK, 1, Device.DeviceType.V, 2, Device.DeviceSubType.V_IOLINK_MIXPROOF); Device.IDevice koag1V1Dev = MakeMockedDevice(KOAG, 1, Device.DeviceType.V, 1, Device.DeviceSubType.V_IOLINK_MIXPROOF); Device.IDevice koag1M2Dev = MakeMockedDevice(KOAG, 1, Device.DeviceType.M, 2, Device.DeviceSubType.M_ATV); Device.IDevice tank2V1Dev = MakeMockedDevice(TANK, 2, Device.DeviceType.V, 1, Device.DeviceSubType.V_IOLINK_MIXPROOF); Device.IDevice tank2V2Dev = MakeMockedDevice(TANK, 2, Device.DeviceType.V, 2, Device.DeviceSubType.V_IOLINK_MIXPROOF); Device.IDevice tank2V3Dev = MakeMockedDevice(TANK, 2, Device.DeviceType.V, 3, Device.DeviceSubType.V_IOLINK_MIXPROOF); Device.IDevice tank3V3Dev = MakeMockedDevice(TANK, 3, Device.DeviceType.V, 3, Device.DeviceSubType.V_IOLINK_MIXPROOF); Device.IDevice tank1LS1Dev = MakeMockedDevice(TANK, 1, Device.DeviceType.LS, 1, Device.DeviceSubType.LS_IOLINK_MIN); Device.IDevice tank2LS2Dev = MakeMockedDevice(TANK, 2, Device.DeviceType.LS, 2, Device.DeviceSubType.LS_IOLINK_MAX); Device.IDevice tank3VC1Dev = MakeMockedDevice(TANK, 3, Device.DeviceType.VC, 1, Device.DeviceSubType.NONE); Device.IDevice tank1DI1Dev = MakeMockedDevice(TANK, 1, Device.DeviceType.DI, 1, Device.DeviceSubType.DI); Device.IDevice tank2DI2Dev = MakeMockedDevice(TANK, 2, Device.DeviceType.DI, 2, Device.DeviceSubType.DI_VIRT); Device.IDevice tank1DO1Dev = MakeMockedDevice(TANK, 1, Device.DeviceType.DO, 1, Device.DeviceSubType.DO); Device.IDevice tank1DO2Dev = MakeMockedDevice(TANK, 1, Device.DeviceType.DO, 2, Device.DeviceSubType.DO_VIRT); Device.IDevice tank1AI1Dev = MakeMockedDevice(TANK, 1, Device.DeviceType.AI, 1, Device.DeviceSubType.AI); Device.IDevice tank2AI2Dev = MakeMockedDevice(TANK, 2, Device.DeviceType.AI, 2, Device.DeviceSubType.AI_VIRT); Device.IDevice tank1AO1Dev = MakeMockedDevice(TANK, 1, Device.DeviceType.AO, 1, Device.DeviceSubType.AO); Device.IDevice tank1AO2Dev = MakeMockedDevice(TANK, 1, Device.DeviceType.AO, 2, Device.DeviceSubType.AO_VIRT); var devicesDescription = new[] { new { Id = 1, Name = "TANK1V1", Dev = tank1V1Dev }, new { Id = 2, Name = "TANK1V2", Dev = tank1V2Dev }, new { Id = 3, Name = "KOAG1V1", Dev = koag1V1Dev }, new { Id = 4, Name = "KOAG1M2", Dev = koag1M2Dev }, new { Id = 5, Name = "TANK2V1", Dev = tank2V1Dev }, new { Id = 6, Name = "TANK2V2", Dev = tank2V2Dev }, new { Id = 7, Name = "TANK2V3", Dev = tank2V3Dev }, new { Id = 8, Name = "TANK3V3", Dev = tank3V3Dev }, new { Id = 9, Name = "TANK1LS1", Dev = tank1LS1Dev }, new { Id = 10, Name = "TANK2LS2", Dev = tank2LS2Dev }, new { Id = 11, Name = "TANK3VC1", Dev = tank3VC1Dev }, new { Id = 12, Name = "TANK1DI1", Dev = tank1DI1Dev }, new { Id = 13, Name = "TANK2DI2", Dev = tank2DI2Dev }, new { Id = 14, Name = "TANK1DO1", Dev = tank1DO1Dev }, new { Id = 15, Name = "TANK1DO2", Dev = tank1DO2Dev }, new { Id = 16, Name = "TANK1AI1", Dev = tank1AI1Dev }, new { Id = 17, Name = "TANK2AI2", Dev = tank2AI2Dev }, new { Id = 18, Name = "TANK1AO1", Dev = tank1AO1Dev }, new { Id = 19, Name = "TANK1AO2", Dev = tank1AO2Dev }, }; devManagerMock.Setup(x => x.GetDeviceByIndex(It.IsAny <int>())) .Returns(stubDev); devManagerMock.Setup(x => x.GetDeviceIndex(It.IsAny <string>())) .Returns(-1); devManagerMock .Setup(x => x.GetDeviceByEplanName(It.IsAny <string>())) .Returns(stubDev); foreach (var devDescr in devicesDescription) { devManagerMock.Setup(x => x.GetDeviceByIndex(devDescr.Id)) .Returns(devDescr.Dev); devManagerMock.Setup(x => x.GetDeviceIndex(devDescr.Name)) .Returns(devDescr.Id); devManagerMock.Setup(x => x.GetDeviceByEplanName(devDescr.Name)) .Returns(devDescr.Dev); } }