Пример #1
0
            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);
            }
Пример #2
0
        /// <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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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;
        }
Пример #5
0
        /// <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);
        }
Пример #6
0
            /// <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);
            }
Пример #7
0
 /// <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));
         }
     }
 }
Пример #8
0
        /// <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));
                }
            }
        }
Пример #9
0
        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;
        }
Пример #10
0
 /// <summary>
 /// Создание экземпляра класса DrawInfo
 /// </summary>
 /// <param name="style">Стиль отображения</param>
 /// <param name="dev">Устройство</param>
 public DrawInfo(Style style, Device.IDevice dev)
 {
     this.style = style;
     this.dev   = dev;
 }
Пример #11
0
        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);
            }
        }