liulb@mesnac.com 1 year ago
parent 1f93533b2b
commit c836f6c48d

@ -526,7 +526,7 @@ namespace Aucma.Core.HwPLc
}
else
{
IsConnected = false;
//IsConnected = false;
return null;
}
}

@ -518,7 +518,7 @@ namespace Aucma.Core.HwPLc
}
else
{
IsConnected = false;
//IsConnected = false;
return null;
}
}

@ -18,8 +18,8 @@ namespace Aucma.Core.OldBoxFoam.Business
public HwPLc.PlcModel plc2 = null;
public HwPLc.PlcModel plc3 = null;
public HwPLc.PlcModel plc4 = null;
public static List<FixtureStatus> listFixtureStatus = new List<FixtureStatus>();
public static List<SpaceDetailModel> spaceDetailModel = new List<SpaceDetailModel>();
public List<FixtureStatus> listFixtureStatus = new List<FixtureStatus>();
public List<SpaceDetailModel> spaceDetailModel = new List<SpaceDetailModel>();
public List<int> BoxTypeList = new List<int>();
public List<int> HolderStatusList = new List<int>();
@ -31,87 +31,107 @@ namespace Aucma.Core.OldBoxFoam.Business
public Collection() {
startCollect();
}
public void startCollect()
{
Task.Run(() =>
try
{
Thread.Sleep(3000);
///Task.Run(() =>
//{
plc1 = PlcHelper.melsecList.FirstOrDefault(d => d.EquipName.Equals("OldMelsecPlc1"));
plc2 = PlcHelper.melsecList.FirstOrDefault(d => d.EquipName.Equals("OldMelsecPlc2"));
plc3 = PlcHelper.melsecList.FirstOrDefault(d => d.EquipName.Equals("OldMelsecPlc3"));
plc4 = PlcHelper.melsecList.FirstOrDefault(d => d.EquipName.Equals("OldMelsecPlc4"));
while (true)
//while (true)
//{
BoxTypeList.Clear();
HolderStatusList.Clear();
HolderOutPutList.Clear();
SolidifyTimeList.Clear();
listFixtureStatus.Clear();//夹具集合
spaceDetailModel.Clear();//货道集合
//夹具箱型
ReadBoxType(plc1, BoxTypeList);
ReadBoxType(plc2, BoxTypeList);
ReadBoxType(plc3, BoxTypeList);
ReadBoxType(plc4, BoxTypeList);
ReadHolderStatus(plc1, HolderStatusList);
ReadHolderStatus(plc2, HolderStatusList);
ReadHolderStatus(plc3, HolderStatusList);
ReadHolderStatus(plc4, HolderStatusList);
ReadHolderOutPut(plc1, HolderOutPutList);
ReadHolderOutPut(plc2, HolderOutPutList);
ReadHolderOutPut(plc3, HolderOutPutList);
ReadHolderOutPut(plc4, HolderOutPutList);
ReadSolidifyTime(plc1, SolidifyTimeList);
ReadSolidifyTime(plc2, SolidifyTimeList);
ReadSolidifyTime(plc3, SolidifyTimeList);
ReadSolidifyTime(plc4, SolidifyTimeList);
ReadStoreType(plc1, StoreTypeList);
ReadStoreType(plc2, StoreTypeList);
ReadStoreType(plc3, StoreTypeList);
ReadStoreType(plc4, StoreTypeList);
ReadStoreAmount(plc1, StoreAmountList);
ReadStoreAmount(plc2, StoreAmountList);
ReadStoreAmount(plc3, StoreAmountList);
ReadStoreAmount(plc4, StoreAmountList);
for (int i = 0; i < 24; i++)
{
BoxTypeList.Clear();
HolderStatusList.Clear();
HolderOutPutList.Clear();
SolidifyTimeList.Clear();
//夹具箱型
ReadBoxType(plc1, BoxTypeList);
ReadBoxType(plc2, BoxTypeList);
ReadBoxType(plc3, BoxTypeList);
ReadBoxType(plc4, BoxTypeList);
ReadHolderStatus(plc1, HolderStatusList);
ReadHolderStatus(plc2, HolderStatusList);
ReadHolderStatus(plc3, HolderStatusList);
ReadHolderStatus(plc4, HolderStatusList);
ReadHolderOutPut(plc1,HolderOutPutList);
ReadHolderOutPut(plc2,HolderOutPutList);
ReadHolderOutPut(plc3,HolderOutPutList);
ReadHolderOutPut(plc4,HolderOutPutList);
ReadSolidifyTime(plc1,SolidifyTimeList);
ReadSolidifyTime(plc2,SolidifyTimeList);
ReadSolidifyTime(plc3,SolidifyTimeList);
ReadSolidifyTime(plc4,SolidifyTimeList);
ReadStoreType(plc1, StoreTypeList);
ReadStoreType(plc2, StoreTypeList);
ReadStoreType(plc3, StoreTypeList);
ReadStoreType(plc4, StoreTypeList);
ReadStoreAmount(plc1, StoreAmountList);
ReadStoreAmount(plc2, StoreAmountList);
ReadStoreAmount(plc3, StoreAmountList);
ReadStoreAmount(plc4, StoreAmountList);
for(int i = 0; i < 24; i++)
if (listFixtureStatus.Count > 0)
{
FixtureStatus model = new FixtureStatus();
model.ObjId = i + 1;
if (BoxTypeList.Count>0) model.FixtureBoxType = BoxTypeList[i].ToString();
if (BoxTypeList.Count > 0) model.FixtureBoxType = BoxTypeList[i].ToString();
if (HolderStatusList.Count > 0) model.Status = HolderStatusList[i];
if (HolderOutPutList.Count > 0) model.Yield = HolderOutPutList[i];
if (SolidifyTimeList.Count > 0) model.PlanCuringTime = SolidifyTimeList[i];
listFixtureStatus.Add(model);
}
for (int i = 0; i < 8; i++)
else
{
SpaceDetailModel model = new SpaceDetailModel();
FixtureStatus model = new FixtureStatus();
model.ObjId = i + 1;
if (StoreTypeList.Count > 0) model.StoreType = StoreTypeList[i].ToString();
if (StoreAmountList.Count > 0) model.StoreAmount =Convert.ToInt32(StoreAmountList[i]);
spaceDetailModel.Add(model);
if (BoxTypeList.Count > 0) model.FixtureBoxType = BoxTypeList[i].ToString();
if (HolderStatusList.Count > 0) model.Status = HolderStatusList[i];
if (HolderOutPutList.Count > 0) model.Yield = HolderOutPutList[i];
if (SolidifyTimeList.Count > 0) model.PlanCuringTime = SolidifyTimeList[i];
listFixtureStatus.Add(model);
}
Thread.Sleep(10000);
}
for (int i = 0; i < 8; i++)
{
SpaceDetailModel model = new SpaceDetailModel();
model.ObjId = i + 1;
if (StoreTypeList.Count > 0) model.StoreType = StoreTypeList[i].ToString();
if (StoreAmountList.Count > 0) model.StoreAmount = Convert.ToInt32(StoreAmountList[i]);
spaceDetailModel.Add(model);
}
});
// Thread.Sleep(10000);
//}
//});
}catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
}
/// <summary>
/// 读取夹具箱型
/// </summary>
static void ReadBoxType(HwPLc.PlcModel obj, List<int> BoxTypeList)
{
if (obj == null) return;
if (obj.plc.IsConnected)
{
byte[] result = obj.plc.Read("D3140", 48);
if (result == null) return;
byte[] info = result;
int temp1 = short.Parse(StringChange.bytesToHexStr(array(info.Skip(0).Take(2).ToArray()), 2), System.Globalization.NumberStyles.HexNumber);
int temp2 = short.Parse(StringChange.bytesToHexStr(array(info.Skip(4).Take(2).ToArray()), 2), System.Globalization.NumberStyles.HexNumber);
@ -134,9 +154,8 @@ namespace Aucma.Core.OldBoxFoam.Business
/// </summary>
static void ReadHolderStatus(PlcModel obj1, List<int> HolderStatusList)
{
if (obj1 == null) return;
if (obj1.plc.IsConnected == false) return;
byte[] result = obj1.plc.Read("YF0", 1);
if (result == null) return;
//输出二进制字符串,1#-3#手动、自动数据
string str1 = ByteArrayToBinary(array(result));
byte[] result2 = obj1.plc.Read("Y110", 1);
@ -242,9 +261,8 @@ namespace Aucma.Core.OldBoxFoam.Business
/// </summary>
static void ReadHolderOutPut(PlcModel obj,List<int> HolderOutPutList)
{
if (obj==null) return;
if (obj.plc.IsConnected == false) return;
byte[] result = obj.plc.Read("D182", 24);
if (result == null) return;
byte[] info = result;
int temp1 = short.Parse(StringChange.bytesToHexStr(array(info.Skip(0).Take(2).ToArray()), 2), System.Globalization.NumberStyles.HexNumber);
int temp2 = short.Parse(StringChange.bytesToHexStr(array(info.Skip(2).Take(2).ToArray()), 2), System.Globalization.NumberStyles.HexNumber);
@ -267,9 +285,8 @@ namespace Aucma.Core.OldBoxFoam.Business
/// </summary>
static void ReadSolidifyTime(PlcModel obj,List<int> SolidifyTimeList)
{
if (obj == null) return;
if (obj.plc.IsConnected == false) return;
byte[] result = obj.plc.Read("D910", 24);
if (result == null) return;
byte[] info = result;
int temp1 = short.Parse(StringChange.bytesToHexStr(array(info.Skip(0).Take(2).ToArray()), 2), System.Globalization.NumberStyles.HexNumber);
int temp2 = short.Parse(StringChange.bytesToHexStr(array(info.Skip(2).Take(2).ToArray()), 2), System.Globalization.NumberStyles.HexNumber);
@ -291,10 +308,9 @@ namespace Aucma.Core.OldBoxFoam.Business
/// </summary>
static void ReadStoreType(PlcModel obj, List<string> storeType)
{
if (obj == null) return;
if (obj.plc.IsConnected == false) return;
//夹具箱型
byte[] result = obj.plc.Read("D2010", 40);
if (result == null) return;
byte[] info = result;
int temp1 = short.Parse(StringChange.bytesToHexStr(array(info.Skip(0).Take(2).ToArray()), 2), System.Globalization.NumberStyles.HexNumber);
int temp2 = short.Parse(StringChange.bytesToHexStr(array(info.Skip(20).Take(2).ToArray()), 2), System.Globalization.NumberStyles.HexNumber);
@ -312,9 +328,8 @@ namespace Aucma.Core.OldBoxFoam.Business
/// </summary>
static void ReadStoreAmount(PlcModel obj, List<string> storeAmount)
{
if (obj == null) return;
if (obj.plc.IsConnected == false) return;
byte[] result = obj.plc.Read("L101", 1);
if (result == null) return;
string str1 = ByteArrayToBinary(array(result)).Substring(0, 3);
int item1 = Regex.Matches(str1, "1").Count;

@ -64,10 +64,10 @@ namespace Aucma.Core.OldBoxFoam
AddServices(services);
//任务调度
services.AddJobSetup();
//services.AddJobSetup();
//PLC
services.AddPlcSetup();
services.AddAucmaTaskSetup();
// services.AddAucmaTaskSetup();
//支持编码大全 例如:支持 System.Text.Encoding.GetEncoding("GB2312") System.Text.Encoding.GetEncoding("GB18030")
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
}
@ -88,8 +88,8 @@ namespace Aucma.Core.OldBoxFoam
/// </summary>
/// <param name="app"></param>
/// <param name="env"></param>
public void Configure(IApplicationBuilder app, IAucamTaskService aucamTaskService,
ISchedulerCenter schedulerCenter, IRunPlcService runPlcService)
public void Configure(IApplicationBuilder app,
IRunPlcService runPlcService)
{
// 使用静态文件
app.UseStaticFiles();
@ -98,7 +98,7 @@ namespace Aucma.Core.OldBoxFoam
// 开启QuartzNetJob调度服务
// app.UseQuartzJobMildd(tasksQzService, schedulerCenter);
app.AucmaTaskMildds(aucamTaskService);
//app.AucmaTaskMildds(aucamTaskService);
//PLC
app.UsePlcMildd(runPlcService);
}

@ -14,6 +14,7 @@ using log4net;
using Microsoft.Extensions.DependencyInjection;
using NPOI.SS.Formula.Functions;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
@ -37,9 +38,11 @@ namespace Aucma.Core.OldBoxFoam.ViewModels
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(2000);
System.Timers.Timer timer2 = new System.Timers.Timer(10000);
int totalAmount = 0;
public OldBoxFoamPageViewModel() {
_oldBoxFoamDataServices = App.ServiceProvider.GetService<IBoxFoamDataServices>();
_oldBoxFoamTypeServices = App.ServiceProvider.GetService<IOldBoxFoamTypeServices>();
@ -67,17 +70,17 @@ namespace Aucma.Core.OldBoxFoam.ViewModels
{
try
{
totalAmount = 0;
_fixtureName.Clear();
_production.Clear();
_beat.Clear();
_statusColor.Clear();
if (Collection.listFixtureStatus == null) return;
if (collection.listFixtureStatus == null) return;
int i = 0;
var prderList= Collection.listFixtureStatus;
var prderList= collection.listFixtureStatus;
int num = prderList.Sum(d => d.Yield);
Console.WriteLine($"总产量{prderList.Sum(d => d.Yield)}");
_totle = $"总产量:{num}";
foreach (var item in prderList)
{
if (item.Status == 1)//生产
@ -91,9 +94,9 @@ namespace Aucma.Core.OldBoxFoam.ViewModels
_fixtureName.Add(item.FixtureBoxType);
_production.Add(item.Yield);
//_beat.Add(item.BoxBeat);
_totle = _totle + item.Yield;
totalAmount = totalAmount + item.Yield;
}
Totle = totalAmount.ToString();
}
catch (Exception ex)
{
@ -101,9 +104,7 @@ namespace Aucma.Core.OldBoxFoam.ViewModels
}
finally
{
var prderList = Collection.listFixtureStatus;
int num = prderList.Sum(d => d.Yield);
_totle = $"总产量:{num}";
if (GetStoreTimer != null)
{
GetStoreTimer.Change(20000, Timeout.Infinite);
@ -272,17 +273,29 @@ namespace Aucma.Core.OldBoxFoam.ViewModels
/// <param name="mode"></param>
public async void RealTimeFoamingTask(object? sender, ElapsedEventArgs e)
{
string productLineCode = Appsettings.app("StationInfo", "ProductLineCode");
if (Collection.listFixtureStatus == null) return;
DateTime now = DateTime.Now;
CurrentTeamTime time = await _currentTeamTimeServices.FirstAsync(d => d.StartTime <= now && d.EndTime >= now);
if (time != null)
semaphore.WaitOne();
try
{
ExecHourData(productLineCode);
string productLineCode = Appsettings.app("StationInfo", "ProductLineCode");
if (collection.listFixtureStatus == null) return;
DateTime now = DateTime.Now;
CurrentTeamTime time = await _currentTeamTimeServices.FirstAsync(d => d.StartTime <= now && d.EndTime >= now);
if (time != null)
{
ExecHourData(productLineCode);
}
else
{
ShiftChange(productLineCode);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message.ToString());
}
else
finally
{
ShiftChange(productLineCode);
semaphore.Release();
}
}
@ -335,95 +348,126 @@ namespace Aucma.Core.OldBoxFoam.ViewModels
await _oldBoxFoamDataServices.DeletesAsync(list);
}
}
Semaphore semaphore = new Semaphore(1, 1);
private async void ExecHourData(string productLineCode)
{
var boxList = Collection.listFixtureStatus;
if (boxList == null) return;
for (int j = 0; j < boxList.Count; j++)
try
{
OldBoxFoamType space = await _oldBoxFoamTypeServices.FirstAsync(d => d.Boxtype == boxList[j].FixtureBoxType);
//根据夹具找货道,根据货道找物料
if (space != null)
List<FixtureStatus> bLis = new List<FixtureStatus>();
collection.startCollect();
bLis = collection.listFixtureStatus;
if (bLis.Count == 0) return;
for (int j = 0; j < bLis.Count; j++)
{
BoxFoamPlan plan = _boxFoamPlanServices.FirstAsync(d => d.MaterialCode == space.MaterialCode).Result;
if (plan != null)
OldBoxFoamType space = await _oldBoxFoamTypeServices.FirstAsync(d => d.Boxtype == bLis[j].FixtureBoxType);
//根据夹具找货道,根据货道找物料
if (space != null)
{
plan.CompleteAmount = plan.CompleteAmount + 1;
await _boxFoamPlanServices.UpdateAsync(plan);
//更新小时数据
BoxFoamData bfd = await _oldBoxFoamDataServices.FirstAsync(d => d.Fixtureboxtype == boxList[j].FixtureBoxType && d.MainId == boxList[j].ObjId);
if (bfd != null)
BoxFoamPlan plan = _boxFoamPlanServices.FirstAsync(d => d.MaterialCode == space.MaterialCode).Result;
if (plan != null)
{
UpdateBoxData(boxList[j], bfd);
plan.CompleteAmount = plan.CompleteAmount + 1;
await _boxFoamPlanServices.UpdateAsync(plan);
//更新小时数据
BoxFoamData bfd = await _oldBoxFoamDataServices.FirstAsync(d => d.Fixtureboxtype == bLis[j].FixtureBoxType && d.MainId == bLis[j].ObjId);
if (bfd != null)
{
UpdateBoxData(bLis[j], bfd);
}
else
{
SaveBoxData(productLineCode, bLis[j]);
}
}
else
{
SaveBoxData(productLineCode, boxList[j]);
//更新小时数据
List<BoxFoamData> bfd = await _oldBoxFoamDataServices.QueryAsync(d => d.Fixtureboxtype == bLis[j].FixtureBoxType && d.MainId == bLis[j].ObjId);
if (bfd.Count > 0)
{
var obj = bfd.FirstOrDefault();
UpdateBoxData(bLis[j], obj);
}
else
{
SaveBoxData(productLineCode, bLis[j]);
}
}
}
else
{
//更新小时数据
BoxFoamData bfd = await _oldBoxFoamDataServices.FirstAsync(d => d.Fixtureboxtype == boxList[j].FixtureBoxType && d.MainId == boxList[j].ObjId);
if (bfd != null)
List<BoxFoamData> bfd = await _oldBoxFoamDataServices.QueryAsync(d => d.Fixtureboxtype == bLis[j].FixtureBoxType && d.MainId == bLis[j].ObjId);
if (bfd.Count > 0)
{
UpdateBoxData(boxList[j], bfd);
var obj = bfd.FirstOrDefault();
UpdateBoxData(bLis[j], obj);
}
else
{
SaveBoxData(productLineCode, boxList[j]);
SaveBoxData(productLineCode, bLis[j]);
}
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
private async void UpdateBoxData(FixtureStatus item, BoxFoamData bfd)
{
bfd.Production = item.Yield;
switch (GetTeamHour().Seq)
{
case 1:
bfd.AnHour = item.Yield = bfd.Production;
bfd.AnHour = item.Yield - bfd.Production;
break;
case 2:
bfd.TwoHour = item.Yield = bfd.Production;
bfd.TwoHour = item.Yield - bfd.Production;
break;
case 3:
bfd.ThreeHour = item.Yield = bfd.Production;
bfd.ThreeHour = item.Yield - bfd.Production;
break;
case 4:
bfd.FourHour = item.Yield = bfd.Production;
bfd.FourHour = item.Yield - bfd.Production;
break;
case 5:
bfd.FiveHour = item.Yield = bfd.Production;
bfd.FiveHour = item.Yield - bfd.Production;
break;
case 6:
bfd.SixHour = item.Yield = bfd.Production;
bfd.SixHour = item.Yield - bfd.Production;
break;
case 7:
bfd.SevenHour = item.Yield = bfd.Production;
bfd.SevenHour = item.Yield - bfd.Production;
break;
case 8:
bfd.EightHour = item.Yield = bfd.Production;
bfd.EightHour = item.Yield - bfd.Production;
break;
case 9:
bfd.NineHour = item.Yield = bfd.Production;
bfd.NineHour = item.Yield - bfd.Production;
break;
case 10:
bfd.TenHour = item.Yield = bfd.Production;
bfd.TenHour = item.Yield - bfd.Production;
break;
case 11:
bfd.ElevenHour = item.Yield = bfd.Production;
bfd.ElevenHour = item.Yield - bfd.Production;
break;
case 12:
bfd.TwelveHour = item.Yield = bfd.Production;
bfd.TwelveHour = item.Yield - bfd.Production;
break;
default:
break;
}
bfd.Production = item.Yield;
await _oldBoxFoamDataServices.UpdateAsync(bfd);
}

Loading…
Cancel
Save