Esempio n. 1
0
        public List <string> CheckValidRoutes(IEnumerable <JobPlan> jobs)
        {
            var          logMessages = new List <string>();
            MazakAllData mazakData;

            if (!OpenDatabaseKitDB.MazakTransactionLock.WaitOne(TimeSpan.FromMinutes(2), true))
            {
                throw new Exception("Unable to obtain mazak database lock");
            }
            try
            {
                mazakData = readDatabase.LoadAllData();
            }
            finally
            {
                OpenDatabaseKitDB.MazakTransactionLock.ReleaseMutex();
            }

            try
            {
                Log.Debug("Check valid routing info");


                //The reason we create the clsPalletPartMapping is to see if it throws any exceptions.  We therefore
                //need to ignore the warning that palletPartMap is not used.
#pragma warning disable 168, 219
                var mazakJobs = ConvertJobsToMazakParts.JobsToMazak(
                    jobs,
                    1,
                    mazakData,
                    new HashSet <string>(),
                    writeDb.MazakType,
                    CheckPalletsUsedOnce,
                    fmsSettings,
                    logMessages);
#pragma warning restore 168, 219
            }
            catch (Exception ex)
            {
                if (ex.Message.StartsWith("Invalid pallet->part mapping"))
                {
                    logMessages.Add(ex.Message);
                }
                else
                {
                    throw;
                }
            }

            return(logMessages);
        }
Esempio n. 2
0
        public void ErrorsOnMissingProgram()
        {
            //Test when processes have different pallet lists
            var job1 = new JobPlan("Job1", 2, new int[] { 2, 2 });

            job1.PartName = "Part1";
            job1.SetPathGroup(1, 1, 1);
            job1.SetPathGroup(1, 2, 2);
            job1.SetPathGroup(2, 1, 1);
            job1.SetPathGroup(2, 2, 2);

            job1.AddProcessOnPallet(1, 1, "4");
            job1.AddProcessOnPallet(1, 2, "10");
            job1.AddProcessOnPallet(2, 1, "40");
            job1.AddProcessOnPallet(2, 2, "100");

            AddBasicStopsWithProg(job1);

            var dset = CreateReadSet();

            var log  = new List <string>();
            var pMap = ConvertJobsToMazakParts.JobsToMazak(
                new JobPlan[] { job1 },
                3,
                dset,
                new HashSet <string>(),
                MazakDbType.MazakVersionE,
                checkPalletsUsedOnce: false,
                fmsSettings: new FMSSettings(),
                errors: log
                );

            log.Should().BeEquivalentTo(new[] {
                // one for each process
                "Part Part1 program 1234 does not exist in the cell controller.",
                "Part Part1 program 1234 does not exist in the cell controller."
            });
        }
Esempio n. 3
0
        public void ErrorsOnLongFixture()
        {
            //Test when processes have different pallet lists
            var job1 = new JobPlan("Job1", 1, new int[] { 1 });

            job1.PartName = "Part1";
            job1.SetPathGroup(1, 1, 1);
            job1.AddProcessOnPallet(1, 1, "4");
            job1.SetFixtureFace(1, 1, "aaaaaaaaaaaaaaaaa", 1);

            AddBasicStopsWithProg(job1);

            var dset = CreateReadSet();

            CreateProgram(dset, "1234");

            var    log = new List <string>();
            Action act = () =>
                         ConvertJobsToMazakParts.JobsToMazak(
                new JobPlan[] { job1 },
                3,
                dset,
                new HashSet <string>(),
                MazakDbType.MazakVersionE,
                checkPalletsUsedOnce: false,
                fmsSettings: new FMSSettings(),
                errors: log
                );

            act
            .Should()
            .Throw <BadRequestException>()
            .WithMessage(
                "Fixture aaaaaaaaaaaaaaaaa:4 is too long to fit in the mazak databases"
                );
        }
Esempio n. 4
0
        private void AddFixturesPalletsParts(NewJobs newJ)
        {
            var mazakData = readDatabase.LoadAllData();

            //first allocate a UID to use for this download
            int UID = 0;

            while (UID < int.MaxValue)
            {
                //check schedule rows for UID
                foreach (var schRow in mazakData.Schedules)
                {
                    if (MazakPart.ParseUID(schRow.PartName) == UID)
                    {
                        goto found;
                    }
                }

                //check fixture rows for UID
                foreach (var fixRow in mazakData.Fixtures)
                {
                    if (MazakPart.ParseUID(fixRow.FixtureName) == UID)
                    {
                        goto found;
                    }
                }

                break;
found:
                UID += 1;
            }
            if (UID == int.MaxValue)
            {
                throw new Exception("Unable to find unused UID");
            }
            Log.Debug("Creating new schedule with UID {uid}", UID);

            var(transSet, savedParts) = BuildMazakSchedules.RemoveCompletedAndDecrementSchedules(
                mazakData, UseStartingOffsetForDueDate
                );
            if (transSet.Schedules.Any())
            {
                writeDb.Save(transSet, "Update schedules");
            }

            Log.Debug("Saved Parts: {parts}", savedParts);

            var jobErrs   = new List <string>();
            var mazakJobs = ConvertJobsToMazakParts.JobsToMazak(
                newJ.Jobs,
                UID,
                mazakData,
                savedParts,
                writeDb.MazakType,
                CheckPalletsUsedOnce,
                fmsSettings,
                LookupProgram,
                jobErrs);

            if (jobErrs.Any())
            {
                throw new BlackMaple.MachineFramework.BadRequestException(
                          string.Join(Environment.NewLine, jobErrs)
                          );
            }

            //delete everything
            transSet = mazakJobs.DeleteOldPartPalletRows();
            if (transSet.Parts.Any() || transSet.Pallets.Any())
            {
                try
                {
                    writeDb.Save(transSet, "Delete Parts Pallets");
                }
                catch (ErrorModifyingParts e)
                {
                    foreach (var partName in e.PartNames)
                    {
                        if (readDatabase.CheckPartExists(partName))
                        {
                            throw new Exception("Mazak returned an error when attempting to delete part " + partName);
                        }
                    }
                }
            }

            //have to delete fixtures after schedule, parts, and pallets are already deleted
            //also, add new fixtures
            transSet = mazakJobs.CreateDeleteFixtureAndProgramDatabaseRows(jobDB.LoadProgramContent, ProgramDirectory);
            writeDb.Save(transSet, "Fixtures");

            //now save the pallets and parts
            transSet = mazakJobs.CreatePartPalletDatabaseRows();
            writeDb.Save(transSet, "Add Parts");
        }
