private void SendStepResolution(FeedRate.StepResolutions resolution) { _resolution = resolution; string resolutionCmd = "StepResolution:" + ((int)_resolution).ToString(); SendCommand(resolutionCmd); }
/// <summary> /// Converts the supplied targetFeedRate to a millisecond delay value to be used between step pulses, and a step resolution /// </summary> /// <param name="targetFeedRate">Desired Feed Rate in IPM</param> /// <param name="resolution">Resulting feed rate to be used</param> /// <returns>millisecond step pulse delay value to pass to the machine</returns> public int CalculateStepDelayFromFeedRate(int targetFeedRate, out FeedRate.StepResolutions resolution) { //TODO: These need to be stored as settings with the ability to measure them and determine their values.. right now everything // is hard coded from the charting of my manual trial and error if (targetFeedRate > FeedRateMaximum) { targetFeedRate = FeedRateMaximum; } if (targetFeedRate < 5) { targetFeedRate = 5; } resolution = FeedRate.StepResolutions.Half; //TODO: We've calculated these all on half steps which seem to work great for the full range // (Really making me wonder why I support changing resolutions) if (targetFeedRate > 50) { return(LinearInterpolation(50, 17, targetFeedRate, 60, 9)); // 51 to 60 } if (targetFeedRate > 40) { return(LinearInterpolation(40, 28, targetFeedRate, 50, 17)); // 41 to 50 } if (targetFeedRate > 30) { return(LinearInterpolation(30, 42, targetFeedRate, 40, 28)); // 31 to 40 } if (targetFeedRate > 20) { return(LinearInterpolation(20, 80, targetFeedRate, 30, 42)); // 21 to 30 } if (targetFeedRate > 10) { return(LinearInterpolation(10, 170, targetFeedRate, 20, 80)); // 11 to 20 } if (targetFeedRate >= 5) { return(LinearInterpolation(5, 350, targetFeedRate, 10, 170)); // 5 to 10 } return(40); //Not used }