コード例 #1
0
        private void RoofAnimation_drawStoped()
        {
            //check hardware status sync mode
            ObsControl.ASCOMDome.CheckDomeShutterStatus();
            ShutterState curShutState = ObsControl.ASCOMDome.curShutterStatus;

            if ((curShutState == ShutterState.shutterOpening) || (curShutState == ShutterState.shutterClosing))
            {
                rectRoof.Left = ROOF_startPos.X + Convert.ToInt16(Math.Round((double)ROOF_endPos / 2));
                if (prev_direction == "open")
                {
                    btnCloseRoof.Enabled = true;
                    btnOpenRoof.Enabled  = false;
                    btnStopRoof.Enabled  = false;
                }
                else if (prev_direction == "close")
                {
                    btnCloseRoof.Enabled = false;
                    btnOpenRoof.Enabled  = true;
                    btnStopRoof.Enabled  = false;
                }
            }
            else if (curShutState == ShutterState.shutterOpen)
            {
                RoofAnimation_drawOpened();
            }
            else if (curShutState == ShutterState.shutterClosed)
            {
                RoofAnimation_drawClosed();
            }
        }
コード例 #2
0
 public void CloseShutter()
 {
     //tl.LogMessage("CloseShutter", "Shutter has been closed");
     //因为遥控按钮按一次继电器接通,再按一次继电器断开,无法知道现在处于什么状态
     //为了确保能够关闭,这里先点击一次StopRoof,因为互锁,除了Stop外其他继电器都会断开,然后在CloseRoof
     //if (Slewing) return;
     //StopRoof();//由于遥控保持3秒,调用stop后无法执行close
     //System.Threading.Thread.Sleep(1000);
     if (MyShutterState != ShutterState.shutterClosing)//不能重复发,重复发就会停止
     {
         if (BrakeTime > 0)
         {
             Locked = 1;//假定刹车时刹住的
             UnlockRoof();
         }
         else
         {
             CloseRoof();
         }
         //domeShutterState = false;
         MyShutterState = ShutterState.shutterClosing;
         OperTime       = 0;
         Aborted        = false;
     }
 }
コード例 #3
0
        /// <summary>
        /// Get shutter status
        /// </summary>
        private ShutterState getDomeShutterStatus()
        {
            //Log enter
            Logging.AddLog(MethodBase.GetCurrentMethod().Name + " enter", LogLevel.Trace);


            //if device present at all and its ID is set
            if (Enabled && DRIVER_NAME != "" && this.Connect == true)
            {
                try
                {
                    curShutterStatus = objDome.ShutterStatus;
                }
                catch (Exception ex)
                {
                    curShutterStatus = ShutterState.shutterError;
                    Connected_flag   = false;
                    Logging.AddLog("Couldn't get shutter state", LogLevel.Important, Highlight.Error);
                    Logging.AddLog(MethodBase.GetCurrentMethod().Name + "error! [" + ex.ToString() + "]", LogLevel.Important, Highlight.Error);
                }
            }
            else
            {
                curShutterStatus = ShutterState.shutterError;
                Connected_flag   = false;
                //Print if somebody try to connect if device isn't presetn. Mostly for debug
                Logging.AddLog("Dome is not set. Couldn't return status of shutter", LogLevel.Debug, Highlight.Error);
            }

            Logging.AddLog(System.Reflection.MethodBase.GetCurrentMethod().Name + ": " + curShutterStatus, LogLevel.Trace);
            return(curShutterStatus);
        }
コード例 #4
0
 public void HardwareStatusReceived(IShutterStatus status)
 {
     Logger.Info().Message("Shutter status {status}", status).Write();
     ShutterStatus = status;
     UpdateStatus(status);
     ShutterState.StatusUpdateReceived(status);
 }