Esempio n. 5
0
        public void DeleteUnusedPartsPals()
        {
            //Test when processes have different pallet lists
            var job1 = new JobPlan("Job1", 2, new int[] { 2, 2 });

            job1.PartName = "Part1";
            job1.SetPathGroup(1, 1, 1);
            job1.SetPathGroup(1, 2, 2);
            job1.SetPathGroup(2, 1, 1);
            job1.SetPathGroup(2, 2, 2);

            job1.AddProcessOnPallet(1, 1, "4");
            job1.AddProcessOnPallet(1, 1, "5");
            job1.AddProcessOnPallet(1, 2, "10");
            job1.AddProcessOnPallet(1, 2, "11");
            job1.AddProcessOnPallet(1, 2, "12");
            job1.AddProcessOnPallet(2, 1, "40");
            job1.AddProcessOnPallet(2, 1, "50");
            job1.AddProcessOnPallet(2, 2, "100");
            job1.AddProcessOnPallet(2, 2, "110");
            job1.AddProcessOnPallet(2, 2, "120");

            AddBasicStopsWithProg(job1);

            var dset = CreateReadSet();

            CreateFixture(dset, "aaaa:1");
            CreatePart(dset, "uniq1", "part1:1:1", 1, "aaaa");
            CreatePart(dset, "uniq2", "part2:1:1", 1, "Test");
            CreatePallet(dset, 5, "aaaa", 1); // this should be deleted since part1:1:1 is being deleted
            CreatePallet(dset, 6, "Test", 1); // this should be kept because part2:1:1 is being kept
            CreateProgram(dset, "1234");

            var log  = new List <string>();
            var pMap = ConvertJobsToMazakParts.JobsToMazak(
                new JobPlan[] { job1 },
                3,
                dset,
                new HashSet <string>()
            {
                "part2:1:1"
            },
                MazakDbType.MazakVersionE,
                checkPalletsUsedOnce: false,
                fmsSettings: new FMSSettings(),
                errors: log
                );

            if (log.Count > 0)
            {
                Assert.True(false, log[0]);
            }

            var del = pMap.DeleteOldPartPalletRows();

            del.Pallets.Should().BeEquivalentTo(new[] {
                new MazakPalletRow()
                {
                    PalletNumber = 5,
                    Fixture      = "aaaa:1",
                    Command      = MazakWriteCommand.Delete
                }
            });
            dset.TestParts[0].Command      = MazakWriteCommand.Delete;
            dset.TestParts[0].TotalProcess = dset.TestParts[0].Processes.Count;
            dset.TestParts[0].Processes.Clear();
            del.Parts.Should().BeEquivalentTo(new[] {
                dset.TestParts[0]
            });
            del.Fixtures.Should().BeEmpty();
            del.Schedules.Should().BeEmpty();
        }
