Ver código fonte

Merge branch 'KB-Mylar' of http://49.235.130.76/XXF_1122/DaisyNPILine into KB-Mylar

KWD 6 meses atrás
pai
commit
ab79cd2b9e

+ 59 - 0
TeamAAS-VM/Core/Management.cs

@@ -204,6 +204,35 @@ namespace TeamAAS_VP.Core
             get { return _dfc; }
             set { SetProperty(ref _dfc, value); }
         }
+        private Int64 _ThrowNumber;
+        /// <summary>
+        /// 抛料数
+        /// </summary>
+        public Int64 ThrowNumber
+        {
+            get { return _ThrowNumber; }
+            set { SetProperty(ref _ThrowNumber, value); }
+        }
+
+        private Int64 _NgNumber;
+        /// <summary>
+        /// ng数量
+        /// </summary>
+        public Int64 NgNumber
+        {
+            get { return _NgNumber; }
+            set { SetProperty(ref _NgNumber, value); }
+        }
+
+        private double _Yield;
+        /// <summary>
+        /// 良率
+        /// </summary>
+        public double Yield
+        {
+            get { return _Yield; }
+            set { SetProperty(ref _Yield, value); }
+        }
         #endregion
 
         #region 命令
@@ -1098,6 +1127,7 @@ namespace TeamAAS_VP.Core
                 addressConfig.In_RequestPosition.Address,
                 addressConfig.In_ScrewTeachExe.Address,
                 addressConfig.In_PickINC.Address,
+                 addressConfig.In_Throw.Address,
             };
             for (int i = 0; i < 10; i++)
             {
@@ -1254,6 +1284,7 @@ namespace TeamAAS_VP.Core
         bool _LastFixedCameraPickExe = false;
         bool _LastFixedCameraPutExe = false;
         bool _LastFixedCameracheckExe = false;
+        bool _LastThrowExe = false;
         Int16 _LastQrCodePhotoRequest = 0;
         Int16[] _LastWorkStart = new Int16[7];
         Int16[] _LastWorkDone = new Int16[7];
@@ -2201,6 +2232,30 @@ namespace TeamAAS_VP.Core
                         }
                     }
                 }
+                // 抛料计数
+                else if (addressConfig.In_Throw.Address.Contains(tuple.nodeId))
+                {
+                    if (tuple.value is bool state)
+                    {
+                        if (_LastThrowExe != state)
+                        {
+                            _LastThrowExe = state;
+                        }
+                        else
+                        {
+                            return;
+                        }
+                        if (state)
+                        {
+                            SendTaskMessage("收到抛料信号", MessageLevel.Info);
+                            await _systemDatabaseService.RecordThrowNumberAsync(new ThrowRecord()
+                            {
+                                DayTime = DateTime.Now,
+                                ThrowCount = 1
+                            });
+                        }
+                    }
+                }
                 else
                 {
                     // 过站检查
@@ -2871,6 +2926,10 @@ namespace TeamAAS_VP.Core
                 TotalQuantity = await _systemDatabaseService.GetOverallProductionAsync(currentproduct.Name);
                 TotalQuantityToday = await _systemDatabaseService.GetTodayProductionAsync(currentproduct.Name);
                 CurrentUPH = await _systemDatabaseService.GetLastHourProductionAsync(currentproduct.Name);
+                //
+                ThrowNumber = await _systemDatabaseService.GetThrowNumberAsync();
+                NgNumber = await _systemDatabaseService.GetNGProductionAsync(currentproduct.Name);
+                Yield = (TotalQuantityToday - NgNumber) / TotalQuantityToday * 100;
             }
             catch (Exception)
             {

+ 1 - 1
TeamAAS-VM/Data/DatabaseInitializer.cs

@@ -26,7 +26,7 @@ namespace TeamAAS_VP.Data
                 // 创建数据库(如果不存在)
                 _db.DbMaintenance.CreateDatabase();
                 // 创建表
-                _db.CodeFirst.InitTables(typeof(User), typeof(ProductionRecord), typeof(UserLoginRecord), typeof(AlarmRecord), typeof(LockResult), typeof(PhotoCaptureRecord), typeof(AssemblyRecord));
+                _db.CodeFirst.InitTables(typeof(User), typeof(ProductionRecord), typeof(UserLoginRecord), typeof(AlarmRecord), typeof(LockResult), typeof(PhotoCaptureRecord), typeof(AssemblyRecord), typeof(ThrowRecord));
 
                 // 创建索引
                 CreateIndexes();

+ 67 - 0
TeamAAS-VM/Data/SystemDatabaseService.cs

@@ -797,5 +797,72 @@ namespace TeamAAS_VP.Data
             if (record.ChangeTime == default(DateTime)) record.ChangeTime = DateTime.Now;
             await _db.Insertable(record).ExecuteCommandAsync();
         }