コード例 #5
0
        private string FormatShutterPosition(DomeManager mgr)
        {
            string       position      = "Unknown";
            ShutterState shutterStatus = this.ShutterStatus;
            double       fractionOpen  = (mgr.Capabilities.CanSetAltitude) ? this.Altitude / 90.0 : Double.NaN;
            bool         useFraction   = (!Double.IsNaN(fractionOpen));

            switch (shutterStatus)
            {
            case ShutterState.shutterClosed:
                position = "Closed";
                break;

            case ShutterState.shutterClosing:
                position = "Closing" + ((useFraction) ? String.Format(" at {0:P0}", fractionOpen) : "");
                break;

            case ShutterState.shutterError:
                position = "Unknown";
                break;

            case ShutterState.shutterOpen:
                position = "Open" + ((useFraction) ? String.Format(" at {0:P0}", fractionOpen) : "");
                break;

            case ShutterState.shutterOpening:
                position = "Opening" + ((useFraction) ? String.Format(" at {0:P0}", fractionOpen) : "");

                break;
            }

            return(position);
        }
コード例 #6
0
        public void Stop(string reason)
        {
            ShutterState prev          = State;
            bool         openPinWasOn  = openPin.isOn;
            bool         closePinWasOn = closePin.isOn;

            if (openPinWasOn || closePinWasOn)
            {
                openPin.SetOff();
                closePin.SetOff();
                activityMonitor.EndActivity(ActivityMonitor.ActivityType.Shutter, new Activity.ShutterActivity.EndParams()
                {
                    endState    = Activity.State.Succeeded,
                    endReason   = reason,
                    percentOpen = PercentOpen,
                });
                webClient.SetPacing(WebClient.Pacing.Slow);
                #region debug
                debugger.WriteLine(Debugger.DebugLevel.DebugShutter,
                                   "Stop: was moving (openPin: {0}, closePin: {1})",
                                   openPinWasOn.ToString(), closePinWasOn.ToString());
                #endregion
            }
            else
            {
                #region debug
                debugger.WriteLine(Debugger.DebugLevel.DebugShutter,
                                   "Stop: was NOT moving.");
                #endregion
            }
        }
コード例 #7
0
        void domeMovingTimer_Elapsed(object sender, ElapsedEventArgs e)
        {
            sysLog.LogMessageCrLf("domeMovingTimer_Elapsed()", "domeMovingTimer_Elapsed.");

            this.Read_ZREG_O1XT1();
            sysLog.LogMessageCrLf("domeMovingTimer_Elapsed()", "shutterStatus=" + shutterStatus);

            if ((shutterStatus == ShutterState.shutterClosing) && (this.IsClosed()))
            {
                sysLog.LogMessageCrLf("domeMovingTimer_Elapsed()", "shutterClosing->shutterClosed.");
                this.shutterStatus = ShutterState.shutterClosed;
                //if (this.domeMovingTimer.Enabled)
                {
                    this.domeMovingTimer.Stop();
                }
            }
            if ((shutterStatus == ShutterState.shutterOpening) && (this.IsOpened() >= 2))
            {
                sysLog.LogMessageCrLf("domeMovingTimer_Elapsed()", "shutterOpening->IsOpened.");
                this.shutterStatus = ShutterState.shutterOpen;
                if (this.domeMovingTimer.Enabled)
                {
                    this.domeMovingTimer.Stop();
                }
            }
            //Console.WriteLine("domeMovingTimer_Elapsed");
        }
コード例 #8
0
        public static void HW_OpenShutter()
        {
            // Ensure that the Alt stays in bounds
            if (g_dMinAlt > g_dDomeAlt)
            {
                g_dTargetAlt = g_dMinAlt;
                g_dDomeAlt   = g_dMinAlt;
            }

            if (g_dMaxAlt < g_dDomeAlt)
            {
                g_dTargetAlt = g_dMaxAlt;
                g_dDomeAlt   = g_dMaxAlt;
            }

            if (g_eShutterState == ShutterState.Open)
            {
                return;
            }

            if (g_eShutterState == ShutterState.Error)
            {
                return;
            }

            g_dOCProgress   = g_dOCDelay;
            g_eShutterState = ShutterState.Opening;
        }