Esempio n. 6
0
        public void ManualFixtureAssignment()
        {
            var job1 = new JobPlan("Job1", 2, new int[] { 2, 2 });

            job1.PartName = "Part1";
            job1.SetPathGroup(1, 1, 1);
            job1.SetPathGroup(1, 2, 2);
            job1.SetPathGroup(2, 1, 1);
            job1.SetPathGroup(2, 2, 2);

            //proc 1 and proc 2 on same pallets
            job1.AddProcessOnPallet(1, 1, "4");
            job1.AddProcessOnPallet(1, 1, "5");
            job1.AddProcessOnPallet(1, 2, "10");
            job1.AddProcessOnPallet(1, 2, "11");
            job1.AddProcessOnPallet(1, 2, "12");
            job1.AddProcessOnPallet(2, 1, "4");
            job1.AddProcessOnPallet(2, 1, "5");
            job1.AddProcessOnPallet(2, 2, "10");
            job1.AddProcessOnPallet(2, 2, "11");
            job1.AddProcessOnPallet(2, 2, "12");

            //each process uses different faces
            job1.SetFixtureFace(1, 1, "fixAA", 1);
            job1.SetFixtureFace(2, 1, "fixAA", 2);
            job1.SetFixtureFace(1, 2, "fixBB", 1);
            job1.SetFixtureFace(2, 2, "fixBB", 2);

            AddBasicStopsWithProg(job1);

            var job2 = new JobPlan("Job2", 2, new int[] { 2, 2 });

            job2.PartName = "Part2";

            //make path groups twisted
            job2.SetPathGroup(1, 1, 1);
            job2.SetPathGroup(1, 2, 2);
            job2.SetPathGroup(2, 1, 2);
            job2.SetPathGroup(2, 2, 1);

            //process groups on the same pallet.
            job2.AddProcessOnPallet(1, 1, "4");
            job2.AddProcessOnPallet(1, 1, "5");
            job2.AddProcessOnPallet(1, 2, "10");
            job2.AddProcessOnPallet(1, 2, "11");
            job2.AddProcessOnPallet(1, 2, "12");
            job2.AddProcessOnPallet(2, 2, "4");
            job2.AddProcessOnPallet(2, 2, "5");
            job2.AddProcessOnPallet(2, 1, "10");
            job2.AddProcessOnPallet(2, 1, "11");
            job2.AddProcessOnPallet(2, 1, "12");

            //each process uses different faces
            job2.SetFixtureFace(1, 1, "fixAA", 1);
            job2.SetFixtureFace(2, 2, "fixAA", 2);
            job2.SetFixtureFace(1, 2, "fixBB", 1);
            job2.SetFixtureFace(2, 1, "fixBB", 2);

            AddBasicStopsWithProg(job2);

            var job3 = new JobPlan("Job3", 1, new int[] { 2 });

            job3.PartName = "Part3";
            job3.AddProcessOnPallet(1, 1, "20");
            job3.AddProcessOnPallet(1, 1, "21");
            job3.AddProcessOnPallet(1, 2, "30");
            job3.AddProcessOnPallet(1, 2, "31");

            //job3 uses separate fixture than job 4, but same fixture and face for both procs
            job3.SetFixtureFace(1, 1, "fix3", 1);
            job3.SetFixtureFace(1, 2, "fix3", 1);

            AddBasicStopsWithProg(job3);

            var job4 = new JobPlan("Job4", 1, new int[] { 2 });

            job4.PartName = "Part4";
            job4.AddProcessOnPallet(1, 1, "20");
            job4.AddProcessOnPallet(1, 1, "21");
            job4.AddProcessOnPallet(1, 2, "30");
            job4.AddProcessOnPallet(1, 2, "31");

            //job3 uses separate fixture than job 4
            job4.SetFixtureFace(1, 1, "fix4", 1);
            job4.SetFixtureFace(1, 2, "fix4", 1);

            AddBasicStopsWithProg(job4);

            var log = new List <string>();

            var dset = CreateReadSet();

            CreateProgram(dset, "1234");

            var pMap = ConvertJobsToMazakParts.JobsToMazak(
                new JobPlan[] { job1, job2, job3, job4 },
                3,
                dset,
                new HashSet <string>(),
                MazakDbType.MazakVersionE,
                checkPalletsUsedOnce: false,
                fmsSettings: new FMSSettings(),
                errors: log
                );

            if (log.Count > 0)
            {
                Assert.True(false, log[0]);
            }

            CheckNewFixtures(pMap, new string[] {
                "F:3:fixAA:4:1",
                "F:3:fixAA:4:2",
                "F:3:fixBB:10:1",
                "F:3:fixBB:10:2",
                "F:3:fix3:20:1",
                "F:3:fix3:30:1",
                "F:3:fix4:20:1",
                "F:3:fix4:30:1",
            }, new[] { "Test" });

            var trans = pMap.CreatePartPalletDatabaseRows();

            CheckPartProcessFromJob(trans, "Part1:3:1", 1, "F:3:fixAA:4:1");
            CheckPartProcessFromJob(trans, "Part1:3:1", 2, "F:3:fixAA:4:2");
            CheckPart(trans, "Part1:3:1", "Job1-Path1-1-0");

            CheckPartProcessFromJob(trans, "Part1:3:2", 1, "F:3:fixBB:10:1");
            CheckPartProcessFromJob(trans, "Part1:3:2", 2, "F:3:fixBB:10:2");
            CheckPart(trans, "Part1:3:2", "Job1-Path2-2-0");

            CheckPartProcessFromJob(trans, "Part2:3:1", 1, "F:3:fixAA:4:1");
            CheckPartProcessFromJob(trans, "Part2:3:1", 2, "F:3:fixAA:4:2");
            CheckPart(trans, "Part2:3:1", "Job2-Path1-2-0");

            CheckPartProcessFromJob(trans, "Part2:3:2", 1, "F:3:fixBB:10:1");
            CheckPartProcessFromJob(trans, "Part2:3:2", 2, "F:3:fixBB:10:2");
            CheckPart(trans, "Part2:3:2", "Job2-Path2-1-0");

            CheckPartProcessFromJob(trans, "Part3:3:1", 1, "F:3:fix3:20:1");
            CheckPart(trans, "Part3:3:1", "Job3-Path1-0");

            CheckPartProcessFromJob(trans, "Part3:3:2", 1, "F:3:fix3:30:1");
            CheckPart(trans, "Part3:3:2", "Job3-Path2-0");

            CheckPartProcessFromJob(trans, "Part4:3:1", 1, "F:3:fix4:20:1");
            CheckPart(trans, "Part4:3:1", "Job4-Path1-0");

            CheckPartProcessFromJob(trans, "Part4:3:2", 1, "F:3:fix4:30:1");
            CheckPart(trans, "Part4:3:2", "Job4-Path2-0");

            CheckPalletGroup(trans, 31, new[] { "F:3:fixAA:4:1", "F:3:fixAA:4:2" }, new int[] { 4, 5 });
            CheckPalletGroup(trans, 32, new[] { "F:3:fixBB:10:1", "F:3:fixBB:10:2" }, new int[] { 10, 11, 12 });
            CheckPalletGroup(trans, 33, new[] { "F:3:fix3:20:1" }, new int[] { 20, 21 });
            CheckPalletGroup(trans, 34, new[] { "F:3:fix3:30:1" }, new int[] { 30, 31 });
            CheckPalletGroup(trans, 35, new[] { "F:3:fix4:20:1" }, new int[] { 20, 21 });
            CheckPalletGroup(trans, 36, new[] { "F:3:fix4:30:1" }, new int[] { 30, 31 });

            AssertPartsPalletsDeleted(trans);
        }
