wanghan 6 ヶ月 前
コミット
e3ed407a40

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

@@ -181,6 +181,36 @@ namespace TeamAAS_VP.Core
             set { SetProperty(ref _CurrentUPH, 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); }
+        }
+
         private XYD_ScrewDriver _ScrewDriver;
         public XYD_ScrewDriver ScrewDriver
         {
@@ -1178,6 +1208,7 @@ namespace TeamAAS_VP.Core
                 addressConfig.In_QrCodePhotoRequest.Address,
                 addressConfig.In_ScrewTeachExe.Address,
                 addressConfig.In_PickINC.Address,
+                addressConfig.In_Throw.Address,
             };
             var systemconfig = _configService.GetSystemConfiguration();
             for (int i = 0; i < 10; i++)
@@ -1267,6 +1298,7 @@ namespace TeamAAS_VP.Core
         bool _LastFixedCameraPickExe = false;
         bool _LastFixedCameraPutExe = false;
         bool _LastFixedCameracheckExe = false;
+        bool _LastThrowExe = false;
         Int16 _LastWorkStart = 0;
         Int16 _LastWorkDone = 0;
         Int16 _LastRequestPosition = 0;
@@ -2030,6 +2062,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
                 {
@@ -2633,6 +2689,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

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

+ 66 - 1
TeamAAS-VM/Data/SystemDatabaseService.cs

@@ -426,6 +426,25 @@ namespace TeamAAS_VP.Data
             return total;
         }
 
+        /// <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;
+        }
+
         /// <summary>
         /// 获取当前月的产能
         /// </summary>
@@ -1015,7 +1034,6 @@ namespace TeamAAS_VP.Data
         }
         #endregion
 
-
         #region 生成测试数据
 
         //定义一个方法来生成一些测试的数据,测试数据库写入和查询功能
@@ -1113,5 +1131,52 @@ namespace TeamAAS_VP.Data
         }
 
         #endregion
+
+        #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
     }
 }

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

@@ -216,6 +216,13 @@ namespace TeamAAS_VP.Interfaces
         /// <returns></returns>
         Task<int> GetLastHourProductionAsync(string productName);
 
+        /// <summary>
+        /// 获取今天的ng数量
+        /// </summary>
+        /// <param name="productName"></param>
+        /// <returns></returns>
+        Task<int> GetNGProductionAsync(string productName);
+
         /// <summary>
         /// 获取当前月的产能
         /// </summary>
@@ -485,5 +492,24 @@ namespace TeamAAS_VP.Interfaces
         /// <param name="operatorName"></param>
         /// <returns></returns>
         Task<int> IncrementLatestNozzleLockCountAsync(string operatorName = null);
+
+        /// <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();
     }
 }

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

@@ -704,6 +704,15 @@ namespace TeamAAS_VP.Models.PLC
             set { _ScrewProvide2 = value; }
         }
 
+        private PlcAddress _In_Throw;
+        /// <summary>
+        /// 抛料信号
+        /// </summary>
+        public PlcAddress In_Throw
+        {
+            get { return _In_Throw; }
+            set { SetProperty(ref _In_Throw, value); }
+        }
 
         #endregion
 
@@ -1192,6 +1201,11 @@ namespace TeamAAS_VP.Models.PLC
             ScrewProvide2.DataType = "Bool";
             ScrewProvide2.Description = "螺丝供料器1螺丝到位";
 
+            In_Throw = Ensure(In_Throw);
+            In_Throw.Address = "ns=4;s=DB_Communication|Throw[0]";
+            In_Throw.DataType = "Bool";
+            In_Throw.Description = "抛料信号";
+
             //ns=4;s=DB_Input|X16_螺丝供料器1螺丝到位
             //ns=4;s=DB_Input|X17_螺丝供料器2螺丝到位
 

+ 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

@@ -548,6 +548,7 @@
     <Compile Include="Models\ImageParameters.cs" />
     <Compile Include="Models\NozzleChangeRecord.cs" />
     <Compile Include="Models\NumberStatistics.cs" />
+    <Compile Include="Models\ThrowRecord.cs" />
     <Compile Include="Models\Torque\PickDynamicTestResult.cs" />
     <Compile Include="Models\Torque\PickScrewAccuracyAnalyzerrConfigModel.cs" />
     <Compile Include="Models\Torque\PlcPoint_Torque.cs" />

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

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

+ 80 - 4
TeamAAS-VM/Views/HomeView.xaml

@@ -171,6 +171,7 @@
                     <Grid.ColumnDefinitions>
                         <ColumnDefinition Width="*" />
                         <ColumnDefinition Width="*" />
+                        <ColumnDefinition Width="*" />
                     </Grid.ColumnDefinitions>
                     <!--加载产品-->
                     <materialDesign:Card Grid.Row="0"
@@ -305,7 +306,7 @@
                                        Text="{Binding management.TotalQuantityToday}" />
                             <TextBlock Grid.Row="2"
                                        Grid.Column="0"
-                                       Text="UPH"
+                                       Text="UPH: "
                                        HorizontalAlignment="Right"
                                        TextAlignment="Right" />
                             <Border Grid.Row="2"
@@ -318,6 +319,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>
 
                 <StackPanel Grid.Row="2"
@@ -356,7 +432,7 @@
                             materialDesign:ButtonAssist.CornerRadius="10"
                             Style="{StaticResource MaterialDesignRaisedButton}"
                             Command="{Binding AddScrewCommand}"
-                            IsEnabled="{Binding IsAllowEdit}" /> 
+                            IsEnabled="{Binding IsAllowEdit}" />
 
                     <Button Content="更换披头"
                             Margin="3"
@@ -373,7 +449,7 @@
                 </StackPanel>
 
             </Grid>
-            
+
             <materialDesign:Card Grid.Row="1"
                                  UniformCornerRadius="10"
                                  BorderBrush="LightGray"
@@ -435,7 +511,7 @@
                     </StackPanel>
                 </Grid>
             </materialDesign:Card>
-            
+
             <materialDesign:Card Grid.Row="2"
                                  UniformCornerRadius="10"
                                  BorderBrush="LightGray"