public bool ShouldShow(eAppState appState)
        {
            if (EnabledStates.Count == 0)
            {
                return(true);
            }

            return(EnabledStates.Contains(appState));
        }
Example #2
0
        /// <summary>
        /// init PLC memory
        /// </summary>
        public void initPLC()
        {
            if (m_CurPLCState == ePLCState.NONE)
            {
                m_byaInputMemory  = new byte[MAX_PLC_MEMORY];
                m_byaOutputMemory = new byte[MAX_PLC_MEMORY];
                m_byaMarkerMemory = new byte[MAX_PLC_MEMORY];

                m_byaStackMemory = new byte[MAX_STACK_MEMORY];

                Console.SetWindowSize(150, 50);

                m_CurPLCState = ePLCState.INIT;
                m_CurAppState = eAppState.MENU;
            }
        }
Example #3
0
        private void showVisu()
        {
            if (!m_bVisuLoaded || m_CurPLCState != ePLCState.RUN && false)
            {
                return;
            }

            if (m_CurAppState != eAppState.VISU || !m_bVisuRun)
            {
                m_CurAppState = eAppState.MENU;
                return;
            }

            //Console.Clear();
            Console.SetCursorPosition(0, 0);
            string tmp = "";

            int oldRow = 0, rowSpace = 0, colSpace = 0;

            foreach (VisuBlock vb in m_VisuBlocks)
            {
                int row = vb.Row * FIELD_HIGHT;
                int col = vb.Column * FIELD_WIDTH;

                if (row != 0)
                {
                    if (row != oldRow)
                    {
                        rowSpace++;
                    }

                    row   += rowSpace;
                    oldRow = row;
                }

                if (col != 0)
                {
                    colSpace++;
                    col += colSpace;
                }
                else
                {
                    colSpace = 0;
                }

                tmp = vb.Name.PadRight(FIELD_WIDTH, ' ');
                Console.SetCursorPosition(col, row);
                Console.BackgroundColor = ConsoleColor.Blue;
                Console.Write(tmp);
                Console.SetCursorPosition(col, row + 1);
                Console.Write(FIELD_SEPERATOR);
                Console.SetCursorPosition(col, row + 2);
                if (vb.Flags == 0x80)
                {
                    tmp = "";
                    byte[] result = getValue(vb.MemLocation, true);
                    foreach (byte b in result)
                    {
                        tmp += b + " ";
                    }
                }
                else
                {
                    tmp = getValue(vb.MemLocation).ToString().PadRight(FIELD_WIDTH, ' ');
                }
                Console.Write(tmp);
                Console.BackgroundColor = ConsoleColor.Black;
            }
        }