+
+
+        /// <summary>
+        /// 获取今天ng的数量
+        /// </summary>
+        /// <param name="productName"></param>
+        /// <returns></returns>
+        public async Task<int> GetNGProductionAsync(string productName)
+        {
+            //今天的起始时间
+            var todayStart = DateTime.Now.Date;
+            //今天的结束时间
+            var todayEnd = DateTime.Now.Date;
+            todayEnd = todayEnd.AddDays(1);
+            //按照产品名称和时间范围查询生产记录的总数
+            var total = await _db.Queryable<ProductionRecord>()
+                .Where(r => r.ProductName == productName && r.Timestamp >= todayStart && r.Timestamp < todayEnd && r.Category == "NG")
+                .SumAsync(r => r.Quantity);
+            return total;
+        }
+
+        #region 抛料
+        /// <summary>
+        /// 将一条抛料信息记录到数据库中
+        /// </summary>
+        /// <param name="record"></param>
+        /// <returns></returns>
+        /// <exception cref="ArgumentNullException"></exception>
+        public async Task RecordThrowNumberAsync(ThrowRecord record)
+        {
+            if (record == null) throw new ArgumentNullException(nameof(record));
+            record.Id = record.Id == Guid.Empty ? Guid.NewGuid() : record.Id;
+            await _db.Insertable(record).ExecuteCommandAsync();
+        }
+
+        /// <summary>
+        /// 获取抛料数量
+        /// </summary>
+        /// <returns></returns>
+        public async Task<int> GetThrowNumberAsync()
+        {
+            //今天的起始时间
+            var todayStart = DateTime.Now.Date;
+            //今天的结束时间
+            var todayEnd = DateTime.Now.Date;
+            todayEnd = todayEnd.AddDays(1);
+            //按照时间范围查询抛料的总数
+            var total = await _db.Queryable<ThrowRecord>()
+                .Where(r => r.DayTime >= todayStart && r.DayTime < todayEnd)
+                .SumAsync(r => r.ThrowCount);
+            return total;
+        }
+
+        /// <summary>
+        /// 重置抛料计数
+        /// </summary>
+        /// <returns></returns>
+        public async Task ResetThrowNumberAsync()
+        {
+            //今天的起始时间
+            var todayStart = DateTime.Now.Date;
+            //今天的结束时间
+            var todayEnd = DateTime.Now.Date;
+            todayEnd = todayEnd.AddDays(1);
+            await _db.Deleteable<ThrowRecord>().Where(r => r.DayTime >= todayStart && r.DayTime < todayEnd).ExecuteCommandAsync();
+        }
+        #endregion
     }
 }

+ 25 - 0
TeamAAS-VM/Interfaces/ISystemDatabaseService.cs

@@ -405,5 +405,30 @@ namespace TeamAAS_VP.Interfaces
 
         //组装过程记录
 
+        /// <summary>
+        /// 获取今天的ng数量
+        /// </summary>
+        /// <param name="productName"></param>
+        /// <returns></returns>
+        Task<int> GetNGProductionAsync(string productName);
+
+        /// <summary>
+        /// 将一条抛料信息记录到数据库中
+        /// </summary>
+        /// <param name="record"></param>
+        /// <returns></returns>
+        Task RecordThrowNumberAsync(ThrowRecord record);
+
+        /// <summary>
+        /// 获取抛料数量
+        /// </summary>
+        /// <returns></returns>
+        Task<int> GetThrowNumberAsync();
+
+        /// <summary>
+        /// 重置抛料计数
+        /// </summary>
+        /// <returns></returns>
+        Task ResetThrowNumberAsync();
     }
 }

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

@@ -643,6 +643,16 @@ namespace TeamAAS_VP.Models.PLC
             get { return _In_DryMode; }
             set { SetProperty(ref _In_DryMode, value); }
         }
+
+        private PlcAddress _In_Throw;
+        /// <summary>
+        /// 抛料信号
+        /// </summary>
+        public PlcAddress In_Throw
+        {
+            get { return _In_Throw; }
+            set { SetProperty(ref _In_Throw, value); }
+        }
         #endregion
 
         public PlcAddressConfig()
@@ -1115,6 +1125,11 @@ namespace TeamAAS_VP.Models.PLC
             Down_WetOut_Num_max.DataType = "float";
             Down_WetOut_Num_max.Description = "A_Camera Assy压力最大值";
 
+            In_Throw = Ensure(In_Throw);
+            In_Throw.Address = "ns=4;s=DB_Communication|Throw[0]";
+            In_Throw.DataType = "Bool";
+            In_Throw.Description = "抛料信号";
+
             // 说明:若项目中 PlcAddress 的实际属性名或类型与此不同(例如使用枚举、不同字段名),
             // 请根据实际类型调整赋值。本方法主要提供合理的默认字符串地址、数据类型及描述,便于后续从配置覆盖。
         }

+ 27 - 0
TeamAAS-VM/Models/ThrowRecord.cs

@@ -0,0 +1,27 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace TeamAAS_VP.Models
+{
+    [SugarTable("ThrowRecord")]
+    public class ThrowRecord
+    {
+        [SugarColumn(IsPrimaryKey = true)]
+        public Guid Id { get; set; } = Guid.NewGuid();
+
+        /// <summary>
+        /// 日期
+        /// </summary>
+        public DateTime DayTime { get; set; } = DateTime.Now;
+
+        /// <summary>
+        /// 抛料次数
+        /// </summary>
+        public int ThrowCount { get; set; }
+
+    }
+}

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