Esempio n. 7
0
        public void DifferentPallets()
        {
            //Test when processes have different pallet lists
            var job1 = new JobPlan("Job1", 2, new int[] { 2, 2 });

            job1.PartName = "Part1";
            job1.SetPathGroup(1, 1, 1);
            job1.SetPathGroup(1, 2, 2);
            job1.SetPathGroup(2, 1, 1);
            job1.SetPathGroup(2, 2, 2);

            job1.AddProcessOnPallet(1, 1, "4");
            job1.AddProcessOnPallet(1, 1, "5");
            job1.AddProcessOnPallet(1, 2, "10");
            job1.AddProcessOnPallet(1, 2, "11");
            job1.AddProcessOnPallet(1, 2, "12");
            job1.AddProcessOnPallet(2, 1, "40");
            job1.AddProcessOnPallet(2, 1, "50");
            job1.AddProcessOnPallet(2, 2, "100");
            job1.AddProcessOnPallet(2, 2, "110");
            job1.AddProcessOnPallet(2, 2, "120");

            AddBasicStopsWithProg(job1);

            var job2 = new JobPlan("Job2", 2, new int[] { 2, 2 });

            job2.PartName = "Part2";

            //make path groups twisted
            job2.SetPathGroup(1, 1, 1);
            job2.SetPathGroup(1, 2, 2);
            job2.SetPathGroup(2, 1, 2);
            job2.SetPathGroup(2, 2, 1);

            //process groups on the same pallet.
            job2.AddProcessOnPallet(1, 1, "4");
            job2.AddProcessOnPallet(1, 1, "5");
            job2.AddProcessOnPallet(1, 2, "10");
            job2.AddProcessOnPallet(1, 2, "11");
            job2.AddProcessOnPallet(1, 2, "12");
            job2.AddProcessOnPallet(2, 2, "40");
            job2.AddProcessOnPallet(2, 2, "50");
            job2.AddProcessOnPallet(2, 1, "100");
            job2.AddProcessOnPallet(2, 1, "110");
            job2.AddProcessOnPallet(2, 1, "120");

            AddBasicStopsWithProg(job2);

            var job3 = new JobPlan("Job3", 2, new int[] { 2, 2 });

            job3.PartName = "Part3";

            job3.SetPathGroup(1, 1, 1);
            job3.SetPathGroup(1, 2, 2);
            job3.SetPathGroup(2, 1, 1);
            job3.SetPathGroup(2, 2, 2);

            //These do not all match above (some do, but not all)
            job3.AddProcessOnPallet(1, 1, "4");
            job3.AddProcessOnPallet(1, 1, "5");
            job3.AddProcessOnPallet(1, 2, "22");
            job3.AddProcessOnPallet(1, 2, "23");
            job3.AddProcessOnPallet(1, 2, "24");
            job3.AddProcessOnPallet(2, 1, "30");
            job3.AddProcessOnPallet(2, 1, "31");
            job3.AddProcessOnPallet(2, 2, "100");
            job3.AddProcessOnPallet(2, 2, "110");
            job3.AddProcessOnPallet(2, 2, "120");

            AddBasicStopsWithProg(job3);

            var log = new List <string>();

            var dset = new MazakTestData();

            CreateProgram(dset, "1234");

            var pMap = ConvertJobsToMazakParts.JobsToMazak(
                new JobPlan[] { job1, job2, job3 },
                3,
                dset,
                new HashSet <string>(),
                MazakDbType.MazakVersionE,
                checkPalletsUsedOnce: false,
                fmsSettings: new FMSSettings(),
                errors: log
                );

            if (log.Count > 0)
            {
                Assert.True(false, log[0]);
            }

            CheckNewFixtures(pMap, new string[] {
                "F:3:0:4:1",
                "F:3:1:40:2",
                "F:3:2:10:1",
                "F:3:3:100:2",
                "F:3:4:30:2",
                "F:3:5:22:1"
            });

            var trans = pMap.CreatePartPalletDatabaseRows();

            CheckPartProcessFromJob(trans, "Part1:3:1", 1, "F:3:0:4:1");
            CheckPartProcessFromJob(trans, "Part1:3:1", 2, "F:3:1:40:2");
            CheckPart(trans, "Part1:3:1", "Job1-Path1-1-0");

            CheckPartProcessFromJob(trans, "Part1:3:2", 1, "F:3:2:10:1");
            CheckPartProcessFromJob(trans, "Part1:3:2", 2, "F:3:3:100:2");
            CheckPart(trans, "Part1:3:2", "Job1-Path2-2-0");

            CheckPartProcessFromJob(trans, "Part2:3:1", 1, "F:3:0:4:1");
            CheckPartProcessFromJob(trans, "Part2:3:1", 2, "F:3:1:40:2");
            CheckPart(trans, "Part2:3:1", "Job2-Path1-2-0");

            CheckPartProcessFromJob(trans, "Part2:3:2", 1, "F:3:2:10:1");
            CheckPartProcessFromJob(trans, "Part2:3:2", 2, "F:3:3:100:2");
            CheckPart(trans, "Part2:3:2", "Job2-Path2-1-0");

            CheckPartProcessFromJob(trans, "Part3:3:1", 1, "F:3:0:4:1");
            CheckPartProcessFromJob(trans, "Part3:3:1", 2, "F:3:4:30:2");
            CheckPart(trans, "Part3:3:1", "Job3-Path1-1-0");

            CheckPartProcessFromJob(trans, "Part3:3:2", 1, "F:3:5:22:1");
            CheckPartProcessFromJob(trans, "Part3:3:2", 2, "F:3:3:100:2");
            CheckPart(trans, "Part3:3:2", "Job3-Path2-2-0");

            CheckSingleProcPalletGroup(trans, 31, "F:3:0:4:1", new int[] { 4, 5 });
            CheckSingleProcPalletGroup(trans, 32, "F:3:1:40:2", new int[] { 40, 50 });
            CheckSingleProcPalletGroup(trans, 33, "F:3:2:10:1", new int[] { 10, 11, 12 });
            CheckSingleProcPalletGroup(trans, 34, "F:3:3:100:2", new int[] { 100, 110, 120 });
            CheckSingleProcPalletGroup(trans, 35, "F:3:4:30:2", new int[] { 30, 31 });
            CheckSingleProcPalletGroup(trans, 36, "F:3:5:22:1", new int[] { 22, 23, 24 });

            AssertPartsPalletsDeleted(trans);
        }