コード例 #9
0
    // Update is called once per frame
    void Update()
    {
        switch (snapState)
        {
        //grow the shutters until they take up the full screen
        case ShutterState.Closing:
            topBar.sizeDelta    = new Vector2(canvas.pixelRect.width, topBar.rect.height + shutterSpeed);
            bottomBar.sizeDelta = new Vector2(canvas.pixelRect.width, topBar.rect.height + shutterSpeed);
            if (topBar.rect.height >= canvas.pixelRect.height || bottomBar.rect.height >= canvas.pixelRect.height)
            {
                snapState = ShutterState.Opening;
            }
            break;

        //shrink the shutters until they are no longer visible
        case ShutterState.Opening:
            topBar.sizeDelta    = new Vector2(canvas.pixelRect.width, topBar.rect.height - shutterSpeed);
            bottomBar.sizeDelta = new Vector2(canvas.pixelRect.width, topBar.rect.height - shutterSpeed);
            if (topBar.rect.height <= 0 || bottomBar.rect.height <= 0)
            {
                snapState = ShutterState.Still;
            }
            break;

        //do nothing
        case ShutterState.Still:
            break;
        }
    }
コード例 #10
0
 public void ShutterDirectionReceived(ShutterDirection direction)
 {
     if (direction == ShutterDirection.Closing || direction == ShutterDirection.Opening)
     {
         ShutterMovementDirection = direction;
     }
     ShutterState.ShutterDirectionReceived(direction);
 }
コード例 #11
0
ファイル: ShuttersModel.cs プロジェクト: 6a/robot-rumble
        public void SetState(ShutterState state, bool shake = true)
        {
            if (state != State)
            {
                State = state;

                EventDispatcher.Broadcast(StateChanged, State, shake);
            }
        }
コード例 #12
0
        public static void HW_CloseShutter()
        {
            if (g_eShutterState == ShutterState.Closed)
            {
                return;
            }

            g_dOCProgress   = g_dOCDelay;
            g_eShutterState = ShutterState.Closing;
        }
コード例 #13
0
ファイル: Driver.cs プロジェクト: lukepower/HakosRoof
        public void OpenShutter()
        {
            CallResult result = SendRequest(ActionCodes.openRoof);

            if (result.returnCode == ReturnCodes.roofError || result.returnCode == ReturnCodes.commandError)
            {
                domeShutterState = ShutterState.shutterError;
                tl.LogMessage("OpenShutter", "Shutter error while asking to open");
            }

            tl.LogMessage("OpenShutter", "Shutter has been asked to open");
        }
コード例 #14
0
 public void CloseGate()
 {
     if (m_currentState == ShutterState.Closed)
     {
         return;
     }
     transform.DOMove(m_closePosition, m_openCloseSpeed).OnComplete(() => { if (m_onShutterClose != null)
                                                                            {
                                                                                m_onShutterClose.Invoke();
                                                                            }
                                                                    });
     m_currentState = ShutterState.Closed;
 }
コード例 #15
0
 public void OpenGate()
 {
     if (m_currentState == ShutterState.Opened)
     {
         return;
     }
     transform.DOMove(m_openPosition, m_openCloseSpeed).OnComplete(() => { if (m_onShutterOpen != null)
                                                                           {
                                                                               m_onShutterOpen.Invoke();
                                                                           }
                                                                   });;
     m_currentState = ShutterState.Opened;
 }
コード例 #16
0
 public static void HW_MoveShutter(double Alt)
 {
     // If the shutter is opening or closing, then cause it to jam
     if (g_dOCProgress > 0)
     {
         g_dOCProgress   = 0;
         g_eShutterState = ShutterState.Error;
     }
     else
     {
         g_dTargetAlt = Alt;
     }
 }
コード例 #17
0
        /// <summary>
        /// Invocar cuando en la interfaz se escoja la opcion "Set Close".
        /// </summary>
        private void CloseDome()
        {
            sysLog.LogMessageCrLf("CloseDome()", "Cerrando el Domo.");
            this.shutterStatus = ShutterState.shutterClosing;
            this.domeMovingTimer.Start();
            this.deadManTimer.Stop();

            byte[] cerrar;
            cerrar    = new byte[2];
            cerrar[0] = 0;
            cerrar[1] = 0;
            this.AseguraPlcConnected();
            zelioConn.WriteSingleRegister(0, ZREG_J1XT1, cerrar);
        }
