|
|
using Aucma.Core.SheetMetal.Models;
|
|
|
using Aucma.Core.SheetMetal.Views;
|
|
|
using CommunityToolkit.Mvvm.ComponentModel;
|
|
|
using CommunityToolkit.Mvvm.Input;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Collections.ObjectModel;
|
|
|
using System.Windows;
|
|
|
using System.Linq;
|
|
|
using System.Threading.Tasks;
|
|
|
using Admin.Core.IService;
|
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
using Aucma.Core.SheetMetal.Common;
|
|
|
using LiveCharts;
|
|
|
using LiveCharts.Wpf;
|
|
|
using Admin.Core.Model;
|
|
|
using System.Windows.Media;
|
|
|
using Admin.Core.Common;
|
|
|
using LiveCharts.Defaults;
|
|
|
using Aucma.Core.SheetMetal.Business;
|
|
|
using Admin.Core.Model.ViewModels;
|
|
|
using log4net;
|
|
|
using Aucma.Core.HwPLc;
|
|
|
using System.Text;
|
|
|
using System.Threading;
|
|
|
using Admin.Core.Model.Model_New;
|
|
|
using Aucma.Core.SheetMetalTasks;
|
|
|
/*
|
|
|
* 首页信息
|
|
|
*/
|
|
|
namespace Aucma.Core.SheetMetal.ViewModels
|
|
|
{
|
|
|
public partial class IndexPageViewModel : ObservableObject
|
|
|
{
|
|
|
private static readonly log4net.ILog log = LogManager.GetLogger(typeof(IndexPageViewModel));
|
|
|
|
|
|
#region 初始化接口
|
|
|
|
|
|
protected readonly IExecutePlanInfoServices? _taskExecutionPlanInfoServices;
|
|
|
protected readonly IRecordBackPanelComplateServices _recordBackPanelComplateServices;
|
|
|
protected readonly IRecordSidePanelComplateServices _recordSidePanelComplateServices;
|
|
|
protected readonly IExecutePlanInfoServices? _executePlanInfoServices;
|
|
|
protected readonly IBaseBomInfoServices _baseBomInfoServices;
|
|
|
private readonly ISysUserInfoServices _sysUserInfoServices;
|
|
|
private readonly IRecordInStoreServices _recordInstoreServices;
|
|
|
private readonly IBaseOrderInfoServices _baseOrderInfoServices;
|
|
|
#endregion
|
|
|
|
|
|
#region 初始化下拉数据
|
|
|
private AppConfigHelper appConfig = new AppConfigHelper();//读取保存的文本数据
|
|
|
List<SelectModel> selectList = new List<SelectModel>() { new SelectModel()
|
|
|
{
|
|
|
ID=1,
|
|
|
TypeName="手动"
|
|
|
},
|
|
|
new SelectModel()
|
|
|
{
|
|
|
ID=2,
|
|
|
TypeName="自动"
|
|
|
}};
|
|
|
#endregion
|
|
|
|
|
|
#region 定义对象和定义字段
|
|
|
public Func<double, string> Formatter { get; set; }
|
|
|
public HwPLc.PlcModel obj = null;
|
|
|
#endregion
|
|
|
|
|
|
#region 构造函数
|
|
|
public IndexPageViewModel()
|
|
|
{
|
|
|
_stationName = Appsettings.app("StationInfo", "StationName");//工位名称
|
|
|
_baseOrderInfoServices = App.ServiceProvider.GetService<IBaseOrderInfoServices>();
|
|
|
_executePlanInfoServices = App.ServiceProvider.GetService<IExecutePlanInfoServices>();
|
|
|
_taskExecutionPlanInfoServices = App.ServiceProvider.GetService<IExecutePlanInfoServices>();
|
|
|
_recordBackPanelComplateServices = App.ServiceProvider.GetService<IRecordBackPanelComplateServices>();
|
|
|
_recordSidePanelComplateServices = App.ServiceProvider.GetService<IRecordSidePanelComplateServices>();
|
|
|
_baseBomInfoServices = App.ServiceProvider.GetService<IBaseBomInfoServices>();
|
|
|
_sysUserInfoServices = App.ServiceProvider.GetService<ISysUserInfoServices>();
|
|
|
_recordInstoreServices = App.ServiceProvider.GetService<IRecordInStoreServices>();
|
|
|
Task.WaitAll(LoadData());
|
|
|
AddSelectData();//添加下拉菜单
|
|
|
RefreshHourAmount();//小时产量
|
|
|
RefreshMaterialStats();//型号产量
|
|
|
//——测试——
|
|
|
//InitEveryDayMethod();//小时产量
|
|
|
//InitExecMethod();//执行列表
|
|
|
//LoadDataTest();
|
|
|
//——测试 end——
|
|
|
AucamSheetMetalTaskService.RefreshCurrentPlanInfoEvent += RefreshCurrentPlanInfo;
|
|
|
QuantityIssuedViewModel.RefreshCretaePlanInfoEvent += LoadData;
|
|
|
AucamSheetMetalTaskService.RefreshCreatePlanInfoEvent += LoadData;
|
|
|
AucamSheetMetalTaskService.RefreshChatEvent += RefreshChat;
|
|
|
AucamSheetMetalTaskService.RefreshPlanInfoEvent += RefreshPlanShow;
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 更新前端数据
|
|
|
public Task RefreshChat()
|
|
|
{
|
|
|
RefreshHourAmountChart();//小时产量
|
|
|
RefreshMaterialChart();//型号产量
|
|
|
return Task.CompletedTask;
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 下拉
|
|
|
public void AddSelectData()
|
|
|
{
|
|
|
foreach (var item in selectList)
|
|
|
{
|
|
|
LocationSource.Add(item);
|
|
|
}
|
|
|
SelectLocation = ReadFile();
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
#region 订单统计
|
|
|
|
|
|
private void InitExecMethod()
|
|
|
{
|
|
|
//string station = Appsettings.app("StationInfo", "StationCode");
|
|
|
//ExecutePlanInfo info = await _taskExecutionPlanInfoServices.FirstAsync(d => d.ProductLineCode.Equals(station) && d.ExecuteStatus == 2);
|
|
|
//if (info == null) return;
|
|
|
|
|
|
OrderCode="11245376";//订单
|
|
|
MesOrderCode = "2401101789";//Mes订单
|
|
|
ProductModel = "BCD-162CST";
|
|
|
BeginTime = "2024-01-16";
|
|
|
PlanMaxNum = 500;
|
|
|
RealQuantity = 20;
|
|
|
DiffQuantity = 480;
|
|
|
//CompletionRate = (_realQuantity / _planMaxNum).ToString("0%");
|
|
|
CompletionRate = double.Parse((RealQuantity / PlanMaxNum).ToString("F3"));
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
#region ——测试
|
|
|
/// <summary>
|
|
|
/// 每日生产
|
|
|
/// </summary>
|
|
|
/// <returns></returns>
|
|
|
private Task InitEveryDayMethod()
|
|
|
{
|
|
|
#region 按时间统计
|
|
|
ChartValues<ObservablePoint> achievement = new ChartValues<ObservablePoint>
|
|
|
{
|
|
|
new ObservablePoint(0, 75),
|
|
|
new ObservablePoint(1, 121),
|
|
|
new ObservablePoint(2, 105),
|
|
|
new ObservablePoint(3,0),
|
|
|
new ObservablePoint(4,0),
|
|
|
new ObservablePoint(5,0),
|
|
|
new ObservablePoint(6,0),
|
|
|
new ObservablePoint(7,0),
|
|
|
new ObservablePoint(8,0),
|
|
|
new ObservablePoint(9,0),
|
|
|
new ObservablePoint(10,0),
|
|
|
new ObservablePoint(11,0)
|
|
|
};
|
|
|
|
|
|
var column = new ColumnSeries();
|
|
|
column.DataLabels = true;
|
|
|
column.Title = "前板";
|
|
|
column.ScalesYAt = 0;
|
|
|
column.Values = achievement;
|
|
|
column.Foreground = Brushes.White;
|
|
|
column.FontSize = 18;
|
|
|
//柱子宽度
|
|
|
//column.Width = 30;
|
|
|
//column.MaxColumnWidth = 30;
|
|
|
//column.LabelsPosition = BarLabelPosition.Perpendicular;
|
|
|
//column.Fill = new SolidColorBrush(Color.FromRgb(34, 139, 34)); //柱状图颜色填充
|
|
|
//column.LabelPoint = p => p.Y.ToString(); //柱状图数据显示位置
|
|
|
|
|
|
ProductionHourList = new List<string>()
|
|
|
{
|
|
|
"8:00", "9:00", "10:00", "11:00", "12:00", "13:00", "14:00", "15:00", "16:00", "17:00", "18:00", "19:00"
|
|
|
};
|
|
|
|
|
|
|
|
|
//Formatter = value => value.ToString("N");
|
|
|
Achievement.Add(column);
|
|
|
|
|
|
Achievement.Add(new ColumnSeries
|
|
|
{
|
|
|
DataLabels = true,
|
|
|
Title = "后板",
|
|
|
Values = achievement,
|
|
|
Fill = new SolidColorBrush(Color.FromRgb(15, 209, 226)),
|
|
|
Foreground = Brushes.CadetBlue,
|
|
|
FontSize = 18
|
|
|
});
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
#region 按类型统计
|
|
|
//ChartValues<double> achievement2 = new ChartValues<double>();
|
|
|
ChartValues<ObservablePoint> achievement2 = new ChartValues<ObservablePoint>
|
|
|
{
|
|
|
new ObservablePoint(0,15),
|
|
|
new ObservablePoint(1,106),
|
|
|
new ObservablePoint(2,66),
|
|
|
new ObservablePoint(3,46)
|
|
|
};
|
|
|
var column2 = new ColumnSeries();
|
|
|
column2.DataLabels = true;
|
|
|
column2.Title = "前板";
|
|
|
column2.Values = achievement2;
|
|
|
column2.Foreground = Brushes.White;
|
|
|
column2.FontSize = 18;
|
|
|
ModelStatistics.Add(column2);
|
|
|
|
|
|
ModelStatistics.Add(new ColumnSeries()
|
|
|
{
|
|
|
DataLabels = true,
|
|
|
Title = "后板",
|
|
|
Values = achievement2,
|
|
|
Fill = new SolidColorBrush(Color.FromRgb(15, 209, 226)),
|
|
|
Foreground = Brushes.White,
|
|
|
FontSize = 18
|
|
|
});
|
|
|
|
|
|
MaterialNameList = new List<string>()
|
|
|
{
|
|
|
"BCD-162CST", "BCD-212CHG", "BCD-211CHG", "BC/BD-310NF"
|
|
|
};
|
|
|
#endregion
|
|
|
return Task.CompletedTask;
|
|
|
}
|
|
|
|
|
|
private void LoadDataTest()
|
|
|
{
|
|
|
List<TaskExecModel> taskList = new List<TaskExecModel>();
|
|
|
TaskExecModel task = new TaskExecModel();
|
|
|
task.No = 1;
|
|
|
task.ID = "";
|
|
|
task.OrderCode = "11245376";
|
|
|
task.MaterialCode = "9000008460";
|
|
|
task.MaterialName = "BCD-162CST";
|
|
|
task.TaskAmount = 20;
|
|
|
task.CompleteAmount = 15;
|
|
|
task.BeginTime = Convert.ToDateTime("2024-01-16");
|
|
|
task.IsExec =2;//执行状态
|
|
|
task.PlanType = "前后板联动";
|
|
|
task.Recipe = "BCD-162CST";
|
|
|
task.SidePanelAmount =15;
|
|
|
task.BackPanelAmount = 15;
|
|
|
task.TaskCode = "24011017890003";
|
|
|
task.ExecuteStatus = 2;//执行状态
|
|
|
|
|
|
PlanInfoDataGrid.Add(task);
|
|
|
TaskExecModel task2 = new TaskExecModel();
|
|
|
task2.No = 2;
|
|
|
task2.ID = "";
|
|
|
task2.OrderCode = "11244891";
|
|
|
task2.MaterialCode = "9000004738";
|
|
|
task2.MaterialName = "BCD-162CST";
|
|
|
task2.TaskAmount = 20;
|
|
|
task2.CompleteAmount = 50;
|
|
|
task2.BeginTime = Convert.ToDateTime("2024-01-16");
|
|
|
task2.IsExec = 2;//执行状态
|
|
|
task2.PlanType = "前后板联动";
|
|
|
task2.Recipe = "BCD-162CST";
|
|
|
task2.SidePanelAmount = 50;
|
|
|
task2.BackPanelAmount = 50;
|
|
|
task2.TaskCode = "24011300010005";
|
|
|
task2.ExecuteStatus = 3;//执行状态
|
|
|
|
|
|
PlanInfoDataGrid.Add(task2);
|
|
|
TaskExecModel task3 = new TaskExecModel();
|
|
|
task3.No = 3;
|
|
|
task3.ID = "";
|
|
|
task3.OrderCode = "11244793";
|
|
|
task3.MaterialCode = "9000004738";
|
|
|
task3.MaterialName = "BCD-212CHG";
|
|
|
task3.TaskAmount = 60;
|
|
|
task3.CompleteAmount = 60;
|
|
|
task3.BeginTime = Convert.ToDateTime("2024-01-16");
|
|
|
task3.IsExec = 2;//执行状态
|
|
|
task3.PlanType = "前后板联动";
|
|
|
task3.Recipe = "BCD-162CST";
|
|
|
task3.SidePanelAmount = 60;
|
|
|
task3.BackPanelAmount = 60;
|
|
|
task3.TaskCode = "24011200020003";
|
|
|
task3.ExecuteStatus = 3;//执行状态
|
|
|
|
|
|
PlanInfoDataGrid.Add(task3);
|
|
|
TaskExecModel task4 = new TaskExecModel();
|
|
|
task4.No =4;
|
|
|
task4.ID = "";
|
|
|
task4.OrderCode = "11244784";
|
|
|
task4.MaterialCode = "9000008460";
|
|
|
task4.MaterialName = "BC/BD-310NF";
|
|
|
task4.TaskAmount = 40;
|
|
|
task4.CompleteAmount = 40;
|
|
|
task4.BeginTime = Convert.ToDateTime("2024-01-16");
|
|
|
task4.IsExec = 3;//执行状态
|
|
|
task4.PlanType = "前后板联动";
|
|
|
task4.Recipe = "BC/BD-310NF";
|
|
|
task4.SidePanelAmount = 40;
|
|
|
task4.BackPanelAmount = 40;
|
|
|
task4.TaskCode = "24011017840008";
|
|
|
task4.ExecuteStatus = 3;//执行状态
|
|
|
|
|
|
PlanInfoDataGrid.Add(task4);
|
|
|
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
#region 计划列表
|
|
|
|
|
|
#region 加载DataGrid数据
|
|
|
private async Task LoadData()
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
string stationCode = Appsettings.app("StationInfo", "StationCode");
|
|
|
CurrentTeamTimeView view = GetTeamHour();
|
|
|
var executePlanInfoList =await _executePlanInfoServices.QuerySheetMetalSendPlanData("1001");
|
|
|
if (executePlanInfoList == null) return;
|
|
|
List<SheetMetaSendPlanInfoView> execList = executePlanInfoList.Where(d =>Convert.ToDateTime(d.BeginTime) > view.StartTime || d.ExecuteStatus == 1 || d.ExecuteStatus == 2).ToList();
|
|
|
execList= execList.OrderByDescending(d => d.ExecuteOrder).ToList();
|
|
|
if (execList == null) return;
|
|
|
int i = 1;
|
|
|
System.Windows.Application.Current.Dispatcher.Invoke((Action)(() =>
|
|
|
{
|
|
|
PlanInfoDataGrid.Clear();
|
|
|
foreach (var item in execList)
|
|
|
{
|
|
|
TaskExecModel task = new TaskExecModel();
|
|
|
task.No = i;
|
|
|
task.ID = item.ObjId.ToString();
|
|
|
task.OrderCode = item.OrderCode;
|
|
|
task.MaterialCode = item.MaterialCode;
|
|
|
task.MaterialName = item.MaterialName;
|
|
|
task.TaskAmount = item.PlanAmount;
|
|
|
task.CompleteAmount = item.CompleteAmount;
|
|
|
task.BeginTime =Convert.ToDateTime(item.BeginTime);
|
|
|
task.IsExec = item.ExecuteStatus;//执行状态
|
|
|
if (item.PlanType == 1)
|
|
|
{
|
|
|
task.PlanType = "前后板联动";
|
|
|
}
|
|
|
if (item.PlanType == 2)
|
|
|
{
|
|
|
task.PlanType = "前板计划";
|
|
|
}
|
|
|
if (item.PlanType == 3)
|
|
|
{
|
|
|
task.PlanType = "后板计划";
|
|
|
}
|
|
|
task.Recipe = item.MaterialSpecificatons;
|
|
|
task.SidePanelAmount = item.SidePanelAmount;
|
|
|
task.BackPanelAmount = item.BackPanelAmount;
|
|
|
task.TaskCode = item.TaskCode;
|
|
|
task.ExecuteStatus = item.ExecuteStatus;//执行状态
|
|
|
|
|
|
PlanInfoDataGrid.Add(task);
|
|
|
i++;
|
|
|
}
|
|
|
}));
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
log.Error("钣金首页数据加载:"+ex.Message);
|
|
|
}
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 刷新计划执行
|
|
|
public async void RefreshPlanShow(SheetMetaSendPlanInfoView execPlan)
|
|
|
{
|
|
|
string stationCode = Appsettings.app("StationInfo", "StationCode");
|
|
|
var planInfoList = _executePlanInfoServices.QueryAsync(d => d.ProductLineCode.Contains(stationCode)).Result;
|
|
|
if (planInfoList == null || planInfoList.Count == 0) return;
|
|
|
|
|
|
var list = (from d in planInfoList
|
|
|
group d by d.OrderCode into g
|
|
|
select new
|
|
|
{
|
|
|
OrderCode = g.Key,
|
|
|
CompleteAmount = g.Sum(d => d.CompleteAmount)
|
|
|
}).OrderBy(t => t.OrderCode).ToList();
|
|
|
|
|
|
//更新首页显示信息
|
|
|
BaseOrderInfo orderPlan =await _baseOrderInfoServices.FirstAsync(d => d.OrderCode == execPlan.OrderCode);
|
|
|
var orderInfo=list.FirstOrDefault(d=>d.OrderCode == execPlan.OrderCode);
|
|
|
if (orderPlan != null)
|
|
|
{
|
|
|
OrderCode = execPlan.OrderCode;
|
|
|
MesOrderCode = execPlan.ProductPlanCode;
|
|
|
ProductModel = execPlan.MaterialName;
|
|
|
BeginTime = string.IsNullOrEmpty(execPlan.BeginTime)?"": execPlan.BeginTime.ToString();
|
|
|
PlanMaxNum = orderPlan.OrderAmount;//显示SAP订单数,而不是拆分订单计划数
|
|
|
RealQuantity = orderInfo.CompleteAmount;
|
|
|
double diff = orderPlan.OrderAmount - RealQuantity;
|
|
|
DiffQuantity = int.Parse(diff.ToString());
|
|
|
//CompletionRate = (_realQuantity/_planMaxNum).ToString("0%");
|
|
|
CompletionRate = double.Parse((RealQuantity / orderPlan.OrderAmount).ToString("F3"));
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
OrderCode = string.Empty;
|
|
|
MesOrderCode = string.Empty;
|
|
|
ProductModel = string.Empty;
|
|
|
BeginTime = string.Empty;
|
|
|
PlanMaxNum = 0;
|
|
|
RealQuantity = 0.0;
|
|
|
DiffQuantity = 0;
|
|
|
CompletionRate = 0;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
#region 向上
|
|
|
/// <summary>
|
|
|
/// 向上
|
|
|
/// </summary>
|
|
|
[RelayCommand]
|
|
|
private async Task MoveUp(string Id)
|
|
|
{
|
|
|
string stationCode = Appsettings.app("StationInfo", "StationCode");
|
|
|
bool result = await _taskExecutionPlanInfoServices.PlanMoveDown(Id, stationCode);
|
|
|
if (result)
|
|
|
{
|
|
|
await LoadData();
|
|
|
}
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 向下
|
|
|
/// <summary>
|
|
|
/// 向下
|
|
|
/// </summary>
|
|
|
[RelayCommand]
|
|
|
private async Task MoveDown(string Id)
|
|
|
{
|
|
|
string stationCode = Appsettings.app("StationInfo", "StationCode");
|
|
|
bool result = await _taskExecutionPlanInfoServices.PlanMoveUp(Id, stationCode);
|
|
|
if (result)
|
|
|
{
|
|
|
await LoadData();
|
|
|
}
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 删除
|
|
|
/// <summary>
|
|
|
/// 删除
|
|
|
/// </summary>
|
|
|
[RelayCommand]
|
|
|
private async Task DeletePlan(string Id)
|
|
|
{
|
|
|
MessageBoxResult msg = MessageBox.Show("确定要删除吗?", "系统提醒", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No);
|
|
|
if (MessageBoxResult.Yes == msg)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
int id = Convert.ToInt32(Id);
|
|
|
ExecutePlanInfo executionPlanInfo = _taskExecutionPlanInfoServices.FirstAsync(s => s.ObjId == id).Result;
|
|
|
|
|
|
if (executionPlanInfo.PlanAmount == executionPlanInfo.CompleteAmount)
|
|
|
{
|
|
|
MessageBox.Show("执行计划已经完成,不可以删除!", "系统信息");
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (executionPlanInfo.PlanType == 1)
|
|
|
{
|
|
|
var obj_sidePanel = PlcHelper.melsecList.FirstOrDefault(d => d.EquipName.Equals("SidePanelPlc"));
|
|
|
var obj_backPanel = PlcHelper.melsecList.FirstOrDefault(d => d.EquipName.Equals("BackPanelPLC"));
|
|
|
string taskSideCode = this.GetSidePlanCode(obj_sidePanel);
|
|
|
string taskBackCode = this.GetBackPlanCode(obj_backPanel);
|
|
|
if (taskSideCode.Equals(executionPlanInfo.TaskCode))
|
|
|
{
|
|
|
obj_sidePanel.plc.WriteInt16("D6021", "5");
|
|
|
}
|
|
|
if (taskBackCode.Equals(executionPlanInfo.TaskCode))
|
|
|
{
|
|
|
obj_backPanel.plc.WriteInt16("D4021", "5");
|
|
|
}
|
|
|
|
|
|
var backPanelList = _recordBackPanelComplateServices.QueryAsync(d => d.PlanCode.Equals(executionPlanInfo.TaskCode)).Result;
|
|
|
int backPanelCount = backPanelList.Sum(d => d.OutPutAmount);
|
|
|
var sidePanelList = _recordSidePanelComplateServices.QueryAsync(d => d.PlanCode.Equals(executionPlanInfo.TaskCode)).Result;
|
|
|
int sidePanelCount = sidePanelList.Sum(d => d.OutPutAmount);
|
|
|
if (backPanelCount == 0&& sidePanelCount==0)
|
|
|
{
|
|
|
executionPlanInfo.IsFlag =0;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
executionPlanInfo.IsFlag = 1;
|
|
|
}
|
|
|
}
|
|
|
if (executionPlanInfo.PlanType == 2)
|
|
|
{
|
|
|
var obj_sidePanel = PlcHelper.melsecList.FirstOrDefault(d => d.EquipName.Equals("SidePanelPlc"));
|
|
|
string taskSideCode = this.GetSidePlanCode(obj_sidePanel);
|
|
|
if (taskSideCode.Equals(executionPlanInfo.TaskCode))
|
|
|
{
|
|
|
obj_sidePanel.plc.WriteInt16("D6021", "5");
|
|
|
}
|
|
|
|
|
|
var sidePanelList = _recordSidePanelComplateServices.QueryAsync(d => d.PlanCode.Equals(executionPlanInfo.TaskCode)).Result;
|
|
|
int sidePanelCount = sidePanelList.Sum(d => d.OutPutAmount);
|
|
|
if (sidePanelCount == 0)
|
|
|
{
|
|
|
executionPlanInfo.IsFlag = 0;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
executionPlanInfo.IsFlag = 1;
|
|
|
}
|
|
|
}
|
|
|
if (executionPlanInfo.PlanType == 3)
|
|
|
{
|
|
|
var obj_backPanel = PlcHelper.melsecList.FirstOrDefault(d => d.EquipName.Equals("BackPanelPLC"));
|
|
|
string taskBackCode = this.GetBackPlanCode(obj_backPanel);
|
|
|
if (taskBackCode.Equals(executionPlanInfo.TaskCode))
|
|
|
{
|
|
|
obj_backPanel.plc.WriteInt16("D4021", "5");
|
|
|
}
|
|
|
|
|
|
var backPanelList = _recordBackPanelComplateServices.QueryAsync(d => d.PlanCode.Equals(executionPlanInfo.TaskCode)).Result;
|
|
|
int backPanelCount = backPanelList.Sum(d => d.OutPutAmount);
|
|
|
if (backPanelCount == 0)
|
|
|
{
|
|
|
executionPlanInfo.IsFlag = 0;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
executionPlanInfo.IsFlag = 1;
|
|
|
}
|
|
|
}
|
|
|
bool result= false;
|
|
|
if (executionPlanInfo.IsFlag == 0)
|
|
|
{
|
|
|
result = await _taskExecutionPlanInfoServices.DeleteAsync(executionPlanInfo);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
result = await _taskExecutionPlanInfoServices.UpdateAsync(executionPlanInfo);
|
|
|
}
|
|
|
|
|
|
if (result)
|
|
|
{
|
|
|
PlanInfoDataGrid.Clear();
|
|
|
await LoadData();
|
|
|
MessageBox.Show("执行计划删除成功", "系统信息");
|
|
|
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MessageBox.Show("执行计划删除失败", "系统信息");
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
log.Error("钣金取消计划异常:"+ex.Message);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 下传计划
|
|
|
/// <summary>
|
|
|
/// 下传计划
|
|
|
/// </summary>
|
|
|
[RelayCommand]
|
|
|
private async Task NextPass(string Id)
|
|
|
{
|
|
|
MessageBoxResult msg = MessageBox.Show("确定要下发计划吗?", "系统提醒", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No);
|
|
|
if (MessageBoxResult.Yes != msg) return;
|
|
|
|
|
|
var model = await _taskExecutionPlanInfoServices.FirstAsync(d => d.ObjId == int.Parse(Id));
|
|
|
if (model.ExecuteStatus == 2)
|
|
|
{
|
|
|
MessageBox.Show("该计划正在执行中,请勿重复下传", "系统信息");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
var result = _taskExecutionPlanInfoServices.PlanNextPass(model);
|
|
|
if (result != null)
|
|
|
{
|
|
|
//刷新列表
|
|
|
MessageBox.Show("执行计划已下达", "系统信息");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MessageBox.Show("执行计划下达失败", "系统信息");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 初始化datagrid
|
|
|
private ObservableCollection<TaskExecModel> planInfoDataGrid = new ObservableCollection<TaskExecModel>();
|
|
|
public ObservableCollection<TaskExecModel> PlanInfoDataGrid
|
|
|
{
|
|
|
get { return planInfoDataGrid; }
|
|
|
set
|
|
|
{
|
|
|
planInfoDataGrid = value;
|
|
|
OnPropertyChanged();//属性通知
|
|
|
}
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 计划拆分执行
|
|
|
/// <summary>
|
|
|
/// 计划拆分执行
|
|
|
/// </summary>
|
|
|
[RelayCommand]
|
|
|
private void SplitPlan()
|
|
|
{
|
|
|
SplitPlanView split = new SplitPlanView();
|
|
|
split.ShowDialog();
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 物料库存
|
|
|
/// <summary>
|
|
|
/// 物料库存
|
|
|
/// </summary>
|
|
|
[RelayCommand]
|
|
|
private void InventoryStatistics()
|
|
|
{
|
|
|
MaterialStatisticsView model = new MaterialStatisticsView();
|
|
|
model.ShowDialog();
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
#region 执行计划
|
|
|
|
|
|
#region 工位名称
|
|
|
private string _stationName;
|
|
|
public string StationName
|
|
|
{
|
|
|
get => _stationName;
|
|
|
set => SetProperty(ref _stationName, value);
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 订单编号
|
|
|
private string _orderCode;
|
|
|
public string OrderCode
|
|
|
{
|
|
|
get => _orderCode;
|
|
|
set => SetProperty(ref _orderCode, value);
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 计划编号
|
|
|
private string _mesOrderCode;
|
|
|
public string MesOrderCode
|
|
|
{
|
|
|
get => _mesOrderCode;
|
|
|
set => SetProperty(ref _mesOrderCode, value);
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 成品型号
|
|
|
private string _productModel;
|
|
|
public string ProductModel
|
|
|
{
|
|
|
get => _productModel;
|
|
|
set => SetProperty(ref _productModel, value);
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 开始时间
|
|
|
private string _beginTime;
|
|
|
public string BeginTime
|
|
|
{
|
|
|
get => _beginTime;
|
|
|
set => SetProperty(ref _beginTime, value);
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 计划数量
|
|
|
private int _planNum;
|
|
|
public int PlanNum
|
|
|
{
|
|
|
get => _planNum;
|
|
|
set => SetProperty(ref _planNum, value);
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 计划最大值
|
|
|
/// </summary>
|
|
|
private double _planMaxNum;
|
|
|
public double PlanMaxNum
|
|
|
{
|
|
|
get => _planMaxNum;
|
|
|
set => SetProperty(ref _planMaxNum, value);
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 实际数量
|
|
|
private double _realQuantity;
|
|
|
public double RealQuantity
|
|
|
{
|
|
|
get => _realQuantity;
|
|
|
set => SetProperty(ref _realQuantity, value);
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 差异数量
|
|
|
private int _diffQuantity;
|
|
|
public int DiffQuantity
|
|
|
{
|
|
|
get => _diffQuantity;
|
|
|
set => SetProperty(ref _diffQuantity, value);
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 完成率
|
|
|
private double _completionRate;
|
|
|
public double CompletionRate
|
|
|
{
|
|
|
get => _completionRate;
|
|
|
set => SetProperty(ref _completionRate, value);
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
#region 当日产量
|
|
|
|
|
|
#region 日产量柱状图X轴日期
|
|
|
/// <summary>
|
|
|
/// 日产量柱状图X轴日期
|
|
|
/// </summary>
|
|
|
private List<string> productionHourList;
|
|
|
|
|
|
public List<string> ProductionHourList
|
|
|
{
|
|
|
get { return productionHourList; }
|
|
|
set { productionHourList = value; }
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
/// <summary>
|
|
|
/// 日产量柱状图
|
|
|
/// </summary>
|
|
|
private SeriesCollection achievement = new SeriesCollection();
|
|
|
|
|
|
public SeriesCollection Achievement
|
|
|
{
|
|
|
get { return achievement; }
|
|
|
set { achievement = value; }
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
#region 型号统计
|
|
|
|
|
|
#region 型号统计柱状图x轴物料类型
|
|
|
/// <summary>
|
|
|
/// 型号统计柱状图x轴物料类型
|
|
|
/// </summary>
|
|
|
private List<string> materialNameList;
|
|
|
|
|
|
public List<string> MaterialNameList
|
|
|
{
|
|
|
get { return materialNameList; }
|
|
|
set { materialNameList = value; }
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 型号统计柱状图
|
|
|
/// <summary>
|
|
|
/// 型号统计柱状图
|
|
|
/// </summary>
|
|
|
private SeriesCollection modelStatistics = new SeriesCollection();
|
|
|
|
|
|
public SeriesCollection ModelStatistics
|
|
|
{
|
|
|
get { return modelStatistics; }
|
|
|
set { modelStatistics = value; }
|
|
|
}
|
|
|
#endregion
|
|
|
#endregion
|
|
|
|
|
|
#region 下拉框 选择执行状态
|
|
|
/// <summary>
|
|
|
/// 下拉框 选择执行状态
|
|
|
/// </summary>
|
|
|
private string materialTypeCombox;
|
|
|
public string MaterialTypeCombox
|
|
|
{
|
|
|
get { return materialTypeCombox; }
|
|
|
set
|
|
|
{
|
|
|
materialTypeCombox = value;
|
|
|
SetProperty(ref materialTypeCombox, value);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 当ComboBox选中项更改时发生
|
|
|
/// </summary>
|
|
|
private SelectModel _selectLocation;
|
|
|
|
|
|
public SelectModel SelectLocation
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
return this._selectLocation;
|
|
|
}
|
|
|
set
|
|
|
{
|
|
|
this._selectLocation = value;
|
|
|
//这里操作更改变化的值
|
|
|
//MessageBox.Show(_selectLocation.ID);
|
|
|
if (_selectLocation != null)
|
|
|
{
|
|
|
WriteFile(_selectLocation.ID);
|
|
|
}
|
|
|
|
|
|
SetProperty(ref _selectLocation, value);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private ObservableCollection<SelectModel> _locationRoad = new ObservableCollection<SelectModel>();
|
|
|
/// <summary>
|
|
|
/// 集合数据
|
|
|
/// </summary>
|
|
|
public ObservableCollection<SelectModel> LocationSource
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
return this._locationRoad;
|
|
|
}
|
|
|
set
|
|
|
{
|
|
|
SetProperty(ref _locationRoad, value);
|
|
|
}
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 刷新界面显示数据
|
|
|
/// <summary>
|
|
|
/// 刷新界面显示数据
|
|
|
/// </summary>
|
|
|
/// <param name="info"></param>
|
|
|
/// <returns></returns>
|
|
|
public async Task UpdatePlanSHow()
|
|
|
{
|
|
|
string stationCode = Appsettings.app("StationInfo", "StationCode");
|
|
|
var info = await _taskExecutionPlanInfoServices.FirstAsync(d => d.ExecuteStatus == 3 && d.ProductLineCode == stationCode);
|
|
|
|
|
|
if (info == null) return;
|
|
|
//info= info.First(d => d.ExecuteStatus == 3 && d.ProductLineCode == stationCode);
|
|
|
System.Windows.Application.Current.Dispatcher.Invoke((Action)(() =>
|
|
|
{
|
|
|
//PlanMaxNum = info.PlanAmount;
|
|
|
//OrderCode = info.OrderCode;
|
|
|
//MesMOrderCode = info.ProductPlanCode;
|
|
|
//ProductModel = info.MaterialName;
|
|
|
//BeginTime = info.BeginTime.ToString();
|
|
|
}));
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 读写文件
|
|
|
public void WriteFile(int obj)
|
|
|
{
|
|
|
//写入到配置文件中
|
|
|
appConfig.queryExec = obj.ToString();
|
|
|
}
|
|
|
public SelectModel ReadFile()
|
|
|
{
|
|
|
//读取入到配置文件中
|
|
|
var queryExec = appConfig.queryExec;
|
|
|
var model = selectList.FirstOrDefault(d => d.ID == int.Parse(queryExec));
|
|
|
return model;
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 刷新当前执行的计划进度
|
|
|
/// <summary>
|
|
|
/// 刷新当前执行的计划进度
|
|
|
/// </summary>
|
|
|
/// <param name="planInfo"></param>
|
|
|
private void RefreshCurrentPlanInfo()
|
|
|
{
|
|
|
App.Current.Dispatcher.BeginInvoke((Action)(() =>
|
|
|
{
|
|
|
PlanInfoDataGrid.Clear();
|
|
|
LoadData();
|
|
|
}));
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 刷新小时产量统计
|
|
|
/// <summary>
|
|
|
/// 刷新小时产量统计
|
|
|
/// </summary>
|
|
|
private void RefreshHourAmount()
|
|
|
{
|
|
|
App.Current.Dispatcher.Invoke((Action)(() =>
|
|
|
{
|
|
|
//获取小时产量
|
|
|
string stationCode = Appsettings.app("StationInfo", "StationCode");
|
|
|
var hourAmount = _sysUserInfoServices.GetSheetMetaHourData(stationCode).Result;
|
|
|
if (hourAmount != null)
|
|
|
{
|
|
|
if (Achievement.Count != 0) Achievement.Clear();
|
|
|
|
|
|
ProductionHourList = new List<string>();
|
|
|
ChartValues<ObservablePoint> hourAchievement1 = new ChartValues<ObservablePoint>();
|
|
|
ChartValues<ObservablePoint> hourAchievement2 = new ChartValues<ObservablePoint>();
|
|
|
int hour = 0;
|
|
|
foreach (var item in hourAmount)
|
|
|
{
|
|
|
hourAchievement1.Add(new ObservablePoint(hour,Convert.ToDouble(item.FrontPlateAmount)));
|
|
|
hourAchievement2.Add(new ObservablePoint(hour,Convert.ToDouble(item.RearPanelAmount)));
|
|
|
ProductionHourList.Add(item.HourTime);
|
|
|
hour++;
|
|
|
}
|
|
|
#region 按时间统计
|
|
|
|
|
|
|
|
|
var column = new ColumnSeries();
|
|
|
column.DataLabels = true;
|
|
|
column.Title = "前板";
|
|
|
column.ScalesYAt = 0;
|
|
|
|
|
|
column.Values = hourAchievement1;
|
|
|
column.Foreground = Brushes.White;
|
|
|
column.FontSize = 18;
|
|
|
|
|
|
Achievement.Add(column);
|
|
|
|
|
|
Achievement.Add(new ColumnSeries
|
|
|
{
|
|
|
DataLabels = true,
|
|
|
Title = "后板",
|
|
|
ScalesYAt = 0,
|
|
|
Values = hourAchievement2,
|
|
|
Fill = new SolidColorBrush(Color.FromRgb(15, 209, 226)),
|
|
|
Foreground = Brushes.CadetBlue,
|
|
|
FontSize = 18
|
|
|
});
|
|
|
|
|
|
#endregion
|
|
|
}
|
|
|
}));
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 更新小时产量统计
|
|
|
/// <summary>
|
|
|
/// 更新小时产量统计
|
|
|
/// </summary>
|
|
|
private void RefreshHourAmountChart()
|
|
|
{
|
|
|
App.Current.Dispatcher.Invoke((Action)(() =>
|
|
|
{
|
|
|
//获取小时产量
|
|
|
string stationCode = Appsettings.app("StationInfo", "StationCode");
|
|
|
var hourAmount = _sysUserInfoServices.GetSheetMetaHourData(stationCode).Result;
|
|
|
if (hourAmount != null)
|
|
|
{
|
|
|
int hour = 0;
|
|
|
|
|
|
for (int i = 0; i < hourAmount.Count; i++)
|
|
|
{
|
|
|
Achievement[0].Values[i] =
|
|
|
new ObservablePoint(hour, Convert.ToDouble(hourAmount[i].FrontPlateAmount));
|
|
|
|
|
|
Achievement[1].Values[i] =
|
|
|
new ObservablePoint(hour, Convert.ToDouble(hourAmount[i].RearPanelAmount));
|
|
|
hour++;
|
|
|
}
|
|
|
}
|
|
|
}));
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 刷新物料型号统计
|
|
|
/// <summary>
|
|
|
/// 刷新物料型号统计
|
|
|
/// </summary>
|
|
|
private void RefreshMaterialStats()
|
|
|
{
|
|
|
App.Current.Dispatcher.Invoke((Action)(() =>
|
|
|
{
|
|
|
//获取物料型号统计
|
|
|
string stationCode = Appsettings.app("StationInfo", "StationCode");
|
|
|
var sheetMetalTypeList = _sysUserInfoServices.GetSheetMetalTypeData(stationCode).Result;
|
|
|
if (sheetMetalTypeList != null)
|
|
|
{
|
|
|
#region 按类型统计
|
|
|
ChartValues<double> achievement1 = new ChartValues<double>();
|
|
|
ChartValues<double> achievement2 = new ChartValues<double>();
|
|
|
if (ModelStatistics.Count != 0)
|
|
|
{
|
|
|
ModelStatistics.Clear();
|
|
|
}
|
|
|
|
|
|
MaterialNameList = new List<string>();
|
|
|
foreach (var item in sheetMetalTypeList)
|
|
|
{
|
|
|
achievement1.Add(Convert.ToInt32(item.FrontPlateAmount));
|
|
|
achievement2.Add(Convert.ToInt32(item.RearPanelAmount));
|
|
|
MaterialNameList.Add(item.MaterialName);
|
|
|
}
|
|
|
var column2 = new ColumnSeries();
|
|
|
column2.DataLabels = true;
|
|
|
column2.Title = "前板";
|
|
|
column2.ScalesYAt = 0;
|
|
|
column2.Values = achievement1;
|
|
|
column2.Foreground = Brushes.White;
|
|
|
column2.FontSize = 18;
|
|
|
ModelStatistics.Add(column2);
|
|
|
|
|
|
ModelStatistics.Add(new ColumnSeries()
|
|
|
{
|
|
|
DataLabels = true,
|
|
|
Title = "后板",
|
|
|
Values = achievement2,
|
|
|
ScalesYAt = 0,
|
|
|
Fill = new SolidColorBrush(Color.FromRgb(15, 209, 226)),
|
|
|
Foreground = Brushes.White,
|
|
|
FontSize = 18
|
|
|
});
|
|
|
|
|
|
#endregion
|
|
|
}
|
|
|
}));
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 刷新物料型号统计
|
|
|
/// <summary>
|
|
|
/// 刷新物料型号统计
|
|
|
/// </summary>
|
|
|
private void RefreshMaterialChart()
|
|
|
{
|
|
|
App.Current.Dispatcher.Invoke((Action)(() =>
|
|
|
{
|
|
|
//获取物料型号统计
|
|
|
string stationCode = Appsettings.app("StationInfo", "StationCode");
|
|
|
var sheetMetalTypeList = _sysUserInfoServices.GetSheetMetalTypeData(stationCode).Result;
|
|
|
if (sheetMetalTypeList != null)
|
|
|
{
|
|
|
#region 按类型统计
|
|
|
ChartValues<double> achievement1 = new ChartValues<double>();
|
|
|
ChartValues<double> achievement2 = new ChartValues<double>();
|
|
|
for (int i = 0; i < sheetMetalTypeList.Count; i++)
|
|
|
{
|
|
|
if (ModelStatistics.Count==0)
|
|
|
{
|
|
|
RefreshMaterialStats();
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
if (sheetMetalTypeList.Count()>0)
|
|
|
{
|
|
|
//RefreshMaterialStats();
|
|
|
try
|
|
|
{
|
|
|
double frontPlateAmount = Convert.ToDouble(sheetMetalTypeList[i].FrontPlateAmount);
|
|
|
ModelStatistics[0].Values[i] = frontPlateAmount;
|
|
|
double rearPanelAmount = Convert.ToDouble(sheetMetalTypeList[i].RearPanelAmount);
|
|
|
ModelStatistics[1].Values[i] = rearPanelAmount;
|
|
|
MaterialNameList[i] = sheetMetalTypeList[i].MaterialName;
|
|
|
}
|
|
|
catch (Exception)
|
|
|
{
|
|
|
|
|
|
RefreshMaterialStats();
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
RefreshMaterialStats();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
#endregion
|
|
|
}
|
|
|
}));
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 获取当前班组时间
|
|
|
|
|
|
public CurrentTeamTimeView GetTeamHour()
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
List<CurrentTeamTimeView> obj = _sysUserInfoServices.GetTeamData().Result;
|
|
|
if (obj != null)
|
|
|
{
|
|
|
CurrentTeamTimeView view = new CurrentTeamTimeView();
|
|
|
view.TeamName = obj.FirstOrDefault(d => d.Seq == 1).TeamName;
|
|
|
view.StartTime = obj.Min(d => d.StartTime);
|
|
|
view.EndTime = obj.Max(d => d.EndTime);
|
|
|
return view;
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
log.Error($"获取当前班组时间异常:{ex.Message}");
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
#region PLC存储的当前正在执行的前后板计划编号
|
|
|
public string GetSidePlanCode(PlcModel obj)
|
|
|
{
|
|
|
bool flag = true;
|
|
|
string planCode = string.Empty;
|
|
|
try
|
|
|
{
|
|
|
do
|
|
|
{
|
|
|
|
|
|
byte[] info = obj.plc.Read("D6030", 59);
|
|
|
|
|
|
if (info == null)
|
|
|
{
|
|
|
Thread.Sleep(1000);
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
//计划编号
|
|
|
planCode = Encoding.ASCII.GetString(info.Skip(0).Take(20).ToArray()).Replace("\0", "").Trim();
|
|
|
if (!string.IsNullOrEmpty(planCode)) flag = false;
|
|
|
} while (flag);
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
log.Error($"获取前板传入的计划编号:{ex.Message}");
|
|
|
}
|
|
|
return planCode;
|
|
|
}
|
|
|
|
|
|
public string GetBackPlanCode(PlcModel obj)
|
|
|
{
|
|
|
string planCode = string.Empty;
|
|
|
try
|
|
|
{
|
|
|
bool flag = true;
|
|
|
|
|
|
do
|
|
|
{
|
|
|
byte[] info = obj.plc.Read("D4030", 59);
|
|
|
|
|
|
if (info == null)
|
|
|
{
|
|
|
Thread.Sleep(1000);
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
//计划编号
|
|
|
planCode = Encoding.ASCII.GetString(info.Skip(0).Take(20).ToArray()).Replace("\0", "").Trim();
|
|
|
if (!string.IsNullOrEmpty(planCode)) flag = false;
|
|
|
} while (flag);
|
|
|
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
log.Error($"获取后板传入的计划编号:{ex.Message}");
|
|
|
}
|
|
|
return planCode;
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|