@@ -547,6 +547,7 @@
     <Compile Include="Models\ScanRs232ConfigModel.cs" />
     <Compile Include="Models\PressureModel.cs" />
     <Compile Include="Models\ScrewFeederBatchRecord.cs" />
+    <Compile Include="Models\ThrowRecord.cs" />
     <Compile Include="Services\MesService.cs" />
     <Compile Include="ValueConverter\CountToColumnsConverter.cs" />
     <Compile Include="ValueConverter\ImageFileNameFormatConverter.cs" />

+ 1 - 0
TeamAAS-VM/ViewModels/HomeViewModel.cs

@@ -398,6 +398,7 @@ namespace TeamAAS_VP.ViewModels
                 {
                     isCanExecute = false;
                     await _systemDatabaseService.ResetProductionAsync(currentProduct.Name);
+                    await _systemDatabaseService.ResetThrowNumberAsync();
                     isCanExecute = true;
                 }
             }

+ 77 - 1
TeamAAS-VM/Views/HomeView.xaml

@@ -222,6 +222,7 @@
                     <Grid.ColumnDefinitions>
                         <ColumnDefinition Width="*" />
                         <ColumnDefinition Width="*" />
+                        <ColumnDefinition Width="*" />
                     </Grid.ColumnDefinitions>
                     <!--加载产品-->
                     <materialDesign:Card Grid.Row="0"
@@ -356,7 +357,7 @@
                                        Text="{Binding management.TotalQuantityToday}" />
                             <TextBlock Grid.Row="2"
                                        Grid.Column="0"
-                                       Text="UPH"
+                                       Text="UPH: "
                                        HorizontalAlignment="Right"
                                        TextAlignment="Right" />
                             <Border Grid.Row="2"
@@ -369,6 +370,81 @@
                                        Text="{Binding management.CurrentUPH}" />
                         </Grid>
                     </materialDesign:Card>
+                    <!--生产数量2-->
+                    <materialDesign:Card Grid.Row="0"
+           Grid.Column="2"
+           UniformCornerRadius="10"
+           BorderBrush="LightGray"
+           BorderThickness="1">
+                        <Grid Grid.Row="1"
+HorizontalAlignment="Center"
+VerticalAlignment="Center">
+                            <Grid.RowDefinitions>
+                                <RowDefinition Height="auto" />
+                                <RowDefinition Height="auto" />
+                                <RowDefinition Height="auto" />
+                            </Grid.RowDefinitions>
+                            <Grid.ColumnDefinitions>
+                                <ColumnDefinition Width="auto" />
+                                <ColumnDefinition Width="auto" />
+                            </Grid.ColumnDefinitions>
+                            <Grid.Resources>
+                                <Style TargetType="TextBlock">
+                                    <Setter Property="FontSize"
+              Value="14" />
+                                    <Setter Property="Margin"
+              Value="5" />
+                                    <Setter Property="MinWidth"
+              Value="50" />
+                                    <Setter Property="HorizontalAlignment"
+              Value="Center" />
+                                    <Setter Property="VerticalAlignment"
+              Value="Center" />
+                                    <Setter Property="TextAlignment"
+              Value="Center" />
+                                    <Setter Property="TextTrimming"
+              Value="CharacterEllipsis" />
+                                </Style>
+                            </Grid.Resources>
+                            <TextBlock Text="抛料数:"
+         HorizontalAlignment="Right"
+         TextAlignment="Right" />
+                            <Border Grid.Row="0"
+      Grid.Column="1"
+      VerticalAlignment="Bottom"
+      BorderBrush="Gray"
+      BorderThickness="1" />
+                            <TextBlock Grid.Row="0"
+         Grid.Column="1"
+         Text="{Binding management.ThrowNumber}" />
+                            <TextBlock Grid.Row="1"
+         Grid.Column="0"
+         Text="NG数量:"
+         HorizontalAlignment="Right"
+         TextAlignment="Right" />
+                            <Border Grid.Row="1"
+      Grid.Column="1"
+      VerticalAlignment="Bottom"
+      BorderBrush="Gray"
+      BorderThickness="1" />
+                            <TextBlock Grid.Row="1"
+         Grid.Column="1"
+         Text="{Binding management.NgNumber}" />
+                            <TextBlock Grid.Row="2"
+         Grid.Column="0"
+         Text="良率:"
+         HorizontalAlignment="Right"
+         TextAlignment="Right" />
+                            <Border Grid.Row="2"
+      Grid.Column="1"
+      VerticalAlignment="Bottom"
+      BorderBrush="Gray"
+      BorderThickness="1" />
+                            <TextBlock Grid.Row="2"
+         Grid.Column="1"
+         Text="{Binding management.Yield,StringFormat={}{0:F2}%}" />
+                        </Grid>
+                    </materialDesign:Card>
                 </Grid>