コード例 #18
0
        private void ToggleShutterState()
        {
            ShutterState state = Status.ShutterStatus;

            switch (state)
            {
            case ShutterState.shutterOpen:
            case ShutterState.shutterOpening:
            case ShutterState.shutterError:
                DomeManager.CloseDomeShutter();
                break;

            case ShutterState.shutterClosing:
            case ShutterState.shutterClosed:
                DomeManager.OpenDomeShutter();
                break;
            }
        }
コード例 #19
0
        private void ButtonConnect_Click(object sender, EventArgs e)
        {
            if (IsConnected)
            {
                driver.Connected = false;
            }
            else
            {
                driver = new ASCOM.DriverAccess.Dome(Properties.Settings.Default.DriverId)
                {
                    Connected = true
                };


                ShutterState state = driver.ShutterStatus;
                driver.CloseShutter();
            }
            SetUIState();
        }
コード例 #20
0
        public static void HW_Halt()
        {
            g_dTargetAlt = g_dDomeAlt;
            g_eSlewing   = Going.slewNowhere;

            // clear home / park (state is fragile in standard)
            if (g_bStandardAtPark)
            {
                g_bAtPark = false;
            }
            if (g_bStandardAtHome)
            {
                g_bAtHome = false;
            }

            // If the shutter is in motion, then cause it to jam
            if (g_dOCProgress > 0)
            {
                g_dOCProgress   = 0;
                g_eShutterState = ShutterState.Error;
            }
        }
コード例 #21
0
        public Dome()
        {
            sysLog.Enabled = true;

            sysLog.LogMessageCrLf("Dome()", "Instanciando Dome().");
            zelioConn = new Master();
            zregJ1XT1 = new Boolean[16];
            zregO1XT1 = new Boolean[16];

            northRoof     = Properties.Settings.Default.NorthOpen;
            southRoof     = Properties.Settings.Default.SouthOpen;
            shutterStatus = ShutterState.shutterClosed;
            //sysLog.LogMessageCrLf(driverDescription, "zelioConn.connected=" + zelioConn.connected);

            //Console.WriteLine("zelioConn.connected=" + zelioConn.connected);
            deadManTimer          = new System.Timers.Timer(DEADMAN_MILISECS);
            deadManStatus         = 0;
            deadManTimer.Elapsed += new ElapsedEventHandler(deadMan_Elapsed);

            domeMovingTimer          = new System.Timers.Timer(DOMESTATUS_MILISECS);
            domeMovingTimer.Elapsed += new ElapsedEventHandler(domeMovingTimer_Elapsed);
        }
コード例 #22
0
        public void OpenShutter()
        {
            tl.LogMessage("OpenShutter", "Enter");

            //Reread sensor data no matter of cache
            Hardware.getInputStatus();

            //read shutter status vars
            ShutterState dummy = ShutterStatus;

            //if (Hardware.closed_shutter_flag && !Hardware.opened_shutter_flag)
            if (!Hardware.opened_shutter_flag)
            {
                //Press switch
                tl.LogMessage("OpenShutter", "Not opened, pressing switch");

                //clear shutter status cache
                lastShutterStatusCheck = EXPIRED_CACHE;

                if (Hardware.pressRoofSwitch())
                {
                    //set moving state
                    Hardware.closed_shutter_flag = false;
                    Hardware.opened_shutter_flag = false;
                    tl.LogMessage("OpenShutter", "Moving was initiated");
                }
                else
                {
                    tl.LogMessage("OpenShutter", "Can't press switch");
                }
            }
            else if (Hardware.closed_shutter_flag)
            {
                tl.LogMessage("OpenShutter", "Skipping because already opened");
            }
            tl.LogMessage("OpenShutter", "Exit");
            domeShutterState = true;
        }
コード例 #23
0
 public void OpenShutter()
 {
     //tl.LogMessage("OpenShutter", "Shutter has been opened");
     //if (Slewing) return;
     //StopRoof();
     //System.Threading.Thread.Sleep(1000);
     if (MyShutterState != ShutterState.shutterOpening)
     {
         if (BrakeTime > 0)
         {
             Locked = 1;//假定刹车时刹住的
             UnlockRoof();
         }
         else
         {
             OpenRoof();
         }
         //domeShutterState = true;
         MyShutterState = ShutterState.shutterOpening;
         OperTime       = 0;
         Aborted        = false;
     }
 }
