using Aucma.Core.SheetMetal.Views; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using System.Windows; using System; using log4net; using System.Diagnostics; using System.Runtime.InteropServices; using System.Windows.Interop; using System.Collections.ObjectModel; using Admin.Core.Common; using System.IO; using Aucma.Core.PLc; using Aucma.Core.Scanner; using System.Linq; namespace Aucma.Core.SheetMetal.ViewModels { public partial class MainWindowViewModel : ObservableObject { private static readonly log4net.ILog log = LogManager.GetLogger(typeof(MainWindowViewModel)); private IndexPageView firstPage = new IndexPageView();//首页 private LogPageView logPage = new LogPageView();//日志 private StatisticsPageView statisticsPage = new StatisticsPageView();//统计 public MainWindowViewModel() { UserContent = firstPage; init(); } public void init() { // 设备状态刷新定时器 System.Timers.Timer timer = new System.Timers.Timer(1000 * 5); timer.Elapsed += new System.Timers.ElapsedEventHandler(RefreshStatus); timer.AutoReset = true; timer.Enabled = true; timer.Start(); } #region 设备状态刷新 /// /// 设备状态刷新 /// /// /// public void RefreshStatus(object sender, System.Timers.ElapsedEventArgs e) { RefreshMesDb(); RefreshPlc(); } /// /// 数据库状态刷新 /// /// /// public void RefreshMesDb() { MesDbState(true); } /// /// plc状态刷新 /// /// /// public void RefreshPlc() { // 后板plc var obj = PlcHelper.melsecList.FirstOrDefault(d => d.EquipName.Equals("后板Plc")); if (obj != null) { if (obj.plc.IsConnected) { PlcState(true); } else { PlcState(false); } } else { PlcState(false); } // u壳plc var obj2 = PlcHelper.melsecList.FirstOrDefault(d => d.EquipName.Equals("U壳PLC")); if (obj2 != null) { if (obj2.plc.IsConnected) { Plc2State(true); } else { Plc2State(false); } } else { Plc2State(false); } } #endregion #region 更换界面 public System.Windows.Controls.UserControl _content; public System.Windows.Controls.UserControl UserContent { get => _content; set => SetProperty(ref _content, value); } #endregion #region 窗口操作 /// /// 窗口操作 /// [RelayCommand] private void FormControl(object obj) { try { string controlType = obj as string; switch (controlType) { // 关闭当前窗口 case "Exit": if (System.Windows.MessageBox.Show("确定要退出系统吗?", "系统提醒", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No) == MessageBoxResult.Yes) { Application.Current.Shutdown(); Environment.Exit(0); } break; // 打开软盘 case "TabTip": OpenOsk(); break; // 还原 或者 最大化当前窗口 case "Normal": if (Application.Current.MainWindow.WindowState == WindowState.Normal) { Application.Current.MainWindow.WindowState = WindowState.Maximized; break; } if (Application.Current.MainWindow.WindowState == WindowState.Maximized) { Application.Current.MainWindow.WindowState = WindowState.Normal; break; } break; // 最小化当前窗口 case "Minimized": Application.Current.MainWindow.WindowState = WindowState.Minimized; break; default: break; } } catch (Exception ex) { log.Error("窗体控制逻辑异常", ex); } } #endregion #region 打开软盘 /// /// 打开软盘 /// public static void OpenOsk() { Process proc = new Process(); proc.StartInfo.FileName = @"C:\Windows\System32\osk.exe"; proc.StartInfo.UseShellExecute = true; proc.StartInfo.Verb = "runas"; proc.Start(); } #endregion #region 界面切换 /// /// 界面切换 /// [RelayCommand] private void SwitchPages(object obj) { string page = obj as string; switch (page) { case "FirstPage": UserContent = firstPage; break; case "LogPage": UserContent = logPage; break; case "StatisticsPage": UserContent = statisticsPage; break; default: break; } } #endregion #region MES数据库状态 /// /// MES数据库-文字 /// public string _mesDbUIStatusWb; public string MesDbUIStatusWb { get => _mesDbUIStatusWb; set => SetProperty(ref _mesDbUIStatusWb, value); } /// /// MES数据库-颜色 /// public string _mesDbUIColor; public string MesDbUIColor { get => _mesDbUIColor; set => SetProperty(ref _mesDbUIColor, value); } /// /// MES数据库-图标 /// public string _mesUIIcon; public string MesUIIcon { get => _mesUIIcon; set => SetProperty(ref _mesUIIcon, value); } /// /// MES数据库连接状态 /// /// public void MesDbState(bool type) { Application.Current.Dispatcher.Invoke(() => { if (type) { MesDbUIStatusWb = "MES数据库连接成功"; MesDbUIColor = "Green"; MesUIIcon = "Assets/Images/Green.png"; } else { MesDbUIStatusWb = "MES数据库异常"; MesDbUIColor = "Red"; MesUIIcon = "Assets/Images/Red.png"; } }); } #endregion #region 后板plc 状态 /// /// UI plc 展示状态-文字 /// public string _plcUIStatusWb; public string PlcUIStatusWb { get => _plcUIStatusWb; set => SetProperty(ref _plcUIStatusWb, value); } /// /// UI plc 展示状态-颜色 /// public string _plcUIColor; public string PlcUIColor { get => _plcUIColor; set => SetProperty(ref _plcUIColor, value); } /// /// UI plc 展示状态-图标 /// public string _plcUIIcon; public string PlcUIIcon { get => _plcUIIcon; set => SetProperty(ref _plcUIIcon, value); } /// /// 后板PLC连接状态-true:连接成功;false:失败 /// /// public void PlcState(bool type) { Application.Current.Dispatcher.Invoke(() => { if (type) { PlcUIStatusWb = "后板PLC连接成功"; PlcUIColor = "Green"; PlcUIIcon = "Assets/Images/Green.png"; } else { PlcUIStatusWb = "后板PLC状态异常"; PlcUIColor = "Red"; PlcUIIcon = "Assets/Images/Red.png"; } }); } #endregion #region U壳PLC状态 /// /// UI plc 展示状态-文字 /// public string _plc2UIStatusWb; public string Plc2UIStatusWb { get => _plc2UIStatusWb; set => SetProperty(ref _plc2UIStatusWb, value); } /// /// UI plc 展示状态-颜色 /// public string _plc2UIColor; public string Plc2UIColor { get => _plc2UIColor; set => SetProperty(ref _plc2UIColor, value); } /// /// UI plc 展示状态-图标 /// public string _plc2UIIcon; public string Plc2UIIcon { get => _plc2UIIcon; set => SetProperty(ref _plc2UIIcon, value); } /// /// PLC连接状态-true:连接成功;false:失败 /// /// public void Plc2State(bool type) { Application.Current.Dispatcher.Invoke(() => { if (type) { Plc2UIStatusWb = "U壳PLC连接成功"; Plc2UIColor = "Green"; Plc2UIIcon = "Assets/Images/Green.png"; } else { Plc2UIStatusWb = "U壳PLC状态异常"; Plc2UIColor = "Red"; Plc2UIIcon = "Assets/Images/Red.png"; } }); } #endregion } }