Просмотр исходного кода

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

KWD 5 месяцев назад
Родитель
Сommit
727514a1f6

+ 55 - 9
TeamAAS-VM/Core/Management.cs

@@ -918,7 +918,7 @@ namespace TeamAAS_VP.Core
                 try
                 {
                     await WriteSystemParameterToPlcAsync(_configService.GetSystemConfiguration());
-                    await WritePositionToPlcAsync();
+                    await WriteParameterToPlcExAsync();
                 }
                 catch (Exception ex)
                 {
@@ -1118,6 +1118,17 @@ namespace TeamAAS_VP.Core
             plc.SubscribeNodes("AutoSensor", monitorNodeIds, PlcCommandTrigger);
         }
 
+        /// <summary>
+        /// 将产品的参数统一写入PLC
+        /// </summary>
+        /// <returns></returns>
+        public async Task WriteParameterToPlcExAsync()
+        {
+            await WritePositionToPlcAsync();// 写入点位信息给PLC
+            await WriteParameterToPlcAsync();// 写入组装上下限给PLC
+            await WriteProductLoadModeToPLC();//把当前产品型号,写入PLC
+        }
+
         /// <summary>
         /// 写入点位信息给PLC
         /// </summary>
@@ -1189,6 +1200,10 @@ namespace TeamAAS_VP.Core
             }
         }
 
+        /// <summary>
+        /// 写入组装上下限给PLC
+        /// </summary>
+        /// <returns></returns>
         public async Task WriteParameterToPlcAsync()
         {
             var addressConfig = _configService.GetPlcAddresses();
@@ -1209,7 +1224,38 @@ namespace TeamAAS_VP.Core
             {
 
             }
+        }
+
+        /// <summary>
+        /// 将当前产品类型写入PLC
+        /// </summary>
+        /// <param name="mode"></param>
+        public async Task WriteProductLoadModeToPLC(int modeIndex)
+        {
+            var addressConfig = _configService.GetPlcAddresses();
+            var plc = _plcService.GetPlcByNumber(addressConfig.PlcNo) as OpcUaClientPLC;
+            if (plc == null || !plc.IsConnected) return;
+
+            await plc.WriteNodeAsync(addressConfig.Out_ProductLoadMode.Address, (Int16)modeIndex);
+        }
+
+        /// <summary>
+        /// 将当前产品类型写入PLC
+        /// </summary>
+        /// <param name="mode"></param>
+        public async Task WriteProductLoadModeToPLC()
+        {
+            var addressConfig = _configService.GetPlcAddresses();
+            var plc = _plcService.GetPlcByNumber(addressConfig.PlcNo) as OpcUaClientPLC;
+            if (plc == null || !plc.IsConnected) return;
+
+            var current = _productService.GetCurrentProduct();
+            if (current == null) return;
+
+            var qMes = await _systemDatabaseService.QueryProductFromMesAsync(current.Name);
+            if (qMes == null) return;
 
+            await plc.WriteNodeAsync(addressConfig.Out_ProductLoadMode.Address, (Int16)qMes.ProductLoadMode);
         }
 
         /// <summary>