コード例 #24
0
        public void init()
        {
            if (_initialized)
            {
                return;
            }

            try
            {
                openPin  = new WisePin("ShutterOpen", hw.domeboard, DigitalPortType.FirstPortA, 0, DigitalPortDirection.DigitalOut, controlled: true);
                closePin = new WisePin("ShutterClose", hw.domeboard, DigitalPortType.FirstPortA, 1, DigitalPortDirection.DigitalOut, controlled: true);
            }
            catch (Exception ex)
            {
                debugger.WriteLine(Debugger.DebugLevel.DebugShutter, "WiseDomeShutter.init: Exception: {0}.", ex.Message);
            }

            try
            {
                openPin.SetOff();
                closePin.SetOff();
            }
            catch (Hardware.Hardware.MaintenanceModeException) { }

            ReadProfile();
            if (ShutterWebClientEnabled && _ipAddress != string.Empty)
            {
                webClient = new WebClient(_ipAddress, this);
            }
            shutterPins = new List <WisePin> {
                openPin, closePin
            };

            _state = ShutterState.shutterError;

            _initialized = true;
        }
コード例 #25
0
        private void SetShutterState(ShutterState state)
        {
            switch (state)
            {
            case ShutterState.Init:
                this.Visible      = true;
                loadingLabel.Text = InitMessage;
                break;

            case ShutterState.Error:
                this.Visible      = true;
                loadingLabel.Text = ErrorMessage;
                break;

            case ShutterState.Loading:
                this.Visible      = true;
                loadingLabel.Text = "Loading...";
                break;

            case ShutterState.Open:
                this.Visible = false;
                break;
            }
        }
コード例 #26
0
        /// <summary>
        /// Initiate roof closing
        /// </summary>
        /// <returns></returns>
        public bool RoofClose()
        {
            Logging.AddLog("Trying to close roof", LogLevel.Activity);

            //Check if driver is connected
            if (Connected_flag != true)
            {
                Logging.AddLog("Dome driver isn't connected", LogLevel.Important, Highlight.Error);
                return(false);
            }

            //Check if power is connected
            //if (ExtASCOMSiwitchObj != null)
            //{
            //    if (ExtASCOMSiwitchObj.Connected_flag && ExtASCOMSiwitchObj._Roof_power_flag != true)
            //    {
            //        Logging.AddLog("Roof power switched off", LogLevel.Activity);
            //        return false;
            //    }
            //}
            RoofRoutine_StartTime = DateTime.Now;

            try
            {
                //open dome
                objDome.CloseShutter();
                return(true);
            }
            catch (Exception ex)
            {
                curShutterStatus = ShutterState.shutterError;
                Logging.AddLog("Couldn't close shutter", LogLevel.Important, Highlight.Error);
                Logging.AddLog(MethodBase.GetCurrentMethod().Name + " Error! [" + ex.ToString() + "]", LogLevel.Debug, Highlight.Error);
                return(false);
            }
        }
コード例 #27
0
ファイル: ShuttersPresenter.cs プロジェクト: 6a/robot-rumble
 // Events
 private void OnShutterStateChanged(ShutterState newState, bool shake)
 {
     EventDispatcher.Broadcast(ShutterStateChanged, newState, shake);
 }
コード例 #28
0
ファイル: ShuttersPresenter.cs プロジェクト: 6a/robot-rumble
 public void SetState(ShutterState state)
 {
     Models.Get <IShuttersModel>().SetState(state);
 }
コード例 #29
0
ファイル: ShuttersPresenter.cs プロジェクト: 6a/robot-rumble
 public override void Initialize()
 {
     Models.Get <IShuttersModel>().StateChanged += OnShutterStateChanged;
     State = ShutterState.Open;
 }
コード例 #30
0
 public void ShutterEncoderTickReceived(int encoderPosition)
 {
     // The state must process the position update because it needs to make decisions based on the relative position.
     Logger.Debug().Message("").Message("Shutter position received {position}", encoderPosition).Write();
     ShutterState.EncoderTickReceived(encoderPosition);
 }