Esempio n. 8
0
        public void BasicFromJob()
        {
            var job1 = new JobPlan("Job1", 2, new int[] { 2, 2 });

            job1.PartName = "Part1";
            job1.SetPathGroup(1, 1, 1);
            job1.SetPathGroup(1, 2, 2);
            job1.SetPathGroup(2, 1, 1);
            job1.SetPathGroup(2, 2, 2);

            //proc 1 and proc 2 on same pallets
            job1.AddProcessOnPallet(1, 1, "4");
            job1.AddProcessOnPallet(1, 1, "5");
            job1.AddProcessOnPallet(1, 2, "10");
            job1.AddProcessOnPallet(1, 2, "11");
            job1.AddProcessOnPallet(1, 2, "12");
            job1.AddProcessOnPallet(2, 1, "4");
            job1.AddProcessOnPallet(2, 1, "5");
            job1.AddProcessOnPallet(2, 2, "10");
            job1.AddProcessOnPallet(2, 2, "11");
            job1.AddProcessOnPallet(2, 2, "12");

            AddBasicStopsWithProg(job1);

            var job2 = new JobPlan("Job2", 2, new int[] { 2, 2 });

            job2.PartName = "Part2";

            //make path groups twisted
            job2.SetPathGroup(1, 1, 1);
            job2.SetPathGroup(1, 2, 2);
            job2.SetPathGroup(2, 1, 2);
            job2.SetPathGroup(2, 2, 1);

            //process groups on the same pallet.
            job2.AddProcessOnPallet(1, 1, "4");
            job2.AddProcessOnPallet(1, 1, "5");
            job2.AddProcessOnPallet(1, 2, "10");
            job2.AddProcessOnPallet(1, 2, "11");
            job2.AddProcessOnPallet(1, 2, "12");
            job2.AddProcessOnPallet(2, 2, "4");
            job2.AddProcessOnPallet(2, 2, "5");
            job2.AddProcessOnPallet(2, 1, "10");
            job2.AddProcessOnPallet(2, 1, "11");
            job2.AddProcessOnPallet(2, 1, "12");

            AddBasicStopsWithProg(job2);

            var job3 = new JobPlan("Job3", 1, new int[] { 2 });

            job3.PartName = "Part3";
            job3.AddProcessOnPallet(1, 1, "20");
            job3.AddProcessOnPallet(1, 1, "21");
            job3.AddProcessOnPallet(1, 2, "30");
            job3.AddProcessOnPallet(1, 2, "31");

            AddBasicStopsWithProg(job3);

            //make Job 4 a template
            var job4 = new JobPlan("Job4", 1, new int[] { 2 });

            job4.PartName = "Part4";
            job4.AddProcessOnPallet(1, 1, "20");
            job4.AddProcessOnPallet(1, 1, "21");
            job4.AddProcessOnPallet(1, 2, "30");
            job4.AddProcessOnPallet(1, 2, "31");


            var log = new List <string>();

            var dset = CreateReadSet();

            CreatePart(dset, "Job4", "Part4", 1, "Test");
            CreateProgram(dset, "1234");
            CreateFixture(dset, "unusedfixture");

            var pMap = ConvertJobsToMazakParts.JobsToMazak(
                new JobPlan[] { job1, job2, job3, job4 },
                3,
                dset,
                new HashSet <string>(),
                MazakDbType.MazakVersionE,
                checkPalletsUsedOnce: false,
                fmsSettings: new FMSSettings(),
                errors: log
                );

            if (log.Count > 0)
            {
                Assert.True(false, log[0]);
            }

            CheckNewFixtures(pMap,
                             new string[] {
                "F:3:0:4:1",
                "F:3:0:4:2",
                "F:3:1:10:1",
                "F:3:1:10:2",
                "F:3:2:20:1",
                "F:3:3:30:1"
            },
                             new[] { "unusedfixture", "Test" }
                             );

            var trans = pMap.CreatePartPalletDatabaseRows();

            CheckPartProcessFromJob(trans, "Part1:3:1", 1, "F:3:0:4:1");
            CheckPartProcessFromJob(trans, "Part1:3:1", 2, "F:3:0:4:2");
            CheckPart(trans, "Part1:3:1", "Job1-Path1-1-0");

            CheckPartProcessFromJob(trans, "Part1:3:2", 1, "F:3:1:10:1");
            CheckPartProcessFromJob(trans, "Part1:3:2", 2, "F:3:1:10:2");
            CheckPart(trans, "Part1:3:2", "Job1-Path2-2-0");

            CheckPartProcessFromJob(trans, "Part2:3:1", 1, "F:3:0:4:1");
            CheckPartProcessFromJob(trans, "Part2:3:1", 2, "F:3:0:4:2");
            CheckPart(trans, "Part2:3:1", "Job2-Path1-2-0");

            CheckPartProcessFromJob(trans, "Part2:3:2", 1, "F:3:1:10:1");
            CheckPartProcessFromJob(trans, "Part2:3:2", 2, "F:3:1:10:2");
            CheckPart(trans, "Part2:3:2", "Job2-Path2-1-0");

            CheckPartProcessFromJob(trans, "Part3:3:1", 1, "F:3:2:20:1");
            CheckPart(trans, "Part3:3:1", "Job3-Path1-0");

            CheckPartProcessFromJob(trans, "Part3:3:2", 1, "F:3:3:30:1");
            CheckPart(trans, "Part3:3:2", "Job3-Path2-0");

            CheckPartProcess(trans, "Part4:3:1", 1, "F:3:2:20:1");
            CheckPart(trans, "Part4:3:1", "Job4-Path1-0");

            CheckPartProcess(trans, "Part4:3:2", 1, "F:3:3:30:1");
            CheckPart(trans, "Part4:3:2", "Job4-Path2-0");

            CheckPalletGroup(trans, 31, "F:3:0:4", 2, new int[] { 4, 5 });
            CheckPalletGroup(trans, 32, "F:3:1:10", 2, new int[] { 10, 11, 12 });
            CheckPalletGroup(trans, 33, "F:3:2:20", 1, new int[] { 20, 21 });
            CheckPalletGroup(trans, 34, "F:3:3:30", 1, new int[] { 30, 31 });

            AssertPartsPalletsDeleted(trans);
        }
