예제 #1
0
파일: Extensions.cs 프로젝트: yazici/CNCLib
        public static decimal GetProbeSize(this MachineDto m, int axis)
        {
            switch (axis)
            {
            case 0: return(m.ProbeSizeX);

            case 1: return(m.ProbeSizeY);

            case 2: return(m.ProbeSizeZ);
            }

            return(0m);
        }
예제 #2
0
파일: Converter.cs 프로젝트: yazici/CNCLib
        public static Machine Convert(this MachineDto from, IMapper mapper)
        {
            var to = mapper.Map <Machine>(from);

            // AutoMapper do not mapper readonly observable collections
            foreach (var m in from.MachineCommands)
            {
                to.MachineCommands.Add(mapper.Map <MachineCommand>(m));
            }

            foreach (var mi in from.MachineInitCommands)
            {
                to.MachineInitCommands.Add(mapper.Map <MachineInitCommand>(mi));
            }

            return(to);
        }
예제 #3
0
파일: Extensions.cs 프로젝트: yazici/CNCLib
        public static decimal GetSize(this MachineDto m, int axis)
        {
            switch (axis)
            {
            case 0: return(m.SizeX);

            case 1: return(m.SizeY);

            case 2: return(m.SizeZ);

            case 3: return(m.SizeA);

            case 4: return(m.SizeB);

            case 5: return(m.SizeC);
            }

            throw new NotImplementedException();
        }
예제 #4
0
        public static async Task <bool> SendProbeCommandAsync(this ISerial serial, Machine machine, int axisIndex)
        {
            string  axisName  = machine.GetAxisName(axisIndex);
            decimal probeSize = machine.GetProbeSize(axisIndex);

            string probDist   = machine.ProbeDist.ToString(CultureInfo.InvariantCulture);
            string probDistUp = machine.ProbeDistUp.ToString(CultureInfo.InvariantCulture);
            string probFeed   = machine.ProbeFeed.ToString(CultureInfo.InvariantCulture);

            var result = await serial.SendCommandAsync("g91 g31 " + axisName + "-" + probDist + " F" + probFeed + " g90", DefaultProbeTimeout);

            if (result?.LastOrDefault()?.ReplyType.HasFlag(EReplyType.ReplyError) == false)
            {
                serial.QueueCommand("g92 " + axisName + (-probeSize).ToString(CultureInfo.InvariantCulture));
                serial.QueueCommand("g91 g0" + axisName + probDistUp + " g90");
                return(true);
            }

            return(false);
        }
예제 #5
0
        public async Task AddMachine()
        {
            var unitOfWork = Substitute.For <IUnitOfWork>();
            var rep        = Substitute.For <IMachineRepository>();
            var repC       = Substitute.For <IConfigurationRepository>();

            var ctrl = new MachineManager(unitOfWork, rep, repC, new CNCLibUserContext(), Mapper);

            var machineEntity1 = new MachineDto
            {
                MachineId       = 1,
                Name            = "Maxi",
                MachineCommands = new[]
                {
                    new MachineCommandDto
                    {
                        MachineId        = 1,
                        MachineCommandId = 1,
                        CommandName      = @"1",
                        CommandString    = @"1",
                        PosX             = 0,
                        PosY             = 1
                    }
                },
                MachineInitCommands = new[]
                {
                    new MachineInitCommandDto
                    {
                        MachineId            = 1,
                        MachineInitCommandId = 1,
                        CommandString        = "2",
                        SeqNo = 1
                    }
                }
            };

            var machineId = await ctrl.Add(machineEntity1);

            rep.ReceivedWithAnyArgs().AddRange(new Machine[1]);
            machineId.Should().Be(1);
        }
예제 #6
0
        public static async Task SendMacroCommandAsync(this ISerial serial, Machine machine, string commandString)
        {
            string[] separators = { @"\n" };
            string[] cmds       = commandString.Split(separators, StringSplitOptions.RemoveEmptyEntries);
            foreach (string s in cmds)
            {
                string[] infos = s.Split(':');
                int      axis;

                if (infos.Length > 1 && string.Compare(infos[0], @";probe", true) == 0 && -1 != (axis = GCodeHelper.AxisNameToIndex(infos[1])))
                {
                    if (false == await serial.SendProbeCommandAsync(machine, axis))
                    {
                        break;
                    }
                }
                else if (infos.Length == 1 && string.Compare(infos[0], @";beep", true) == 0)
                {
                    SystemSounds.Beep.Play();
                }
                else
                {
                    if (s.TrimEnd().EndsWith("?"))
                    {
                        var result = await serial.SendCommandAsync(s.TrimEnd().TrimEnd('?'), GCodeSerial.DefaultTimeout);

                        if (result?.LastOrDefault()?.ReplyType.HasFlag(EReplyType.ReplyError) == false)
                        {
                            return;
                        }
                    }
                    else
                    {
                        await serial.SendCommandAsync(s, GCodeSerial.DefaultTimeout);
                    }
                }
            }
        }
예제 #7
0
 public static void PrepareAndQueueCommand(this ISerial serial, Machine machine, string commandString)
 {
     serial.QueueCommand(machine.PrepareCommand(commandString));
 }
예제 #8
0
 public static async Task <bool> SendProbeCommandAsync(this ISerial serial, Machine machine, int axisIndex)
 {
     return(await serial.SendProbeCommandAsync(machine.GetAxisName(axisIndex), machine.GetProbeSize(axisIndex), machine.ProbeDist, machine.ProbeDistUp, machine.ProbeFeed));
 }
예제 #9
0
파일: Extensions.cs 프로젝트: yazici/CNCLib
 public static string GetAxisName(this MachineDto m, int axis)
 {
     return(GCodeHelper.IndexToAxisName(axis));
 }