Procházet zdrojové kódy

新增界面显示状态

KWD před 5 měsíci
rodič
revize
d45b35f12a

+ 193 - 11
TeamAAS-VM/Core/Management.cs

@@ -1,8 +1,10 @@
 using MathNet.Numerics.LinearAlgebra;
+using NPOI.SS.Formula.Functions;
 using Prism.Events;
 using Prism.Ioc;
 using Prism.Mvvm;
 using Prism.Regions;
+using SqlSugar;
 using System;
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
@@ -97,6 +99,29 @@ namespace TeamAAS_VP.Core
             set { SetProperty(ref _StatusBackground, value); }
         }
 
+        private System.Windows.Media.Brush _RunModelBackground;
+
+        public System.Windows.Media.Brush RunModelBackground
+        {
+            get { return _RunModelBackground; }
+            set { SetProperty(ref _RunModelBackground, value); }
+        }
+
+        private System.Windows.Media.Brush _ManualModeBackground;
+
+        public System.Windows.Media.Brush ManualModeBackground
+        {
+            get { return _ManualModeBackground; }
+            set { SetProperty(ref _ManualModeBackground, value); }
+        }
+
+        private System.Windows.Media.Brush _ClearModeBackground;
+
+        public System.Windows.Media.Brush ClearModeBackground
+        {
+            get { return _ClearModeBackground; }
+            set { SetProperty(ref _ClearModeBackground, value); }
+        }
         private ObservableCollection<ShowRender> _Renders;
 
         /// <summary>
@@ -257,6 +282,7 @@ namespace TeamAAS_VP.Core
             _systemDatabaseService = systemDatabaseService;
             _lightManagerService = lightManagerService;
             _mesService = mesService;
+            _eventAggregator.GetEvent<CurrentStatusNotification>().Subscribe(CurrentRunStatus);
             InitPressure();
         }
 
@@ -1121,6 +1147,7 @@ namespace TeamAAS_VP.Core
                 addressConfig.In_PickINC.Address,
                 addressConfig.In_Throw.Address,
                 addressConfig.RunMode.Address,
+                addressConfig.AutoRunning.Address,
                 addressConfig.ManualMode.Address,
                 addressConfig.ClearMode.Address,
                 addressConfig.Fault.Address,
@@ -1332,6 +1359,7 @@ namespace TeamAAS_VP.Core
         bool _LastFixedCameraPickExe = false;
         bool _LastFixedCameraPutExe = false;
         bool _LastFixedCameracheckExe = false;
+        public bool _LastAutoRunning = false;
         bool _LastThrowExe = false;
         bool _LastRunModel = false;
         bool _LastManualMode = false;
@@ -2335,13 +2363,13 @@ namespace TeamAAS_VP.Core
                     }
                 }
                 //切换成自动运行模式
-                else if (addressConfig.RunMode.Address.Contains(tuple.nodeId))
+                else if (addressConfig.AutoRunning.Address.Contains(tuple.nodeId))
                 {
                     if (tuple.value is bool state)
                     {
-                        if (_LastRunModel != state)
+                        if (_LastAutoRunning != state)
                         {
-                            _LastRunModel = state;
+                            _LastAutoRunning = state;
                         }
                         else
                         {
@@ -2350,8 +2378,12 @@ namespace TeamAAS_VP.Core
                         if (state)
                         {
                             SendTaskMessage("收到切换成自动模式", MessageLevel.Info);
-                            StatusBackground = System.Windows.Media.Brushes.Green;
                         }
+                        else
+                        {
+                            SendTaskMessage("收到关闭自动模式", MessageLevel.Info);
+                        }
+                        CurrentRunStatus();
                     }
                 }
                 //切换成维修模式
@@ -2369,13 +2401,10 @@ namespace TeamAAS_VP.Core
                         }
                         if (state)
                         {
+                            ClearModeBackground = System.Windows.Media.Brushes.White;
+                            RunModelBackground = System.Windows.Media.Brushes.White;
+                            ManualModeBackground = System.Windows.Media.Brushes.Orange;
                             SendTaskMessage("收到切换成维修模式", MessageLevel.Info);
-                            StatusBackground = System.Windows.Media.Brushes.Yellow;
-                        }
-                        else
-                        {
-                            SendTaskMessage("收到切换成自动模式", MessageLevel.Info);
-                            StatusBackground = System.Windows.Media.Brushes.Green;
                         }
                     }
                 }