Esempio n. 9
0
        public void BasicFromTemplate()
        {
            //Test everything copied from the template
            // The JobPlan's have only 1 process but the template has 2 processes so
            // the resulting parts should have 2 processes

            var job1 = new JobPlan("Job1", 1, new int[] { 2 });

            job1.PartName = "Part1";
            job1.AddProcessOnPallet(1, 1, "4");
            job1.AddProcessOnPallet(1, 1, "5");
            job1.AddProcessOnPallet(1, 2, "10");
            job1.AddProcessOnPallet(1, 2, "11");
            job1.AddProcessOnPallet(1, 2, "12");
            job1.AddLoadStation(1, 1, 1);
            job1.AddLoadStation(1, 1, 2);
            job1.AddLoadStation(1, 2, 5);
            job1.AddUnloadStation(1, 1, 4);
            job1.AddUnloadStation(1, 2, 3);
            var stop = new JobMachiningStop("machine");

            stop.Stations.Add(1);
            job1.AddMachiningStop(1, 1, stop);
            stop = new JobMachiningStop("machine");
            stop.Stations.Add(3);
            stop.Stations.Add(4);
            job1.AddMachiningStop(1, 2, stop);

            var job2 = new JobPlan("Job2", 1, new int[] { 2 });

            job2.PartName = "Part2";
            job2.AddProcessOnPallet(1, 1, "4");
            job2.AddProcessOnPallet(1, 1, "5");
            job2.AddProcessOnPallet(1, 2, "10");
            job2.AddProcessOnPallet(1, 2, "11");
            job2.AddProcessOnPallet(1, 2, "12");

            var job3 = new JobPlan("Job3", 1, new int[] { 1 });

            job3.PartName = "Part3";
            job3.AddProcessOnPallet(1, 1, "20");
            job3.AddProcessOnPallet(1, 1, "21");

            var job4 = new JobPlan("Job4", 1, new int[] { 1 });

            job4.PartName = "Part4";
            job4.AddProcessOnPallet(1, 1, "20");
            job4.AddProcessOnPallet(1, 1, "21");

            var log = new List <string>();

            var dset = CreateReadSet();

            CreatePart(dset, "Job1", "Part1", 2, "Test");
            CreatePart(dset, "Job2", "Part2", 2, "Test");
            CreatePart(dset, "Job3", "Part3", 1, "Test");
            CreatePart(dset, "Job4", "Part4", 1, "Test");

            var pMap = ConvertJobsToMazakParts.JobsToMazak(
                new JobPlan[] { job1, job2, job3, job4 },
                3,
                dset,
                new HashSet <string>(),
                MazakDbType.MazakVersionE,
                checkPalletsUsedOnce: false,
                fmsSettings: new FMSSettings(),
                errors: log
                );

            if (log.Count > 0)
            {
                Assert.True(false, log[0]);
            }

            CheckNewFixtures(pMap, new string[] {
                "F:3:0:4:1",
                "F:3:0:4:2",
                "F:3:1:10:1",
                "F:3:1:10:2",
                "F:3:2:20:1"
            }, new[] { "Test" });

            var trans = pMap.CreatePartPalletDatabaseRows();

            CheckPartProcess(trans, "Part1:3:1", 1, "F:3:0:4:1", "1200000000", "0004000000", "10000000");
            CheckPartProcess(trans, "Part1:3:1", 2, "F:3:0:4:2", "1200000000", "0004000000", "10000000");
            CheckPart(trans, "Part1:3:1", "Job1-Path1-1-0");

            CheckPartProcess(trans, "Part1:3:2", 1, "F:3:1:10:1", "0000500000", "0030000000", "00340000");
            CheckPartProcess(trans, "Part1:3:2", 2, "F:3:1:10:2", "0000500000", "0030000000", "00340000");
            CheckPart(trans, "Part1:3:2", "Job1-Path2-2-0");

            CheckPartProcess(trans, "Part2:3:1", 1, "F:3:0:4:1");
            CheckPartProcess(trans, "Part2:3:1", 2, "F:3:0:4:2");
            CheckPart(trans, "Part2:3:1", "Job2-Path1-1-0");

            CheckPartProcess(trans, "Part2:3:2", 1, "F:3:1:10:1");
            CheckPartProcess(trans, "Part2:3:2", 2, "F:3:1:10:2");
            CheckPart(trans, "Part2:3:2", "Job2-Path2-2-0");

            CheckPartProcess(trans, "Part3:3:1", 1, "F:3:2:20:1");
            CheckPart(trans, "Part3:3:1", "Job3-Path1-0");

            CheckPartProcess(trans, "Part4:3:1", 1, "F:3:2:20:1");
            CheckPart(trans, "Part4:3:1", "Job4-Path1-0");

            CheckPalletGroup(trans, 31, "F:3:0:4", 2, new int[] { 4, 5 });
            CheckPalletGroup(trans, 32, "F:3:1:10", 2, new int[] { 10, 11, 12 });
            CheckPalletGroup(trans, 33, "F:3:2:20", 1, new int[] { 20, 21 });

            AssertPartsPalletsDeleted(trans);
        }