@@ -2349,13 +2395,13 @@ namespace TeamAAS_VP.Core
                                                 if (i == 0)//i=0时才会切换产品
                                                 {
                                                     var q = await _systemDatabaseService.QueryProductFromMesAsync(model_num[i], color[i]);
-                                                    if (!string.IsNullOrEmpty(q))
+                                                    if (q != null && !string.IsNullOrEmpty(q.ProductName))
                                                     {
                                                         ProductList = new ObservableCollection<ProductModel>(_productService.GetAllProducts());
                                                         Guid productId = Guid.Empty;
                                                         foreach (var itt in ProductList)
                                                         {
-                                                            if (itt.Name == q)
+                                                            if (itt.Name == q.ProductName)
                                                             {
                                                                 productId = itt.ID;
                                                                 break;
@@ -2364,9 +2410,9 @@ namespace TeamAAS_VP.Core
                                                         if (currentProduct.ID != productId)
                                                         {
                                                             //切换产品
-                                                            _productService.LoadProduct(productId);
+                                                            await _productService.LoadProductAsync(productId);
                                                             _productService.SetCurrentProduct(productId);
-                                                            await WritePositionToPlcAsync();
+                                                            await WriteParameterToPlcExAsync();
                                                             SendTaskMessage($"切换产品成功", MessageLevel.Debug);
                                                         }
                                                     }
@@ -2443,13 +2489,13 @@ namespace TeamAAS_VP.Core
                                             if (i == 0)//i=0时才会切换产品
                                             {
                                                 var q = await _systemDatabaseService.QueryProductFromMesAsync(model_num[i], color[i]);
-                                                if (!string.IsNullOrEmpty(q))
+                                                if (q != null && !string.IsNullOrEmpty(q.ProductName))
                                                 {
                                                     ProductList = new ObservableCollection<ProductModel>(_productService.GetAllProducts());
                                                     Guid productId = Guid.Empty;
                                                     foreach (var itt in ProductList)
                                                     {
-                                                        if (itt.Name == q)
+                                                        if (itt.Name == q.ProductName)
                                                         {
                                                             productId = itt.ID;
                                                             break;
@@ -2458,9 +2504,9 @@ namespace TeamAAS_VP.Core
                                                     if (currentProduct.ID != productId)
                                                     {
                                                         //切换产品
-                                                        _productService.LoadProduct(productId);
+                                                        await _productService.LoadProductAsync(productId);
                                                         _productService.SetCurrentProduct(productId);
-                                                        await WritePositionToPlcAsync();
+                                                        await WriteParameterToPlcExAsync();
                                                         SendTaskMessage($"切换产品成功", MessageLevel.Debug);
                                                     }
                                                 }

+ 35 - 29
TeamAAS-VM/Data/SystemDatabaseService.cs

@@ -126,7 +126,7 @@ namespace TeamAAS_VP.Data
             {
                 UserId = userId,
                 Success = true,
-                Time = DateTime.Now,
+                Time = DateTime.UtcNow,
                 Message = "Set as current user"
             };
 
@@ -146,7 +146,7 @@ namespace TeamAAS_VP.Data
             {
                 UserId = user.Id,
                 Success = true,
-                Time = DateTime.Now,
+                Time = DateTime.UtcNow,
                 Message = user.UserName
             };
             await RecordUserLoginAsync(rec);
@@ -176,9 +176,9 @@ namespace TeamAAS_VP.Data
             ////如果没有登录记录则返回一个默认的用户,即第一个用户
             //if (rec == null) return _db.Queryable<User>().First();
             //return _db.Queryable<User>().InSingle(rec.UserId);
-            if (CurrentUser==null)
+            if (CurrentUser == null)
             {
-                CurrentUser= _db.Queryable<User>().ToList().FirstOrDefault();
+                CurrentUser = _db.Queryable<User>().ToList().FirstOrDefault();
             }
             return CurrentUser;
         }
@@ -190,7 +190,7 @@ namespace TeamAAS_VP.Data
         public async Task RecordUserLoginAsync(UserLoginRecord record)
         {
             if (record == null) throw new ArgumentNullException(nameof(record));
-            if (record.Time == default(DateTime)) record.Time = DateTime.Now;
+            if (record.Time == default(DateTime)) record.Time = DateTime.UtcNow;
             await _db.Insertable(record).ExecuteCommandAsync();
         }
 
@@ -397,10 +397,10 @@ namespace TeamAAS_VP.Data
         public async Task<int> GetTodayProductionAsync(string productName)
         {
             //今天的起始时间
-            var todayStart = DateTime.Now.Date;
+            var todayStart = DateTime.UtcNow.Date;
             //今天的结束时间
-            var todayEnd = DateTime.Now.Date;
-            todayEnd= todayEnd.AddDays(1);
+            var todayEnd = DateTime.UtcNow.Date;
+            todayEnd = todayEnd.AddDays(1);
             //按照产品名称和时间范围查询生产记录的总数
             var total = await _db.Queryable<ProductionRecord>()
                 .Where(r => r.ProductName == productName && r.Timestamp >= todayStart && r.Timestamp < todayEnd)
@@ -415,8 +415,8 @@ namespace TeamAAS_VP.Data
         /// <returns></returns>
         public async Task<int> GetLastHourProductionAsync(string productName)
         {
-                        var lastHourStart = DateTime.Now.AddHours(-1);
-            var lastHourEnd = DateTime.Now;
+            var lastHourStart = DateTime.UtcNow.AddHours(-1);
+            var lastHourEnd = DateTime.UtcNow;
             //按照产品名称和时间范围查询生产记录的总数
             var total = await _db.Queryable<ProductionRecord>()
                 .Where(r => r.ProductName == productName && r.Timestamp >= lastHourStart && r.Timestamp < lastHourEnd)
@@ -432,7 +432,7 @@ namespace TeamAAS_VP.Data
         public Task<int> GetCurrentMonthProductionAsync(string productName)
         {
 
-            var now = DateTime.Now;
+            var now = DateTime.UtcNow;
             var monthStart = new DateTime(now.Year, now.Month, 1);
             var monthEnd = monthStart.AddMonths(1);
             //按照产品名称和时间范围查询生产记录的总数
@@ -449,7 +449,7 @@ namespace TeamAAS_VP.Data
         /// <returns></returns>
         public Task<int> GetCurrentWeekProductionAsync(string productName)
         {
-            var now = DateTime.Now;
+            var now = DateTime.UtcNow;
             var weekStart = FirstDayOfWeek(now);
             var weekEnd = weekStart.AddDays(7);
             //按照产品名称和时间范围查询生产记录的总数
@@ -522,7 +522,7 @@ namespace TeamAAS_VP.Data
         /// <returns></returns>
         public async Task<Dictionary<DateTime, Dictionary<string, int>>> GetMonthlyProductionByDayAndCategoryAsync(string productName)
         {
-            var now = DateTime.Now;
+            var now = DateTime.UtcNow;
             var monthStart = new DateTime(now.Year, now.Month, 1);
             var monthEnd = monthStart.AddMonths(1);
             var list = await _db.Queryable<ProductionRecord>()
@@ -547,7 +547,7 @@ namespace TeamAAS_VP.Data
         /// <returns></returns>
         public async Task<Dictionary<int, Dictionary<string, int>>> GetWeeklyProductionByDayAndCategoryAsync(string productName)
         {
-            var now = DateTime.Now;
+            var now = DateTime.UtcNow;
             var weekStart = FirstDayOfWeek(now);
             var weekEnd = weekStart.AddDays(7);
             var list = await _db.Queryable<ProductionRecord>()
@@ -571,7 +571,7 @@ namespace TeamAAS_VP.Data
         /// <returns></returns>
         public async Task<Dictionary<int, Dictionary<string, int>>> GetDailyProductionByHourAndCategoryAsync(string productName)
         {
-            var now = DateTime.Now;
+            var now = DateTime.UtcNow;
             var dayStart = now.Date;
             var dayEnd = dayStart.AddDays(1);
             var list = await _db.Queryable<ProductionRecord>()
@@ -614,7 +614,7 @@ namespace TeamAAS_VP.Data
         public async Task RecordAlarmAsync(AlarmRecord alarm)
         {
             if (alarm == null) throw new ArgumentNullException(nameof(alarm));
-            if (alarm.Time == default(DateTime)) alarm.Time = DateTime.Now;
+            if (alarm.Time == default(DateTime)) alarm.Time = DateTime.UtcNow;
             await _db.Insertable(alarm).ExecuteCommandAsync();
         }
 
@@ -646,7 +646,7 @@ namespace TeamAAS_VP.Data
         public async Task RecordPhotoCaptureAsync(PhotoCaptureRecord record)
         {
             if (record == null) throw new ArgumentNullException(nameof(record));
-            if (record.CaptureTime == default(DateTime)) record.CaptureTime = DateTime.Now;
+            if (record.CaptureTime == default(DateTime)) record.CaptureTime = DateTime.UtcNow;
             record.Id = record.Id == Guid.Empty ? Guid.NewGuid() : record.Id;
             await _db.Insertable(record).ExecuteCommandAsync();
         }
@@ -699,7 +699,7 @@ namespace TeamAAS_VP.Data
         public async Task RecordAssemblyAsync(AssemblyRecord record)
         {
             if (record == null) throw new ArgumentNullException(nameof(record));
-            if (record.Timestamp == default(DateTime)) record.Timestamp = DateTime.Now;
+            if (record.Timestamp == default(DateTime)) record.Timestamp = DateTime.UtcNow;
             record.Id = record.Id == Guid.Empty ? Guid.NewGuid() : record.Id;
             await _db.Insertable(record).ExecuteCommandAsync();
         }
@@ -747,7 +747,7 @@ namespace TeamAAS_VP.Data
             try
             {
                 if (result == null) throw new ArgumentNullException(nameof(result));
-                if (result.Timestamp == default(DateTime)) result.Timestamp = DateTime.Now;
+                if (result.Timestamp == default(DateTime)) result.Timestamp = DateTime.UtcNow;
                 await _db.Insertable(result).ExecuteCommandAsync();
             }
             catch (Exception)
@@ -787,14 +787,14 @@ namespace TeamAAS_VP.Data
             var list = await q.OrderBy(r => r.Timestamp, OrderByType.Desc).ToListAsync();
             return list;
         }
-        
+
         /// <summary>
         /// 记录一次螺丝供料器批次更换记录
         /// </summary>
         public async Task RecordScrewFeederBatchAsync(ScrewFeederBatchRecord record)
         {
             if (record == null) throw new ArgumentNullException(nameof(record));
-            if (record.ChangeTime == default(DateTime)) record.ChangeTime = DateTime.Now;
+            if (record.ChangeTime == default(DateTime)) record.ChangeTime = DateTime.UtcNow;
             await _db.Insertable(record).ExecuteCommandAsync();
         }
 
@@ -865,7 +865,6 @@ namespace TeamAAS_VP.Data
         }
         #endregion
 
-
         #region 产品和mes的绑定,自动切换产品
         /// <summary>
         /// 添加绑定信息
@@ -930,18 +929,25 @@ namespace TeamAAS_VP.Data
         }
 
         /// <summary>
-        /// 通过产品的编码和颜色查询产品的名称
+        /// 通过产品的编码和颜色查询产品
         /// </summary>
         /// <param name="code"></param>
         /// <returns></returns>
-        public async Task<string> QueryProductFromMesAsync(string code, string color)
+        public async Task<ProductWithMes> QueryProductFromMesAsync(string code, string color)
         {
             var v = await _db.Queryable<ProductWithMes>().Where(r => r.ProductCode == code && r.ProductColor == color).FirstAsync();
-            if (v == null || v.ProductName == null)
-            {
-                return "";
-            }
-            return v.ProductName;
+            return v;
+        }
+
+        /// <summary>
+        /// 通过产品名称的查询产品
+        /// </summary>
+        /// <param name="code"></param>
+        /// <returns></returns>
+        public async Task<ProductWithMes> QueryProductFromMesAsync(string name)
+        {
+            var v = await _db.Queryable<ProductWithMes>().Where(r => r.ProductName == name).FirstAsync();
+            return v;
         }
         #endregion
     }

+ 10 - 2
TeamAAS-VM/Interfaces/ISystemDatabaseService.cs

@@ -405,6 +405,7 @@ namespace TeamAAS_VP.Interfaces
 
         //组装过程记录
 
+
         /// <summary>
         /// 获取今天的ng数量
         /// </summary>
@@ -473,11 +474,18 @@ namespace TeamAAS_VP.Interfaces
         Task<List<ProductWithMes>> QueryProductWithMesALLAsync();
 
         /// <summary>
-        /// 通过产品的编码和颜色查询产品的id
+        /// 通过产品的编码和颜色查询产品
+        /// </summary>
+        /// <param name="code"></param>
+        /// <returns></returns>
+        Task<ProductWithMes> QueryProductFromMesAsync(string code, string color);
+
+        /// <summary>
+        /// 通过产品名称的查询产品
         /// </summary>
         /// <param name="code"></param>
         /// <returns></returns>
-        Task<string> QueryProductFromMesAsync(string code, string color);
+        Task<ProductWithMes> QueryProductFromMesAsync(string name);
         #endregion
     }
 }

+ 18 - 3
TeamAAS-VM/Models/PLC/PlcAddressConfig.cs

@@ -40,14 +40,24 @@ namespace TeamAAS_VP.Models.PLC
             set { SetProperty(ref _PlcNo, value); }
         }
 
-        private PlcAddress _WorkMode = new PlcAddress();
+        private PlcAddress _Out_ProductLoadMode;
+        /// <summary>
+        /// 产品切换类型
+        /// </summary>
+        public PlcAddress Out_ProductLoadMode
+        {
+            get { return _Out_ProductLoadMode; }
+            set { SetProperty(ref _Out_ProductLoadMode, value); }
+        }
+
+        private PlcAddress _Out_WorkMode = new PlcAddress();
         /// <summary>
         /// 工作模式 =1 拍1打1 =2 拍1打所有
         /// </summary>
         public PlcAddress Out_WorkMode
         {
-            get { return _WorkMode; }
-            set { SetProperty(ref _WorkMode, value); }
+            get { return _Out_WorkMode; }
+            set { SetProperty(ref _Out_WorkMode, value); }
         }
 
         private PlcAddress _PickPointNum = new PlcAddress();
@@ -715,6 +725,11 @@ namespace TeamAAS_VP.Models.PLC
             Out_QrCodePhotoResault.Description = "二维码拍照结果";
 
             // 2. 按 JSON 提供的数据设置默认值(以当前属性名为准)
+            Out_ProductLoadMode = Ensure(Out_ProductLoadMode);
+            Out_ProductLoadMode.Address = "ns=4;s=DB_Communication|FromPC.ProductLoadMode";
+            Out_ProductLoadMode.DataType = "int16";
+            Out_ProductLoadMode.Description = "产品切换类型";
+
             Out_WorkMode = Ensure(Out_WorkMode);
             Out_WorkMode.Address = "ns=4;s=DB_Communication|FromPC.WorkMode";
             Out_WorkMode.DataType = "int16";

+ 10 - 0
TeamAAS-VM/Models/ProductWithMes.cs

@@ -47,5 +47,15 @@ namespace TeamAAS_VP.Models
             get { return _ProductColor; }
             set { SetProperty(ref _ProductColor, value); }
         }
+
+        private int _ProductLoadMode;
+        /// <summary>
+        /// 产品加载编号
+        /// </summary>
+        public int ProductLoadMode
+        {
+            get { return _ProductLoadMode; }
+            set { SetProperty(ref _ProductLoadMode, value); }
+        }
     }
 }

+ 2 - 3
TeamAAS-VM/ViewModels/HomeViewModel.cs

@@ -270,10 +270,9 @@ namespace TeamAAS_VP.ViewModels
                     var waiting = new WaitingControl();
                     //show the dialog
                     var task = DialogHost.Show(waiting, "RootDialog", null, null, null);
-                    _productService.LoadProduct(product.ID);
+                    await _productService.LoadProductAsync(product.ID);
                     _productService.SetCurrentProduct(product.ID);
-                    await management.WriteParameterToPlcAsync();
-                    await management.WritePositionToPlcAsync();
+                    await management.WriteParameterToPlcExAsync();
                     if (DialogHost.IsDialogOpen("RootDialog"))
                     {
                         DialogHost.Close("RootDialog");

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

@@ -355,8 +355,7 @@ namespace TeamAAS_VP.ViewModels
                     }
                 }
                 _container.Resolve<ShowVisionRenderViewModel>().Renders = management.Renders;
-                await management.WriteParameterToPlcAsync();
-                await management.WritePositionToPlcAsync();
+                await management.WriteParameterToPlcExAsync();
             }
             var homeviewmodel = _container.Resolve<HomeViewModel>();
             homeviewmodel.OnNavigatedTo(null);

