From 7fd5c975d2f4e05c28e578dd85941d2349cfef26 Mon Sep 17 00:00:00 2001 From: "liulb@mesnac.com" Date: Sun, 31 Dec 2023 15:10:39 +0800 Subject: [PATCH] new --- Admin.Core.Api/Admin.Core.Model.xml | 75 ++++++ .../IBoxFoamDataRealTimeRepository.cs | 14 + ...oServices.cs => IBoxDeviceInfoServices.cs} | 0 .../IBoxFoamDataRealTimeServices.cs | 16 ++ .../Model_New/BoxFoamDataRealTime.cs | 99 +++++++ .../BoxFoamDataRealTimeRepositor.cs | 19 ++ .../BoxFoamDataRealTimeServices.cs | 28 ++ .../Business/CollectionFoamLine.cs | 241 +++++++++++++++--- .../Business/InStoreBusiness.cs | 4 +- Aucma.Core.BoxFoam/Models/FixtureStatus.cs | 50 ++++ .../ViewModels/FoamMonitorPageViewModel.cs | 150 +++++++++-- .../ViewModels/MainWindowViewModel.cs | 4 +- Aucma.Core.BoxFoam/appsettings.json | 3 +- Aucma.Core.HwPLc/Impl/SiemensPlc.cs | 2 +- .../ViewModels/OldBoxFoamPageViewModel.cs | 19 +- Aucma.Core.OldBoxFoam/appsettings.json | 12 +- .../ViewModels/QuantityIssuedViewModel.cs | 8 +- 17 files changed, 656 insertions(+), 88 deletions(-) create mode 100644 Admin.Core.IRepository/IRepository_New/IBoxFoamDataRealTimeRepository.cs rename Admin.Core.IService/IService_New/{BoxDeviceInfoServices.cs => IBoxDeviceInfoServices.cs} (100%) create mode 100644 Admin.Core.IService/IService_New/IBoxFoamDataRealTimeServices.cs create mode 100644 Admin.Core.Model/Model_New/BoxFoamDataRealTime.cs create mode 100644 Admin.Core.Repository/Repository_New/BoxFoamDataRealTimeRepositor.cs create mode 100644 Admin.Core.Service/Service_New/BoxFoamDataRealTimeServices.cs create mode 100644 Aucma.Core.BoxFoam/Models/FixtureStatus.cs diff --git a/Admin.Core.Api/Admin.Core.Model.xml b/Admin.Core.Api/Admin.Core.Model.xml index 9c1d5724..3542a5fc 100644 --- a/Admin.Core.Api/Admin.Core.Model.xml +++ b/Admin.Core.Api/Admin.Core.Model.xml @@ -1231,6 +1231,81 @@ 更新时间 + + + 夹具实时数据 + + + + + 主键 + + + + + 夹具序号 + + + + + 产线编码 + + + + + 夹具箱型 + + + + + 夹具状态 + + + + + 夹具产量 + + + + + 夹具固化时间设定值 + + + + + 夹具固化时间显示值 + + + + + 模具内温度 + + + + + 模具外温度 + + + + + 创建人 + + + + + 创建时间 + + + + + 更新人 + + + + + 更新时间 + + 每日发泡信息数据记录表 diff --git a/Admin.Core.IRepository/IRepository_New/IBoxFoamDataRealTimeRepository.cs b/Admin.Core.IRepository/IRepository_New/IBoxFoamDataRealTimeRepository.cs new file mode 100644 index 00000000..56d59f86 --- /dev/null +++ b/Admin.Core.IRepository/IRepository_New/IBoxFoamDataRealTimeRepository.cs @@ -0,0 +1,14 @@ +using Admin.Core.Model; +using Admin.Core.Model.Model_New; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace Admin.Core.IRepository +{ + /// + /// IBoxFoamDataRealTimeRepository + /// + public interface IBoxFoamDataRealTimeRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/Admin.Core.IService/IService_New/BoxDeviceInfoServices.cs b/Admin.Core.IService/IService_New/IBoxDeviceInfoServices.cs similarity index 100% rename from Admin.Core.IService/IService_New/BoxDeviceInfoServices.cs rename to Admin.Core.IService/IService_New/IBoxDeviceInfoServices.cs diff --git a/Admin.Core.IService/IService_New/IBoxFoamDataRealTimeServices.cs b/Admin.Core.IService/IService_New/IBoxFoamDataRealTimeServices.cs new file mode 100644 index 00000000..dae46dbb --- /dev/null +++ b/Admin.Core.IService/IService_New/IBoxFoamDataRealTimeServices.cs @@ -0,0 +1,16 @@ +using Admin.Core.IService; +using Admin.Core.Model; +using Admin.Core.Model.ViewModels; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace Admin.Core.IService +{ + /// + /// IBoxFoamDataRealTimeServices + /// + public interface IBoxFoamDataRealTimeServices : IBaseServices + { + + } +} \ No newline at end of file diff --git a/Admin.Core.Model/Model_New/BoxFoamDataRealTime.cs b/Admin.Core.Model/Model_New/BoxFoamDataRealTime.cs new file mode 100644 index 00000000..f9aa3f40 --- /dev/null +++ b/Admin.Core.Model/Model_New/BoxFoamDataRealTime.cs @@ -0,0 +1,99 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Admin.Core.Model +{ + /// + /// 夹具实时数据 + /// + [SugarTable("BOX_FOAMDATAREALTIME", "AUCMA_SCADA")] + public class BoxFoamDataRealTime + { + /// + /// 主键 + /// + [SugarColumn(ColumnName = "OBJ_ID", IsPrimaryKey = true, IsIdentity = true)] + public int ObjId { get; set; } + /// + /// 夹具序号 + /// + [SugarColumn(ColumnName = "SERIALNUMBER")] + public int SerialNumber { get; set; } + /// + /// 产线编码 + /// + [SugarColumn(ColumnName = "PRODUCTLINE_CODE")] + public string ProductlineCode { get; set; } + + /// + /// 夹具箱型 + /// + [SugarColumn(ColumnName = "FIXTURE_BOXTYPE")] + public string FixtureBoxtype { get; set; } + + /// + /// 夹具状态 + /// + [SugarColumn(ColumnName = "FIXTURE_STATUS")] + public string FixtureStatus { get; set; } + + /// + /// 夹具产量 + /// + [SugarColumn(ColumnName = "FIXTURE_PRODUCTIONCAPACITY")] + public int FixtureProductioncapacity { get; set; } + + /// + /// 夹具固化时间设定值 + /// + [SugarColumn(ColumnName = "FIXTURE_CURINGTIMESETTINGVALUE")] + public string FixtureCuringtimesettingvalue { get; set; } + + /// + /// 夹具固化时间显示值 + /// + [SugarColumn(ColumnName = "FIXTURE_ACTUALTIME")] + public string FixtureActualtime { get; set; } + + /// + /// 模具内温度 + /// + [SugarColumn(ColumnName = "MODE_INTERNALTEMPERATURE")] + public string ModeInternaltemperature { get; set; } + + /// + /// 模具外温度 + /// + [SugarColumn(ColumnName = "MODE_OUTSIDETEMPERATURE")] + public string ModeOutsidetemperature { get; set; } + + /// + /// 创建人 + /// + [SugarColumn(ColumnName = "CREATED_BY")] + public string CreatedBy { get; set; } + + /// + /// 创建时间 + /// + [SugarColumn(ColumnName = "CREATED_TIME")] + public DateTime CreatedTime { get; set; } + + /// + /// 更新人 + /// + [SugarColumn(ColumnName = "UPDATED_BY")] + public string UpdatedBy { get; set; } + + /// + /// 更新时间 + /// + [SugarColumn(ColumnName = "UPDATED_TIME")] + public DateTime UpdatedTime { get; set; } + + } +} diff --git a/Admin.Core.Repository/Repository_New/BoxFoamDataRealTimeRepositor.cs b/Admin.Core.Repository/Repository_New/BoxFoamDataRealTimeRepositor.cs new file mode 100644 index 00000000..93e4a105 --- /dev/null +++ b/Admin.Core.Repository/Repository_New/BoxFoamDataRealTimeRepositor.cs @@ -0,0 +1,19 @@ +using Admin.Core.IRepository; +using Admin.Core.Model; +using Admin.Core.Model.Model_New; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace Admin.Core.Repository +{ + /// + /// BaseBomInfoRepository + /// + public class BoxFoamDataRealTimeRepository : BaseRepository, IBoxFoamDataRealTimeRepository + { + public BoxFoamDataRealTimeRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + + } +} \ No newline at end of file diff --git a/Admin.Core.Service/Service_New/BoxFoamDataRealTimeServices.cs b/Admin.Core.Service/Service_New/BoxFoamDataRealTimeServices.cs new file mode 100644 index 00000000..49b1a487 --- /dev/null +++ b/Admin.Core.Service/Service_New/BoxFoamDataRealTimeServices.cs @@ -0,0 +1,28 @@ +using Admin.Core.IRepository; +using Admin.Core.IService; +using Admin.Core.Model; +using Admin.Core.Model.Model_New; +using Admin.Core.Model.ViewModels; +using log4net; +using Microsoft.AspNetCore.Razor.TagHelpers; +using Microsoft.IdentityModel.Logging; +using NPOI.XSSF.UserModel; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Admin.Core.Service +{ + public class BoxFoamDataRealTimeServices : BaseServices, IBoxFoamDataRealTimeServices + { + private readonly IBaseRepository _dal; + + public BoxFoamDataRealTimeServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + + } +} \ No newline at end of file diff --git a/Aucma.Core.BoxFoam/Business/CollectionFoamLine.cs b/Aucma.Core.BoxFoam/Business/CollectionFoamLine.cs index 711fcba8..54557acd 100644 --- a/Aucma.Core.BoxFoam/Business/CollectionFoamLine.cs +++ b/Aucma.Core.BoxFoam/Business/CollectionFoamLine.cs @@ -1,10 +1,12 @@ using Admin.Core.Common.Helper; +using Aucma.Core.BoxFoam.Models; using Aucma.Core.HwPLc; using NetTaste; using NPOI.Util; using System; using System.Collections.Generic; using System.Linq; +using System.Security.RightsManagement; using System.Text; using System.Threading; using System.Threading.Tasks; @@ -17,58 +19,157 @@ namespace Aucma.Core.BoxFoam.Business /// public class CollectionFoamLine { + public delegate Task RefreshBoxFoamDataDelegate(List list); + public static event RefreshBoxFoamDataDelegate RefreshBoxFoamDataDelegateEvent; + private static System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding(); + + public static List listFixtureStatus = new List(); + + public static List BoxTypeList = new List(); + public static List HolderStatusList = new List(); + public static List HolderOutPutList = new List(); + public static List SolidifyTimeList = new List(); + public static List ActualTimeList = new List(); + public static List MoldTemperatureList = new List(); + Semaphore semaphore = new Semaphore(1, 1); public CollectionFoamLine() { + startCollect(); } - public async void startCollect() + + public void startCollect() { Task.Run(() => { - Thread.Sleep(6000); - var obj = PlcHelper.siemensList.FirstOrDefault(d => d.EquipName.Equals("foamLine1Plc")); - ReadBoxType(obj); // ok - // ReadFixtureStatus(obj); //ok - // ReadFixtureProduction(obj); //ok - // ReadPlanCuringTime(obj); //ok - // ReadDisplayCuringTime(obj); //ok - // ReadMoldTemperature(obj); - // ReadLineStatus(obj); //ok + while (true) + { + semaphore.WaitOne(); + try + { + Thread.Sleep(3000); + + + var obj = PlcHelper.siemensList.FirstOrDefault(d => d.EquipName.Equals("foamLine1Plc")); + + if (obj != null) + { + BoxTypeList.Clear(); + HolderStatusList.Clear(); + HolderOutPutList.Clear(); + SolidifyTimeList.Clear(); + ActualTimeList.Clear(); + listFixtureStatus.Clear(); + ReadBoxType(obj, BoxTypeList); // ok + ReadFixtureStatus(obj, HolderStatusList); //ok + ReadFixtureProduction(obj, HolderOutPutList); //ok + ReadPlanCuringTime(obj, SolidifyTimeList); //ok + ReadDisplayCuringTime(obj, ActualTimeList); //ok + //ReadMoldTemperature(obj,MoldTemperatureList); + //ReadLineStatus(obj); //ok + // }); + + for (int i = 0; i < 12; i++) + { + FixtureStatus model = new FixtureStatus(); + model.ObjId = i + 1; + if (BoxTypeList.Count > 0 && BoxTypeList != null) + { + model.FixtureBoxType = BoxTypeList[i].ToString(); + } + else + { + model.FixtureBoxType = ""; + } + if (HolderStatusList.Count > 0 && HolderStatusList != null) + { + model.Status = HolderStatusList[i]; + } + else + { + model.Status = HolderStatusList[i]; + } + if (HolderOutPutList.Count > 0 && HolderOutPutList != null) + { + model.Yield = HolderOutPutList[i]; + } + else + { + model.Yield = 0; + } + if (SolidifyTimeList.Count > 0 && HolderOutPutList != null) + { + model.PlanCuringTime = SolidifyTimeList[i]; + } + else + { + model.PlanCuringTime = 0; + } + listFixtureStatus.Add(model); + } + RefreshBoxFoamDataDelegateEvent?.Invoke(listFixtureStatus); + } + } + catch (Exception) + { + + throw; + } + finally + { + semaphore.Release(); + } + } }); } /// /// 读取夹具箱型 /// - static void ReadBoxType(HwPLc.PlcModel obj) + static void ReadBoxType(HwPLc.PlcModel obj, List boxTypeList) { if (obj == null) return; - if (obj.plc.IsConnected) + else { - byte[] result = obj.plc.Read("DB8.0", 124); - byte[] info = result; - - if (result == null) return; - int str0 = int.Parse(StringChange.bytesToHexStr(info.Skip(0).Take(2).ToArray(), 2), System.Globalization.NumberStyles.HexNumber); - string str1 = asciiEncoding.GetString(result.Skip(4).Take(10).ToArray()).Trim('\n'); - string str2 = asciiEncoding.GetString(result.Skip(14).Take(10).ToArray()).Trim('\n'); - string str3 = asciiEncoding.GetString(result.Skip(24).Take(10).ToArray()).Trim('\n'); - string str4 = asciiEncoding.GetString(result.Skip(34).Take(10).ToArray()).Trim('\n'); - string str5 = asciiEncoding.GetString(result.Skip(44).Take(10).ToArray()).Trim('\n'); - string str6 = asciiEncoding.GetString(result.Skip(54).Take(10).ToArray()).Trim('\n'); - string str7 = asciiEncoding.GetString(result.Skip(64).Take(10).ToArray()).Trim('\n'); - string str8 = asciiEncoding.GetString(result.Skip(74).Take(10).ToArray()).Trim('\n'); - string str9 = asciiEncoding.GetString(result.Skip(84).Take(10).ToArray()).Trim('\n'); - string str10 = asciiEncoding.GetString(result.Skip(94).Take(10).ToArray()).Trim('\n'); - string str11 = asciiEncoding.GetString(result.Skip(104).Take(10).ToArray()).Trim('\n'); - string str12 = asciiEncoding.GetString(result.Skip(114).Take(10).ToArray()).Trim('\n'); - + if (obj.plc.IsConnected) + { + byte[] result = obj.plc.Read("DB8.0", 124); + byte[] info = result; + + if (result == null) return; + int str0 = int.Parse(StringChange.bytesToHexStr(info.Skip(0).Take(2).ToArray(), 2), System.Globalization.NumberStyles.HexNumber); + string str1 = asciiEncoding.GetString(result.Skip(4).Take(10).ToArray()).Trim('\n'); + string str2 = asciiEncoding.GetString(result.Skip(14).Take(10).ToArray()).Trim('\n'); + string str3 = asciiEncoding.GetString(result.Skip(24).Take(10).ToArray()).Trim('\n'); + string str4 = asciiEncoding.GetString(result.Skip(34).Take(10).ToArray()).Trim('\n'); + string str5 = asciiEncoding.GetString(result.Skip(44).Take(10).ToArray()).Trim('\n'); + string str6 = asciiEncoding.GetString(result.Skip(54).Take(10).ToArray()).Trim('\n'); + string str7 = asciiEncoding.GetString(result.Skip(64).Take(10).ToArray()).Trim('\n'); + string str8 = asciiEncoding.GetString(result.Skip(74).Take(10).ToArray()).Trim('\n'); + string str9 = asciiEncoding.GetString(result.Skip(84).Take(10).ToArray()).Trim('\n'); + string str10 = asciiEncoding.GetString(result.Skip(94).Take(10).ToArray()).Trim('\n'); + string str11 = asciiEncoding.GetString(result.Skip(104).Take(10).ToArray()).Trim('\n'); + string str12 = asciiEncoding.GetString(result.Skip(114).Take(10).ToArray()).Trim('\n'); + boxTypeList.Add(str1); + boxTypeList.Add(str2); + boxTypeList.Add(str3); + boxTypeList.Add(str4); + boxTypeList.Add(str5); + boxTypeList.Add(str6); + boxTypeList.Add(str7); + boxTypeList.Add(str8); + boxTypeList.Add(str9); + boxTypeList.Add(str10); + boxTypeList.Add(str11); + boxTypeList.Add(str12); + } } + } - + /// /// 读取夹具状态 /// - static void ReadFixtureStatus(HwPLc.PlcModel obj) + static void ReadFixtureStatus(HwPLc.PlcModel obj, List HolderStatusList) { byte[] result = obj.plc.Read("DB8.122", 23); byte[] info = result; @@ -84,6 +185,19 @@ namespace Aucma.Core.BoxFoam.Business int temp10 = judgeStatus(ByteArrayToBinary(info.Skip(18).Take(1).ToArray())); int temp11 = judgeStatus(ByteArrayToBinary(info.Skip(20).Take(1).ToArray())); int temp12 = judgeStatus(ByteArrayToBinary(info.Skip(22).Take(1).ToArray())); + + HolderStatusList.Add(temp1); + HolderStatusList.Add(temp2); + HolderStatusList.Add(temp3); + HolderStatusList.Add(temp4); + HolderStatusList.Add(temp5); + HolderStatusList.Add(temp6); + HolderStatusList.Add(temp7); + HolderStatusList.Add(temp8); + HolderStatusList.Add(temp9); + HolderStatusList.Add(temp10); + HolderStatusList.Add(temp11); + HolderStatusList.Add(temp11); Console.WriteLine($"读取夹具状态,1#:{temp1};2#:{temp2};3#:{temp3};4#:{temp4};5#:{temp5};6#:{temp6}"); Console.WriteLine($"读取夹具状态,7#:{temp7};8#:{temp8};9#:{temp9};10#:{temp10};11#:{temp11};12#:{temp12}"); @@ -92,7 +206,7 @@ namespace Aucma.Core.BoxFoam.Business /// /// 读取夹具产量 /// - static void ReadFixtureProduction(HwPLc.PlcModel obj) + static void ReadFixtureProduction(HwPLc.PlcModel obj, List HolderOutPutList) { if (obj == null) return; if (obj.plc.IsConnected) @@ -111,6 +225,19 @@ namespace Aucma.Core.BoxFoam.Business int temp10 = int.Parse(StringChange.bytesToHexStr(info.Skip(36).Take(4).ToArray(), 4), System.Globalization.NumberStyles.HexNumber); int temp11 = int.Parse(StringChange.bytesToHexStr(info.Skip(40).Take(4).ToArray(), 4), System.Globalization.NumberStyles.HexNumber); int temp12 = int.Parse(StringChange.bytesToHexStr(info.Skip(44).Take(4).ToArray(), 4), System.Globalization.NumberStyles.HexNumber); + + HolderOutPutList.Add(temp1); + HolderOutPutList.Add(temp2); + HolderOutPutList.Add(temp3); + HolderOutPutList.Add(temp4); + HolderOutPutList.Add(temp5); + HolderOutPutList.Add(temp6); + HolderOutPutList.Add(temp7); + HolderOutPutList.Add(temp8); + HolderOutPutList.Add(temp9); + HolderOutPutList.Add(temp10); + HolderOutPutList.Add(temp11); + HolderOutPutList.Add(temp12); Console.WriteLine($"读取夹具产量,1#:{temp1};2#:{temp2};3#:{temp3};4#:{temp4};5#:{temp5};6#:{temp6}"); Console.WriteLine($"读取夹具产量,7#:{temp7};8#:{temp8};9#:{temp9};10#:{temp10};11#:{temp11};12#:{temp12}"); } @@ -119,7 +246,7 @@ namespace Aucma.Core.BoxFoam.Business /// /// 固化时间设定值 /// - static void ReadPlanCuringTime(HwPLc.PlcModel obj) + static void ReadPlanCuringTime(HwPLc.PlcModel obj, List SolidifyTimeList) { if (obj == null) return; if (obj.plc.IsConnected) @@ -138,6 +265,20 @@ namespace Aucma.Core.BoxFoam.Business int temp10 = int.Parse(StringChange.bytesToHexStr(info.Skip(36).Take(4).ToArray(), 4), System.Globalization.NumberStyles.HexNumber); int temp11 = int.Parse(StringChange.bytesToHexStr(info.Skip(40).Take(4).ToArray(), 4), System.Globalization.NumberStyles.HexNumber); int temp12 = int.Parse(StringChange.bytesToHexStr(info.Skip(44).Take(4).ToArray(), 4), System.Globalization.NumberStyles.HexNumber); + + + SolidifyTimeList.Add(temp1); + SolidifyTimeList.Add(temp2); + SolidifyTimeList.Add(temp3); + SolidifyTimeList.Add(temp4); + SolidifyTimeList.Add(temp5); + SolidifyTimeList.Add(temp6); + SolidifyTimeList.Add(temp7); + SolidifyTimeList.Add(temp8); + SolidifyTimeList.Add(temp9); + SolidifyTimeList.Add(temp10); + SolidifyTimeList.Add(temp11); + SolidifyTimeList.Add(temp12); Console.WriteLine($"读取固化时间设定值,1#:{temp1};2#:{temp2};3#:{temp3};4#:{temp4};5#:{temp5};6#:{temp6}"); Console.WriteLine($"读取固化时间设定值,7#:{temp7};8#:{temp8};9#:{temp9};10#:{temp10};11#:{temp11};12#:{temp12}"); } @@ -146,7 +287,7 @@ namespace Aucma.Core.BoxFoam.Business /// /// 固化时间显示值 /// - static void ReadDisplayCuringTime(HwPLc.PlcModel obj) + static void ReadDisplayCuringTime(HwPLc.PlcModel obj, List ActualTimeList) { if (obj == null) return; if (obj.plc.IsConnected) @@ -165,6 +306,20 @@ namespace Aucma.Core.BoxFoam.Business int temp10 = int.Parse(StringChange.bytesToHexStr(info.Skip(36).Take(4).ToArray(), 4), System.Globalization.NumberStyles.HexNumber); int temp11 = int.Parse(StringChange.bytesToHexStr(info.Skip(40).Take(4).ToArray(), 4), System.Globalization.NumberStyles.HexNumber); int temp12 = int.Parse(StringChange.bytesToHexStr(info.Skip(44).Take(4).ToArray(), 4), System.Globalization.NumberStyles.HexNumber); + + ActualTimeList.Add(temp1); + ActualTimeList.Add(temp2); + ActualTimeList.Add(temp3); + ActualTimeList.Add(temp4); + ActualTimeList.Add(temp5); + ActualTimeList.Add(temp6); + ActualTimeList.Add(temp7); + ActualTimeList.Add(temp8); + ActualTimeList.Add(temp9); + ActualTimeList.Add(temp10); + ActualTimeList.Add(temp11); + ActualTimeList.Add(temp12); + Console.WriteLine($"读取固化时间显示值,1#:{temp1};2#:{temp2};3#:{temp3};4#:{temp4};5#:{temp5};6#:{temp6}"); Console.WriteLine($"读取固化时间显示值,7#:{temp7};8#:{temp8};9#:{temp9};10#:{temp10};11#:{temp11};12#:{temp12}"); } @@ -174,7 +329,7 @@ namespace Aucma.Core.BoxFoam.Business /// /// 模具内外温度 /// - static void ReadMoldTemperature(HwPLc.PlcModel obj) + static void ReadMoldTemperature(HwPLc.PlcModel obj, List MoldTemperatureList) { if (obj == null) return; if (obj.plc.IsConnected) @@ -201,6 +356,20 @@ namespace Aucma.Core.BoxFoam.Business int temp10 = int.Parse(StringChange.bytesToHexStr(info.Skip(36).Take(4).ToArray(), 4), System.Globalization.NumberStyles.HexNumber); int temp11 = int.Parse(StringChange.bytesToHexStr(info.Skip(40).Take(4).ToArray(), 4), System.Globalization.NumberStyles.HexNumber); int temp12 = int.Parse(StringChange.bytesToHexStr(info.Skip(44).Take(4).ToArray(), 4), System.Globalization.NumberStyles.HexNumber); + + MoldTemperatureList.Add(temp1); + MoldTemperatureList.Add(temp2); + MoldTemperatureList.Add(temp3); + MoldTemperatureList.Add(temp4); + MoldTemperatureList.Add(temp5); + MoldTemperatureList.Add(temp6); + MoldTemperatureList.Add(temp7); + MoldTemperatureList.Add(temp8); + MoldTemperatureList.Add(temp9); + MoldTemperatureList.Add(temp10); + MoldTemperatureList.Add(temp11); + MoldTemperatureList.Add(temp12); + Console.WriteLine($"读取固化时间显示值,1#:{temp1};2#:{temp2};3#:{temp3};4#:{temp4};5#:{temp5};6#:{temp6}"); Console.WriteLine($"读取固化时间显示值,7#:{temp7};8#:{temp8};9#:{temp9};10#:{temp10};11#:{temp11};12#:{temp12}"); } diff --git a/Aucma.Core.BoxFoam/Business/InStoreBusiness.cs b/Aucma.Core.BoxFoam/Business/InStoreBusiness.cs index d82cf3b4..455e8f1f 100644 --- a/Aucma.Core.BoxFoam/Business/InStoreBusiness.cs +++ b/Aucma.Core.BoxFoam/Business/InStoreBusiness.cs @@ -107,10 +107,10 @@ namespace Aucma.Core.BoxFoam.Business private List spaceAddresses = new List(); private SemaphoreSlim _lock = new SemaphoreSlim(1); private static int AAA = 1; - public CollectionFoamLine coll = new CollectionFoamLine(); + //public CollectionFoamLine coll = new CollectionFoamLine(); public void init() { - coll.startCollect(); + //coll.startCollect(); allSpaces = _baseSpaceInfoServices.Query(x => x.StoreCode == storeCode); foreach (var space in allSpaces) { diff --git a/Aucma.Core.BoxFoam/Models/FixtureStatus.cs b/Aucma.Core.BoxFoam/Models/FixtureStatus.cs new file mode 100644 index 00000000..caacab4c --- /dev/null +++ b/Aucma.Core.BoxFoam/Models/FixtureStatus.cs @@ -0,0 +1,50 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Aucma.Core.BoxFoam.Models +{ + /// + /// plc夹具状态 + /// + public class FixtureStatus + { + public int ObjId { get; set; } + /// + /// 夹具箱型 + /// + public string FixtureBoxType { get; set; } + /// + /// 夹具状态 + /// + public int Status { get; set; } + /// + /// 夹具产量 + /// + public int Yield { get; set; } + /// + /// 固化时间设定值 + /// + public int PlanCuringTime { get; set; } + + /// + /// 固化时间显示值 + /// + public int RealCuringTime { get; set; } + /// + /// 内模温度 + /// + public string InternalTemperature { get; set; } + /// + /// 外膜温度 + /// + public string OutsideTemperature { get; set; } + ///// + ///// 生产节拍 + ///// + public int ProductionCycle { get; set; } + } +} diff --git a/Aucma.Core.BoxFoam/ViewModels/FoamMonitorPageViewModel.cs b/Aucma.Core.BoxFoam/ViewModels/FoamMonitorPageViewModel.cs index 81b9bb85..13d4b476 100644 --- a/Aucma.Core.BoxFoam/ViewModels/FoamMonitorPageViewModel.cs +++ b/Aucma.Core.BoxFoam/ViewModels/FoamMonitorPageViewModel.cs @@ -14,20 +14,48 @@ using Admin.Core.Service; using Microsoft.Extensions.DependencyInjection; using Admin.Core.Common; using Admin.Core.Tasks; +using Aucma.Core.BoxFoam.Business; +using System.Windows.Shapes; +using System.Timers; +using Aucma.Core.BoxFoam.Models; +using Admin.Core.Model; +using Admin.Core.Model.Model_New; +using Admin.Core.Model.ViewModels; +using System.Threading; +using Aucma.Core.HwPLc; namespace Aucma.Core.BoxFoam.ViewModels { public partial class FoamMonitorPageViewModel : ObservableObject { private readonly IBoxFoamDataServices _boxFoamDataServices; + private readonly ICurrentTeamTimeServices _currentTeamTimeServices; + private readonly IBoxFoamDataServices? _oldBoxFoamDataServices; + private readonly IBoxFoamPlanServices _boxFoamPlanServices; + private readonly ISysUserInfoServices _sysUserInfoServices; + private readonly IBoxFoamDataRecordServices _boxFoamDataRecordServices; + private readonly IBoxFoamDataRealTimeServices? _boxFoamDataRealTimeServices; + System.Timers.Timer timer2 = new System.Timers.Timer(1000); + + int totalAmount = 0; + public FoamMonitorPageViewModel() { + _boxFoamDataRealTimeServices = App.ServiceProvider.GetService(); + _boxFoamDataRecordServices = App.ServiceProvider.GetService(); + _currentTeamTimeServices = App.ServiceProvider.GetService(); _boxFoamDataServices = App.ServiceProvider.GetService(); - Job_BoxFoamData_Quartz.RefreshBoxFoamDataDelegateEvent += InitData; + CollectionFoamLine.RefreshBoxFoamDataDelegateEvent += InitData; + + timer2.Elapsed += new System.Timers.ElapsedEventHandler(RealTimeFoamingTask); //到达时间的时候执行事件; + timer2.AutoReset = true;//设置是执行一次(false)还是一直执行(true); + timer2.Enabled = true;//需要调用 timer.Start()或者timer.Enabled = true来启动它, + timer2.Start();//timer.Start()的内部原理还是设置timer.Enabled = true - Task.WaitAll(InitEveryDayMethod(), InitData()); + //Task.WaitAll(InitData()); } + #region 日产量 /// /// 每日生产 @@ -171,7 +199,7 @@ namespace Aucma.Core.BoxFoam.ViewModels #endregion #region 总计 - private int _totle = 0; + private int _totle; public int Totle { get => _totle; @@ -254,37 +282,127 @@ namespace Aucma.Core.BoxFoam.ViewModels /// 初始化发泡数据 /// /// - public async Task InitData() + public async Task InitData(List list) { try { int total = 0; - var list = await _boxFoamDataServices.QueryAsync(); + if (list == null) return; + FixtureName.Clear(); + Production.Clear(); + Beat.Clear(); + InternalTemperature.Clear(); + OutsideTemperature.Clear(); foreach (var item in list) { - if (item.Fixturestatus == 1) StatusColor.Add("Green"); - if (item.Fixturestatus == 0) StatusColor.Add("Red"); - + if (item.Status == 1) StatusColor.Add("Green"); + if (item.Status == 0) StatusColor.Add("Red"); - FixtureName.Add(item.Fixtureboxtype); - Production.Add(item.Production.ToString()); - //FoamVolume.Add(item.v); + FixtureName.Add(item.FixtureBoxType); + Production.Add(item.Yield.ToString()); //InternalTemperature.Add(item.BoxClosebetatemperature.ToString()); //OutsideTemperature.Add(item.BoxFixturesideplate.ToString()); - Beat.Add(item.BoxBeat); + Beat.Add(item.ProductionCycle); - total += item.Production; + totalAmount = totalAmount + item.Yield; } - Totle = total; + Totle = totalAmount; } - catch + catch(Exception ex) { + Console.WriteLine(ex.Message.ToString()); + } + } + #endregion + Semaphore semaphore = new Semaphore(1, 1); + /// + /// 将采集到的数据保存 + /// + /// + + public async void RealTimeFoamingTask(object? sender, ElapsedEventArgs e) + { + semaphore.WaitOne(); + try + { + List bLis = CollectionFoamLine.listFixtureStatus; + if (bLis.Count == 0) return; + + List bfds = await _boxFoamDataRealTimeServices.QueryAsync(); + for (int j = 0; j < bLis.Count; j++) + { + try + { + BoxFoamDataRealTime bfd = bfds.SingleOrDefault(d => d.FixtureBoxtype == bLis[j].FixtureBoxType && d.SerialNumber == bLis[j].ObjId); + if (bfd!=null) + { + UpdateClampData(bLis[j], bfd); + } + else + { + FixtureStatus fixtureStatus = bLis[j]; + SaveClampData(fixtureStatus); + } + } + catch { } + } } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + } + finally + { + semaphore.Release(); + } + } + + #region 更新夹具型号 + /// + /// 更新夹具型号 + /// + public async void UpdateClampData(FixtureStatus fixtureStatus, BoxFoamDataRealTime bfd) + { + bfd.FixtureBoxtype = fixtureStatus.FixtureBoxType; + bfd.ProductlineCode = Appsettings.app("StoreInfo", "ProductlineCode"); + bfd.FixtureStatus = fixtureStatus.Status.ToString(); + bfd.FixtureProductioncapacity = fixtureStatus.Yield; + bfd.FixtureCuringtimesettingvalue = fixtureStatus.PlanCuringTime.ToString(); + bfd.FixtureActualtime = fixtureStatus.RealCuringTime.ToString(); + bfd.ModeInternaltemperature = fixtureStatus.InternalTemperature; + bfd.ModeOutsidetemperature = fixtureStatus.InternalTemperature; + bfd.UpdatedTime = DateTime.Now; + + await _boxFoamDataRealTimeServices.UpdateAsync(bfd); + } + #endregion - } + #region 新增夹具型号 + /// + /// 更新夹具型号 + /// + public async void SaveClampData(FixtureStatus fixtureStatus) + { + BoxFoamDataRealTime bfd=new BoxFoamDataRealTime(); + + bfd.ProductlineCode = Appsettings.app("StoreInfo", "ProductlineCode"); + bfd.SerialNumber = fixtureStatus.ObjId; + bfd.FixtureBoxtype = fixtureStatus.FixtureBoxType; + bfd.FixtureStatus = fixtureStatus.Status.ToString(); + bfd.FixtureProductioncapacity = fixtureStatus.Yield; + bfd.FixtureCuringtimesettingvalue = fixtureStatus.PlanCuringTime.ToString(); + bfd.FixtureActualtime = fixtureStatus.RealCuringTime.ToString(); + bfd.ModeInternaltemperature = fixtureStatus.InternalTemperature; + bfd.ModeOutsidetemperature = fixtureStatus.InternalTemperature; + bfd.CreatedTime = DateTime.Now; + bfd.UpdatedTime = DateTime.Now; + + await _boxFoamDataRealTimeServices.AddAsync(bfd); + } #endregion + } } diff --git a/Aucma.Core.BoxFoam/ViewModels/MainWindowViewModel.cs b/Aucma.Core.BoxFoam/ViewModels/MainWindowViewModel.cs index 347ea329..3b8c0389 100644 --- a/Aucma.Core.BoxFoam/ViewModels/MainWindowViewModel.cs +++ b/Aucma.Core.BoxFoam/ViewModels/MainWindowViewModel.cs @@ -11,6 +11,7 @@ using Aucma.Core.PLc; using Aucma.Core.Scanner; using System.Linq; using System.Threading.Tasks; +using Aucma.Core.BoxFoam.Business; namespace Aucma.Core.BoxFoam.ViewModels { @@ -18,11 +19,10 @@ namespace Aucma.Core.BoxFoam.ViewModels { private static readonly log4net.ILog log = LogManager.GetLogger(typeof(MainWindowViewModel)); private IndexPageView firstPage = new IndexPageView();//首页 - + CollectionFoamLine line=new CollectionFoamLine(); public MainWindowViewModel() { UserContent = firstPage; - Task.Run(() => { init(); diff --git a/Aucma.Core.BoxFoam/appsettings.json b/Aucma.Core.BoxFoam/appsettings.json index e097f518..06d8764a 100644 --- a/Aucma.Core.BoxFoam/appsettings.json +++ b/Aucma.Core.BoxFoam/appsettings.json @@ -218,7 +218,8 @@ "ShellInventoryStoreCode": "XKJCK-001", "LinerInventory": "NDJCK-001", "AfterStoreCode": "FPJCK-001", - "BeforeStoreCode": "PBSCK-001" + "BeforeStoreCode": "PBSCK-001", + "ProductlineCode": "CX_02" }, "IpRateLimiting": { "EnableEndpointRateLimiting": false, //False: globally executed, true: executed for each diff --git a/Aucma.Core.HwPLc/Impl/SiemensPlc.cs b/Aucma.Core.HwPLc/Impl/SiemensPlc.cs index f805ec39..2dfc82cd 100644 --- a/Aucma.Core.HwPLc/Impl/SiemensPlc.cs +++ b/Aucma.Core.HwPLc/Impl/SiemensPlc.cs @@ -75,7 +75,7 @@ namespace Aucma.Core.HwPLc /// public bool Connect(string iP, int port) { - siemensS7Net.IpAddress = iP;//正式环境开启 + //siemensS7Net.IpAddress = iP;//正式环境开启 siemensS7Net.Port = port; try { diff --git a/Aucma.Core.OldBoxFoam/ViewModels/OldBoxFoamPageViewModel.cs b/Aucma.Core.OldBoxFoam/ViewModels/OldBoxFoamPageViewModel.cs index 17db22a0..1cd0d112 100644 --- a/Aucma.Core.OldBoxFoam/ViewModels/OldBoxFoamPageViewModel.cs +++ b/Aucma.Core.OldBoxFoam/ViewModels/OldBoxFoamPageViewModel.cs @@ -33,17 +33,16 @@ namespace Aucma.Core.OldBoxFoam.ViewModels { IBoxFoamDataServices? _oldBoxFoamDataServices; IOldBoxFoamTypeServices _oldBoxFoamTypeServices; - public static System.Threading.Timer GetStoreTimer; private readonly IBoxFoamPlanServices _boxFoamPlanServices; private readonly ISysUserInfoServices _sysUserInfoServices; private readonly ICurrentTeamTimeServices _currentTeamTimeServices; private readonly IBoxFoamDataRecordServices _boxFoamDataRecordServices; private static readonly log4net.ILog log = LogManager.GetLogger(typeof(OldBoxFoamPageViewModel)); Collection collection = new Collection(); - System.Timers.Timer timer1 = new System.Timers.Timer(5000); System.Timers.Timer timer2 = new System.Timers.Timer(3000); int totalAmount = 0; bool flag = true; + public OldBoxFoamPageViewModel() { _oldBoxFoamDataServices = App.ServiceProvider.GetService(); _oldBoxFoamTypeServices = App.ServiceProvider.GetService(); @@ -104,14 +103,6 @@ namespace Aucma.Core.OldBoxFoam.ViewModels { log.Error("获取库存接口数据异常." + ex.Message); } - finally - { - - if (GetStoreTimer != null) - { - GetStoreTimer.Change(20000, Timeout.Infinite); - } - } } public async Task OldBoxFoamOnLoad3() { @@ -148,14 +139,6 @@ namespace Aucma.Core.OldBoxFoam.ViewModels { log.Error("获取库存接口数据异常." + ex.Message); } - finally - { - - if (GetStoreTimer != null) - { - GetStoreTimer.Change(20000, Timeout.Infinite); - } - } } public async Task OldBoxFoamTypeOnLoad() { diff --git a/Aucma.Core.OldBoxFoam/appsettings.json b/Aucma.Core.OldBoxFoam/appsettings.json index 4d987628..a26d0c96 100644 --- a/Aucma.Core.OldBoxFoam/appsettings.json +++ b/Aucma.Core.OldBoxFoam/appsettings.json @@ -198,16 +198,16 @@ "PLCServer": [ { "Id": 1, - "PlcType": "Melsec", + "PlcType": "Siemens", "Enabled": true, - "EquipName": "OldMelsecPlc1", + "EquipName": "foamLine1Plc", "IP": "10.10.93.151", - "Port": 5002 + "Port": 102 }, { "Id": 2, "PlcType": "Melsec", - "Enabled": true, + "Enabled": false, "EquipName": "OldMelsecPlc2", "IP": "10.10.93.152", "Port": 5002 @@ -215,7 +215,7 @@ { "Id": 3, "PlcType": "Melsec", - "Enabled": true, + "Enabled": false, "EquipName": "OldMelsecPlc3", "IP": "10.10.93.153", "Port": 5002 @@ -223,7 +223,7 @@ { "Id": 4, "PlcType": "Melsec", - "Enabled": true, + "Enabled": false, "EquipName": "OldMelsecPlc4", "IP": "10.10.93.154", "Port": 5002 diff --git a/Aucma.Core.SheetMetal/ViewModels/QuantityIssuedViewModel.cs b/Aucma.Core.SheetMetal/ViewModels/QuantityIssuedViewModel.cs index b52b6cad..128c0a86 100644 --- a/Aucma.Core.SheetMetal/ViewModels/QuantityIssuedViewModel.cs +++ b/Aucma.Core.SheetMetal/ViewModels/QuantityIssuedViewModel.cs @@ -64,14 +64,9 @@ namespace Aucma.Core.SheetMetal.ViewModels var productPlanInfo = _PlanInfo; if (productPlanInfo != null) { - //下传到PLC string stationCode = Appsettings.app("StoreInfo", "StationCode"); var list = await _executePlanInfoServices.QueryAsync(d => d.ProductLineCode.Equals(stationCode)); - if (list==null) - { - MessageBox.Show("未查询到计划!", "系统提醒"); - return; - } + ExecutePlanInfo task = new ExecutePlanInfo(); task.ExecutePlanCode = Guid.NewGuid().ToString(); task.ProductPlanCode = PlanInfo.PlanCode; @@ -79,6 +74,7 @@ namespace Aucma.Core.SheetMetal.ViewModels task.MaterialCode = PlanInfo.MaterialCode; task.MaterialName = PlanInfo.MaterialName; task.ProductLineCode = stationCode;//计划工位 + if (list.Count == 0) task.ExecuteOrder = 1; if (list.Count != 0)