Esempio n. 10
0
        private void CheckNonOverlapping(bool checkPalletUsedOnce)
        {
            var job1 = new JobPlan("Job1", 1, new int[] { 2 });

            job1.PartName = "Part1";
            job1.AddProcessOnPallet(1, 1, "4");
            job1.AddProcessOnPallet(1, 1, "5");
            job1.AddProcessOnPallet(1, 2, "10");
            job1.AddProcessOnPallet(1, 2, "11");
            job1.AddProcessOnPallet(1, 2, "12");

            var job2 = new JobPlan("Job2", 1, new int[] { 2 });

            job2.PartName = "Part2";
            job2.AddProcessOnPallet(1, 1, "4");
            job2.AddProcessOnPallet(1, 1, "5");
            job2.AddProcessOnPallet(1, 1, "6");
            job2.AddProcessOnPallet(1, 2, "10");
            job2.AddProcessOnPallet(1, 2, "11");
            job2.AddProcessOnPallet(1, 2, "12");

            var log = new List <string>();

            var dset = CreateReadSet();

            CreatePart(dset, "Job1", "Part1", 2, "Test");
            CreatePart(dset, "Job2", "Part2", 2, "Test");

            var pMap = ConvertJobsToMazakParts.JobsToMazak(
                new JobPlan[] { job1, job2 },
                3,
                dset,
                new HashSet <string>(),
                MazakDbType.MazakVersionE,
                checkPalletsUsedOnce: checkPalletUsedOnce,
                fmsSettings: new FMSSettings(),
                errors: log
                );

            if (log.Count > 0)
            {
                Assert.True(false, log[0]);
            }

            CheckNewFixtures(pMap, new string[] {
                "F:3:0:4:1",
                "F:3:0:4:2",
                "F:3:1:10:1",
                "F:3:1:10:2",
                "F:3:2:4:1",
                "F:3:2:4:2",
            }, new[] { "Test" });

            var trans = pMap.CreatePartPalletDatabaseRows();

            CheckPartProcess(trans, "Part1:3:1", 1, "F:3:0:4:1");
            CheckPartProcess(trans, "Part1:3:1", 2, "F:3:0:4:2");
            CheckPart(trans, "Part1:3:1", "Job1-Path1-1-0");

            CheckPartProcess(trans, "Part1:3:2", 1, "F:3:1:10:1");
            CheckPartProcess(trans, "Part1:3:2", 2, "F:3:1:10:2");
            CheckPart(trans, "Part1:3:2", "Job1-Path2-2-0");

            CheckPartProcess(trans, "Part2:3:1", 1, "F:3:2:4:1");
            CheckPartProcess(trans, "Part2:3:1", 2, "F:3:2:4:2");
            CheckPart(trans, "Part2:3:1", "Job2-Path1-1-0");

            CheckPartProcess(trans, "Part2:3:2", 1, "F:3:1:10:1");
            CheckPartProcess(trans, "Part2:3:2", 2, "F:3:1:10:2");
            CheckPart(trans, "Part2:3:2", "Job2-Path2-2-0");

            CheckPalletGroup(trans, 31, "F:3:0:4", 2, new int[] { 4, 5 });
            CheckPalletGroup(trans, 32, "F:3:1:10", 2, new int[] { 10, 11, 12 });
            CheckPalletGroup(trans, 33, "F:3:2:4", 2, new int[] { 4, 5, 6 });

            AssertPartsPalletsDeleted(trans);
        }
Esempio n. 11
0
        public void MultiProcess()
        {
            //A test where Jobs have different number of processes but the same pallet list
            //again, mazak parts are created from template, not the jobplan

            var job1 = new JobPlan("Job1", 1, new int[] { 2 });

            job1.PartName = "Part1";
            job1.AddProcessOnPallet(1, 1, "4");
            job1.AddProcessOnPallet(1, 1, "5");
            job1.AddProcessOnPallet(1, 2, "10");
            job1.AddProcessOnPallet(1, 2, "11");
            job1.AddProcessOnPallet(1, 2, "12");

            var job2 = new JobPlan("Job2", 1, new int[] { 2 });

            job2.PartName = "Part2";
            job2.AddProcessOnPallet(1, 1, "4");
            job2.AddProcessOnPallet(1, 1, "5");
            job2.AddProcessOnPallet(1, 2, "10");
            job2.AddProcessOnPallet(1, 2, "11");
            job2.AddProcessOnPallet(1, 2, "12");

            var job3 = new JobPlan("Job3", 1, new int[] { 1 });

            job3.PartName = "Part3";
            job3.AddProcessOnPallet(1, 1, "20");
            job3.AddProcessOnPallet(1, 1, "21");

            var job4 = new JobPlan("Job4", 1, new int[] { 1 });

            job4.PartName = "Part4";
            job4.AddProcessOnPallet(1, 1, "20");
            job4.AddProcessOnPallet(1, 1, "21");

            var log = new List <string>();

            var dset = CreateReadSet();

            CreatePart(dset, "Job1", "Part1", 2, "Test");
            CreatePart(dset, "Job2", "Part2", 3, "Test");
            CreatePart(dset, "Job3", "Part3", 1, "Test");
            CreatePart(dset, "Job4", "Part4", 1, "Test");

            var pMap = ConvertJobsToMazakParts.JobsToMazak(
                new JobPlan[] { job1, job2, job3, job4 },
                3,
                dset,
                new HashSet <string>(),
                MazakDbType.MazakVersionE,
                checkPalletsUsedOnce: false,
                fmsSettings: new FMSSettings(),
                errors: log
                );

            if (log.Count > 0)
            {
                Assert.True(false, log[0]);
            }

            CheckNewFixtures(pMap, new string[] {
                "F:3:0:4:1",
                "F:3:0:4:2",
                "F:3:0:4:3",
                "F:3:1:10:1",
                "F:3:1:10:2",
                "F:3:1:10:3",
                "F:3:2:20:1"
            }, new[] { "Test" });

            var trans = pMap.CreatePartPalletDatabaseRows();

            CheckPartProcess(trans, "Part1:3:1", 1, "F:3:0:4:1");
            CheckPartProcess(trans, "Part1:3:1", 2, "F:3:0:4:2");
            CheckPart(trans, "Part1:3:1", "Job1-Path1-1-0");

            CheckPartProcess(trans, "Part1:3:2", 1, "F:3:1:10:1");
            CheckPartProcess(trans, "Part1:3:2", 2, "F:3:1:10:2");
            CheckPart(trans, "Part1:3:2", "Job1-Path2-2-0");

            CheckPartProcess(trans, "Part2:3:1", 1, "F:3:0:4:1");
            CheckPartProcess(trans, "Part2:3:1", 2, "F:3:0:4:2");
            CheckPartProcess(trans, "Part2:3:1", 3, "F:3:0:4:3");
            CheckPart(trans, "Part2:3:1", "Job2-Path1-1-1-0");

            CheckPartProcess(trans, "Part2:3:2", 1, "F:3:1:10:1");
            CheckPartProcess(trans, "Part2:3:2", 2, "F:3:1:10:2");
            CheckPartProcess(trans, "Part2:3:2", 3, "F:3:1:10:3");
            CheckPart(trans, "Part2:3:2", "Job2-Path2-2-2-0");

            CheckPartProcess(trans, "Part3:3:1", 1, "F:3:2:20:1");
            CheckPart(trans, "Part3:3:1", "Job3-Path1-0");

            CheckPartProcess(trans, "Part4:3:1", 1, "F:3:2:20:1");
            CheckPart(trans, "Part4:3:1", "Job4-Path1-0");

            CheckPalletGroup(trans, 31, "F:3:0:4", 3, new int[] { 4, 5 });
            CheckPalletGroup(trans, 32, "F:3:1:10", 3, new int[] { 10, 11, 12 });
            CheckPalletGroup(trans, 33, "F:3:2:20", 1, new int[] { 20, 21 });

            AssertPartsPalletsDeleted(trans);
        }