@@ -2394,8 +2423,10 @@ namespace TeamAAS_VP.Core
                         }
                         if (state)
                         {
+                            ClearModeBackground = System.Windows.Media.Brushes.Yellow;
+                            RunModelBackground = System.Windows.Media.Brushes.White;
+                            ManualModeBackground = System.Windows.Media.Brushes.White;
                             SendTaskMessage("收到切换成流线模式", MessageLevel.Info);
-                            StatusBackground = System.Windows.Media.Brushes.Green;
                         }
                     }
                 }
@@ -3083,7 +3114,69 @@ namespace TeamAAS_VP.Core
                 _eventAggregator.GetEvent<TaskMessageNotification>().Publish(new Models.MessageStruct() { Message = msg, level = level });
             });
         }
+        public bool concurrenty = true;
+        public void CurrentRunStatus()
+        {
+            if (!concurrenty)
+            {
+                return;
+            }
+            concurrenty = true;
+            bool connectStaus = true;
+            bool mesStatus = true;
+            bool paraStatus = true;
+            try
+            {
 
+                for (int i = 0; i < 1; i++)
+                {
+                    var stationConfig = _configService.GetDeviceInfo(i);
+                    if (!stationConfig.EnableMES || !stationConfig.EnableDoubleMes || !stationConfig.SaveCsv)
+                    {
+                        SendTaskMessage("当前MES功能/双验证功能/保存CSV功能未启用,请检查...", MessageLevel.Info);
+                        mesStatus = false;
+                        break;
+                    }
+                }
+                var systemConfig = _configService.GetSystemConfiguration();
+                if (!systemConfig.PressureSensorConfig[0].IsSavePressureCurve )
+                {
+                    SendTaskMessage("当前未启用保压曲线图保存,请检查...", MessageLevel.Info);
+                    paraStatus = false;
+                }
+                foreach (var item in Status)
+                {
+                    if (item.Background == System.Windows.Media.Brushes.Red)
+                    {
+                        SendTaskMessage("当前有设备未连接,请检查...", MessageLevel.Info);
+                        connectStaus = false;
+                        break;
+                    }
+                }
+            }
+            catch (Exception)
+            {
+                connectStaus = false;
+                mesStatus = false;
+                paraStatus = false;
+
+            }
+            if (connectStaus && mesStatus && paraStatus && _LastAutoRunning)
+            {
+                RunModelBackground = System.Windows.Media.Brushes.Green;
+                ClearModeBackground = System.Windows.Media.Brushes.White;
+                ManualModeBackground = System.Windows.Media.Brushes.White;
+                SendTaskMessage("当前为生产模式", MessageLevel.Info);
+            }
+            else
+            {
+                RunModelBackground = System.Windows.Media.Brushes.White;
+                ClearModeBackground = System.Windows.Media.Brushes.White;
+                ManualModeBackground = System.Windows.Media.Brushes.Orange;
+                SendTaskMessage("当前为调机模式", MessageLevel.Info);
+            }
+            concurrenty = true;
+        }
         #region Pressure collection helpers
         public void InitPressure()
         {
@@ -3412,6 +3505,95 @@ namespace TeamAAS_VP.Core
             }
         }
 