Example #4
0
        private void ProcessChoice(int choice, ref bool run)
        {
            // General keyboard actions
            if (Keyboard.instance.isUp(Keys.Escape))
            {
                if (m_CurAppState == eAppState.MENU)
                {
                    run = false;
                }
                else if (m_CurAppState == eAppState.VISU && m_bVisuRun)
                {
                    m_bVisuRun = false;
                }
            }

            // Visu keys for input (I0.0-I0.7)
            #region INPUT KEYS
            if (m_CurAppState == eAppState.VISU)
            {
                byte IB0 = m_byaInputMemory[0];

                byte[] IB0asBits = new byte[8];
                for (int i = 0; i < IB0asBits.Length; i++)
                {
                    IB0asBits[i] = (byte)((IB0 & CPUBasic.BITVALUES[i]) >> (i));
                }

                IB0 = 0;
                if (Keyboard.instance.isPress(Keys.LShiftKey))
                {
                    for (int k = 0; k < m_InputKeys.Length; k++)
                    {
                        if (Keyboard.instance.isDown(m_InputKeys[k]))
                        {
                            IB0asBits[k] = (byte)(1 - IB0asBits[k]);
                        }
                    }
                }
                else
                {
                    for (int k = 0; k < m_InputKeys.Length; k++)
                    {
                        if (Keyboard.instance.isDown(m_InputKeys[k]))
                        {
                            IB0asBits[k] = 1;
                        }
                        else if (Keyboard.instance.isUp(m_InputKeys[k]))
                        {
                            IB0asBits[k] = 0;
                        }
                    }
                }
                for (int i = 0; i < IB0asBits.Length; i++)
                {
                    IB0 |= (byte)(IB0asBits[i] << (i));
                }

                m_byaInputMemory[0] = IB0;
            }
            #endregion

            // only if we are in the main menu
            if (m_CurAppState != eAppState.MENU)
            {
                return;
            }

            #region MAIN MENU
            if (Keyboard.instance.isDown(Keys.Enter))
            {
                switch ((eAbleTo)choice)
                {
                case eAbleTo.LOAD:
                    loadPLC();
                    break;

                case eAbleTo.LOADVISU:
                    loadVisu();
                    break;

                case eAbleTo.SHOWVISU:
                    m_bVisuRun    = true;
                    m_CurAppState = eAppState.VISU;
                    break;

                case eAbleTo.SHOWBLOCK:
                    showLoadedBlocks();
                    break;

                case eAbleTo.STOP:
                    stopPLC();
                    break;

                case eAbleTo.PAUSE:
                    pausePLC();
                    break;

                case eAbleTo.RUN:
                    startPLC();
                    break;

                case eAbleTo.RESUME:
                    resumePLC();
                    break;

                case eAbleTo.RESET:
                    resetPLC();
                    break;

                case eAbleTo.ERASE:
                    erasePLC();
                    break;

                case eAbleTo.INFO:
                    showInfo();
                    break;

                case eAbleTo.EXIT:
                    run = false;
                    break;
                }
            }
            #endregion
        }
Example #5
0
        public bool runPLCMenu()
        {
            initPLC();

            int iChoice   = 0;
            int minChoice = 0;
            int maxChoice = Enum.GetNames(typeof(eAbleTo)).Count() - 1;

            bool[] isAbleTo = new bool[maxChoice + 1];
            for (int i = 0; i < isAbleTo.Length; i++)
            {
                isAbleTo[i] = true;
            }

            string[] sMenuEntrys =
            {
                "LOAD   PLC-PROGRAM",
                "RUN    PLC-PROGRAM",
                "STOP   PLC-PROGRAM",
                "PAUSE  PLC-PROGRAM",
                "RESUME PLC-PROGRAM",
                "RESET  PLC-PROGRAM",
                "ERASE  PLC-PROGRAM",
                "LOAD   PLC-VISU",
                "SHOW   PLC-DATA",
                "SHOW   PLC-BLOCKS",
                "INFO",
                "EXIT         [ESC]",
            };

            Keyboard.instance.registerKey(Keys.Escape);
            Keyboard.instance.registerKey(Keys.Enter);
            Keyboard.instance.registerKey(Keys.Up);
            Keyboard.instance.registerKey(Keys.Down);
            Keyboard.instance.registerKey(Keys.LShiftKey);

            foreach (Keys k in m_InputKeys)
            {
                Keyboard.instance.registerKey(k);
            }

            bool bRun = true;

            while (bRun)
            {
                Keyboard.instance.update();

                if (m_CurAppState != m_OldAppState)
                {
                    Console.Clear();
                }

                if (m_CurPLCState != m_OldPLCState)
                {
                    Console.Clear();
                }

                m_OldAppState = m_CurAppState;
                m_OldPLCState = m_CurPLCState;

                if (m_CurAppState == eAppState.MENU)
                {
                    AbleTo(ref isAbleTo);

                    Choice(ref iChoice, isAbleTo, minChoice, maxChoice);

                    DrawMenu(iChoice, isAbleTo, maxChoice, sMenuEntrys);
                }
                else if (m_CurAppState == eAppState.VISU)
                {
                    showVisu();
                }

                ProcessChoice(iChoice, ref bRun);

                runPLC();

                showPLCState();


                System.Threading.Thread.Sleep(100);
            }

            return(false);
        }
