diff --git a/Admin.Core.Common/Helper/StringChange.cs b/Admin.Core.Common/Helper/StringChange.cs
new file mode 100644
index 00000000..1add35f8
--- /dev/null
+++ b/Admin.Core.Common/Helper/StringChange.cs
@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Admin.Core.Common.Helper
+{
+ public class StringChange
+ {
+ public static string bytesToHexStr(byte[] bytes, int iLen)//e.g. { 0x01, 0x01} ---> " 01 01"
+ {
+ string returnStr = "";
+ if (bytes != null)
+ {
+ for (int i = 0; i < iLen; i++)
+ {
+ returnStr += bytes[i].ToString("X2");
+ }
+ }
+ return returnStr;
+ }
+ }
+}
diff --git a/Admin.Core.Model/Model_New/BoxLastShotRecord.cs b/Admin.Core.Model/Model_New/BoxLastShotRecord.cs
index 598fa490..332d73fc 100644
--- a/Admin.Core.Model/Model_New/BoxLastShotRecord.cs
+++ b/Admin.Core.Model/Model_New/BoxLastShotRecord.cs
@@ -12,8 +12,8 @@ namespace Admin.Core.Model
/// 获取发泡机最后一枪记录
///
[SugarTable("BOX_LASTSHOTRECORD", "AUCMA_SCADA")]
- public class BoxLastShotRecord
- {
+ public class BoxLastShotRecord
+ {
///
/// 主键
///
@@ -148,7 +148,7 @@ namespace Admin.Core.Model
/// 注料状态
///
[SugarColumn(ColumnName = "INJECTIONSTATUS")]
- public DateTime InjectionStatus { get; set; }
+ public string InjectionStatus { get; set; }
///
/// 最后一次时间
///
@@ -159,5 +159,11 @@ namespace Admin.Core.Model
///
[SugarColumn(ColumnName = "CREATETIME")]
public DateTime Createtime { get; set; }
+ ///
+ /// 产线
+ ///
+ [SugarColumn(ColumnName = "PRODUCT_LINE_CODE")]
+ public string ProductLineCode { get; set; }
+
}
}
diff --git a/Admin.Core.Tasks/Admin.Core.Tasks.csproj b/Admin.Core.Tasks/Admin.Core.Tasks.csproj
index 635e3086..4fbcb9c0 100644
--- a/Admin.Core.Tasks/Admin.Core.Tasks.csproj
+++ b/Admin.Core.Tasks/Admin.Core.Tasks.csproj
@@ -16,4 +16,10 @@
+
+
+ ..\dll\HwCommunication.dll
+
+
+
diff --git a/Admin.Core.Tasks/QuartzNet/Jobs/Job_BoxFoamData_Quartz.cs b/Admin.Core.Tasks/QuartzNet/Jobs/Job_BoxFoamData_Quartz.cs
index f2dbd6ea..c282cc4f 100644
--- a/Admin.Core.Tasks/QuartzNet/Jobs/Job_BoxFoamData_Quartz.cs
+++ b/Admin.Core.Tasks/QuartzNet/Jobs/Job_BoxFoamData_Quartz.cs
@@ -8,6 +8,10 @@ using Admin.Core.Model;
using System.Linq;
using Admin.Core.Model.Model_New;
using Aucma.Core.HwPLc;
+using HwCommunication.Core;
+using Admin.Core.Common.Helper;
+using System.Collections;
+using System.Text;
///
/// 发泡数据采集
@@ -22,27 +26,30 @@ namespace Admin.Core.Tasks
private static readonly log4net.ILog logHelper = LogManager.GetLogger(typeof(Job_BoxFoamData_Quartz));
private readonly IBoxFoamDataServices _boxFoamDataServices;
private readonly IOldBoxFoamDataServices _oldBoxFoamDataServices;
-
+
public Job_BoxFoamData_Quartz(ISysTasksQzService SysTasksQzService, ISysJobLogService sysJobLogService,
IBoxFoamDataServices boxFoamDataServices, IOldBoxFoamDataServices oldBoxFoamDataServices)
{
_SysTasksQzService = SysTasksQzService;
_boxFoamDataServices = boxFoamDataServices;
_oldBoxFoamDataServices = oldBoxFoamDataServices;
+
}
public async Task Execute(IJobExecutionContext context)
{
- // await ExecuteJob(context, async () => await Run(context));
- // await ExecuteJob(context, async () => await BoxFoamDataRun(context));
- await ExecuteJob(context, async () => await BoxFoamDataRun(context));
+ // await ExecuteJob(context, async () => await Run(context));
+ // await ExecuteJob(context, async () => await BoxFoamDataRun(context));
+
}
+
public async Task Run(IJobExecutionContext context)
{
await SaveData();
}
+
public async Task BoxFoamDataRun(IJobExecutionContext context)
{
await SaveOldBoxFoamData();
diff --git a/Admin.Core.Tasks/QuartzNet/Jobs/Job_BoxFoamLastData_Quartz.cs b/Admin.Core.Tasks/QuartzNet/Jobs/Job_BoxFoamLastData_Quartz.cs
index f339d20b..0748dc5e 100644
--- a/Admin.Core.Tasks/QuartzNet/Jobs/Job_BoxFoamLastData_Quartz.cs
+++ b/Admin.Core.Tasks/QuartzNet/Jobs/Job_BoxFoamLastData_Quartz.cs
@@ -8,6 +8,11 @@ using Admin.Core.Model;
using System.Linq;
using Admin.Core.Model.Model_New;
using Aucma.Core.HwPLc;
+using Admin.Core.Common.Helper;
+using HwCommunication.Core;
+using System.Text;
+using Admin.Core.Service;
+using Admin.Core.Common;
///
/// 箱体发泡 最后一枪数据采集
@@ -18,22 +23,100 @@ namespace Admin.Core.Tasks
{
public delegate Task RefreshBoxFoamDataDelegate();
public static event RefreshBoxFoamDataDelegate RefreshBoxFoamDataDelegateEvent;
+ ///
+ /// 刷新最后一枪数据
+ ///
+ public delegate void RefreshLastShotDataDelegate(BoxLastShotRecord record);
+ public static event RefreshLastShotDataDelegate RefreshLastShotDataDelegateEvent;
+
private static readonly log4net.ILog logHelper = LogManager.GetLogger(typeof(Job_BoxFoamData_Quartz));
private readonly IBoxFoamDataServices _boxFoamDataServices;
private readonly IOldBoxFoamDataServices _oldBoxFoamDataServices;
-
+ private readonly IBoxLastShotRecordServices _lastShotRecordServices;
+ private static BoxLastShotRecord tempLastRecord = null;
public Job_BoxFoamLastData_Quartz(ISysTasksQzService SysTasksQzService, ISysJobLogService sysJobLogService,
- IBoxFoamDataServices boxFoamDataServices, IOldBoxFoamDataServices oldBoxFoamDataServices)
+ IBoxFoamDataServices boxFoamDataServices, IOldBoxFoamDataServices oldBoxFoamDataServices, IBoxLastShotRecordServices boxLastShotRecordServices)
{
_SysTasksQzService = SysTasksQzService;
_boxFoamDataServices = boxFoamDataServices;
_oldBoxFoamDataServices = oldBoxFoamDataServices;
+ _lastShotRecordServices = boxLastShotRecordServices;
}
public async Task Execute(IJobExecutionContext context)
{
- await ExecuteJob(context, async () => await Run(context));
- await ExecuteJob(context, async () => await BoxFoamDataRun(context));
+ // await ExecuteJob(context, async () => await Run(context));
+ // await ExecuteJob(context, async () => await BoxFoamDataRun(context));
+ await ExecuteJob(context, async () => await Collect(context));
+ }
+
+ ///
+ /// 采集注料记录最近一枪
+ ///
+ ///
+ ///
+ public async Task Collect(IJobExecutionContext context)
+ {
+ await CollectLast();
+ }
+
+ public async Task CollectLast()
+ {
+ var obj = PlcHelper.siemensList.FirstOrDefault(d => d.EquipName.Equals("Plc1"));
+ if (obj != null && obj.plc.IsConnected)
+ {
+ BoxLastShotRecord lastShotRecord = new BoxLastShotRecord();
+ byte[] info = obj.plc.ReadBytes("DB50.900", (ushort)87);
+ IByteTransform byteTransform = new RegularByteTransform();
+ lastShotRecord.System = "1";
+ lastShotRecord.BoxFixtureType = "test";
+ lastShotRecord.GunHead = Encoding.ASCII.GetString(info.Skip(0).Take(4).ToArray());
+ lastShotRecord.StationNumber = StringChange.bytesToHexStr(info.Skip(4).Take(2).ToArray(), 2);
+ lastShotRecord.MediumPressureCycleTime = StringChange.bytesToHexStr(info.Skip(6).Take(4).ToArray(), 4);
+ lastShotRecord.HighPressureCycleTime = StringChange.bytesToHexStr(info.Skip(10).Take(4).ToArray(), 4);
+ lastShotRecord.SetInjectionWeight = StringChange.bytesToHexStr(info.Skip(14).Take(4).ToArray(), 4);
+ lastShotRecord.InjectionMaterialRatio = StringChange.bytesToHexStr(info.Skip(18).Take(4).ToArray(), 4);
+ lastShotRecord.ActualInjectionWeight = StringChange.bytesToHexStr(info.Skip(22).Take(4).ToArray(), 4);
+ lastShotRecord.ActualInjectionMaterialRatio = StringChange.bytesToHexStr(info.Skip(26).Take(4).ToArray(), 4);
+ lastShotRecord.PolInjectionpressure = StringChange.bytesToHexStr(info.Skip(30).Take(4).ToArray(), 4);
+ lastShotRecord.IsoInjectionpressure = StringChange.bytesToHexStr(info.Skip(34).Take(4).ToArray(), 4);
+ lastShotRecord.PolInjectiontemperature = StringChange.bytesToHexStr(info.Skip(38).Take(4).ToArray(), 4);
+ lastShotRecord.IsoInjectiontemperature = StringChange.bytesToHexStr(info.Skip(42).Take(4).ToArray(), 4);
+
+ lastShotRecord.InjecPressureOfPOLGunHead = StringChange.bytesToHexStr(info.Skip(46).Take(4).ToArray(), 4);
+ lastShotRecord.InjecPressureOfISOGunHead = StringChange.bytesToHexStr(info.Skip(50).Take(4).ToArray(), 4);
+ lastShotRecord.POLInjecTemperatureOfGunHead = StringChange.bytesToHexStr(info.Skip(54).Take(4).ToArray(), 4);
+ lastShotRecord.ISOInjecTemperatureOfGunHead = StringChange.bytesToHexStr(info.Skip(58).Take(4).ToArray(), 4);
+
+ lastShotRecord.POLInjecFlowRate = StringChange.bytesToHexStr(info.Skip(62).Take(4).ToArray(), 4);
+ lastShotRecord.ISOInjecFlowRate = StringChange.bytesToHexStr(info.Skip(66).Take(4).ToArray(), 4);
+ lastShotRecord.HydraulicPressure = StringChange.bytesToHexStr(info.Skip(70).Take(4).ToArray(), 4);
+ lastShotRecord.HydraulicTemperature = StringChange.bytesToHexStr(info.Skip(74).Take(4).ToArray(), 4);
+ lastShotRecord.SmallPistonFiringTime = StringChange.bytesToHexStr(info.Skip(78).Take(4).ToArray(), 4);
+ lastShotRecord.SmallPistonGunShutdownTime = StringChange.bytesToHexStr(info.Skip(82).Take(4).ToArray(), 4);
+ lastShotRecord.InjectionStatus = StringChange.bytesToHexStr(info.Skip(86).Take(1).ToArray(), 1);
+ lastShotRecord.LastTime = DateTime.Now;
+ lastShotRecord.Createtime = DateTime.Now;
+ lastShotRecord.ProductLineCode = "111";
+
+ if (tempLastRecord == null)
+ {
+ //数据库查
+ tempLastRecord = _lastShotRecordServices.Query(x=>x.System == lastShotRecord.System).OrderByDescending(x=>x.Createtime).FirstOrDefault();
+ }
+ if (!tempLastRecord.SmallPistonGunShutdownTime.Equals(lastShotRecord.SmallPistonGunShutdownTime))
+ {
+ // 刷新页面
+ RefreshLastShotDataDelegateEvent?.Invoke(lastShotRecord);
+ //保存
+ _lastShotRecordServices.AddAsync(lastShotRecord);
+ tempLastRecord = lastShotRecord;
+ }
+
+
+
+ }
+
}
public async Task Run(IJobExecutionContext context)
diff --git a/Aucma.Core.BoxFoam/Business/InStoreBusiness.cs b/Aucma.Core.BoxFoam/Business/InStoreBusiness.cs
index ba2043ee..1c9a7876 100644
--- a/Aucma.Core.BoxFoam/Business/InStoreBusiness.cs
+++ b/Aucma.Core.BoxFoam/Business/InStoreBusiness.cs
@@ -108,7 +108,8 @@ namespace Aucma.Core.BoxFoam.Business
private static int AAA = 1;
public void init()
- {
+ {
+
allSpaces = _baseSpaceInfoServices.Query(x => x.StoreCode == storeCode);
foreach (var space in allSpaces)
{
@@ -117,13 +118,13 @@ namespace Aucma.Core.BoxFoam.Business
Task.Run(() =>
{
Thread.Sleep(5000);
-
- // test();
+
+ // test();
// 获取任务下发plc
StartPassDown();
- // InStore("B23600083025024860011");
+ InStore("B23600083025024860011");
});
- startTimer();
+ // startTimer();
}
public async void test()
@@ -146,7 +147,7 @@ namespace Aucma.Core.BoxFoam.Business
///
public void RealInstoreFinish(object? sender, ElapsedEventArgs e)
{
- var obj = PlcHelper.siemensList.FirstOrDefault(d => d.EquipName.Equals("发泡Plc"));
+ var obj = PlcHelper.siemensList.FirstOrDefault(d => d.EquipName.Equals("泡前库Plc"));
if (obj != null && obj.plc.IsConnected)
{
foreach (SpaceAddress spaceAddress in spaceAddresses)
@@ -168,13 +169,17 @@ namespace Aucma.Core.BoxFoam.Business
}
- public void StartPassDown()
+ public async void StartPassDown()
{
- while (true)
- {
- PassDown();
- Thread.Sleep(1000);
- }
+ Task.Run(() =>
+ {
+ while (true)
+ {
+ PassDown();
+ Thread.Sleep(200000);
+ }
+ });
+
}
@@ -405,7 +410,7 @@ namespace Aucma.Core.BoxFoam.Business
public BaseSpaceInfo ReadSpaceInfoByPlc(BaseSpaceInfo spaceInfo)
{
- var obj = PlcHelper.siemensList.FirstOrDefault(d => d.EquipName.Equals("发泡Plc"));
+ var obj = PlcHelper.siemensList.FirstOrDefault(d => d.EquipName.Equals("泡前库Plc"));
if (obj != null && obj.plc.IsConnected)
{
SpaceAddress spaceAddress = spaceConfig.GetSpaceAddress(spaceInfo.StoreCode, spaceInfo.SpaceCode);
@@ -440,15 +445,16 @@ namespace Aucma.Core.BoxFoam.Business
try
{
SpaceAddress spaceAddress = spaceConfig.GetSpaceAddress(storeCode, taskInfo.SpaceCode);
- var obj = PlcHelper.siemensList.FirstOrDefault(d => d.EquipName.Equals("发泡Plc"));
+ var obj = PlcHelper.siemensList.FirstOrDefault(d => d.EquipName.Equals("泡前库Plc"));
if (obj != null && obj.plc.IsConnected)
{
- //写入货道号
- obj.plc.WriteInt16("DB200.0", taskInfo.SpaceCode.Substring(7,1));
+
//写入应答字
obj.plc.WriteInt16("DB200.2", "1");
//写入货道物料类型
obj.plc.WriteString(spaceAddress.materialType, taskInfo.MaterialType);
+ //写入货道号
+ obj.plc.WriteInt16("DB200.0", taskInfo.SpaceCode.Substring(7,1));
//写入完成后读取反馈号进行复位
ReadShellAnswer_InStore(taskInfo);
result = true;
@@ -466,14 +472,14 @@ namespace Aucma.Core.BoxFoam.Business
}
///
- /// 读取泡后入库应答
+ /// 读取泡前入库应答
///
private void ReadShellAnswer_InStore(RealTaskInfo taskInfo)
{
lock (string.Empty)
{
bool isFlag = true;
- var obj = PlcHelper.siemensList.FirstOrDefault(d => d.EquipName.Equals("发泡Plc"));
+ var obj = PlcHelper.siemensList.FirstOrDefault(d => d.EquipName.Equals("泡前库Plc"));
try
{
Task.Run(() =>
@@ -483,17 +489,18 @@ namespace Aucma.Core.BoxFoam.Business
do
{
//读取PLC反馈号,上位机清空写入的入库内容
- if (obj.plc.ReadInt16("DB200.86") == 1)
+ if (obj.plc.ReadInt16("DB200.86") == 2)
{
+ obj.plc.WriteInt16("DB200.86", "0");
//-------------plc清
//写入货道号
- // obj.plc.WriteString("D110", string.Empty);
- //写入应答字
- // obj.plc.WriteInt16("D112", "0");
+ obj.plc.WriteInt16("DB200.0", "0");
+ // 写入应答字
+ obj.plc.WriteInt16("DB200.2", "0");
//写入货道物料类型
// obj.plc.WriteInt16(spaceAddress.materialType, taskInfo.MaterialType);
//----------------------
- obj.plc.WriteInt16("DB200.86", "0");
+
isFlag = false;
InStoreAnswer(taskInfo.TaskCode);
// TaskInfos.Add(taskInfo);
@@ -579,7 +586,7 @@ namespace Aucma.Core.BoxFoam.Business
// lock (string.Empty)
// {
// bool isFlag = true;
- // var obj = PlcHelper.melsecList.FirstOrDefault(d => d.EquipName.Equals("发泡Plc"));
+ // var obj = PlcHelper.melsecList.FirstOrDefault(d => d.EquipName.Equals("泡前库Plc"));
// try
// {
diff --git a/Aucma.Core.BoxFoam/ViewModels/FoamMachinesPageViewModel.cs b/Aucma.Core.BoxFoam/ViewModels/FoamMachinesPageViewModel.cs
index f44ac2f9..77aeeb1d 100644
--- a/Aucma.Core.BoxFoam/ViewModels/FoamMachinesPageViewModel.cs
+++ b/Aucma.Core.BoxFoam/ViewModels/FoamMachinesPageViewModel.cs
@@ -1,7 +1,9 @@
using Admin.Core.Common;
using Admin.Core.IService;
+using Admin.Core.Model;
using Admin.Core.Model.ViewModels;
using Admin.Core.Service;
+using Admin.Core.Tasks;
using Aucma.Core.BoxFoam.Models;
using CommunityToolkit.Mvvm.ComponentModel;
using Microsoft.Extensions.DependencyInjection;
@@ -20,9 +22,48 @@ namespace Aucma.Core.BoxFoam.ViewModels
public FoamMachinesPageViewModel()
{
+ Job_BoxFoamLastData_Quartz.RefreshLastShotDataDelegateEvent += RefreshData;
_boxLastShotRecordServices = App.ServiceProvider.GetService();
+
//Task.WaitAll(LoadData());
}
+
+ public void RefreshData(BoxLastShotRecord record)
+ {
+ System.Windows.Application.Current.Dispatcher.Invoke((Action)(async () =>
+ {
+ string system = string.Empty;
+ if (record.System == "1") {
+ system = "1系统";
+
+ PolFlow1 = record.POLInjecFlowRate;
+ IsoFlow1 = record.ISOInjecFlowRate;
+ PoleTmperature1 = record.POLInjecTemperatureOfGunHead;
+ IsoTemperature1 = record.ISOInjecTemperatureOfGunHead;
+
+ }
+ if (record.System == "2") { system = "2系统"; }
+ LastShotRecordDataGrid.Add(new LastShotRecordModel()
+ {
+ No = LastShotRecordDataGrid.Count+1,
+ System = system,
+ GunHead = record.GunHead,
+ StationNumber = record.StationNumber,
+ PolInjectionpressure = record.PolInjectionpressure,
+ IsoInjectionpressure = record.IsoInjectionpressure,
+ PolInjectiontemperature = record.PolInjectiontemperature,
+ IsoInjectiontemperature = record.IsoInjectiontemperature,
+ LastTime = record.LastTime,
+ Createtime = record.Createtime
+ });
+
+ }));
+
+
+ }
+
+
+
#region 加载DataGrid数据
private async Task LoadData()
{
diff --git a/Aucma.Core.BoxFoam/appsettings.json b/Aucma.Core.BoxFoam/appsettings.json
index 39c4b2cc..3f3b9ee3 100644
--- a/Aucma.Core.BoxFoam/appsettings.json
+++ b/Aucma.Core.BoxFoam/appsettings.json
@@ -100,15 +100,15 @@
"JobGroup": "DEFAULT",
"Cron": "*/1 * * * * ?",
"AssemblyName": "Admin.Core.Tasks",
- "ClassName": "Job_BoxFoamInStoreTask_Quartz",
- "Remark": "入库任务监控",
+ "ClassName": "Job_BoxFoamLastData_Quartz",
+ "Remark": "最后一枪数据采集",
"RunTimes": 3881,
"BeginTime": "2023-04-23 11:08:50.000",
"EndTime": "2180-12-01 16:45:30.000",
"TriggerType": 1,
"IntervalSecond": 5,
"CycleRunTimes": 1,
- "IsStart": false,
+ "IsStart": true,
"JobParams": null,
"DelFlag": false,
"CreateBy": "admin",
@@ -186,7 +186,7 @@
"Enabled": true
},
"QuartzNetJob": {
- "Enabled": false
+ "Enabled": true
},
"Scanner": { //扫码器
"Enabled": true
@@ -197,9 +197,16 @@
}
},
"PLCServer": [
-
{
"Id": 1,
+ "EquipName": "泡前库Plc",
+ "PlcType": "Siemens",
+ "Enabled": true,
+ "IP": "10.10.93.41",
+ "Port": 102
+ },
+ {
+ "Id": 2,
"EquipName": "Plc1",
"PlcType": "Siemens",
"Enabled": true,
diff --git a/Aucma.Core.HwPLc/Impl/SiemensPlc.cs b/Aucma.Core.HwPLc/Impl/SiemensPlc.cs
index a837fd10..fbb817e9 100644
--- a/Aucma.Core.HwPLc/Impl/SiemensPlc.cs
+++ b/Aucma.Core.HwPLc/Impl/SiemensPlc.cs
@@ -119,18 +119,19 @@ namespace Aucma.Core.HwPLc
///
///
///
- public byte[] ReadBytes(string address)
+ public byte[] ReadBytes(string address,ushort len)
{
byte[] bytes = null;
try
{
- OperateResult read = siemensS7Net.Read(address, 26);
+ OperateResult read = siemensS7Net.Read(address, len);
if (read.IsSuccess)
{
byte[] code = new byte[read.Content.Length - 2];
- Array.Copy(read.Content, 2, code, 0, 24);
- string scode = Encoding.ASCII.GetString(code, 0, code.Length);
- bytes = code;
+ //Array.Copy(read.Content, 2, code, 0, 24);
+ //string scode = Encoding.ASCII.GetString(code, 0, code.Length);
+ //bytes = code;
+ bytes = read.Content;
}
}
catch (Exception ex)
@@ -499,10 +500,6 @@ namespace Aucma.Core.HwPLc
return false;
}
- public byte[] ReadBytes(string address, ushort len)
- {
- throw new NotImplementedException();
- }
#endregion
}
}