Esempio n. 12
0
        public void UseExistingFixture()
        {
            //again, mazak parts are created from template, not the jobplan
            var job1 = new JobPlan("Job1", 1, new int[] { 2 });

            job1.PartName = "Part1";
            job1.AddProcessOnPallet(1, 1, "4");
            job1.AddProcessOnPallet(1, 1, "5");
            job1.AddProcessOnPallet(1, 2, "10");
            job1.AddProcessOnPallet(1, 2, "11");
            job1.AddProcessOnPallet(1, 2, "12");

            var job2 = new JobPlan("Job2", 1, new int[] { 2 });

            job2.PartName = "Part2";
            job2.AddProcessOnPallet(1, 1, "4");
            job2.AddProcessOnPallet(1, 1, "5");
            job2.AddProcessOnPallet(1, 2, "10");
            job2.AddProcessOnPallet(1, 2, "11");
            job2.AddProcessOnPallet(1, 2, "12");

            var job3 = new JobPlan("Job3", 1, new int[] { 1 });

            job3.PartName = "Part3";
            job3.AddProcessOnPallet(1, 1, "20");
            job3.AddProcessOnPallet(1, 1, "21");

            var job4 = new JobPlan("Job4", 1, new int[] { 1 });

            job4.PartName = "Part4";
            job4.AddProcessOnPallet(1, 1, "20");
            job4.AddProcessOnPallet(1, 1, "21");

            var log = new List <string>();

            var dset = CreateReadSet();

            CreatePart(dset, "Job1", "Part1", 2, "Test");
            CreatePart(dset, "Job2", "Part2", 2, "Test");
            CreatePart(dset, "Job3", "Part3", 1, "Test");
            CreatePart(dset, "Job4", "Part4", 1, "Test");

            //Create fixtures which match for Parts 1 and 2.
            var savedParts = new HashSet <string>();

            CreateFixture(dset, "F:2:0:4:1");
            CreateFixture(dset, "F:2:0:4:2");
            CreateFixture(dset, "F:2:0:10:1");
            CreateFixture(dset, "F:2:0:10:2");
            CreatePart(dset, "Job1.0", "Part1:2:1", 2, "F:2:0:4");
            savedParts.Add("Part1:2:1");
            CreatePart(dset, "Job1.0", "Part1:2:2", 2, "F:2:0:10");
            savedParts.Add("Part1:2:2");
            CreatePallet(dset, 4, "F:2:0:4", 2);
            CreatePallet(dset, 5, "F:2:0:4", 2);
            CreatePallet(dset, 10, "F:2:0:10", 2);
            CreatePallet(dset, 11, "F:2:0:10", 2);
            CreatePallet(dset, 12, "F:2:0:10", 2);

            //Create several fixtures which almost but not quite match for parts 3 and 4.

            //group with an extra pallet
            CreateFixture(dset, "F:1:0:20:1");
            CreatePart(dset, "Job3.0", "Part3:1:1", 1, "F:1:0:20");
            savedParts.Add("Part3:1:1");
            CreatePallet(dset, 20, "F:1:0:20", 1);
            CreatePallet(dset, 21, "F:1:0:20", 1);
            CreatePallet(dset, 22, "F:1:0:20", 1);

            //group with a missing pallet
            CreateFixture(dset, "F:7:0:20:1");
            CreatePart(dset, "Job3.1", "Part3:7:1", 1, "F:7:0:20");
            savedParts.Add("Part3:7:1");
            CreatePallet(dset, 20, "F:7:0:20", 1);

            var pMap = ConvertJobsToMazakParts.JobsToMazak(
                new JobPlan[] { job1, job2, job3, job4 },
                3,
                dset,
                savedParts,
                MazakDbType.MazakVersionE,
                checkPalletsUsedOnce: false,
                fmsSettings: new FMSSettings(),
                errors: log
                );

            if (log.Count > 0)
            {
                Assert.True(false, log[0]);
            }

            CheckNewFixtures(pMap, new string[] {
                "F:3:2:20:1"
            }, new[] { "Test" });

            var trans = pMap.CreatePartPalletDatabaseRows();

            CheckPartProcess(trans, "Part1:3:1", 1, "F:2:0:4:1");
            CheckPartProcess(trans, "Part1:3:1", 2, "F:2:0:4:2");
            CheckPart(trans, "Part1:3:1", "Job1-Path1-1-0");

            CheckPartProcess(trans, "Part1:3:2", 1, "F:2:0:10:1");
            CheckPartProcess(trans, "Part1:3:2", 2, "F:2:0:10:2");
            CheckPart(trans, "Part1:3:2", "Job1-Path2-2-0");

            CheckPartProcess(trans, "Part2:3:1", 1, "F:2:0:4:1");
            CheckPartProcess(trans, "Part2:3:1", 2, "F:2:0:4:2");
            CheckPart(trans, "Part2:3:1", "Job2-Path1-1-0");

            CheckPartProcess(trans, "Part2:3:2", 1, "F:2:0:10:1");
            CheckPartProcess(trans, "Part2:3:2", 2, "F:2:0:10:2");
            CheckPart(trans, "Part2:3:2", "Job2-Path2-2-0");

            CheckPartProcess(trans, "Part3:3:1", 1, "F:3:2:20:1");
            CheckPart(trans, "Part3:3:1", "Job3-Path1-0");

            CheckPartProcess(trans, "Part4:3:1", 1, "F:3:2:20:1");
            CheckPart(trans, "Part4:3:1", "Job4-Path1-0");

            CheckPalletGroup(trans, 33, "F:3:2:20", 1, new int[] { 20, 21 });

            AssertPartsPalletsDeleted(trans);
        }