Example #6
0
        private void showVisu()
        {
            if (!m_bVisuLoaded || m_CurPLCState != ePLCState.RUN && false)
                return;
            
            if (m_CurAppState != eAppState.VISU || !m_bVisuRun)
            {
                m_CurAppState = eAppState.MENU;
                return;
            }

            //Console.Clear();
            Console.SetCursorPosition(0, 0);
            string tmp = "";

            int oldRow = 0, rowSpace = 0, colSpace = 0;
            foreach (VisuBlock vb in m_VisuBlocks)
            {
                int row = vb.Row * FIELD_HIGHT;
                int col = vb.Column * FIELD_WIDTH;

                if (row != 0)
                {
                    if (row != oldRow)
                        rowSpace++;

                    row += rowSpace;
                    oldRow = row;
                }
                
                if (col != 0)
                {
                    colSpace++;
                    col += colSpace;
                }
                else
                {
                    colSpace = 0;
                }

                tmp = vb.Name.PadRight(FIELD_WIDTH, ' ');
                Console.SetCursorPosition(col, row);
                Console.BackgroundColor = ConsoleColor.Blue;
                Console.Write(tmp);
                Console.SetCursorPosition(col, row + 1);
                Console.Write(FIELD_SEPERATOR);
                Console.SetCursorPosition(col, row + 2);
                if (vb.Flags == 0x80)
                {
                    tmp = "";
                    byte[] result = getValue(vb.MemLocation, true);
                    foreach (byte b in result)
                        tmp += b + " ";
                }
                else
                {
                    tmp = getValue(vb.MemLocation).ToString().PadRight(FIELD_WIDTH, ' ');
                }
                Console.Write(tmp);
                Console.BackgroundColor = ConsoleColor.Black;

            }
        }
Example #7
0
        private void ProcessChoice(int choice, ref bool run)
        {
            // General keyboard actions
            if (Keyboard.instance.isUp(Keys.Escape))
            {
                if (m_CurAppState == eAppState.MENU)
                    run = false;
                else if (m_CurAppState == eAppState.VISU && m_bVisuRun)
                    m_bVisuRun = false;
            }

            // Visu keys for input (I0.0-I0.7)
            #region INPUT KEYS
            if (m_CurAppState == eAppState.VISU)
            {
                byte IB0 = m_byaInputMemory[0];

                byte[] IB0asBits = new byte[8];
                for (int i = 0; i < IB0asBits.Length; i++)
                    IB0asBits[i] = (byte)((IB0 & CPUBasic.BITVALUES[i]) >> (i));

                IB0 = 0;
                if (Keyboard.instance.isPress(Keys.LShiftKey))
                {
                    for (int k = 0; k < m_InputKeys.Length; k++)
                    {
                        if (Keyboard.instance.isDown(m_InputKeys[k]))
                        {
                            IB0asBits[k] = (byte)(1 - IB0asBits[k]);
                        }
                    }
                }
                else
                {
                    for (int k = 0; k < m_InputKeys.Length; k++)
                    {
                        if (Keyboard.instance.isDown(m_InputKeys[k]))
                        {
                            IB0asBits[k] = 1;
                        }
                        else if (Keyboard.instance.isUp(m_InputKeys[k]))
                        {
                            IB0asBits[k] = 0;
                        }
                    }
                }
                for (int i = 0; i < IB0asBits.Length; i++)
                    IB0 |= (byte)(IB0asBits[i] << (i));

                m_byaInputMemory[0] = IB0;
            }
            #endregion

            // only if we are in the main menu
            if (m_CurAppState != eAppState.MENU)
                return;

            #region MAIN MENU
            if (Keyboard.instance.isDown(Keys.Enter))
            {
                switch ((eAbleTo)choice)
                {
                    case eAbleTo.LOAD:
                        loadPLC();
                        break;

                    case eAbleTo.LOADVISU:
                        loadVisu();
                        break;

                    case eAbleTo.SHOWVISU:
                        m_bVisuRun = true;
                        m_CurAppState = eAppState.VISU;
                        break;

                    case eAbleTo.SHOWBLOCK:
                        showLoadedBlocks();
                        break;

                    case eAbleTo.STOP:
                        stopPLC();
                        break;

                    case eAbleTo.PAUSE:
                        pausePLC();
                        break;

                    case eAbleTo.RUN:
                        startPLC();
                        break;

                    case eAbleTo.RESUME:
                        resumePLC();
                        break;

                    case eAbleTo.RESET:
                        resetPLC();
                        break;

                    case eAbleTo.ERASE:
                        erasePLC();
                        break;

                    case eAbleTo.INFO:
                        showInfo();
                        break;

                    case eAbleTo.EXIT:
                        run = false;
                        break;
                }
            }
            #endregion
        }
