コード例 #1
0
 public void AssertInManualMode(Action action)
 {
     if (Machine.Mode != OperatingMode.Manual)
     {
         Machine.AddStatusMessage(StatusMessageTypes.Warning, "Machine Busy");
     }
     else
     {
         action();
     }
 }
コード例 #2
0
ファイル: HeightMap.cs プロジェクト: morrowsend/OpenCNCPilot
        public void Refresh()
        {
            Points.Clear();
            RawBoardOutline.Clear();

            RaisePropertyChanged(nameof(Points));
            RaisePropertyChanged(nameof(RawBoardOutline));

            var min      = Min;
            var max      = Max;
            var gridSize = GridSize;

            if (min.X == max.X)
            {
                _machine.AddStatusMessage(StatusMessageTypes.Warning, $"Min X must not equal Max X, both are {min.X}");
                _logger.Log(LogLevel.Warning, "HeightMap_Refresh", $"Min X must not equal Max X, both are {min.X}");
                return;
            }

            if (min.Y == max.Y)
            {
                _machine.AddStatusMessage(StatusMessageTypes.Warning, $"Min Y must not equal Max Y, both are {min.Y}");
                _logger.Log(LogLevel.Warning, "HeightMap_Refresh", $"Min Y must not equal Max Y, both are {min.Y}");
                return;
            }

            if (min.X > max.X)
            {
                _machine.AddStatusMessage(StatusMessageTypes.Warning, $"Min X [{min.X}] must be greater than Max X [{max.X}]");
                _logger.Log(LogLevel.Warning, "HeightMap_Refresh", $"Min X [{min.X}] must be greater than Max X [{max.X}]");
                return;
            }

            if (min.Y > max.Y)
            {
                _machine.AddStatusMessage(StatusMessageTypes.Warning, $"Min Y [{min.Y}] must be greater than Max Y [{max.Y}]");
                _logger.Log(LogLevel.Warning, "HeightMap_Refresh", $"Min Y [{min.Y}] must be greater than Max Y [{max.Y}]");
                return;
            }

            if (gridSize == 0)
            {
                _machine.AddStatusMessage(StatusMessageTypes.Warning, $"Grid Size must not equal to 0.");
                _logger.Log(LogLevel.Warning, "HeightMap_Refresh", $"Grid Size must not be equal to 0.");
                return;
            }

            var pointsX = (int)Math.Ceiling((max.X - min.X) / gridSize) + 1;
            var pointsY = (int)Math.Ceiling((max.Y - min.Y) / gridSize) + 1;

            if (pointsX == 0 || pointsY == 0)
            {
                _machine.AddStatusMessage(StatusMessageTypes.Warning, $"Grid Size too large for board size.");
                _logger.Log(LogLevel.Warning, "HeightMap_Refresh", $"Grid Size too large for board size..");
                return;
            }

            SizeX = pointsX;
            SizeY = pointsY;

            for (var x = 0; x < SizeX; x++)
            {
                for (var y = 0; y < SizeY; y++)
                {
                    var xPosition = (x * (Max.X - Min.X)) / (SizeX - 1) + Min.X;
                    var yPosition = (y * (Max.Y - Min.Y)) / (SizeY - 1) + Min.Y;

                    Points.Add(new HeightMapProbePoint()
                    {
                        XIndex = x, YIndex = y, Point = new Vector3(xPosition, yPosition, 0), Status = HeightMapProbePointStatus.NotProbed
                    });
                }
            }

            RawBoardOutline.Add(Line3D.Create(Min.X, Min.Y, 0, Min.X, Max.Y, 0));
            RawBoardOutline.Add(Line3D.Create(Min.X, Max.Y, 0, Max.X, Max.Y, 0));
            RawBoardOutline.Add(Line3D.Create(Max.X, Max.Y, 0, Max.X, Min.Y, 0));
            RawBoardOutline.Add(Line3D.Create(Max.X, Min.Y, 0, Min.X, Min.Y, 0));

            RaisePropertyChanged(nameof(RawBoardOutline));
            RaisePropertyChanged(nameof(Points));
            RaisePropertyChanged(nameof(Min));
            RaisePropertyChanged(nameof(Max));

            Initialized = true;
        }
コード例 #3
0
        public void Timer_Tick(object state)
        {
            switch (_state)
            {
            case BoardAlignmentManagerStates.StabilzingAfterFirstFiducialMove:
            case BoardAlignmentManagerStates.StabilzingAfterSecondFiducialMove:
            case BoardAlignmentManagerStates.EvaluatingInitialAlignment:
                /*
                 * This is after the move has stabilzed and we are looking for circle with
                 * an in tolerance center point.  If this times out there could be too
                 * much noise coming from the vision center OR it's not locating the fiducial
                 */
                if ((DateTime.Now - _lastEvent).TotalSeconds > 5)
                {
                    _timer.Change(Timeout.Infinite, Timeout.Infinite);
                    _machine.AddStatusMessage(StatusMessageTypes.FatalError, "TimeedOut - Board Alignment: " + State.ToString());
                    State = BoardAlignmentManagerStates.TimedOut;
                    _machine.SetMode(OperatingMode.Manual);
                    _targetLocation = null;
                }
                break;

            case BoardAlignmentManagerStates.CenteringSecondFiducial:
            case BoardAlignmentManagerStates.CenteringFirstFiducial:
                if ((DateTime.Now - _lastEvent).TotalSeconds > 5)
                {
                    _timer.Change(Timeout.Infinite, Timeout.Infinite);
                    _machine.AddStatusMessage(StatusMessageTypes.FatalError, "TimeedOut - Board Alignment: " + State.ToString());
                    State = BoardAlignmentManagerStates.TimedOut;
                    _machine.SetMode(OperatingMode.Manual);
                    _targetLocation = null;
                }
                break;

            case BoardAlignmentManagerStates.MovingToSecondFiducial:
                if ((DateTime.Now - _lastEvent).TotalSeconds > 5)
                {
                    _timer.Change(Timeout.Infinite, Timeout.Infinite);
                    _machine.AddStatusMessage(StatusMessageTypes.FatalError, "TimeedOut - Board Alignment: " + State.ToString());
                    State = BoardAlignmentManagerStates.TimedOut;
                    _machine.SetMode(OperatingMode.Manual);
                    _targetLocation = null;
                }
                break;
            }
        }