+        public void SaveCsvData(ProductModel currentProduct, DeviceInfo stationConfig,int i,int resultIndex,string code,string assypress,DateTime serverTimeResult)
+        {
+            DFC.Clear();
+            bool assyPress = resultIndex == 1 ? true : false;
+            string midValue = "NA", saveppid = "NA";
+            midValue = ((currentProduct.GlobalParamEx.CC1DownLimit + currentProduct.GlobalParamEx.CC1UpLimit) / 2).ToString("F3");
+            if (stationConfig.SaveCsvPPID) saveppid = ppid[i];
+            DFC.Add(new DataFormCtq
+            {
+                PPID = saveppid,
+                PROCESS_NAME = stationConfig.DataInfo.PROCESS_NAME,
+                PROCESS_START_TIME = _LastMesCheckTime[i].ToString("yyyy-MM-ddTHH:mm:ss.fffffff") + "+08:00",
+                CTQ_NAME = "CC1",
+                CTQ_VALUE = mes_cc["1"],
+                CTQ_LSL = currentProduct.GlobalParamEx.CC1DownLimit.ToString("F3"),
+                CTQ_USL = currentProduct.GlobalParamEx.CC1UpLimit.ToString("F3"),
+                PROCESS_END_TIME = serverTimeResult.ToString("yyyy-MM-ddTHH:mm:ss.fffffff") + "+08:00",
+                SUPPLIER_NAME = stationConfig.DataInfo.SUPPLIER_NAME,
+                COMMODITY_TYPE = stationConfig.DataInfo.COMMODITY_TYPE,
+                REVISION = stationConfig.DataInfo.REVISION + "_" + revision[i],
+                WO = wo[i],
+                MFG_LOT = stationConfig.DataInfo.MFG_LOT,
+                MFG_ASSY_LINE = stationConfig.DataInfo.MFG_ASSY_LINE,
+                PROCESS_OUTCOME = assyPress ? "Pass" : "Fail",
+                PROCESS_MACHINE_ID = stationConfig.DataInfo.PROCESS_MACHINE_ID,
+                CTQ_UNIT_OF_MEASURE = "mm",
+                ERROR_MESSAGE = assyPress ? "NA" : "CC OOS",
+                PD_ATTR_01 = ProductMainSN[i],
+                PD_ATTR_02 = midValue,
+                PD_ATTR_03 = PartSN,
+                PD_ATTR_04 = code,
+                PD_ATTR_05 = "NA",
+            });
+            midValue = ((currentProduct.GlobalParamEx.CC2DownLimit + currentProduct.GlobalParamEx.CC2UpLimit) / 2).ToString("F3");
+            DFC.Add(new DataFormCtq
+            {
+                PPID = saveppid,
+                PROCESS_NAME = stationConfig.DataInfo.PROCESS_NAME,
+                PROCESS_START_TIME = _LastMesCheckTime[i].ToString("yyyy-MM-ddTHH:mm:ss.fffffff") + "+08:00",
+                CTQ_NAME = "CC2",
+                CTQ_VALUE = mes_cc["2"],
+                CTQ_LSL = currentProduct.GlobalParamEx.CC2DownLimit.ToString("F3"),
+                CTQ_USL = currentProduct.GlobalParamEx.CC2UpLimit.ToString("F3"),
+                PROCESS_END_TIME = serverTimeResult.ToString("yyyy-MM-ddTHH:mm:ss.fffffff") + "+08:00",
+                SUPPLIER_NAME = stationConfig.DataInfo.SUPPLIER_NAME,
+                COMMODITY_TYPE = stationConfig.DataInfo.COMMODITY_TYPE,
+                REVISION = stationConfig.DataInfo.REVISION + "_" + revision[i],
+                WO = wo[i],
+                MFG_LOT = stationConfig.DataInfo.MFG_LOT,
+                MFG_ASSY_LINE = stationConfig.DataInfo.MFG_ASSY_LINE,
+                PROCESS_OUTCOME = assyPress ? "Pass" : "Fail",
+                PROCESS_MACHINE_ID = stationConfig.DataInfo.PROCESS_MACHINE_ID,
+                CTQ_UNIT_OF_MEASURE = "mm",
+                ERROR_MESSAGE = assyPress ? "NA" : "CC OOS",
+                PD_ATTR_01 = ProductMainSN[i],
+                PD_ATTR_02 = midValue,
+                PD_ATTR_03 = PartSN,
+                PD_ATTR_04 = code,
+                PD_ATTR_05 = "NA",
+            });
+            midValue = ((currentProduct.GlobalParamEx.DownPressure.PressureDownLimit + currentProduct.GlobalParamEx.DownPressure.PressureUpLimit) / 2).ToString("F3");
+            DFC.Add(new DataFormCtq
+            {
+                PPID = saveppid,
+                PROCESS_NAME = stationConfig.DataInfo.PROCESS_NAME,
+                PROCESS_START_TIME = _LastMesCheckTime[i].ToString("yyyy-MM-ddTHH:mm:ss.fffffff") + "+08:00",
+                CTQ_NAME = "Assy_Pressure",
+                CTQ_VALUE = Math.Round(double.Parse(assypress), 3).ToString(),
+                CTQ_LSL = currentProduct.GlobalParamEx.DownPressure.PressureDownLimit.ToString("F3"),
+                CTQ_USL = currentProduct.GlobalParamEx.DownPressure.PressureUpLimit.ToString("F3"),
+                PROCESS_END_TIME = serverTimeResult.ToString("yyyy-MM-ddTHH:mm:ss.fffffff") + "+08:00",
+                SUPPLIER_NAME = stationConfig.DataInfo.SUPPLIER_NAME,
+                COMMODITY_TYPE = stationConfig.DataInfo.COMMODITY_TYPE,
+                REVISION = stationConfig.DataInfo.REVISION + "_" + revision[i],
+                WO = wo[i],
+                MFG_LOT = stationConfig.DataInfo.MFG_LOT,
+                MFG_ASSY_LINE = stationConfig.DataInfo.MFG_ASSY_LINE,
+                PROCESS_OUTCOME = assyPress ? "Pass" : "Fail",
+                PROCESS_MACHINE_ID = stationConfig.DataInfo.PROCESS_MACHINE_ID,
+                CTQ_UNIT_OF_MEASURE = "kg",
+                ERROR_MESSAGE = assyPress ? "NA" : "Assy_Pressure OOS",
+                PD_ATTR_01 = ProductMainSN[i],
+                PD_ATTR_02 = midValue,
+                PD_ATTR_03 = PartSN,
+                PD_ATTR_04 = code,
+                PD_ATTR_05 = "NA",
+            });
+        }
+
         #region 压缩图片文件夹
         /// <summary>
         /// 压缩文件

