public bool ShouldShow(eAppState appState) { if (EnabledStates.Count == 0) { return(true); } return(EnabledStates.Contains(appState)); }
/// <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; } }
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; } }
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 }
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); }
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; } }
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 }
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; }