PageRenderTime 50ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/FAFramework/MainWindow.xaml.cs

https://github.com/11firecrackers/VT5061
C# | 526 lines | 448 code | 75 blank | 3 comment | 57 complexity | d7add288656a906afd1d8a546c1fc3d8 MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Windows;
  6. using System.Windows.Controls;
  7. using System.Windows.Data;
  8. using System.Windows.Documents;
  9. using System.Windows.Input;
  10. using System.Windows.Media;
  11. using System.Windows.Media.Imaging;
  12. using System.Windows.Navigation;
  13. using System.Windows.Shapes;
  14. using System.Xml.Linq;
  15. using FAFramework.Manager;
  16. using FAFramework.Forms;
  17. using FALibrary.Alarm;
  18. using System.ComponentModel;
  19. using System.Windows.Threading;
  20. using System.Diagnostics;
  21. namespace FAFramework
  22. {
  23. /// <summary>
  24. /// MainWindow.xaml에 대한 상호 작용 논리
  25. /// </summary>
  26. public partial class MainWindow : Window
  27. {
  28. private Frame _alarmFrame = new Frame();
  29. private Frame _emergencyFrame = new Frame();
  30. private Grid _mainGrid;
  31. private DebugView _debugView;
  32. private WindowUtility _windowUtility;
  33. private Forms.Main.PageMain _formMain;
  34. private Forms.Manual.PageManual _formManual;
  35. private Forms.Config.PageConfig _formConfig;
  36. private Forms.Log.PageLog _formLog;
  37. private Button _mainButton;
  38. private Button _manualButton;
  39. private Button _configButton;
  40. private Button _logButton;
  41. private Button _exitButton;
  42. private bool _lastAlarmIsRankingAlarm = false;
  43. private string _lastAlarmLotID = "";
  44. private string _lastAlarmPartID = "";
  45. private Forms.PageAlarm _pageAlarm;
  46. private Forms.PageEmergency _pageEmergency;
  47. public MainWindow()
  48. {
  49. InitializeComponent();
  50. LogManager.Instance.IsEnabledTraceLog = false;
  51. WindowSplash splash = new WindowSplash();
  52. CreatePage();
  53. splash.Show();
  54. Initialize();
  55. Manager.StringResourceManager.Instance.Refresh();
  56. splash.Close();
  57. }
  58. #region Private Methods
  59. private void CreatePage()
  60. {
  61. _debugView = new DebugView();
  62. _windowUtility = new WindowUtility();
  63. _formMain = new Forms.Main.PageMain();
  64. _formManual = new Forms.Manual.PageManual();
  65. _formConfig = new Forms.Config.PageConfig();
  66. _formLog = new Forms.Log.PageLog();
  67. }
  68. private void Initialize()
  69. {
  70. _debugView.ShowInTaskbar = false;
  71. _windowUtility.ShowInTaskbar = false;
  72. SetSubWindowKeyBinding(_debugView, Key.F1, ModifierKeys.Control);
  73. SetSubWindowKeyBinding(_windowUtility, Key.F10, ModifierKeys.Control);
  74. frameMainView.NavigationUIVisibility = NavigationUIVisibility.Hidden;
  75. _alarmFrame.NavigationUIVisibility = NavigationUIVisibility.Hidden;
  76. _emergencyFrame.NavigationUIVisibility = NavigationUIVisibility.Hidden;
  77. _mainButton = AddBottomMenuButton(GridBottomMenu, "MAIN", _formMain);
  78. _manualButton = AddBottomMenuButton(GridBottomMenu, "MANUAL", _formManual);
  79. _configButton = AddBottomMenuButton(GridBottomMenu, "CONFIG", _formConfig);
  80. _logButton = AddBottomMenuButton(GridBottomMenu, "LOG", _formLog);
  81. AddBottomMenuColumn(GridBottomMenu, 100);
  82. _exitButton = AddBottomMenuButton(GridBottomMenu, "EXIT",
  83. delegate(object sender, RoutedEventArgs e)
  84. {
  85. if (MessageBox.Show(Manager.StringResourceManager.Instance.Resource.System.PGMExit, "", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
  86. {
  87. LogManager.Instance.WriteTraceLog("TERMINATE PGM");
  88. Equipment.EquipmentManager.Instance.StopMachine();
  89. Close();
  90. }
  91. });
  92. _logButton.Click +=
  93. delegate(object sender, RoutedEventArgs e)
  94. {
  95. _formLog.OnShowEvent();
  96. };
  97. _mainGrid = (Grid)frameBase.Content;
  98. _pageAlarm = new Forms.PageAlarm();
  99. _alarmFrame.Content = _pageAlarm;
  100. _pageEmergency = new Forms.PageEmergency();
  101. _emergencyFrame.Content = _pageEmergency;
  102. _pageEmergency.Initialize();
  103. _pageEmergency.ResetEventHandler +=
  104. delegate(object sender, EventArgs e)
  105. {
  106. ShowPage(_formMain);
  107. };
  108. _pageAlarm.ClickAlarmClear += JamClear;
  109. FAAlarmManager.Instance.OnRaiseAlarm += EventHandlerOnAlarm;
  110. try
  111. {
  112. Equipment.EquipmentManager.Instance.InitializeMachine();
  113. Equipment.EquipmentManager.Instance.MainEquip.OnStatusChanged += EventHandlerStatusChanged;
  114. Equipment.EquipmentManager.Instance.MainEquip.OnUserChanged += EventHandlerUserChanged;
  115. Equipment.EquipmentManager.Instance.MainEquip.OnJamClear += JamClear;
  116. Equipment.EquipmentManager.Instance.MainEquip.OnTestModeChanged += EventHandlerTestModeChanged;
  117. }
  118. catch (Exception e)
  119. {
  120. MessageBox.Show(e.Message);
  121. Close();
  122. }
  123. try
  124. {
  125. Equipment.EquipmentManager.Instance.OnEmergency +=
  126. delegate(object sender, EventArgs e)
  127. {
  128. ShowEmergency();
  129. };
  130. Equipment.EquipmentManager.Instance.OnResetEmergency +=
  131. delegate(object sender, EventArgs e)
  132. {
  133. ShowPage(_formMain);
  134. };
  135. _debugView.AddItem(Equipment.EquipmentManager.Instance, "Main");
  136. _windowUtility.Initialize();
  137. _formMain.Initialize();
  138. _formManual.Initialize();
  139. _formConfig.Initialize();
  140. _formLog.Initialize();
  141. UIUtility.SetFocusEventHandlerToTextBox(this);
  142. }
  143. catch (Exception e)
  144. {
  145. MessageBox.Show(e.Message);
  146. Close();
  147. }
  148. try
  149. {
  150. Equipment.EquipmentManager.Instance.StartMachine();
  151. }
  152. catch (Exception e)
  153. {
  154. MessageBox.Show(e.Message);
  155. Close();
  156. return;
  157. }
  158. _configButton.IsEnabled = false;
  159. _manualButton.IsEnabled = false;
  160. Equipment.EquipmentManager.Instance.MainEquip.CurrentUser = Equipment.StandardEquipment.UserPermission.OPERATOR;
  161. LogManager.Instance.IsEnabledTraceLog = true;
  162. LogManager.Instance.WriteTraceLog("START PGM");
  163. ShowPage(_formMain);
  164. }
  165. private void ProcessAlarmOnInitializing()
  166. {
  167. Equipment.MainEquipment mainEquip = Equipment.EquipmentManager.Instance.MainEquip;
  168. mainEquip.SubSequenceManager.Suspend();
  169. mainEquip.InitialSequence.ClearState();
  170. mainEquip.InitializeEquipment.ClearState();
  171. mainEquip.VirtualAlarmStopSignal = true;
  172. }
  173. private void ProcessAlarmOnAutoRunning(FAAlarmEventArgs e)
  174. {
  175. Equipment.MainEquipment mainEquip = Equipment.EquipmentManager.Instance.MainEquip;
  176. mainEquip.SubSequenceManager.Suspend();
  177. bool autoRunning = false;
  178. bool rankingData = IsRankingData(e.Alarm);
  179. if (mainEquip.Status == Equipment.EquipmentStatus.AUTO_RUNNING)
  180. autoRunning = true;
  181. _lastAlarmIsRankingAlarm = rankingData;
  182. if (IsAbleSendAlarm(e.Alarm, rankingData))
  183. SendAlarmToECServer(e.Alarm);
  184. mainEquip.LastAlarm = e.Alarm;
  185. if (Equipment.EquipmentManager.Instance.MainEquip.TestMode == false)
  186. {
  187. LogManager.Instance.WriteAlarmLog(e.Alarm.AlarmNo.ToString() + ", " +
  188. e.Alarm.AlarmName + ", " +
  189. e.Alarm.Status.ToString() + ", " +
  190. e.Alarm.Type.ToString() + ", " +
  191. rankingData.ToString() + ", " +
  192. autoRunning.ToString() + ", " +
  193. e.Message + ", " +
  194. e.DebugInfo);
  195. Manager.LogManager.Instance.WriteTraceLog("ALARM : " + e.Alarm.AlarmNo.ToString() + ", " + e.Alarm.AlarmName);
  196. }
  197. Equipment.EquipmentManager.Instance.MainEquip.VirtualAlarmStopSignal = true;
  198. }
  199. private bool IsRankingData(FAAlarm alarm)
  200. {
  201. Equipment.MainEquipment mainEquip = Equipment.EquipmentManager.Instance.MainEquip;
  202. if (mainEquip.LastAlarm != null)
  203. {
  204. if (mainEquip.LastAlarm.AlarmNo == alarm.AlarmNo)
  205. {
  206. if ((DateTime.Now - mainEquip.StartedTime).TotalSeconds > Manager.ConfigManager.Instance.Config.JamDelay)
  207. {
  208. return true;
  209. }
  210. }
  211. else
  212. return true;
  213. }
  214. else
  215. {
  216. return true;
  217. }
  218. return false;
  219. }
  220. private void SendAlarmToECServer(FAAlarm alarm)
  221. {
  222. Equipment.MainEquipment mainEquip = Equipment.EquipmentManager.Instance.MainEquip;
  223. string lotID = Manager.ConfigManager.Instance.Config.DefaultLotID;
  224. string partID = Manager.ConfigManager.Instance.Config.DefaultPartID;
  225. if (mainEquip.InterfaceUnit.ECPart.ECInfo.LotID != "")
  226. lotID = mainEquip.InterfaceUnit.ECPart.ECInfo.LotID;
  227. if (mainEquip.InterfaceUnit.ECPart.ECInfo.PartNo != "")
  228. partID = mainEquip.InterfaceUnit.ECPart.ECInfo.PartNo;
  229. try
  230. {
  231. mainEquip.InterfaceUnit.ECPart.SendAlarmRaiseInfo(Manager.ConfigManager.Instance.Config.EquipmentID,
  232. lotID,
  233. partID,
  234. alarm.AlarmNo.ToString(),
  235. alarm.AlarmName);
  236. _lastAlarmLotID = lotID;
  237. _lastAlarmPartID = partID;
  238. }
  239. catch
  240. {
  241. }
  242. }
  243. private bool IsAbleSendAlarm(FAAlarm alarm, bool rankingData)
  244. {
  245. Equipment.MainEquipment mainEquip = Equipment.EquipmentManager.Instance.MainEquip;
  246. bool sendAlarm = false;
  247. if (ConfigManager.Instance.Config.SendAlarmDataToServer)
  248. if (alarm.Status == ConfigClasses.GlobalConst.ALARM_STATUS_ALARM)
  249. sendAlarm = true;
  250. if (ConfigManager.Instance.Config.SendWarningDataToServer)
  251. if (alarm.Status == ConfigClasses.GlobalConst.ALARM_STATUS_WARNING)
  252. sendAlarm = true;
  253. if (rankingData == true && sendAlarm)
  254. if (mainEquip.InterfaceUnit.ECPart != null)
  255. return true;
  256. return false;
  257. }
  258. private void EventHandlerOnAlarm(object sender, FAAlarmEventArgs e)
  259. {
  260. Equipment.MainEquipment mainEquip = Equipment.EquipmentManager.Instance.MainEquip;
  261. if (mainEquip.RaisedAlarm)
  262. return;
  263. mainEquip.RaisedAlarm = true;
  264. if (mainEquip.Status == Equipment.EquipmentStatus.INITIALIZING)
  265. {
  266. ProcessAlarmOnInitializing();
  267. }
  268. else if (mainEquip.Status == Equipment.EquipmentStatus.AUTO_RUNNING ||
  269. mainEquip.Status == Equipment.EquipmentStatus.RUN_DOWN)
  270. {
  271. ProcessAlarmOnAutoRunning(e);
  272. }
  273. else if (mainEquip.Status != Equipment.EquipmentStatus.AUTO_STOP &&
  274. mainEquip.Status != Equipment.EquipmentStatus.NONE)
  275. {
  276. Equipment.EquipmentManager.Instance.MainEquip.SubSequenceManager.Suspend();
  277. Equipment.EquipmentManager.Instance.MainEquip.VirtualAlarmStopSignal = true;
  278. Manager.LogManager.Instance.WriteTraceLog("ALARM : " + e.Alarm.AlarmNo.ToString() + ", " + e.Alarm.AlarmName);
  279. }
  280. _pageAlarm.SetAlarm(e.Alarm, e.Message);
  281. ShowAlarm(_pageAlarm);
  282. }
  283. private void JamClear(object sender, EventArgs e)
  284. {
  285. Equipment.MainEquipment mainEquip = Equipment.EquipmentManager.Instance.MainEquip;
  286. if (_lastAlarmIsRankingAlarm)
  287. {
  288. try
  289. {
  290. mainEquip.InterfaceUnit.ECPart.SendAlarmReleaseInfo(Manager.ConfigManager.Instance.Config.EquipmentID,
  291. _lastAlarmLotID,
  292. _lastAlarmPartID,
  293. mainEquip.LastAlarm.AlarmNo.ToString(),
  294. mainEquip.LastAlarm.AlarmName);
  295. }
  296. catch
  297. {
  298. }
  299. }
  300. mainEquip.Status = Equipment.EquipmentStatus.AUTO_STOP;
  301. ShowPage(_formMain);
  302. }
  303. private void EventHandlerStatusChanged(object sender, EventArgs e)
  304. {
  305. Equipment.MainEquipment mainEquip = Equipment.EquipmentManager.Instance.MainEquip;
  306. if (mainEquip.Status == Equipment.EquipmentStatus.AUTO_STOP ||
  307. mainEquip.Status == Equipment.EquipmentStatus.NONE)
  308. {
  309. mainEquip.RaisedAlarm = false;
  310. _exitButton.IsEnabled = true;
  311. }
  312. else
  313. {
  314. if (mainEquip.Status == Equipment.EquipmentStatus.AUTO_RUNNING)
  315. {
  316. mainEquip.CurrentUser = Equipment.StandardEquipment.UserPermission.OPERATOR;
  317. }
  318. _exitButton.IsEnabled = false;
  319. }
  320. }
  321. private void EventHandlerUserChanged(object sender, FALibrary.FAGenericEventArgs<Equipment.StandardEquipment.UserPermission> e)
  322. {
  323. if (e.Value == Equipment.StandardEquipment.UserPermission.OPERATOR)
  324. {
  325. _manualButton.IsEnabled = false;
  326. _configButton.IsEnabled = false;
  327. _exitButton.IsEnabled = false;
  328. }
  329. else
  330. {
  331. _manualButton.IsEnabled = true;
  332. _configButton.IsEnabled = true;
  333. _exitButton.IsEnabled = true;
  334. }
  335. }
  336. private void EventHandlerTestModeChanged(object sender, FALibrary.FAGenericEventArgs<bool> e)
  337. {
  338. if (e.Value == true)
  339. {
  340. Manager.LogManager.Instance.WriteTraceLog("TEST MODE ENABLE");
  341. }
  342. else
  343. {
  344. Manager.LogManager.Instance.WriteTraceLog("TEST MODE DISABLE");
  345. }
  346. }
  347. private void SetSubWindowKeyBinding(Window window, Key key, ModifierKeys modifierKey)
  348. {
  349. RoutedCommandForSubWindow command = new RoutedCommandForSubWindow(window);
  350. KeyBinding keyBinding = new KeyBinding(command, key, modifierKey);
  351. this.InputBindings.Add(keyBinding);
  352. }
  353. private Button AddBottomMenuButton(Grid grid, string caption, RoutedEventHandler eventHandler)
  354. {
  355. Button button = new Button();
  356. button.Content = caption;
  357. button.Margin = new Thickness(2, 2, 2, 2);
  358. button.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;
  359. button.VerticalAlignment = System.Windows.VerticalAlignment.Stretch;
  360. button.Width = double.NaN;
  361. button.Height = double.NaN;
  362. ColumnDefinition col = AddBottomMenuColumn(grid);
  363. grid.Children.Add(button);
  364. Grid.SetColumn(button, grid.ColumnDefinitions.Count - 1);
  365. button.FontSize = 20;
  366. button.FontWeight = FontWeights.Bold;
  367. button.FontFamily = new System.Windows.Media.FontFamily("Tahoma");
  368. button.Click += eventHandler;
  369. return button;
  370. }
  371. private Button AddBottomMenuButton(Grid grid, string caption, Page page)
  372. {
  373. RoutedEventHandler action =
  374. delegate(object sender, RoutedEventArgs e)
  375. {
  376. ShowPage(page);
  377. };
  378. Button button = AddBottomMenuButton(grid, caption, action);
  379. button.FontSize = 20;
  380. button.FontWeight = FontWeights.Bold;
  381. button.FontFamily = new System.Windows.Media.FontFamily("Tahoma");
  382. return button;
  383. }
  384. private ColumnDefinition AddBottomMenuColumn(Grid grid, int width = 0)
  385. {
  386. ColumnDefinition col = new ColumnDefinition();
  387. if (width > 0)
  388. col.Width = new GridLength(width);
  389. grid.ColumnDefinitions.Add(col);
  390. return col;
  391. }
  392. private void ShowPage(Page page)
  393. {
  394. frameBase.Visibility = System.Windows.Visibility.Hidden;
  395. gridMainGrid.Visibility = System.Windows.Visibility.Visible;
  396. frameMainView.Content = page;
  397. }
  398. private void ShowAlarm(Page page)
  399. {
  400. gridMainGrid.Visibility = System.Windows.Visibility.Hidden;
  401. frameBase.Visibility = System.Windows.Visibility.Visible;
  402. frameBase.Content = _alarmFrame;
  403. }
  404. private void ShowEmergency()
  405. {
  406. gridMainGrid.Visibility = System.Windows.Visibility.Hidden;
  407. frameBase.Visibility = System.Windows.Visibility.Visible;
  408. frameBase.Content = _emergencyFrame;
  409. }
  410. private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
  411. {
  412. _debugView.AllowClose = true;
  413. _windowUtility.AllowClose = true;
  414. _debugView.Close();
  415. _windowUtility.Close();
  416. }
  417. #endregion
  418. }
  419. class RoutedCommandForSubWindow : ICommand
  420. {
  421. public Window SubWindow { get; set; }
  422. public event EventHandler CanExecuteChanged = null;
  423. public RoutedCommandForSubWindow()
  424. {
  425. }
  426. public RoutedCommandForSubWindow(Window window)
  427. {
  428. SubWindow = window;
  429. }
  430. public bool CanExecute(Object parameter)
  431. {
  432. if (SubWindow == null)
  433. return false;
  434. else
  435. {
  436. if (CanExecuteChanged != null)
  437. CanExecuteChanged(this, new EventArgs());
  438. return true;
  439. }
  440. }
  441. public void Execute(Object parameter)
  442. {
  443. if (SubWindow != null)
  444. {
  445. SubWindow.Show();
  446. if (SubWindow.IsActive == false)
  447. SubWindow.Activate();
  448. }
  449. }
  450. }
  451. }