using CCDCount.DLL; using CCDCount.DLL.AlarmTools; using CCDCount.DLL.Tools; using CCDCount.MODEL.CameraClass; using CCDCount.MODEL.ConfigModel; using CCDCount.MODEL.PlcModel; using CCDCountWpf.Language; using CCDCountWpf.WpfPage; using LogClass; using MvCameraControl; using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Media.Imaging; namespace CCDCountWpf { /// /// MainWindow.xaml 的交互逻辑 /// public partial class MainWindow : Window { #region 变量与实例 //Uri ShowUri = null; bool IsShow = false; SystemMonitor monitor = new SystemMonitor(); Stopwatch SystemRunTime = new Stopwatch(); ConfigManager configManager = ConfigManager.Instance; long InitRunTime; #endregion #region 窗体事件 /// /// 主窗体构造函数 /// public MainWindow() { Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory); LOG.log("程序正在加载主界面", 6); InitializeComponent(); //LOG.log("正在开启系统运行时间程序", 6); //StartSystemRunTime(); SetupFullScreen(); LOG.log("绑定界面数据中", 6); DataContext = ShowMessageBus.ShowBinding; LOG.log("加载配置参数中", 6); configManager.LoadConfigs(); LOG.log("初始化引用库", 6); SDKSystem.Initialize(); LOG.log("初始化相机中", 6); InitCameraIdentify(); LOG.log("初始化PLC参数管理功能", 6); InitPlcManger(); LOG.log("启动界面更新线程中", 6); StartUpdataShowDataThread(); LOG.log("相机列表显示", 6); InitCamComboboxValue(); //LOG.log("更新数据界面参数展示", 6); //UpdatePlcPara(); } private void Window_Loaded(object sender, RoutedEventArgs e) { LOG.log("开启生产界面",6); MainPageBtn_Click(null, null); LOG.log("生产界面开启完成", 6); } /// /// 退出按钮点击事件 /// /// /// private void ExitBtn_Click(object sender, RoutedEventArgs e) { if (MessageBox.Show("Do you want to exit the program?", "Exit confirmation", MessageBoxButton.YesNo) == MessageBoxResult.Yes) { this.Close(); } else { return; } } /// /// 主界面按钮点击事件 /// /// /// private void MainPageBtn_Click(object sender, RoutedEventArgs e) { MainWindowsShowPage("Main"); //ShowUri = new Uri("WpfPage\\MainPage.xaml", UriKind.Relative); //ShowFrame.Navigate(ShowUri); } /// /// 主界面按钮触屏按下事件 /// /// /// private void MainPageBtn_TouchDown(object sender, System.Windows.Input.TouchEventArgs e) { e.Handled = true; MainWindowsShowPage("Main"); } private void SettingBtn_Click(object sender, RoutedEventArgs e) { MainWindowsShowPage("Camera"); //ShowUri = new Uri("WpfPage\\SettingPage.xaml", UriKind.Relative); //ShowFrame.Navigate(ShowUri); } private void SettingBtn_TouchDown(object sender, System.Windows.Input.TouchEventArgs e) { e.Handled = true; MainWindowsShowPage("Camera"); } private void ErrorMessageShowBtn_Click(object sender, RoutedEventArgs e) { MainWindowsShowPage("Error"); //ShowUri = new Uri("WpfPage\\MessagePage.xaml", UriKind.Relative); //ShowFrame.Navigate(ShowUri); } private void ErrorMessageShowBtn_TouchDown(object sender, System.Windows.Input.TouchEventArgs e) { e.Handled = true; MainWindowsShowPage("Error"); } private void PlcSettingBtn_Click(object sender, RoutedEventArgs e) { MainWindowsShowPage("PLC"); //if(SystemAlarm.CheckAlarmStatic(AlarmMessageList.PLC连接中)) //{ // MessageBox.Show("PLC Connecting,Please Wait"); // return; //} //if(PlcSettingMessageBus.pLCManagement!=null && PlcSettingMessageBus.pLCManagement.IsConnect) //{ // ShowUri = new Uri("WpfPage\\PlcSettingPage.xaml", UriKind.Relative); // ShowFrame.Navigate(ShowUri); //} //else //{ // var MessageResult = MessageBox.Show("尚未连接PLC,是否重连","重连确认",MessageBoxButton.YesNo); // if(MessageResult == MessageBoxResult.Yes) // { // InitPlcManger(); // if (PlcSettingMessageBus.pLCManagement != null && PlcSettingMessageBus.pLCManagement.IsConnect) // { // ShowUri = new Uri("WpfPage\\PlcSettingPage.xaml", UriKind.Relative); // ShowFrame.Navigate(ShowUri); // } // } //} } private void PlcSettingBtn_TouchDown(object sender, System.Windows.Input.TouchEventArgs e) { e.Handled = true; MainWindowsShowPage("PLC"); } private void HistoryDataBtn_Click(object sender, RoutedEventArgs e) { MainWindowsShowPage("History"); //ShowUri = new Uri("WpfPage\\HistoryDataPage.xaml", UriKind.Relative); //ShowFrame.Navigate(ShowUri); } private void HistoryDataBtn_TouchDown(object sender, System.Windows.Input.TouchEventArgs e) { e.Handled = true; MainWindowsShowPage("History"); } private void UserMessageBtn_Click(object sender, RoutedEventArgs e) { MainWindowsShowPage("User"); } private void UserMessageBtn_TouchDown(object sender, System.Windows.Input.TouchEventArgs e) { e.Handled = true; MainWindowsShowPage("User"); } /// /// 窗体关闭事件 /// /// /// private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { StopSystemRunTime(); configManager.SaveConfigs(ShowMessageBus.ShowBinding.FormulationName); SDKSystem.Finalize(); if (MessageBus.NowSettingLoadMainThread != null) { MessageBus.NowSettingLoadMainThread.DisposeCamera(); } StopUpdataShowDataThread(); Environment.Exit(0); } private void MenuBtn_Click(object sender, RoutedEventArgs e) { HeardPanel.Visibility = HeardPanel.Visibility == Visibility.Visible ? Visibility.Hidden : Visibility.Visible; } private void KeyBoardBtn_Click(object sender, RoutedEventArgs e) { OnScreenKeyboard.KeyBoardShow(); } private void AuditTrailShowBtn_Click(object sender, RoutedEventArgs e) { MainWindowsShowPage("Audit"); //ShowUri = new Uri("WpfPage\\AuditTrailPage.xaml", UriKind.Relative); //ShowFrame.Navigate(ShowUri); } private void AuditTrailShowBtn_TouchDown(object sender, System.Windows.Input.TouchEventArgs e) { e.Handled = true; MainWindowsShowPage("Audit"); } private void SwitchLanguageBtn_Click(object sender, RoutedEventArgs e) { MessageBus.LanguageIndex++; LanguageManager.ChangeLanguage(LanguageManager.LanguageList[MessageBus.LanguageIndex % LanguageManager.LanguageList.Count]); } #endregion #region 私有方法 private void InitCameraIdentify() { LOG.log("判断ConFig数量", 6); if(configManager.SaveConfigModel == null) { MessageBox.Show("Camera has not been added yet. Please proceed to the configuration page to set up the camera"); //return; } LOG.log("判断当前主线程是否运行", 6); if (MessageBus.NowSettingLoadMainThread != null) { MessageBus.NowSettingLoadMainThread.StopMianThread(); } LOG.log("重新加载MainThread", 6); MessageBus.NowSettingLoadMainThread = (new MainThreadClass(configManager.SaveConfigModel.ShuLiConfigClass, configManager.SaveConfigModel.CameraConfig)); MessageBus.NowSettingLoadMainThread.FormulationName = configManager.SaveConfigModel.ConfigName; MessageBus.NowSettingLoadMainThread.IsLoadFormulation = configManager.SaveConfigModel.IsFormulation; LOG.log("尝试通讯连接", 6); //MessageBus.NowSettingLoadMainThread.ConnectModbus("127.0.0.1"); //MessageBus.NowSettingLoadMainThread.ConnectModbus("192.168.1.88"); LOG.log("加载相机", 6); MessageBus.NowSettingLoadMainThread.LoadCamera(); } /// /// 启动更新显示数据线程 /// private void StartUpdataShowDataThread() { IsShow = true; BitmapImage ThumbnailImage1 = null; const int targetMsPerFrame = 100; // 20FPS=50ms Stopwatch renderSW = new Stopwatch(); Stopwatch HeartSW = new Stopwatch(); Task.Run(async () => { while (IsShow) { renderSW.Restart(); try { await Task.Run(() => { UpdataShuLiShowData(); UpdateMonitorMessage(); UpdateFaultLogMessage(); UpdateFaultErrorMessage(); }); await Application.Current.Dispatcher.InvokeAsync(() => { if (MessageBus.NowSettingLoadMainThread == null) { LOG.log(string.Format("{0}:当前未加载识别流程", "IdentifyCameraForm-StartShowImageThread")); Thread.Sleep(100); return; } else { //MessageBus.NowSettingLoadMainThread.GetShowImage(1000, out Bitmap image1); MessageBus.NowSettingLoadMainThread.GetShowImage(1000, configManager.SaveConfigModel.CameraConfig.Width, out Bitmap image1); if (image1 == null) { //LOG.log(string.Format("{0}:相机一获取图片为空", "IdentifyCameraForm-StartShowImageThread")); return; } ThumbnailImage1 = ConvertToBitmapImage(image1); ShowMessageBus.ShowBinding.BitmapImage = ThumbnailImage1; } if (MessageBus.NowSettingLoadMainThread != null) { if (MessageBus.NowSettingLoadMainThread.IsDebug) { Bitmap Splicebitmap = MessageBus.NowSettingLoadMainThread.GetCamImageOnce(); if (Splicebitmap != null) { ShowMessageBus.ShowBinding.DebugImage = ConvertToBitmapImage(Splicebitmap); } } else { if (ThumbnailImage1 != null) { ShowMessageBus.ShowBinding.DebugImage = ThumbnailImage1; } } } }); } catch (Exception ex) { LOG.error("MainWindow-StartUpdataShowDataThread:" + ex.Message); } //进行精准20帧控制 int elapsed = (int)renderSW.ElapsedMilliseconds; //Console.WriteLine(elapsed); if (elapsed < targetMsPerFrame) { //Console.WriteLine($"主显示线程休眠,休眠时间:{targetMsPerFrame - elapsed}"); Thread.Sleep(targetMsPerFrame - elapsed); } //Thread.Sleep(50); } }); Task.Run(async () => { while (true) { HeartSW.Restart(); if (PlcSettingMessageBus.pLCManagement!=null) { if(!PlcSettingMessageBus.pLCManagement.HeartMessage()) { SystemAlarm.AlarmAlert(AlarmMessageList.心跳异常, "Heart Error", "心跳异常", "MainWindows-StartUpdataShowDataThread"); SystemAlarm.AlarmAlert(AlarmMessageList.PLC通讯连接失败, "PLC communication connection failed", "PLC通讯连接失败", "MainWindows-StartUpdataShowDataThread"); } else { SystemAlarm.AlarmCancel(AlarmMessageList.心跳异常); SystemAlarm.AlarmCancel(AlarmMessageList.PLC通讯连接失败); } } UpdatePlcAlarmMessage(); HeartSW.Stop(); int elapsed = (int)HeartSW.ElapsedMilliseconds; if (elapsed < targetMsPerFrame) { await Task.Delay(500 - elapsed); } } }); } /// /// 停止更新显示数据线程 /// private void StopUpdataShowDataThread() { IsShow = false; } /// /// 更新数粒显示数据 /// private void UpdataShuLiShowData() { ushort BottingCount = 0; if (MessageBus.NowSettingLoadMainThread == null) return; if (MessageBus.NowSettingLoadMainThread.ShuLiState) { Application.Current.Dispatcher.Invoke(() => { ShowMessageBus.ShowBinding.CameraStaticColor = MessageBus.NowSettingLoadMainThread.CameraRunStatic == true ? System.Windows.Media.Brushes.Green : System.Windows.Media.Brushes.Red; ShowMessageBus.ShowBinding.CamRunStatic = MessageBus.NowSettingLoadMainThread.CameraRunStatic == true ? "Run" : "Stop"; }); } else { Application.Current.Dispatcher.Invoke(() => { ShowMessageBus.ShowBinding.CameraStaticColor = System.Windows.Media.Brushes.Yellow; ShowMessageBus.ShowBinding.CamRunStatic = "Vision obstruction"; }); } ShowMessageBus.ShowBinding.AllActiveNum = MessageBus.NowSettingLoadMainThread.HistoryActiveNum.ToString(); ShowMessageBus.ShowBinding.AllOkNum = MessageBus.NowSettingLoadMainThread.OkHistoryNum.ToString(); ShowMessageBus.ShowBinding.AllNgNum = MessageBus.NowSettingLoadMainThread.NgHistoryNum.ToString(); ShowMessageBus.ShowBinding.ShuLiSpeed = MessageBus.NowSettingLoadMainThread.GetOneSecondActiveNum().ToString(); if(PlcSettingMessageBus.pLCManagement != null && PlcSettingMessageBus.pLCManagement.IsConnect) { PlcSettingMessageBus.pLCManagement.ReadBottingCount(out BottingCount); ShowMessageBus.ShowBinding.BottingCountSpeed = PlcSettingMessageBus.pLCManagement.BottingSpeed.ToString(); } ShowMessageBus.ShowBinding.BottingCount = BottingCount; } /// /// 更新监控信息 /// private void UpdateMonitorMessage() { ShowMessageBus.ShowBinding.RamMonitor = monitor.GetAvailableMemory() > 1024 ? $"可用内存: {monitor.GetAvailableMemory() / 1024:0.00}GB" : $"可用内存: {monitor.GetAvailableMemory()}MB"; ShowMessageBus.ShowBinding.CPUMonitor = $"CPU: {monitor.GetCpuUsage():0.00}%"; } /// /// 更新故障日志信息 /// private void UpdateFaultLogMessage() { ShowMessageBus.ShowBinding.ErrMessageShowList = FaultLog.GetAllErrMessage().OrderByDescending(o=>o.DateTime).Take(1000).ToList(); } private void UpdateFaultErrorMessage() { SystemAlarm.AllVisionAlarmCancel(30000); ShowMessageBus.ShowBinding.AlarmMessShowList = SystemAlarm.GetAlarm(); } private void UpdatePlcAlarmMessage() { if(PlcSettingMessageBus.pLCManagement==null) return; PlcAlarmModelClass alarm = PlcSettingMessageBus.pLCManagement.ReadAllAlarm(); if (alarm != null) { if (alarm.PressSwitch) { SystemAlarm.AlarmAlert(AlarmMessageList.气压压力检测开关报警, "PressSwitch", "气压压力检测开关报警", "MainWindow-UpdatePlcAlarmMessage"); } else { SystemAlarm.AlarmCancel(AlarmMessageList.气压压力检测开关报警); } if (alarm.E_Stop) { SystemAlarm.AlarmAlert(AlarmMessageList.急停开关按下报警, "E_Stop", "急停开关按下报警", "MainWindow-UpdatePlcAlarmMessage"); } else { SystemAlarm.AlarmCancel(AlarmMessageList.急停开关按下报警); } if (alarm.MachineUpLimit) { SystemAlarm.AlarmAlert(AlarmMessageList.触发上限位报警, "MachineUpLimit", "触发上限位报警", "MainWindow-UpdatePlcAlarmMessage"); } else { SystemAlarm.AlarmCancel(AlarmMessageList.触发上限位报警); } if (alarm.MachineDownLimit) { SystemAlarm.AlarmAlert(AlarmMessageList.触发下限位报警, "MachineDownLimit", "触发下限位报警", "MainWindow-UpdatePlcAlarmMessage"); } else { SystemAlarm.AlarmCancel(AlarmMessageList.触发下限位报警); } if (alarm.MachineInverterError) { SystemAlarm.AlarmAlert(AlarmMessageList.升降变频器报警, "MachineInverterError", "升降变频器报警", "MainWindow-UpdatePlcAlarmMessage"); } else { SystemAlarm.AlarmCancel(AlarmMessageList.升降变频器报警); } if (alarm.BeltsInverterError) { SystemAlarm.AlarmAlert(AlarmMessageList.传送带变频器报警, "BeltsInverterError", "传送带变频器报警", "MainWindow-UpdatePlcAlarmMessage"); } else { SystemAlarm.AlarmCancel(AlarmMessageList.传送带变频器报警); } if(alarm.WaitingForReset) { SystemAlarm.AlarmAlert(AlarmMessageList.等待复位, "WaitingForReset", "等待复位", "MainWindow-UpdatePlcAlarmMessage"); } else { SystemAlarm.AlarmCancel(AlarmMessageList.等待复位); } if (alarm.DoorOpenAlarm) { SystemAlarm.AlarmAlert(AlarmMessageList.门开报警, "DoorOpenAlarm", "门开报警", "MainWindow-UpdatePlcAlarmMessage"); } else { SystemAlarm.AlarmCancel(AlarmMessageList.门开报警); } if (alarm.FillingValveMotorl) { SystemAlarm.AlarmAlert(AlarmMessageList.罐装阀伺服报警, "FillingValveMotorl", "罐装阀伺服报警", "MainWindow-UpdatePlcAlarmMessage"); } else { SystemAlarm.AlarmCancel(AlarmMessageList.罐装阀伺服报警); } if (alarm.MaterialShortageShutdown) { SystemAlarm.AlarmAlert(AlarmMessageList.设备缺料停机, "MaterialShortageShutdown", "设备缺料停机", "MainWindow-UpdatePlcAlarmMessage"); } else { SystemAlarm.AlarmCancel(AlarmMessageList.设备缺料停机); } if (alarm.InBottleScrewMotorlError) { SystemAlarm.AlarmAlert(AlarmMessageList.传动轴伺服报警, "InBottleScrewMotorlError", "传动轴伺服报警", "MainWindow-UpdatePlcAlarmMessage"); } else { SystemAlarm.AlarmCancel(AlarmMessageList.传动轴伺服报警); } if (alarm.BottleJamSignal) { SystemAlarm.AlarmAlert(AlarmMessageList.堵瓶停机, "BottleJamSignal", "堵瓶停机", "MainWindow-UpdatePlcAlarmMessage"); } else { SystemAlarm.AlarmCancel(AlarmMessageList.堵瓶停机); } if (alarm.MissingBottleSignal) { SystemAlarm.AlarmAlert(AlarmMessageList.缺瓶停机, "MissingBottleSignal", "缺瓶停机", "MainWindow-UpdatePlcAlarmMessage"); } else { SystemAlarm.AlarmCancel(AlarmMessageList.缺瓶停机); } if (alarm.PLCCameraHeartErrorSignal) { SystemAlarm.AlarmAlert(AlarmMessageList.心跳异常, "Heart Error", "心跳异常", "MainWindow-UpdatePlcAlarmMessage"); } else { SystemAlarm.AlarmCancel(AlarmMessageList.心跳异常); } if (alarm.CameraNotRunSignal) { SystemAlarm.AlarmAlert(AlarmMessageList.视觉未启动, "VisionNotRunSignal", "视觉未启动", "MainWindow-UpdatePlcAlarmMessage"); } else { SystemAlarm.AlarmCancel(AlarmMessageList.视觉未启动); } if (alarm.ParticleCacheOverflowSignal) { SystemAlarm.AlarmAlert(AlarmMessageList.颗粒缓存超限, "ParticleCacheOverflow", "颗粒缓存超限", "MainWindow-UpdatePlcAlarmMessage"); } else { SystemAlarm.AlarmCancel(AlarmMessageList.颗粒缓存超限); } } } // Bitmap 转 BitmapImage 的辅助方法 private BitmapImage ConvertToBitmapImage(Bitmap bitmap) { using (MemoryStream memory = new MemoryStream()) { bitmap.Save(memory, System.Drawing.Imaging.ImageFormat.Png); memory.Position = 0; var bitmapImage = new BitmapImage(); bitmapImage.BeginInit(); bitmapImage.CacheOption = BitmapCacheOption.OnLoad; bitmapImage.DecodePixelWidth = 1200; // 设置目标分辨率宽度 bitmapImage.DecodePixelHeight = 600; // 保持宽高比 bitmapImage.StreamSource = memory; bitmapImage.EndInit(); return bitmapImage; } } /// /// 初始化相机选择框 /// private void InitCamComboboxValue() { MessageBus.CameraClass.GetCameraList(out List CameraInfoList); if (CameraInfoList.Count > 0) { ShowMessageBus.ShowBinding.CameraItems.Clear(); ShowMessageBus.ShowBinding.CameraItems.Add(new CameraCoboxItem() { Name = "请选择相机", SNValue = "" }); foreach (var item in CameraInfoList) { ShowMessageBus.ShowBinding.CameraItems.Add(new CameraCoboxItem() { Name = item.DeviceName + "_" + item.DeviceSN, SNValue = item.DeviceSN }); } } } /// /// 初始化PLC管理(包括PLC的数据信息更新线程) /// public async void InitPlcManger() { await Task.Run(() => { //string ipAddress = "192.168.1.88"; string ipAddress = "127.0.0.1"; SystemAlarm.AlarmAlert(AlarmMessageList.PLC连接中, $"PLC Connecting, target IP:{ipAddress}", $"PLC连接中, IP地址:{ipAddress}", "DLL:MainThreadClass-InitPlcManger"); PlcSettingMessageBus.pLCManagement = new PLCManagementClass(ipAddress); SystemAlarm.AlarmCancel(AlarmMessageList.PLC连接中); UpdatePlcPara(); UpdateCameraState(); }); } public void UpdateCameraState() { if(PlcSettingMessageBus.pLCManagement!=null&&PlcSettingMessageBus.pLCManagement.IsConnect) { PlcSettingMessageBus.pLCManagement.WriteCameraRunState(0); } } private void UpdatePlcPara() { var ParaValue = PlcSettingMessageBus.pLCManagement.ReadAllPara(); if (ParaValue == null) return; //PlcSettingMessageBus.PlcMessageShowBindage.FillingModel = // ParaValue.FillingMode; PlcSettingMessageBus.PlcMessageShowBindage.BeltsSpeed = ParaValue.BeltsSpeed; PlcSettingMessageBus.PlcMessageShowBindage.ShakeTable1H_FillingSpeed = ParaValue.ShakeTable1H_FillingSpeed; PlcSettingMessageBus.PlcMessageShowBindage.ShakeTable2H_FillingSpeed = ParaValue.ShakeTable2H_FillingSpeed; PlcSettingMessageBus.PlcMessageShowBindage.ShakeTable3H_FillingSpeed = ParaValue.ShakeTable3H_FillingSpeed; //PlcSettingMessageBus.PlcMessageShowBindage.ShakeTable1M_FillingSpeed = // ParaValue.ShakeTable1M_FillingSpeed; //PlcSettingMessageBus.PlcMessageShowBindage.ShakeTable2M_FillingSpeed = // ParaValue.ShakeTable2M_FillingSpeed; //PlcSettingMessageBus.PlcMessageShowBindage.ShakeTable3M_FillingSpeed = // ParaValue.ShakeTable3M_FillingSpeed; //PlcSettingMessageBus.PlcMessageShowBindage.ShakeTable1L_FillingSpeed = // ParaValue.ShakeTable1L_FillingSpeed; //PlcSettingMessageBus.PlcMessageShowBindage.ShakeTable2L_FillingSpeed = // ParaValue.ShakeTable2L_FillingSpeed; //PlcSettingMessageBus.PlcMessageShowBindage.ShakeTable3L_FillingSpeed = // ParaValue.ShakeTable3L_FillingSpeed; //PlcSettingMessageBus.PlcMessageShowBindage.ShakeTable1H_CacheSpeed = // ParaValue.ShakeTable1H_CacheSpeed; //PlcSettingMessageBus.PlcMessageShowBindage.ShakeTable2H_CacheSpeed = // ParaValue.ShakeTable2H_CacheSpeed; //PlcSettingMessageBus.PlcMessageShowBindage.ShakeTable3H_CacheSpeed = // ParaValue.ShakeTable3H_CacheSpeed; //PlcSettingMessageBus.PlcMessageShowBindage.ShakeTable1M_CacheSpeed = // ParaValue.ShakeTable1M_CacheSpeed; //PlcSettingMessageBus.PlcMessageShowBindage.ShakeTable2M_CacheSpeed = // ParaValue.ShakeTable2M_CacheSpeed; //PlcSettingMessageBus.PlcMessageShowBindage.ShakeTable3M_CacheSpeed = // ParaValue.ShakeTable3M_CacheSpeed; //PlcSettingMessageBus.PlcMessageShowBindage.ShakeTable1L_CacheSpeed = // ParaValue.ShakeTable1L_CacheSpeed; //PlcSettingMessageBus.PlcMessageShowBindage.ShakeTable2L_CacheSpeed = // ParaValue.ShakeTable2L_CacheSpeed; //PlcSettingMessageBus.PlcMessageShowBindage.ShakeTable3L_CacheSpeed = // ParaValue.ShakeTable3L_CacheSpeed; //PlcSettingMessageBus.PlcMessageShowBindage.FillingH_SpeedRatio = // ParaValue.FillingH_SpeedRatio; //PlcSettingMessageBus.PlcMessageShowBindage.FillingM_SpeedRatio = // ParaValue.FillingM_SpeedRatio; //PlcSettingMessageBus.PlcMessageShowBindage.FillingL_SpeedRatio = // ParaValue.FillingL_SpeedRatio; //PlcSettingMessageBus.PlcMessageShowBindage.CacheH_SpeedRatio = // ParaValue.CacheH_SpeedRatio; //PlcSettingMessageBus.PlcMessageShowBindage.CacheM_SpeedRatio = // ParaValue.CacheM_SpeedRatio; //PlcSettingMessageBus.PlcMessageShowBindage.CacheL_SpeedRatio = // ParaValue.CacheL_SpeedRatio; PlcSettingMessageBus.PlcMessageShowBindage.ScrewJogSpeed = ParaValue.ScrewJogSpeed.ToString(); PlcSettingMessageBus.PlcMessageShowBindage.InBottleSpeed = ParaValue.InBottleSpeed.ToString(); PlcSettingMessageBus.PlcMessageShowBindage.BottlePosSpeed = ParaValue.BottlePosSpeed.ToString(); PlcSettingMessageBus.PlcMessageShowBindage.BottlePosPosition = ParaValue.BottlePosPosition.ToString(); PlcSettingMessageBus.PlcMessageShowBindage.FillingValveOpenSpeed = ParaValue.FillingValveOpenSpeed.ToString(); PlcSettingMessageBus.PlcMessageShowBindage.FillingValveOpenPosition = ParaValue.FillingValveOpenPosition.ToString(); PlcSettingMessageBus.PlcMessageShowBindage.FillingValveCloseSpeed = ParaValue.FillingValveCloseSpeed.ToString(); PlcSettingMessageBus.PlcMessageShowBindage.FillingValveClosePosition = ParaValue.FillingValveClosePosition.ToString(); //PlcSettingMessageBus.PlcMessageShowBindage.FillingValveCacheSpeed = // ParaValue.FillingValveCacheSpeed.ToString(); //PlcSettingMessageBus.PlcMessageShowBindage.FillingValveCachePosition = // ParaValue.FillingValueCachePosition.ToString(); PlcSettingMessageBus.PlcMessageShowBindage.FillingValveJogSpeed = ParaValue.FillingValueJogSpeed.ToString(); PlcSettingMessageBus.PlcMessageShowBindage.MachineDelayFunneDownTime = ParaValue.MachineDelayFunneDownTime; PlcSettingMessageBus.PlcMessageShowBindage.MachineDelayFunneUpTime = ParaValue.MachineDelayFunneUpTime; PlcSettingMessageBus.PlcMessageShowBindage.MachineDelayFillingValveOpenTime = ParaValue.MachineDelayFillingValveOpenTime; PlcSettingMessageBus.PlcMessageShowBindage.MachineDelayFillingValveCloseTime = ParaValue.MachineDelayFillingValveCloseTime; PlcSettingMessageBus.PlcMessageShowBindage.MachineDelayInBottleTime = ParaValue.MachineDelayInBottleTime; PlcSettingMessageBus.PlcMessageShowBindage.BottValueSet = ParaValue.BottValueSet; PlcSettingMessageBus.PlcMessageShowBindage.ValveDelytime = ParaValue.ValveDelytime; PlcSettingMessageBus.PlcMessageShowBindage.CacheShutdownValue = ParaValue.CacheShutdownValue; //PlcSettingMessageBus.PlcMessageShowBindage.ShakeTable1_TestSpeed = // ParaValue.ShakeTable1_TestSpeed; //PlcSettingMessageBus.PlcMessageShowBindage.ShakeTable2_TestSpeed = // ParaValue.ShakeTable2_TestSpeed; //PlcSettingMessageBus.PlcMessageShowBindage.ShakeTable3_TestSpeed = // ParaValue.ShakeTable3_TestSpeed; PlcSettingMessageBus.PlcMessageShowBindage.MissingDelaytime = ParaValue.MissingDelaytime; PlcSettingMessageBus.PlcMessageShowBindage.BottleJamDelaytime = ParaValue.BottleJamDelaytime; PlcSettingMessageBus.PlcMessageShowBindage.EliminateCylinderDelayTime = ParaValue.EliminateCylinderDelayTime; PlcSettingMessageBus.PlcMessageShowBindage.EliminateCylinderHoldingTime = ParaValue.EliminateCylinderHoldingTime; PlcSettingMessageBus.PlcMessageShowBindage.MaterialShortageStoppageDelayTime = ParaValue.MaterialShortageStoppageDelayTime; PlcSettingMessageBus.PlcMessageShowBindage.MissBottleRestart = ParaValue.MissBottleReSestart; PlcSettingMessageBus.PlcMessageShowBindage.BottleStopPassTime = ParaValue.BottleStopPassTime; PlcSettingMessageBus.PlcMessageShowBindage.BuzzerTime = ParaValue.BuzzerTime; PlcSettingMessageBus.PlcMessageShowBindage.CacheDecelerateProportion = ParaValue.CacheDecelerateProportion; } private void StartSystemRunTime() { string localDataPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); string systemRunTimePath = Path.Combine(localDataPath, "CCDCount\\SystemRunTime.XML"); if (File.Exists(systemRunTimePath)) { var systemMessage = XmlStorage.DeserializeFromXml(systemRunTimePath); InitRunTime = systemMessage.SystemRunTime; TimeSpan timeSpan = TimeSpan.FromTicks(InitRunTime); } SystemRunTime.Start(); } private void StopSystemRunTime() { string localDataPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); string systemruntimefoundPath = Path.Combine(localDataPath, "CCDCount"); if (!Directory.Exists(systemruntimefoundPath)) { Directory.CreateDirectory(systemruntimefoundPath); } string systemRunTimePath = Path.Combine(systemruntimefoundPath, "SystemRunTime.XML"); SystemRunTime.Stop(); long ticks = SystemRunTime.ElapsedTicks; XmlStorage.SerializeToXml(new SystemMessageConfigModel() { SystemRunTime = ticks + InitRunTime }, systemRunTimePath); } private void SetupFullScreen() { // 隐藏标题栏和边框 this.WindowStyle = WindowStyle.None; // 禁止调整大小 this.ResizeMode = ResizeMode.NoResize; // 设置为最顶层窗口 //this.Topmost = true; // 最大化窗口 this.WindowState = WindowState.Maximized; // 隐藏任务栏(可选) this.Top = 0; this.Left = 0; this.Width = SystemParameters.PrimaryScreenWidth; this.Height = SystemParameters.PrimaryScreenHeight; } private void MainWindowsShowPage(string PageName) { Page pageToNavigate = null; switch (PageName) { case "Main": pageToNavigate = new MainPage(); // 替换为你实际的页面类名 break; case "History": pageToNavigate = new HistoryDataPage(); break; case "Camera": pageToNavigate = new SettingPage(); break; case "PLC": if (SystemAlarm.CheckAlarmStatic(AlarmMessageList.PLC连接中)) { MessageBox.Show("PLC Connecting,Please Wait"); return; } if (PlcSettingMessageBus.pLCManagement != null && PlcSettingMessageBus.pLCManagement.IsConnect) { pageToNavigate = new PlcSettingPage(); //ShowUri = new Uri("WpfPage\\PlcSettingPage.xaml", UriKind.Relative); //ShowFrame.Navigate(ShowUri); } else { var MessageResult = MessageBox.Show("尚未连接PLC,是否重连", "重连确认", MessageBoxButton.YesNo); if (MessageResult == MessageBoxResult.Yes) { InitPlcManger(); if (PlcSettingMessageBus.pLCManagement != null && PlcSettingMessageBus.pLCManagement.IsConnect) { pageToNavigate = new PlcSettingPage(); //ShowUri = new Uri("WpfPage\\PlcSettingPage.xaml", UriKind.Relative); //ShowFrame.Navigate(ShowUri); } } } break; case "Error": pageToNavigate = new MessagePage(); break; case "Audit": pageToNavigate = new AuditTrailPage(); break; case "User": if (MessageBus.NowLoginUserMessage != null) { if (!MessageBus.NowLoginUserMessage.IsAdmin) { MessageBox.Show("权限不足"); } else { pageToNavigate = new UserManagementPage(); //ShowUri = new Uri("WpfPage\\UserManagementPage.xaml", UriKind.Relative); //ShowFrame.Navigate(ShowUri); } } else { MessageBox.Show("请先登录"); } break; } if (pageToNavigate != null) { // 确保在主线程执行导航 Dispatcher.Invoke(() => { ShowFrame.Navigate(pageToNavigate); }); } } #endregion } }