+ 1 - 1
TeamAAS-VM/ViewModels/Product/ProductParamsViewModel.cs

@@ -294,7 +294,7 @@ namespace TeamAAS_VP.ViewModels.Product
                     var current = _productService.GetCurrentProduct();
                     if (current != null && current.IsLoad)
                     {
-                        await management.WritePositionToPlcAsync();
+                        await management.WriteParameterToPlcExAsync();
                     }
                     if (DialogHost.IsDialogOpen("RootDialog"))
                     {

+ 3 - 0
TeamAAS-VM/ViewModels/SettingViewModel.cs

@@ -1805,11 +1805,13 @@ namespace TeamAAS_VP.ViewModels
             {
                 ProMesInfo.ProductCode = "";
                 ProMesInfo.ProductColor = "";
+                ProMesInfo.ProductLoadMode = 0;
             }
             else
             {
                 ProMesInfo.ProductCode = v.ProductCode;
                 ProMesInfo.ProductColor = v.ProductColor;
+                ProMesInfo.ProductLoadMode = v.ProductLoadMode;
             }
         }
 
@@ -1824,6 +1826,7 @@ namespace TeamAAS_VP.ViewModels
                 {
                     ProMesInfo.ProductCode = "";
                     ProMesInfo.ProductColor = "";
+                    ProMesInfo.ProductLoadMode = 0;
                 }
             }
         }