+ 13 - 0
TeamAAS-VM/Events/CurrentStatusNotification.cs

@@ -0,0 +1,13 @@
+using Prism.Events;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace TeamAAS_VP.Events
+{
+    public class CurrentStatusNotification : PubSubEvent
+    {
+    }
+}

+ 11 - 0
TeamAAS-VM/Models/PLC/PlcAddressConfig.cs

@@ -684,7 +684,13 @@ namespace TeamAAS_VP.Models.PLC
             get { return _RunMode; }
             set { SetProperty(ref _RunMode, value); }
         }
+        private PlcAddress _AutoRunning;
 
+        public PlcAddress AutoRunning
+        {
+            get { return _AutoRunning; }
+            set { SetProperty(ref _AutoRunning, value); }
+        }
         private PlcAddress _ManualMode;
 
         public PlcAddress ManualMode
@@ -1201,6 +1207,11 @@ namespace TeamAAS_VP.Models.PLC
             RunMode.DataType = "Bool";
             RunMode.Description = "自动运行模式";
 
+            AutoRunning = Ensure(AutoRunning);
+            AutoRunning.Address = "ns=4;s=DB_Control|Mode.Status.AutoRunning";
+            AutoRunning.DataType = "Bool";
+            AutoRunning.Description = "生产模式";
+
             ManualMode = Ensure(ManualMode);
             ManualMode.Address = "ns=4;s=DB_Control|Mode.Status.ManualMode";
             ManualMode.DataType = "Bool";

+ 1 - 0
TeamAAS-VM/TeamAAS-VP.csproj

