예제 #1
0
        public List <Model.LoopModel> CreateLoops <T>(int loopsAmount, int deviceAmount, Model.ControllerModel controller, IDeviceService <T> deviceService)
        {
            string strMachineNumber = controller.MachineNumber;
            ControllerOperationCommon controllerBase = new ControllerOperationCommon();
            int loopID = controllerBase.GetMaxLoopID();

            string strLoopLengthFormat = "#";

            for (int i = 0; i < controller.LoopAddressLength; i++)
            {
                strLoopLengthFormat += "0";
            }
            List <Model.LoopModel> lstLoopModel = new List <LoopModel>();

            for (int i = 0; i < loopsAmount; i++) //创建回路
            {
                LoopModel loop = new LoopModel();
                loop.Controller   = controller;
                loop.ID           = loopID++;
                loop.Code         = strMachineNumber + i.ToString(strLoopLengthFormat);
                loop.Name         = strMachineNumber + i.ToString(strLoopLengthFormat);
                loop.DeviceAmount = deviceAmount;
                loop.SetDevices <T>(deviceService.InitializeDevices(deviceAmount));
                lstLoopModel.Add(loop);
                loop.IsLoopDataDirty = true;
                //  SetDataDirty();
            }
            return(lstLoopModel);
        }
예제 #2
0
        public bool AddLoops(LoopModel loop, string machineNumber, int loopsAmount)
        {
            try
            {
                ControllerOperationCommon controllerBase = new ControllerOperationCommon();
                int loopID = controllerBase.GetMaxLoopID();
                //ControllerModel controller = ProjectManager.GetInstance.GetPrimaryController();
                int[]             loopsCode          = GetAllLoopCode(_controller, null);
                int               currentMaxLoopCode = loopsCode.Max();
                IControllerConfig config             = ControllerConfigManager.GetConfigObject(_controller.Type);
                short             allowMaxLoopValue  = config.GetMaxLoopAmountValue();
                if (loopsAmount > allowMaxLoopValue)
                {
                    //超出最大数回数
                    return(false);
                }
                if ((allowMaxLoopValue - currentMaxLoopCode) < loopsAmount)
                {
                    //剩余回路空间无法创建指定回路数量的回路
                    return(false);
                }

                string strLoopLengthFormat = "#";

                for (int i = 0; i < _controller.LoopAddressLength; i++)
                {
                    strLoopLengthFormat += "0";
                }

                for (int i = 1; i <= loopsAmount; i++)
                {
                    LoopModel l = new LoopModel();
                    l.ID   = ++loopID;
                    l.Code = _controller.MachineNumber + (currentMaxLoopCode + i).ToString().PadLeft(_controller.LoopAddressLength, '0');
                    l.Name = _controller.MachineNumber + (currentMaxLoopCode + i).ToString().PadLeft(_controller.LoopAddressLength, '0');
                    //l.Code = (currentMaxLoopCode + i).ToString().PadLeft(_controller.LoopAddressLength, '0');
                    //l.Name = loop.Name+i.ToString();
                    l.DeviceAmount = loop.DeviceAmount;
                    l.Controller   = _controller;
                    _controller.Loops.Add(l);
                    //   SetDataDirty();
                }
            }
            catch
            {
                return(false);
            }
            return(true);
        }
예제 #3
0
        public bool AddLoops(LoopModel loop, string machineNumber, int loopsAmount)
        {
            try
            {
                ControllerOperationCommon controllerBase = new ControllerOperationCommon();
                int loopID = controllerBase.GetMaxLoopID();
                //ControllerModel controller = ProjectManager.GetInstance.GetPrimaryController();
                int[] loopsCode          = GetAllLoopCode(_controller, null);
                int   currentMaxLoopCode = loopsCode.Max();
                int   specifiedLoopCode  = 0;     //指定的回路号
                bool  loopCodeExistFlag  = false; //回路号已经存在标志

                //if (loop.Code != "")
                //{
                //    specifiedLoopCode=Convert.ToInt32(loop.Code);
                //    if (specifiedLoopCode > currentMaxLoopCode)
                //    {
                //        currentMaxLoopCode = specifiedLoopCode;
                //    }
                //}

                for (int i = 0; i < loopsCode.Length; i++)
                {
                    if (loopsCode[i] == specifiedLoopCode)
                    {
                        loopCodeExistFlag = true;
                        break;
                    }
                }


                IControllerConfig config            = ControllerConfigManager.GetConfigObject(_controller.Type);
                short             allowMaxLoopValue = config.GetMaxLoopAmountValue();
                if (loopsAmount == 0)
                {
                    return(false);
                }
                if (loopsAmount > allowMaxLoopValue)
                {
                    //超出最大数回数
                    return(false);
                }
                if ((allowMaxLoopValue - currentMaxLoopCode) < loopsAmount)
                {
                    //剩余回路空间无法创建指定回路数量的回路
                    return(false);
                }

                string strLoopLengthFormat = "#";

                for (int i = 0; i < _controller.LoopAddressLength; i++)
                {
                    strLoopLengthFormat += "0";
                }

                for (int i = 1; i <= loopsAmount; i++)
                {
                    LoopModel l = new LoopModel();
                    l.ID = ++loopID;
                    if (!loopCodeExistFlag)
                    {
                        if (i == 1) //减少复杂性,只对指定的回路号使用一次
                        {
                            l.Code = _controller.MachineNumber + loop.Code.ToString().PadLeft(_controller.LoopAddressLength, '0');
                        }
                        else
                        {
                            l.Code = _controller.MachineNumber + (currentMaxLoopCode + i - 1).ToString().PadLeft(_controller.LoopAddressLength, '0');
                        }
                    }
                    else
                    {
                        l.Code = _controller.MachineNumber + (currentMaxLoopCode + i).ToString().PadLeft(_controller.LoopAddressLength, '0');
                    }

                    l.Name = loop.Name + "(" + l.Code + ")";// _controller.MachineNumber + (currentMaxLoopCode + i).ToString().PadLeft(_controller.LoopAddressLength, '0');
                    //l.Code = (currentMaxLoopCode + i).ToString().PadLeft(_controller.LoopAddressLength, '0');
                    //l.Name = loop.Name+i.ToString();
                    l.DeviceAmount = loop.DeviceAmount;
                    l.Controller   = _controller;
                    l.ControllerID = _controller.ID;
                    InitializeDevicesToLoop(_controller.Type, l);
                    _controller.Loops.Add(l);
//                  SetDataDirty();
                }
            }
            catch
            {
                return(false);
            }
            return(true);
        }