From 47fa29cd4c719d63646ad71211e9295d957c7fe1 Mon Sep 17 00:00:00 2001 From: liuwf Date: Thu, 4 Jan 2024 09:07:19 +0800 Subject: [PATCH] =?UTF-8?q?change-=E6=81=A2=E5=A4=8D=E7=AE=B1=E4=BD=93?= =?UTF-8?q?=E5=8F=91=E6=B3=A1=E6=9C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Business/PerfusionCollection.cs | 247 ------------------ .../ViewModels/MainWindowViewModel.cs | 2 + .../Views/FoamMachinesPageView.xaml | 46 ++-- Aucma.Core.BoxFoam/appsettings.json | 2 +- .../Business/PerfusionCollection.cs | 23 +- 5 files changed, 43 insertions(+), 277 deletions(-) delete mode 100644 Aucam.Core.PerfusionService/Business/PerfusionCollection.cs diff --git a/Aucam.Core.PerfusionService/Business/PerfusionCollection.cs b/Aucam.Core.PerfusionService/Business/PerfusionCollection.cs deleted file mode 100644 index 1443c31f..00000000 --- a/Aucam.Core.PerfusionService/Business/PerfusionCollection.cs +++ /dev/null @@ -1,247 +0,0 @@ -using Admin.Core.Common.Helper; -using Admin.Core.IRepository; -using Admin.Core.IService; -using Admin.Core.Model; -using Admin.Core.Model.Model_New; -using Admin.Core.Repository; -using Admin.Core.Service; -using Aucma.Core.HwPLc; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Aucam.Core.PerfusionService.Business -{ - /// - /// 采集灌注数据 - /// - public class PerfusionCollection - { - Semaphore semaphore = new Semaphore(1, 1); - protected readonly IPerfusionRecordServices? _perfusionRecordServices ; - protected readonly IPerfusionAlarmServices ?_perfusionAlarmServices; - protected readonly IPerfusionDeviceStatusServices? _perfusionDeviceStatusServices; - - - private static System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding(); - private Perfusion_Record record = new Perfusion_Record(); - private Perfusion_Record temprRecord; - - private Perfusion_DeviceStatus perfusion_DeviceStatus = new Perfusion_DeviceStatus(); - private Perfusion_Alarm perfusion_Alarm = new Perfusion_Alarm(); - public PerfusionCollection(PerfusionRecordServices perfusionRecordServices, IPerfusionAlarmServices perfusionAlarmServices, IPerfusionDeviceStatusServices perfusionDeviceStatusServices) - { - _perfusionRecordServices = perfusionRecordServices; - _perfusionAlarmServices = perfusionAlarmServices; - _perfusionDeviceStatusServices = perfusionDeviceStatusServices; - startCollect(); - } - - - public void startCollect() - { - Task.Run(() => - { - while (true) - { - semaphore.WaitOne(); - try - { - Thread.Sleep(3000); - var obj = PlcHelper.siemensList.FirstOrDefault(d => d.EquipName.Equals("PerfusionPlc")); - if (obj != null && obj.plc.IsConnected) - { - //采集数据 - ReadEquipSystem(obj,record, perfusion_DeviceStatus, perfusion_Alarm); - //更新设备状态 - // _perfusionDeviceStatusServices.UpdateAsync; - // 更新报警信息 - - //充注结束 - if (record.PerfusionFinishStatus == "1") - { - //缓存没数据查数据库 - if(temprRecord == null) - { - Perfusion_Record lastRecord = _perfusionRecordServices.Query(d => d.PerfusionBoxCode.Equals(record.PerfusionBoxCode)).FirstOrDefault(); - // 数据库没有数据 - if (lastRecord == null) - { - _= _perfusionRecordServices.AddAsync(record).Result; - return; - } - } - // 箱体码和上次不一样,或者箱体码一样但是充铸结果不一样 - else if(temprRecord.PerfusionBoxCode!=record.PerfusionBoxCode || (temprRecord.PerfusionBoxCode == record.PerfusionBoxCode && temprRecord.PerfusionResult!=record.PerfusionResult) ) - { - _ = _perfusionRecordServices.AddAsync(record).Result; - } - } - - } - - } - catch (Exception ex) - { - Console.WriteLine(ex); - } - finally - { - - temprRecord = record; - semaphore.Release(); - } - } - - }); - } - - /// - /// 采集灌注参数 - /// - /// - static void ReadEquipSystem(Aucma.Core.HwPLc.PlcModel obj, Perfusion_Record record, Perfusion_DeviceStatus deviceStatus, Perfusion_Alarm alarmInfo) - { - byte[] info = obj.plc.Read("DB55.0", 84); - if (info == null) return; - #region 灌注记录赋值 - record.PerfusionActualVolume=byteToDouble(info.Skip(0).Take(8).ToArray()).ToString(); - record.PerfusionR = byteToDouble(info.Skip(8).Take(4).ToArray()).ToString().ToString(); - record.PerfusionL = byteToFloat(info.Skip(55).Take(4).ToArray()).ToString(); - record.PerfusionDuration = int.Parse(StringChange.bytesToHexStr(info.Skip(12).Take(4).ToArray(), 4), System.Globalization.NumberStyles.HexNumber).ToString(); - record.Yield = int.Parse(StringChange.bytesToHexStr(info.Skip(16).Take(4).ToArray(), 4), System.Globalization.NumberStyles.HexNumber).ToString(); - record.PerfusionBoxCode = asciiEncoding.GetString(info.Skip(20).Take(24).ToArray()).Replace("\0", "").Trim('\n'); - record.PerfusionRefrigerantTypeLeft = asciiEncoding.GetString(info.Skip(58).Take(7).ToArray()).Trim('\n'); - record.PerfusionRefrigerantTypeRight = asciiEncoding.GetString(info.Skip(68).Take(7).ToArray()).Trim('\n'); - record.PerfusionSetVolume = byteToFloat(info.Skip(78).Take(4).ToArray()).ToString(); - record.PerfusionSystem =short.Parse(StringChange.bytesToHexStr(info.Skip(82).Take(2).ToArray(), 2), System.Globalization.NumberStyles.HexNumber).ToString(); - ///灌注完成状态字 - record.PerfusionFinishStatus = short.Parse(StringChange.bytesToHexStr(info.Skip(46).Take(2).ToArray(), 2), System.Globalization.NumberStyles.HexNumber).ToString(); - record.PerfusionResult = short.Parse(StringChange.bytesToHexStr(info.Skip(48).Take(2).ToArray(), 2), System.Globalization.NumberStyles.HexNumber); - record.CreatedBy = "equip"; - record.CreatedTime = DateTime.Now; - record.UpdatedBy = "equip"; - record.UpdatedTime = DateTime.Now; - #endregion - - #region 设备状态赋值 - deviceStatus.PerfusionDevicetype = "灌注"; - deviceStatus.PerfusionStatus = short.Parse(StringChange.bytesToHexStr(info.Skip(50).Take(2).ToArray(), 2), System.Globalization.NumberStyles.HexNumber); - deviceStatus.CreatedBy = "equip"; - deviceStatus.CreatedTime = DateTime.Now; - deviceStatus.UpdatedBy = "equip"; - deviceStatus.UpdatedTime = DateTime.Now; - #endregion - - #region 设备报警赋值 - alarmInfo.PerfusionBoxcode = record.PerfusionBoxCode; - alarmInfo.PerfusionStatus = short.Parse(StringChange.bytesToHexStr(info.Skip(52).Take(2).ToArray(), 2), System.Globalization.NumberStyles.HexNumber); - alarmInfo.PerfusionAlarm = AlarmTrans(alarmInfo.PerfusionStatus); - alarmInfo.PerfusionCompleted = "1"; - alarmInfo.CreatedBy = "equip"; - alarmInfo.CreatedTime = DateTime.Now; - alarmInfo.UpdatedBy = "equip"; - alarmInfo.UpdatedTime = DateTime.Now; - #endregion - } - static string AlarmTrans(short code) - { - string result = ""; - switch (code) - { - case 2: result = "充注枪真空不合格"; break; - case 4: result = "充注故障"; break; - case 8: result = "充注时真空度超限定"; break; - case 16: result = "回升检测不合格"; break; - case 32: result = "工件真空不合格"; break; - case 64: result = "平衡缸接近开关异常"; break; - case 128: result = "增压超时"; break; - case 256: result = "风压不足"; break; - } - return result; - } - - - #region 字符工具转换方法 - /// byte[]转十进制ascii码 - /// - /// - static string ByteArrayToString(byte[] bytes) - { - string result = string.Empty; - foreach (byte b in bytes) - { - int decimalValue = Convert.ToInt32(b); // 将字节转换为十进制值 - result += decimalValue; - } - return result; - } - /// - /// byte[]转二进制 - /// - /// - static string ByteArrayToBinary(byte[] bytes) - { - StringBuilder binaryString = new StringBuilder(); - - foreach (byte b in bytes) - { - binaryString.Append(Convert.ToString(b, 2).PadLeft(8, '0')); - } - - // Console.WriteLine(binaryString); - - string reversedStr = new string(binaryString.ToString().Reverse().ToArray()); - // Console.WriteLine(reversedStr); - - return reversedStr; - } - - /// - /// 根据二进制字符串确定夹具状态 1正常生产 2暂停生产 - /// - static int judgeStatus(string str1) - { - int item1 = 0; - if (str1.Substring(0, 1) == "1") - { - item1 = 1; // - } - else if (str1.Substring(1, 1) == "1") - { - item1 = 2; // - } - return item1; - } - - - /// - /// byte数组转换为float - /// - static float byteToFloat(byte[] list) - { - float result = 0.00f; - Array.Reverse(list); - result = BitConverter.ToSingle(list, 0); - return result; - - } - - /// - /// byte数组转换为float - /// - static double byteToDouble(byte[] list) - { - double result = 0; - Array.Reverse(list); - result = BitConverter.ToDouble(list, 0); - return result; - - } - - #endregion - } -} diff --git a/Aucma.Core.BoxFoam/ViewModels/MainWindowViewModel.cs b/Aucma.Core.BoxFoam/ViewModels/MainWindowViewModel.cs index 3b8c0389..d8b0e915 100644 --- a/Aucma.Core.BoxFoam/ViewModels/MainWindowViewModel.cs +++ b/Aucma.Core.BoxFoam/ViewModels/MainWindowViewModel.cs @@ -20,6 +20,8 @@ namespace Aucma.Core.BoxFoam.ViewModels private static readonly log4net.ILog log = LogManager.GetLogger(typeof(MainWindowViewModel)); private IndexPageView firstPage = new IndexPageView();//首页 CollectionFoamLine line=new CollectionFoamLine(); + CollectionFoamMachine machine = new CollectionFoamMachine(); + public MainWindowViewModel() { UserContent = firstPage; diff --git a/Aucma.Core.BoxFoam/Views/FoamMachinesPageView.xaml b/Aucma.Core.BoxFoam/Views/FoamMachinesPageView.xaml index 682ea649..b8f45f81 100644 --- a/Aucma.Core.BoxFoam/Views/FoamMachinesPageView.xaml +++ b/Aucma.Core.BoxFoam/Views/FoamMachinesPageView.xaml @@ -44,7 +44,7 @@ - + @@ -54,7 +54,7 @@ - + @@ -147,7 +147,7 @@ - + @@ -233,7 +233,7 @@ - + @@ -246,11 +246,11 @@ - + - + @@ -258,11 +258,11 @@ - + - + @@ -270,27 +270,27 @@ - + - + - + - + - + @@ -429,7 +429,7 @@ - + @@ -441,16 +441,16 @@ - + - + - + @@ -458,11 +458,11 @@ - + - + @@ -470,11 +470,11 @@ - + - + @@ -482,11 +482,11 @@ - + - + diff --git a/Aucma.Core.BoxFoam/appsettings.json b/Aucma.Core.BoxFoam/appsettings.json index 5e0df1b6..b50af66b 100644 --- a/Aucma.Core.BoxFoam/appsettings.json +++ b/Aucma.Core.BoxFoam/appsettings.json @@ -218,7 +218,7 @@ "EquipName": "foamMachinePlc", "PlcType": "Siemens", "Enabled": true, - "IP": "127.0.0.1", + "IP": "10.10.93.180", "Port": 102 } ], diff --git a/Aucma.Core.Tasks/Business/PerfusionCollection.cs b/Aucma.Core.Tasks/Business/PerfusionCollection.cs index 9d331e68..355e4d9e 100644 --- a/Aucma.Core.Tasks/Business/PerfusionCollection.cs +++ b/Aucma.Core.Tasks/Business/PerfusionCollection.cs @@ -46,7 +46,6 @@ namespace Aucma.Core.Tasks.Business { while (true) { - semaphore.WaitOne(); try { Thread.Sleep(3000); @@ -56,9 +55,24 @@ namespace Aucma.Core.Tasks.Business //采集数据 ReadEquipSystem(obj,record, perfusion_DeviceStatus, perfusion_Alarm); //更新设备状态 - // _perfusionDeviceStatusServices.UpdateAsync; - // 更新报警信息 + Perfusion_DeviceStatus device = _perfusionDeviceStatusServices.FirstAsync().Result; + if (device == null) + { + _ = _perfusionDeviceStatusServices.AddAsync(perfusion_DeviceStatus).Result; + } + else + { + _perfusionDeviceStatusServices.UpdateAsync(perfusion_DeviceStatus); + } + //// 更新报警信息 + _perfusionAlarmServices.AddAsync(perfusion_Alarm); + //Perfusion_Alarm alarmRecord = _perfusionAlarmServices.FirstAsync(x=>x.PerfusionBoxcode==perfusion_Alarm.PerfusionBoxcode).Result; + //if (alarmRecord == null) + //{ + + //} + //充注结束 if (record.PerfusionFinishStatus == "1") { @@ -81,7 +95,6 @@ namespace Aucma.Core.Tasks.Business } } - } catch (Exception ex) { @@ -89,9 +102,7 @@ namespace Aucma.Core.Tasks.Business } finally { - temprRecord = record; - semaphore.Release(); } }