Ejemplo n.º 1
0
        public double GetVolumeByFriction(double x, GeometryOptions model, FileName file, MaterialsOptions material, AdditionallyOptions add, CommonReport finalReport)
        {
            model.friction = Math.Round(model.startFriction, 2);
            FrictionChart(model);

            x = Math.Round(x, 2);

            model.friction = x;

            string abaqusOutputFolder = "b" + Convert.ToString(model.stampAngle)
                                        + "a" + Convert.ToString(model.friction) + "f";

            file.outputFolder = Path.Combine(genReport.folderName, abaqusOutputFolder);

            if (!Directory.Exists(file.outputFolder))
            {
                Directory.CreateDirectory(file.outputFolder);
            }

            file.caeFolder      = Path.Combine(Environment.CurrentDirectory, file.outputFolder, add.jobName + ".cae");
            file.caeFolder      = file.caeFolder.Replace(@"\", "/");
            file.stampFolder    = Path.Combine(Environment.CurrentDirectory, file.outputFolder, "Stamp.IGS");
            file.stampFolder    = file.stampFolder.Replace(@"\", "/");
            file.blankFolder    = Path.Combine(Environment.CurrentDirectory, file.outputFolder, "Blank.IGS");
            file.blankFolder    = file.blankFolder.Replace(@"\", "/");
            file.platformFolder = Path.Combine(Environment.CurrentDirectory, file.outputFolder, "Platform.IGS");
            file.platformFolder = file.platformFolder.Replace(@"\", "/");

            solid.UseSolid(file, model);

            rout.workingDirectory = file.outputFolder;
            rout.pathOut          = rout.workingDirectory + @"\abaqusMacros.py";

            change.Output(rout, model, material, add, file);

            //Form1._Form1.runAbaqus(file);

            //Form1._Form1.GetHistoryregionName(file);

            //Processing(model, file);

            genReport.folderName = Convert.ToString(model.blankRadius);

            //report.ReportReactionForce(model, genReport, file);

            //rpr.ReportVolume(model, genReport, file);

            FrictionChart(model);

            finalReport.AddData(model);

            //FReport.setMaxVolume.Add(
            //    new VariablesForReport(model.blankRadius, model.blankRadius,
            //        model.friction, model.blankVolume, model.setRectionForceToBlank)
            //        );

            return(model.pctOfDieFilling);
        }
Ejemplo n.º 2
0
        public double GetVolumeByRadius(double x, GeometryOptions model, FileName file, MaterialsOptions material, AdditionallyOptions add, CommonReport finalReport)
        {
            model.stampAngle = model.startAngle;
            model.stampAngle = Math.Round(model.stampAngle);

            model.friction = model.startFriction;
            model.friction = Math.Round(model.startFriction, 2);

            #region "+" будут обозначены строки, котоыре необходимы в методе вычесления угла матрицы, заключенніе в регион
            //10 - верхний радиус
            model.dieRadius = (Math.Tan(model.stampAngle * Math.PI / 180) * 57) + 10;
            model.dieRadius = Math.Round(model.dieRadius, 1);
            //объем цилиндрического выреза в матрице
            // double tempVolume = Math.PI * Math.Pow(model.dieRadius, 2) * 4;
            //объём усеченного конуса (верхний радиус 10, нижний может меняться)
            model.dieVolume = (Math.PI * 57 * (Math.Pow(model.dieRadius, 2) + model.dieRadius * 10 + Math.Pow(10, 2))) / 3;
            // model.dieVolume = model.dieVolume + tempVolume;
            model.dieVolume = Math.Round(model.dieVolume, 2);
            #endregion
            //ЗАМЕНИТЬ НА Х ОБРАТНО
            model.blankRadius = x;
            model.blankRadius = Math.Round(model.blankRadius, 2);

            #region "+"
            model.blankUpperRadius = model.blankRadius - (Math.Tan(model.stampAngle * Math.PI / 180) * 2);
            model.blankPosition    = (Math.PI * 2 * (Math.Pow(model.blankRadius, 2) + model.blankRadius * (model.blankUpperRadius) + Math.Pow((model.blankUpperRadius), 2))) / 3;
            model.blankPosition    = Math.Round(model.blankPosition, 2);
            //объем цилиндра, не считая фаску (как будто её нет,а заготовка имеет форму просто цилиндра)
            double abstractRadiusVolume = Math.PI * Math.Pow(model.blankRadius, 2) * 2;
            double blankVolume          = model.dieVolume + (abstractRadiusVolume - model.blankPosition);
            //объём зазора между матрицей и площадкой
            //double tempVolume = Math.Pow((model.dieRadius + 10), 2) * 3;
            double tempVolume = blankVolume * 10;
            tempVolume  /= 100;
            blankVolume += tempVolume;

            model.blankHeight = blankVolume / (Math.PI * Math.Pow(model.blankRadius, 2));
            model.blankHeight = Math.Round(model.blankHeight, 2);

            model.blankPosition  = model.blankHeight * ((model.dieRadius - model.blankRadius) / (model.dieRadius - 10));
            model.blankPosition  = Math.Round(model.blankPosition, 1);
            model.blankPosition += 2;

            //задаем перемещение матрицы
            model.stampDisplacement  = model.blankPosition;
            model.stampDisplacement -= 3;
            #endregion

            #region Создание общей папки с название радиуса заготовки

            genReport.folderName = Convert.ToString(model.blankRadius);

            if (!Directory.Exists(genReport.folderName))
            {
                Directory.CreateDirectory(genReport.folderName);
            }
            #endregion

            string abaqusOutputFolder = "b" + Convert.ToString(model.blankRadius)
                                        + "r" + Convert.ToString(model.stampAngle) + "a";

            file.outputFolder = Path.Combine(genReport.folderName, abaqusOutputFolder);

            if (!Directory.Exists(file.outputFolder))
            {
                Directory.CreateDirectory(file.outputFolder);
            }
            file.caeFolder      = Path.Combine(Environment.CurrentDirectory, file.outputFolder, add.jobName + ".cae");
            file.caeFolder      = file.caeFolder.Replace(@"\", "/");
            file.stampFolder    = Path.Combine(Environment.CurrentDirectory, file.outputFolder, "Stamp.IGS");
            file.stampFolder    = file.stampFolder.Replace(@"\", "/");
            file.blankFolder    = Path.Combine(Environment.CurrentDirectory, file.outputFolder, "Blank.IGS");
            file.blankFolder    = file.blankFolder.Replace(@"\", "/");
            file.platformFolder = Path.Combine(Environment.CurrentDirectory, file.outputFolder, "Platform.IGS");
            file.platformFolder = file.platformFolder.Replace(@"\", "/");

            solid.UseSolid(file, model);

            rout.pathIn = "abaqusMacros.py";
            // old rout.setWorkingDirectory = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
            rout.workingDirectory = file.outputFolder;
            rout.pathOut          = rout.workingDirectory + @"\abaqusMacros.py";

            change.Output(rout, model, material, add, file);

            //Form1._Form1.runAbaqus(file);

            //Form1._Form1.GetHistoryregionName(file);

            //Form1._Form1.Processing(model, file);

            //report.ReportReactionForce(model, genReport, file);

            //rpr.ReportVolume(model, genReport, file);

            finalReport.AddData(model);

            //FReport.setMaxVolume.Add(
            //    new VariablesForReport(model.blankRadius, model.blankRadius,
            //        model.friction, model.blankVolume, model.setRectionForceToBlank)
            //        );

            return(model.pctOfDieFilling);
        }
Ejemplo n.º 3
0
        public double GetVolumeByAngle(double x, GeometryOptions model, FileName file, MaterialsOptions material, AdditionallyOptions add, CommonReport finalReport)
        {
            //добавляем здесь, так как прошло изменение радиуса
            //после изменения радиуса, добавляем последние значения в постройку графика
            //округляем высоту заготовки, иначе после работы алгоритма добавит как новую высоту,
            //из-за точности знаков после запятой и моего костыля :)
            model.stampAngle = Math.Round(model.startAngle);
            AngleChart(model);

            model.friction = model.startFriction;
            model.friction = Math.Round(model.startFriction, 2);

            x = Math.Round(x);

            #region "+" будут обозначены строки, котоыре необходимы в методе вычесления угла матрицы, заключенніе в регион
            model.dieRadius = (Math.Tan(x * Math.PI / 180) * 57) + 10;
            model.dieRadius = Math.Round(model.dieRadius, 1);
            //объём усеченного конуса (верхний радиус 10, нижний может меняться)
            model.dieVolume = (Math.PI * 57 * (Math.Pow(model.dieRadius, 2) + model.dieRadius * 10 + Math.Pow(10, 2))) / 3;
            model.dieVolume = Math.Round(model.dieVolume, 2);
            #endregion

            #region "+"
            model.blankUpperRadius = model.blankRadius - (Math.Tan(model.stampAngle * Math.PI / 180) * 2);
            model.blankPosition    = (Math.PI * 2 * (Math.Pow(model.blankRadius, 2) + model.blankRadius * (model.blankUpperRadius) + Math.Pow((model.blankUpperRadius), 2))) / 3;
            model.blankPosition    = Math.Round(model.blankPosition, 2);
            //объем цилиндра, не считая фаску (как будто её нет,а заготовка имеет форму просто цилиндра)
            double abstractRadiusVolume = Math.PI * Math.Pow(model.blankRadius, 2) * 2;
            double blankVolume          = model.dieVolume + (abstractRadiusVolume - model.blankPosition);
            double tempVolume           = blankVolume * 10;
            tempVolume  /= 100;
            blankVolume += tempVolume;

            model.blankHeight = blankVolume / (Math.PI * Math.Pow(model.blankRadius, 2));
            model.blankHeight = Math.Round(model.blankHeight, 2);

            model.blankPosition  = model.blankHeight * ((model.dieRadius - model.blankRadius) / (model.dieRadius - 10));
            model.blankPosition  = Math.Round(model.blankPosition, 1);
            model.blankPosition += 2;

            //задаем перемещение матрицы
            model.stampDisplacement  = model.blankPosition;
            model.stampDisplacement -= 3;
            #endregion

            model.stampAngle = x;

            string abaqusOutputFolder = "b" + Convert.ToString(model.blankRadius)
                                        + "r" + Convert.ToString(model.stampAngle) + "a";

            file.outputFolder = Path.Combine(genReport.folderName, abaqusOutputFolder);

            if (!Directory.Exists(file.outputFolder))
            {
                Directory.CreateDirectory(file.outputFolder);
            }

            file.caeFolder      = Path.Combine(Environment.CurrentDirectory, file.outputFolder, add.jobName + ".cae");
            file.caeFolder      = file.caeFolder.Replace(@"\", "/");
            file.stampFolder    = Path.Combine(Environment.CurrentDirectory, file.outputFolder, "Stamp.IGS");
            file.stampFolder    = file.stampFolder.Replace(@"\", "/");
            file.blankFolder    = Path.Combine(Environment.CurrentDirectory, file.outputFolder, "Blank.IGS");
            file.blankFolder    = file.blankFolder.Replace(@"\", "/");
            file.platformFolder = Path.Combine(Environment.CurrentDirectory, file.outputFolder, "Platform.IGS");
            file.platformFolder = file.platformFolder.Replace(@"\", "/");

            solid.UseSolid(file, model);

            rout.workingDirectory = file.outputFolder;
            rout.pathOut          = rout.workingDirectory + @"\abaqusMacros.py";

            change.Output(rout, model, material, add, file);

            //Form1._Form1.runAbaqus(file);

            //Form1._Form1.GetHistoryregionName(file);

            //Form1._Form1.Processing(model, file);

            genReport.folderName = Convert.ToString(model.blankRadius);

            //report.ReportReactionForce(model, genReport, file);

            //rpr.ReportVolume(model, genReport, file);

            AngleChart(model);

            //просчёт с изменением силы трения
            //CalculateFriction(model, material, add, file, finalReport);

            finalReport.AddData(model);

            //FReport.setMaxVolume.Add(
            //    new VariablesForReport(model.blankRadius, model.blankRadius,
            //        model.friction, model.pctOfDieFilling, model.setRectionForceToBlank)
            //        );

            return(model.pctOfDieFilling);
        }
Ejemplo n.º 4
0
        //MAIN FUNCTION
        public void Compute(double[,] array, int counterStart, int kForNodes)
        {
            //model.stampAngle = array[i, 0];
            //model.stampAngle = Math.Round(model.stampAngle);

            model.stampAngle = model.startAngle;

            model.blankRadius = array[counterStart, 0];
            model.blankRadius = Math.Round(model.blankRadius, 2);

            model.friction = array[counterStart, 1];
            model.friction = Math.Round(model.friction, 2);

            model.dieRadius = (Math.Tan(model.stampAngle * Math.PI / 180) * 60) + 10;
            model.dieRadius = Math.Round(model.dieRadius, 1);
            //объём усеченного конуса (верхний радиус 10, нижний может меняться) 60 - высота усеченного конуса
            model.dieVolume = (Math.PI * 60 * (Math.Pow(model.dieRadius, 2) + model.dieRadius * 10 + Math.Pow(10, 2))) / 3;

            #region необходимо для вычесления облоя

            //3 - радиус скругления, 90 - градус
            double filletLength = Math.Tan((180 - (((90 + model.stampAngle) / 2) + 90)) * Math.PI / 180) * 3;

            double upperRadius = model.dieRadius + filletLength + 10;

            double angle30X = upperRadius - 5;

            double lowerVolume = Math.Pow((angle30X - 5), 2) * Math.PI * 1;

            model.dieVolume += lowerVolume;

            double shave = Math.Pow(angle30X, 2) * Math.PI * 1;

            shave -= lowerVolume;

            model.dieVolume = Math.Round(model.dieVolume, 1);

            #endregion

            model.blankUpperRadius = model.blankRadius - (Math.Tan(model.stampAngle * Math.PI / 180) * 2);
            model.blankPosition    = (Math.PI * 2 * (Math.Pow(model.blankRadius, 2) + model.blankRadius * (model.blankUpperRadius) + Math.Pow((model.blankUpperRadius), 2))) / 3;
            model.blankPosition    = Math.Round(model.blankPosition, 2);

            //объем цилиндра, не считая фаску (как будто её нет,а заготовка имеет форму просто цилиндра)
            double abstractRadiusVolume = Math.PI * Math.Pow(model.blankRadius, 2) * 2;
            double blankVolume          = model.dieVolume + (abstractRadiusVolume - model.blankPosition);

            //объём зазора между матрицей и площадкой
            blankVolume += shave;

            model.blankHeight = blankVolume / (Math.PI * Math.Pow(model.blankRadius, 2));
            model.blankHeight = Math.Round(model.blankHeight, 2);

            double radiusAfterLowerFillet = angle30X - 5;

            double radiusHeightInStamp;

            radiusHeightInStamp = 60 * ((radiusAfterLowerFillet - model.blankRadius) / (radiusAfterLowerFillet - 10));

            //необходимо для вычесления объёма от пуансона до конца матрицы
            model.lowerFilletRadius = radiusAfterLowerFillet;

            if (model.blankRadius > 10)
            {
                model.blankPosition  = model.blankHeight - radiusHeightInStamp;
                model.blankPosition  = Math.Round(model.blankPosition, 1);
                model.blankPosition += 5;
            }
            else
            {
                double tempHeight = model.blankHeight - 60;

                model.blankPosition = tempHeight * ((model.dieRadius - 10) / (model.dieRadius - 10));
                model.blankPosition = Math.Round(model.blankPosition, 1);
                //допуск +2мм на всякий пожарный случай
                model.blankPosition += 2;
            }

            model.stampDisplacement = model.blankPosition;
            //оставляем зазор 1мм
            model.stampDisplacement -= 1;

            #region Создание общей папки с название радиуса заготовки

            genReport.folderName = Convert.ToString(model.blankRadius);

            if (!Directory.Exists(genReport.folderName))
            {
                Directory.CreateDirectory(genReport.folderName);
            }

            #endregion

            string abaqusOutputFolder = Convert.ToString(model.blankRadius)
                                        + "r" + Convert.ToString(model.friction) + "f";

            file.outputFolder = Path.Combine(genReport.folderName, abaqusOutputFolder);

            if (!Directory.Exists(file.outputFolder))
            {
                Directory.CreateDirectory(file.outputFolder);
            }

            #region Пути для солида

            file.caeFolder      = Path.Combine(Environment.CurrentDirectory, file.outputFolder, add.jobName + ".cae");
            file.caeFolder      = file.caeFolder.Replace(@"\", "/");
            file.stampFolder    = Path.Combine(Environment.CurrentDirectory, file.outputFolder, file.stampName);
            file.stampFolder    = file.stampFolder.Replace(@"\", "/");
            file.blankFolder    = Path.Combine(Environment.CurrentDirectory, file.outputFolder, file.blankName);
            file.blankFolder    = file.blankFolder.Replace(@"\", "/");
            file.platformFolder = Path.Combine(Environment.CurrentDirectory, file.outputFolder, file.platformName);
            file.platformFolder = file.platformFolder.Replace(@"\", "/");

            #endregion

            var solid = new CAD();

            solid.UseSolid(file, model);

            rout.pathIn           = "abaqusMacros.py";
            rout.workingDirectory = file.outputFolder;
            rout.pathOut          = rout.workingDirectory + @"\abaqusMacros.py";

            var change = new Change();

            change.Output(rout, model, material, add, file);

            var abaqus = new CAE();

            abaqus.runAbaqus(rout, cmd);

            var processData = new ProcessData(rout, cmd);

            processData.Processing(model, file, filesForVolume, genReport);

            finalReport.AddData(model);

            genReport.AddFrictionToChart(model);

            genReport.AddRadiusToChart(model);

            #region проверка симплекса

            string fileName = "SimplexNodes";

            var str = new StringBuilder();
            str.Append(kForNodes);
            str.Append(";");
            str.Append(model.blankRadius);
            str.Append(";");
            str.Append(model.friction);
            str.Append(";");
            str.Append(model.pctOfDieFilling);
            str.Append(";");
            str.Append((model.reactionForceToBlank * Math.Pow(10, -6)));
            str.Append(";");
            str.Append(Environment.NewLine);

            var fileCreate = new FileCreation();

            fileCreate.CreateFile("", fileName, ".csv", str.ToString());

            #endregion
        }