@@ -538,6 +538,7 @@
     <Compile Include="Core\RectangleCenterCalculator.cs" />
     <Compile Include="Core\StabilityAnalyzer.cs" />
     <Compile Include="Core\VisionProFileHelper.cs" />
+    <Compile Include="Events\CurrentStatusNotification.cs" />
     <Compile Include="Events\DelaySaveImageNotification.cs" />
     <Compile Include="Events\MainTabSwitchNotification.cs" />
     <Compile Include="Interfaces\IMesService.cs" />

+ 2 - 0
TeamAAS-VM/ViewModels/MainWindowViewModel.cs

@@ -371,6 +371,8 @@ namespace TeamAAS_VP.ViewModels
             var homeviewmodel = _container.Resolve<HomeViewModel>();
             homeviewmodel.OnNavigatedTo(null);
 
+            management.CurrentRunStatus();
+
             _ = App.Current.Dispatcher.BeginInvoke(new Action(() =>
             {
                 _eventAggregator.GetEvent<ProgressNotification>().Publish(new UProgressBar.ProgressParameter { Maximum = max, Minimum = 0, SubTitle = $"{Lang.初始化中}...", Message = $"{Lang.完成}", Value = -1 });

+ 4 - 0
TeamAAS-VM/ViewModels/Product/ProductParamsViewModel.cs

@@ -301,6 +301,10 @@ namespace TeamAAS_VP.ViewModels.Product
                         DialogHost.Close("RootDialog");
                     }
                     await task;
+                    App.Current.Dispatcher.Invoke(() =>
+                    {
+                        _eventAggregator.GetEvent<TaskMessageNotification>().Publish(new Models.MessageStruct() { Message = "保存配方参数成功...", level = Enums.MessageLevel.Info });
+                    });
                 }
                 catch (Exception)
                 {

+ 13 - 4
TeamAAS-VM/ViewModels/SettingViewModel.cs

@@ -524,6 +524,10 @@ namespace TeamAAS_VP.ViewModels
         public DelegateCommand SaveProWithMesCommand =>
             _SaveProWithMesCommand ?? (_SaveProWithMesCommand = new DelegateCommand(ExecuteSaveProWithMesCommandAsync));
 
+        private DelegateCommand _CheckStatusCommand;
+        public DelegateCommand CheckStatusCommand =>
+            _CheckStatusCommand ?? (_CheckStatusCommand = new DelegateCommand(ExecuteCheckStatusCommandCommand));
+
         #endregion
 
         #region 事件
@@ -1177,7 +1181,7 @@ namespace TeamAAS_VP.ViewModels
 
                         try
                         {
-                            param=_configService.AddOrUpdateScrewFeeder(param);
+                            param = _configService.AddOrUpdateScrewFeeder(param);
                             // 直接添加对话框返回的对象(也可以根据需要映射字段)
                             ScrewFeederList.Add(param);
                         }
@@ -1287,7 +1291,10 @@ namespace TeamAAS_VP.ViewModels
 
             }
         }
-
+        private void ExecuteCheckStatusCommandCommand()
+        {
+            _eventAggregator.GetEvent<CurrentStatusNotification>().Publish();
+        }
         private void OnPropertyChanged(object sender, PropertyChangedEventArgs e)
         {
             switch (e.PropertyName)
@@ -1659,16 +1666,18 @@ namespace TeamAAS_VP.ViewModels
                     sysConfig.FixedCameraPickNum = FixedCameraPickNum;
                     sysConfig.FixedCameraPutNum = FixedCameraPutNum;
                     sysConfig.FixedCameracheckNum = FixedCameracheckNum;
-                    sysConfig.ScrewTeachNum= ScrewTeachNum;
+                    sysConfig.ScrewTeachNum = ScrewTeachNum;
                     sysConfig.PressureSensorConfig = PressureSensorConfig;
 
                     _configService.SaveSystemConfiguration(sysConfig);
                     await management.WriteSystemParameterToPlcAsync(sysConfig);
                     _eventAggregator.GetEvent<SnackbarMessageNotification>().Publish(new MessageParameter() { Msg = Lang.完成, Duration = 1 });
+                    _eventAggregator.GetEvent<CurrentStatusNotification>().Publish();
                 }
                 catch (Exception ex)
                 {
-                    _eventAggregator.GetEvent<SnackbarMessageNotification>().Publish(new MessageParameter() { Msg =ex.Message, Duration = 1 });
+                    _eventAggregator.GetEvent<SnackbarMessageNotification>().Publish(new MessageParameter() { Msg = ex.Message, Duration = 1 });
+                    _eventAggregator.GetEvent<CurrentStatusNotification>().Publish();
                 }
             }
         }

