コード例 #1
0
        public Drill()
        {
            string storage = Storage;

            Runtime.UpdateFrequency = UpdateFrequency.Update1;
            if (storage != null)
            {
                byte[] data = Convert.FromBase64String(storage);
                if (data.Length == (sizeof(byte) + sizeof(double) + sizeof(byte)))
                {
                    try
                    {
                        EDrillState drill_state           = (EDrillState)(data[0]);
                        double      elapsed_time          = BitConverter.ToDouble(data, 1);
                        bool        is_straight_extending = (data[9] & 0x1) == 0x1;
                        bool        is_sideways_extending = (data[9] & 0x2) == 0x2;
                        drillState          = drill_state;
                        elapsedTime         = elapsed_time;
                        isStraightExtending = is_straight_extending;
                        isSidewaysExtending = is_sideways_extending;
                    }
                    catch (Exception e)
                    {
                        Echo(e.ToString());
                    }
                }
                Storage = string.Empty;
            }
            Refresh();
        }
コード例 #2
0
        public void Main(string argument, UpdateType updateSource)
        {
            switch (argument.Trim().ToLower())
            {
            case "refresh":
                Refresh();
                break;

            case "start":
            case "restart":
                drillState = EDrillState.InitializeVertical;
                break;

            case "stop":
                drillState = EDrillState.FinishVertical;
                break;
            }
            switch (drillState)
            {
            case EDrillState.InitializeVertical:
                SetDrillsState(false);
                if (MovePistonGroup(EPistonGroupType.Vertical, -Math.Abs(guideSpeed)))
                {
                    drillState = EDrillState.InitializeSideways;
                }
                break;

            case EDrillState.InitializeSideways:
                SetDrillsState(false);
                if (MovePistonGroup(EPistonGroupType.Sideways, -Math.Abs(guideSpeed)))
                {
                    drillState = EDrillState.InitializeStraight;
                }
                break;

            case EDrillState.InitializeStraight:
                SetDrillsState(false);
                if (MovePistonGroup(EPistonGroupType.Straight, -Math.Abs(guideSpeed)))
                {
                    drillState = EDrillState.OperationStraight;
                }
                break;

            case EDrillState.OperationStraight:
                SetDrillsState(true);
                if (MovePistonGroup(EPistonGroupType.Straight, isStraightExtending ? Math.Abs(operationalSpeed) : -Math.Abs(operationalSpeed)))
                {
                    drillState  = (IsPistonGroupFinished(EPistonGroupType.Vertical, true) ? EDrillState.FinishVertical : (IsPistonGroupFinished(EPistonGroupType.Sideways, isSidewaysExtending) ? EDrillState.OperationVertical : EDrillState.OperationSideways));
                    elapsedTime = 0.0;
                }
                break;

            case EDrillState.OperationSideways:
                elapsedTime += Runtime.TimeSinceLastRun.TotalSeconds;
                SetDrillsState(true);
                if (MovePistonGroup(EPistonGroupType.Sideways, isSidewaysExtending ? Math.Abs(operationalSpeed) : -Math.Abs(operationalSpeed)) || (elapsedTime >= adjustmentTime))
                {
                    StopPistonGroup(EPistonGroupType.Sideways);
                    drillState          = EDrillState.OperationStraight;
                    isStraightExtending = !isStraightExtending;
                    elapsedTime         = 0.0;
                }
                break;

            case EDrillState.OperationVertical:
                elapsedTime += Runtime.TimeSinceLastRun.TotalSeconds;
                SetDrillsState(true);
                if (MovePistonGroup(EPistonGroupType.Vertical, Math.Abs(operationalSpeed)) || (elapsedTime >= adjustmentTime))
                {
                    StopPistonGroup(EPistonGroupType.Vertical);
                    drillState          = EDrillState.OperationStraight;
                    isSidewaysExtending = !isSidewaysExtending;
                    isStraightExtending = !isStraightExtending;
                    elapsedTime         = 0.0;
                }
                break;

            case EDrillState.FinishVertical:
                SetDrillsState(false);
                if (MovePistonGroup(EPistonGroupType.Vertical, -Math.Abs(guideSpeed)))
                {
                    drillState = EDrillState.FinishSideways;
                }
                break;

            case EDrillState.FinishSideways:
                SetDrillsState(false);
                if (MovePistonGroup(EPistonGroupType.Sideways, -Math.Abs(guideSpeed)))
                {
                    drillState = EDrillState.FinishStraight;
                }
                break;

            case EDrillState.FinishStraight:
                SetDrillsState(false);
                if (MovePistonGroup(EPistonGroupType.Straight, -Math.Abs(guideSpeed)))
                {
                    drillState          = EDrillState.Nothing;
                    isStraightExtending = true;
                    isSidewaysExtending = true;
                }
                break;
            }
        }