+ 24 - 2
TeamAAS-VM/Views/SettingView.xaml

@@ -2976,7 +2976,8 @@
                                 <ColumnDefinition Width="auto" />
                             </Grid.ColumnDefinitions>
                             <Grid.RowDefinitions>
-                                <RowDefinition Height="auto" />
+                                <RowDefinition Height=" auto" />
+                                <RowDefinition Height=" auto" />
                                 <RowDefinition Height=" auto" />
                                 <RowDefinition Height=" auto" />
                                 <RowDefinition Height=" auto" />
@@ -3056,7 +3057,28 @@
                                 </TextBox.Text>
                             </TextBox>
 
-                            <StackPanel Grid.Row="5"
+                            <TextBlock Margin="0,0,0,8"
+                                       Grid.Row="3"
+                                       VerticalAlignment="Center"
+                                       Text="产品类型:"
+                                       FontSize="{DynamicResource Font.Size.Body3}"
+                                       HorizontalAlignment="Right" />
+                            <TextBox Grid.Row="3"
+                                     Grid.Column="1"
+                                     Margin="10,4"
+                                     MinWidth="100"
+                                     FontSize="{DynamicResource Font.Size.Body3}"
+                                     TextAlignment="Center"
+                                     HorizontalAlignment="Left"
+                                     VerticalAlignment="Center">
+                                <TextBox.Text>
+                                    <Binding Path="ProMesInfo.ProductLoadMode"
+                                             Mode="TwoWay">
+                                    </Binding>
+                                </TextBox.Text>
+                            </TextBox>
+
+                            <StackPanel Grid.Row="6"
                                         Grid.ColumnSpan="2"
                                         Margin="0,6"
                                         Orientation="Horizontal"