+ 22 - 8
TeamAAS-VM/Views/MainWindowView.xaml

@@ -115,14 +115,28 @@
                                              Foreground="{Binding NavigationIndex,Converter={StaticResource _NavigationState1},ConverterParameter=3}" />
                 </Button>
                 <materialDesign:Card Grid.Column="4"
-                                     Margin="10"
-                                     Background="{Binding management.StatusBackground}"
-                                     UniformCornerRadius="15">
-                    <TextBlock Text="{Binding MyTitle}"
-                               FontSize="{DynamicResource Font.Size.Title1}"
-                               HorizontalAlignment="Center"
-                               VerticalAlignment="Center"
-                               FontWeight="Bold"/>
+                      Margin="10"
+                      Background="White"
+                      UniformCornerRadius="15">
+                    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
+                        <TextBlock Text="{Binding MyTitle}"
+                 FontSize="{DynamicResource Font.Size.Title1}"
+                 HorizontalAlignment="Center"
+                    Margin="280,0,0,0"
+                 VerticalAlignment="Center"
+                 FontWeight="Bold"/>
+                        <materialDesign:Card HorizontalAlignment="Center" VerticalAlignment="Center" Margin="50,10" Background="{Binding management.RunModelBackground}" >
+                            <TextBlock Text="生产" FontSize="22" Margin="8" />
+                        </materialDesign:Card >
+                        <materialDesign:Card HorizontalAlignment="Center" VerticalAlignment="Center" Margin="20,10" Background="{Binding management.ManualModeBackground}" >
+                            <TextBlock Text="调机" FontSize="22" Margin="8"/>
+                        </materialDesign:Card>
+                        <materialDesign:Card HorizontalAlignment="Center" VerticalAlignment="Center" Margin="50,10" Background="{Binding management.ClearModeBackground}" >
+                            <TextBlock Text="流线" FontSize="22" Margin="8" />
+                        </materialDesign:Card>
+                    </StackPanel>
+
+
                 </materialDesign:Card>
                 <Button Grid.Column="5"
                         Style="{StaticResource MaterialDesignIconButton}"

+ 3 - 0
TeamAAS-VM/Views/SettingView.xaml

@@ -476,17 +476,20 @@
                                 <CheckBox Grid.Row="11"
                                           Grid.Column="1"
                                           IsChecked="{Binding SelectDeviceInfo.EnableMES, Mode=TwoWay}"
+                                           Command="{Binding CheckStatusCommand}"
                                           Margin="6,2" />
                                 <CheckBox Grid.Row="12"
                                           Grid.Column="1"
                                           Content="是否启用两次产品编号"
                                           IsChecked="{Binding SelectDeviceInfo.EnableDoubleMes, Mode=TwoWay}"
+                                           Command="{Binding CheckStatusCommand}"
                                           Margin="6,2" />
                                 <StackPanel Grid.Row="13"
                                             Grid.Column="1"
                                             Orientation="Horizontal">
                                     <CheckBox Content="是否保存CSV文件"
                                               IsChecked="{Binding SelectDeviceInfo.SaveCsv, Mode=TwoWay}"
+                                           Command="{Binding CheckStatusCommand}"
                                               Margin="6,2" />
                                     <CheckBox Content="是否保存ppid"
                                               IsChecked="{Binding SelectDeviceInfo.SaveCsvPPID, Mode=TwoWay}"