Example #8
0
        public bool runPLCMenu()
        {
            initPLC();

            int iChoice = 0;
            int minChoice = 0;
            int maxChoice = Enum.GetNames(typeof(eAbleTo)).Count() - 1;
            bool[] isAbleTo = new bool[maxChoice + 1];
            for (int i = 0; i < isAbleTo.Length; i++ )
                isAbleTo[i] = true;

            string[] sMenuEntrys = {
                                       "LOAD   PLC-PROGRAM",
                                       "RUN    PLC-PROGRAM",
                                       "STOP   PLC-PROGRAM",
                                       "PAUSE  PLC-PROGRAM",
                                       "RESUME PLC-PROGRAM",
                                       "RESET  PLC-PROGRAM",
                                       "ERASE  PLC-PROGRAM",
                                       "LOAD   PLC-VISU",
                                       "SHOW   PLC-DATA",
                                       "SHOW   PLC-BLOCKS",
                                       "INFO",
                                       "EXIT         [ESC]",
                                   };

            Keyboard.instance.registerKey(Keys.Escape);
            Keyboard.instance.registerKey(Keys.Enter);
            Keyboard.instance.registerKey(Keys.Up);
            Keyboard.instance.registerKey(Keys.Down);
            Keyboard.instance.registerKey(Keys.LShiftKey);

            foreach (Keys k in m_InputKeys)
                Keyboard.instance.registerKey(k);

            bool bRun = true;
            while (bRun)
            {
                Keyboard.instance.update();

                if (m_CurAppState != m_OldAppState)
                    Console.Clear();

                if (m_CurPLCState != m_OldPLCState)
                    Console.Clear();

                m_OldAppState = m_CurAppState;
                m_OldPLCState = m_CurPLCState;

                if (m_CurAppState == eAppState.MENU)
                {
                    AbleTo(ref isAbleTo);

                    Choice(ref iChoice, isAbleTo, minChoice, maxChoice);

                    DrawMenu(iChoice, isAbleTo, maxChoice, sMenuEntrys);
                }
                else if (m_CurAppState == eAppState.VISU)
                {
                    showVisu();
                }

                ProcessChoice(iChoice, ref bRun);
                
                runPLC();

                showPLCState();


                System.Threading.Thread.Sleep(100);
            }

            return false;
        }
Example #9
0
        /// <summary>
        /// init PLC memory
        /// </summary>
        public void initPLC()
        {
            if (m_CurPLCState == ePLCState.NONE)
            {
                m_byaInputMemory = new byte[MAX_PLC_MEMORY];
                m_byaOutputMemory = new byte[MAX_PLC_MEMORY];
                m_byaMarkerMemory = new byte[MAX_PLC_MEMORY];

                m_byaStackMemory = new byte[MAX_STACK_MEMORY];

                Console.SetWindowSize(150, 50);

                m_CurPLCState = ePLCState.INIT;
                m_CurAppState = eAppState.MENU;    
            }
        }