You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
879 lines
41 KiB
879 lines
41 KiB
using LiveChartsCore.Geo;
|
|
using SkiaSharp;
|
|
using SunlightCentralizedControlManagement_SCCM_.UserClass;
|
|
using SunlightCentralizedControlManagement_SCCM_.ViewModel;
|
|
using SunlightCentralizedControlManagement_SCCM_.WindowsView;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Net.NetworkInformation;
|
|
using System.Reflection;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Data;
|
|
using System.Windows.Documents;
|
|
using System.Windows.Input;
|
|
using System.Windows.Media;
|
|
using System.Windows.Media.Imaging;
|
|
using System.Windows.Navigation;
|
|
using System.Windows.Shapes;
|
|
using System.Windows.Threading;
|
|
using System.Xml.Linq;
|
|
using TouchSocket.Core;
|
|
using TouchSocket.Sockets;
|
|
using VncSharpWpf;
|
|
using static SunlightCentralizedControlManagement_SCCM_.WindowsView.ViewStep;
|
|
using static System.Net.WebRequestMethods;
|
|
using static System.Windows.Forms.VisualStyles.VisualStyleElement.Rebar;
|
|
|
|
namespace SunlightCentralizedControlManagement_SCCM_.View
|
|
{
|
|
|
|
/// <summary>
|
|
/// MonitorView.xaml 的交互逻辑
|
|
/// </summary>
|
|
public partial class MonitorView : UserControl, INotifyPropertyChanged
|
|
{
|
|
public event PropertyChangedEventHandler PropertyChanged;
|
|
protected virtual void OnPropertyChanged(string propertyName)
|
|
{
|
|
if (PropertyChanged != null)
|
|
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
|
|
}
|
|
public void RaisePropertyChanged(string propertyName)
|
|
{
|
|
if (PropertyChanged != null)
|
|
{
|
|
if (propertyName != null)
|
|
{
|
|
PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
|
}
|
|
}
|
|
}
|
|
|
|
public MonitorView()
|
|
{
|
|
DataContext = this;
|
|
InitializeComponent();
|
|
CountDown();
|
|
machine= MainWindowViewModel.machine;
|
|
workOrder= MainWindowViewModel.workOrder;
|
|
dyelot= MainWindowViewModel.dyelot;
|
|
machin_LOG.Text = MainWindowViewModel.machin_LOG;
|
|
IsInteractive = false;
|
|
DATA_view();
|
|
}
|
|
|
|
private string machine;
|
|
private string workOrder;
|
|
private string dyelot;
|
|
private int machines_info=0;
|
|
public static string Sys_log;
|
|
public static DataTable Product_DAT = new DataTable();
|
|
public static bool Product_bool = false;
|
|
|
|
private void Griddata_SelectionChanged(object sender, SelectionChangedEventArgs e)//设备列表
|
|
{
|
|
if (rdp.IsConnected) rdp.Disconnect();
|
|
int rownum = Griddata.SelectedIndex;//获取鼠标选中行并定义变量
|
|
string mac_s = "800";
|
|
if (rownum != -1)//判断鼠标定位是否有效
|
|
{
|
|
mac_s = (Griddata.Columns[0].GetCellContent(Griddata.Items[rownum]) as TextBlock).Text;//定位第1列,
|
|
}
|
|
else { return; }
|
|
|
|
if ((mac_s != "800") && (mac_s != "801") && (mac_s != "802"))
|
|
{
|
|
Stop.IsHitTestVisible = true;
|
|
Paused.IsHitTestVisible = true;
|
|
Insert.IsHitTestVisible = false;
|
|
edit.IsHitTestVisible = false;
|
|
Resume.IsHitTestVisible = false;
|
|
Delete.IsHitTestVisible = false;
|
|
Jump.IsHitTestVisible = false;
|
|
DyeingMachine.IsHitTestVisible = true;
|
|
Curve.IsHitTestVisible = true;
|
|
Screen.IsHitTestVisible = true;
|
|
Receipt.IsHitTestVisible = true;
|
|
TechnologicalProcess_bool = true;
|
|
IsInteractive = false;
|
|
|
|
if (rownum != -1)//判断鼠标定位是否有效
|
|
{
|
|
machine = (Griddata.Columns[2].GetCellContent(Griddata.Items[rownum]) as TextBlock).Text;//定位第1列,
|
|
workOrder = (Griddata.Columns[3].GetCellContent(Griddata.Items[rownum]) as TextBlock).Text;//定位第列,
|
|
dyelot = (Griddata.Columns[4].GetCellContent(Griddata.Items[rownum]) as TextBlock).Text;//定位第列,
|
|
|
|
MainWindowViewModel.machine = machine;
|
|
MainWindowViewModel.workOrder = workOrder;
|
|
MainWindowViewModel.dyelot = dyelot;
|
|
MainWindowViewModel.machin_LOG = Properties.Resources.Machine + ":" + machine + " " + Properties.Resources.WorkOrder + ":" + workOrder;
|
|
machin_LOG.Text = MainWindowViewModel.machin_LOG;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show(Properties.Resources.TMNR, "800", MessageBoxButton.OK, MessageBoxImage.Information); //
|
|
}
|
|
}
|
|
|
|
private void Gridstep_SelectionChanged(object sender, SelectionChangedEventArgs e)//步骤定位
|
|
{
|
|
TechnologicalProcess_bool = false;
|
|
int rownum = Gridstep.SelectedIndex;//获取鼠标选中行并定义变量
|
|
if (rownum != -1)//判断鼠标定位是否有效
|
|
{
|
|
ID = (Gridstep.Columns[2].GetCellContent(Gridstep.Items[rownum]) as TextBlock).Text;//定位第0列,
|
|
Numder = (Gridstep.Columns[3].GetCellContent(Gridstep.Items[rownum]) as TextBlock).Text;//定位第1列,
|
|
P1 = (Gridstep.Columns[6].GetCellContent(Gridstep.Items[rownum]) as TextBlock).Text;//定位第6列,
|
|
P2 = (Gridstep.Columns[7].GetCellContent(Gridstep.Items[rownum]) as TextBlock).Text;//定位第7列,
|
|
P3 = (Gridstep.Columns[8].GetCellContent(Gridstep.Items[rownum]) as TextBlock).Text;//定位第8列,
|
|
P4 = (Gridstep.Columns[9].GetCellContent(Gridstep.Items[rownum]) as TextBlock).Text;//定位第9列,
|
|
P5 = (Gridstep.Columns[10].GetCellContent(Gridstep.Items[rownum]) as TextBlock).Text;//定位第10列,
|
|
}
|
|
}
|
|
|
|
private void MenuItem_LOCK_XML(object sender, RoutedEventArgs e)
|
|
{
|
|
if (!string.IsNullOrEmpty(machine))
|
|
{
|
|
bool mode = MainWindowViewModel.Machines.Select("NAME='" + machine + "'").First().Field<bool>("LOCK");
|
|
|
|
Dictionary<string, object> dat_ = new Dictionary<string, object>();
|
|
dat_.Clear();
|
|
|
|
if (!mode)
|
|
{
|
|
dat_.Add("NAME", "LOCK");
|
|
dat_.Add("VALUE", "True");
|
|
MainWindowViewModel.Updata_Machines(MainWindowViewModel.Machines, "LOCK", "Name='" + machine + "'", "True");
|
|
}
|
|
else
|
|
{
|
|
dat_.Add("NAME", "LOCK");
|
|
dat_.Add("VALUE", "False");
|
|
MainWindowViewModel.Updata_Machines(MainWindowViewModel.Machines, "LOCK", "Name='" + machine + "'", "False");
|
|
}
|
|
|
|
DataRow drEmployee = MainWindowViewModel.Machines.Select("NAME='" + machine + "'").First();
|
|
int index = Convert.ToInt16(drEmployee.Field<object>("ID"));
|
|
MainWindowViewModel.stringQueue.Enqueue(new MainWindowViewModel.QueueString
|
|
{
|
|
ID = index,
|
|
DAT = "SC829" + MainWindowViewModel.Selet_Machines(MainWindowViewModel.Machines, "SYSKEY", "ID='" + index + "'") + dat_.ToJsonString()
|
|
});
|
|
|
|
if (!mode)
|
|
{
|
|
MessageBox.Show(machine + Properties.Resources.user_lock, "800", MessageBoxButton.OK, MessageBoxImage.Information);
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show(machine + Properties.Resources.user_unlock, "800", MessageBoxButton.OK, MessageBoxImage.Information);
|
|
}
|
|
}
|
|
}//锁定
|
|
private void MenuItem_AUTO_XML(object sender, RoutedEventArgs e)
|
|
{
|
|
if (!string.IsNullOrEmpty(machine))
|
|
{
|
|
bool mode = MainWindowViewModel.Machines.Select("NAME='" + machine + "'").First().Field<bool>("AUTO");
|
|
|
|
Dictionary<string, object> dat_ = new Dictionary<string, object>();
|
|
dat_.Clear();
|
|
|
|
if (!mode)
|
|
{
|
|
dat_.Add("NAME", "AUTO");
|
|
dat_.Add("VALUE", "True");
|
|
MainWindowViewModel.Updata_Machines(MainWindowViewModel.Machines, "AUTO", "Name='" + machine + "'", "True");
|
|
}
|
|
else
|
|
{
|
|
dat_.Add("NAME", "AUTO");
|
|
dat_.Add("VALUE", "FALSE");
|
|
MainWindowViewModel.Updata_Machines(MainWindowViewModel.Machines, "AUTO", "Name='" + machine + "'", "False");
|
|
}
|
|
|
|
DataRow drEmployee = MainWindowViewModel.Machines.Select("NAME='" + machine + "'").First();
|
|
int index = Convert.ToInt16(drEmployee.Field<object>("ID"));
|
|
MainWindowViewModel.stringQueue.Enqueue(new MainWindowViewModel.QueueString
|
|
{
|
|
ID = index,
|
|
DAT = "SC829" + MainWindowViewModel.Selet_Machines(MainWindowViewModel.Machines, "SYSKEY", "ID='" + index + "'") + dat_.ToJsonString()
|
|
});
|
|
}
|
|
|
|
}//手自动
|
|
private void MenuItem_Stop_XML(object sender, RoutedEventArgs e)
|
|
{
|
|
if (!string.IsNullOrEmpty(machine))
|
|
{
|
|
Dictionary<string, object> dat_821 = new Dictionary<string, object>();
|
|
dat_821.Clear();
|
|
dat_821.Add("INSTRUCTION", "STOP");
|
|
DataRow drEmployee = MainWindowViewModel.Machines.Select("NAME='" + machine + "'").First();
|
|
int index = Convert.ToInt16(drEmployee.Field<object>("ID"));
|
|
MainWindowViewModel.stringQueue.Enqueue(new MainWindowViewModel.QueueString
|
|
{
|
|
ID = index,
|
|
DAT = "SC821" + MainWindowViewModel.Selet_Machines(MainWindowViewModel.Machines, "SYSKEY", "ID='" + index + "'") + dat_821.ToJsonString()
|
|
});
|
|
}
|
|
}//停止
|
|
private void MenuItem_Start_XML(object sender, RoutedEventArgs e)
|
|
{
|
|
if (!string.IsNullOrEmpty(machine))
|
|
{
|
|
|
|
}
|
|
}//开始
|
|
private void ListViewItem_DyeingMachine(object sender, MouseButtonEventArgs e)
|
|
{
|
|
if (rdp.IsConnected)rdp.Disconnect();
|
|
machines_info = 0;
|
|
log.Visibility = Visibility.Visible;
|
|
rdp.Visibility = Visibility.Collapsed;
|
|
Picture.Visibility = Visibility.Collapsed;
|
|
}//信息
|
|
private async Task<bool> PingTest(string ip)
|
|
{
|
|
bool result = false;
|
|
Ping pingSender = new Ping();
|
|
|
|
try
|
|
{
|
|
PingReply reply = await pingSender.SendPingAsync(ip, 3000);
|
|
|
|
if (reply.Status == IPStatus.Success)
|
|
{
|
|
result = true;
|
|
}
|
|
}
|
|
catch (PingException)
|
|
{
|
|
result = false;
|
|
}
|
|
return result;
|
|
}
|
|
private void ListViewItem_Screen(object sender, MouseButtonEventArgs e)
|
|
{
|
|
DataRow drEmployee = MainWindowViewModel.Machines.Select("NAME='" + machine + "'").First();
|
|
string host = drEmployee.Field<string>("IP");
|
|
int port = 5900;
|
|
string password = "123456";//drEmployee.Field<string>("SYSKEY");
|
|
// bool Desktop = drEmployee.Field<bool>("Desktop");
|
|
if (!drEmployee.Field<bool>("Desktop"))
|
|
{
|
|
MessageBox.Show(Properties.Resources.Not_a, "Desktop", MessageBoxButton.OK);
|
|
return;
|
|
}
|
|
machines_info = 1;
|
|
log.Visibility = Visibility.Collapsed;
|
|
Picture.Visibility = Visibility.Collapsed;
|
|
rdp.Visibility = Visibility.Visible;
|
|
// RemoteDesktopWpf remoteDesktopWpf = new RemoteDesktopWpf();
|
|
// Picture.Content = remoteDesktopWpf;
|
|
if (!rdp.IsConnected)
|
|
{
|
|
try
|
|
{
|
|
rdp.VncPort = port;
|
|
rdp.Passwd = password;
|
|
rdp.Connect(host, true, false);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogGing.ERRDATA(ex);
|
|
}
|
|
}
|
|
}//远程
|
|
private void ListViewItem_Receipt(object sender, MouseButtonEventArgs e)
|
|
{
|
|
if (rdp.IsConnected) rdp.Disconnect();
|
|
DataRow drEmployee = MainWindowViewModel.Machines.Select("NAME='" + machine + "'").First();
|
|
if (!drEmployee.Field<bool>("Dispense"))
|
|
{
|
|
MessageBox.Show(Properties.Resources.Not_a, "Dispense", MessageBoxButton.OK);
|
|
return;
|
|
}
|
|
|
|
int index = Convert.ToInt16(drEmployee.Field<object>("ID"));
|
|
MainWindowViewModel.stringQueue.Enqueue(new MainWindowViewModel.QueueString
|
|
{
|
|
ID = index,
|
|
DAT = "SC833" + MainWindowViewModel.Selet_Machines(MainWindowViewModel.Machines, "SYSKEY", "ID='" + index + "'")
|
|
});
|
|
|
|
machines_info = 2;
|
|
log.Visibility = Visibility.Collapsed;
|
|
rdp.Visibility = Visibility.Collapsed;
|
|
Picture.Visibility = Visibility.Visible;
|
|
DyelotView dyelotView = new DyelotView();
|
|
dyelotView.DyelotDatatable(Product_DAT);
|
|
Picture.Content = dyelotView;
|
|
}//单据
|
|
private void ListViewItem_Curve(object sender, MouseButtonEventArgs e)
|
|
{
|
|
if (rdp.IsConnected) rdp.Disconnect();
|
|
log.Visibility = Visibility.Collapsed;
|
|
rdp.Visibility = Visibility.Collapsed;
|
|
Picture.Visibility = Visibility.Visible;
|
|
Picture.Content = new View.CurveDiagram(false, machine, DateTime.Now.AddHours(-8).ToString("yyyy/MM/dd HH:mm:ss"), DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), workOrder);
|
|
machines_info = 3;
|
|
}//曲线
|
|
private void ListViewItem_Resume(object sender, MouseButtonEventArgs e)
|
|
{
|
|
IsInteractive = false;
|
|
if (!string.IsNullOrEmpty(machine))
|
|
{
|
|
Dictionary<string, object> dat_821 = new Dictionary<string, object>();
|
|
dat_821.Clear();
|
|
dat_821.Add("INSTRUCTION", "CONTINUE");
|
|
DataRow drEmployee = MainWindowViewModel.Machines.Select("NAME='" + machine + "'").First();
|
|
int index = Convert.ToInt16(drEmployee.Field<object>("ID"));
|
|
MainWindowViewModel.stringQueue.Enqueue(new MainWindowViewModel.QueueString
|
|
{
|
|
ID = index,
|
|
DAT = "SC821" + MainWindowViewModel.Selet_Machines(MainWindowViewModel.Machines, "SYSKEY", "ID='" + index + "'") + dat_821.ToJsonString()
|
|
});
|
|
}
|
|
Insert.IsHitTestVisible = false;
|
|
edit.IsHitTestVisible = false;
|
|
Resume.IsHitTestVisible = false;
|
|
Delete.IsHitTestVisible = false;
|
|
Jump.IsHitTestVisible = false;
|
|
TechnologicalProcess_bool = true;
|
|
}//恢复
|
|
private void ListViewItem_Paused(object sender, MouseButtonEventArgs e)
|
|
{
|
|
IsInteractive = true;
|
|
if (!string.IsNullOrEmpty(machine))
|
|
{
|
|
Dictionary<string, object> dat_821 = new Dictionary<string, object>();
|
|
dat_821.Clear();
|
|
dat_821.Add("INSTRUCTION", "PAUSE");
|
|
DataRow drEmployee = MainWindowViewModel.Machines.Select("NAME='" + machine + "'").First();
|
|
int index = Convert.ToInt16(drEmployee.Field<object>("ID"));
|
|
MainWindowViewModel.stringQueue.Enqueue(new MainWindowViewModel.QueueString
|
|
{
|
|
ID = index,
|
|
DAT = "SC821" + MainWindowViewModel.Selet_Machines(MainWindowViewModel.Machines, "SYSKEY", "ID='" + index + "'") + dat_821.ToJsonString()
|
|
});
|
|
}
|
|
Insert.IsHitTestVisible = true;
|
|
edit.IsHitTestVisible = true;
|
|
Paused.IsHitTestVisible = true;
|
|
Resume.IsHitTestVisible = true;
|
|
Delete.IsHitTestVisible = true;
|
|
Jump.IsHitTestVisible = true;
|
|
|
|
}//暂停
|
|
private void ListViewItem_Stop(object sender, MouseButtonEventArgs e)
|
|
{
|
|
IsInteractive = false;
|
|
if (!string.IsNullOrEmpty(machine))
|
|
{
|
|
Dictionary<string, object> dat_821 = new Dictionary<string, object>();
|
|
dat_821.Clear();
|
|
dat_821.Add("INSTRUCTION", "STOP");
|
|
DataRow drEmployee = MainWindowViewModel.Machines.Select("NAME='" + machine + "'").First();
|
|
int index = Convert.ToInt16(drEmployee.Field<object>("ID"));
|
|
MainWindowViewModel.stringQueue.Enqueue(new MainWindowViewModel.QueueString
|
|
{
|
|
ID = index,
|
|
DAT = "SC821" + MainWindowViewModel.Selet_Machines(MainWindowViewModel.Machines, "SYSKEY", "ID='" + index + "'") + dat_821.ToJsonString()
|
|
});
|
|
}
|
|
}//停止
|
|
private void ListViewItem_edit(object sender, MouseButtonEventArgs e)
|
|
{
|
|
if (string.IsNullOrEmpty(Numder)) { Numder = null; P1 = "0"; P2 = "0"; P3 = "0"; P4 = "0"; P5 = "0"; }
|
|
if (ID == null) ID = MainWindowViewModel.dt_TP.Rows.Count.ToString();
|
|
ViewStep viewstop = new ViewStep(Numder, MainWindowViewModel.dt_TP.Select("STEP = " + ID).First());
|
|
viewstop.AddressUpdated += new ViewStep.AddressUpdateHandler(edit_ButtonClicked);
|
|
viewstop.data = ID;
|
|
viewstop.ShowDialog();
|
|
}//编辑
|
|
private void edit_ButtonClicked(object sender, AddressUpdateEventArgs e)//编辑返回结果
|
|
{
|
|
DataRow dataRow = MainWindowViewModel.dt_TP.NewRow();
|
|
dataRow.BeginEdit();
|
|
dataRow.ItemArray = e.Row_DAT.ItemArray;
|
|
dataRow.EndEdit();
|
|
MainWindowViewModel.dt_TP.Rows.InsertAt(dataRow, Convert.ToInt16(ID) - 1);
|
|
DatSteps(MainWindowViewModel.dt_TP);
|
|
TechnologicalProcess_View = ToObservableCollection<TechnologicalP>(MainWindowViewModel.dt_TP);
|
|
|
|
Dictionary<string, object> dat_821 = new Dictionary<string, object>();
|
|
dat_821.Clear();
|
|
dat_821.Add("INSTRUCTION", "EDIT");
|
|
dat_821.Add("StepID", e.StepID);
|
|
dat_821.Add("StepName", e.StepNAME);
|
|
dat_821.Add("ParameterName", e.PNAME);
|
|
dat_821.Add("Parameter1", e.Row_DAT.Field<double>("Parameter1"));
|
|
dat_821.Add("Parameter2", e.Row_DAT.Field<double>("Parameter2"));
|
|
dat_821.Add("Parameter3", e.Row_DAT.Field<double>("Parameter3"));
|
|
dat_821.Add("Parameter4", e.Row_DAT.Field<double>("Parameter4"));
|
|
dat_821.Add("Parameter5", e.Row_DAT.Field<double>("Parameter5"));
|
|
dat_821.Add("Parameter1_S1", e.Row_DAT.Field<double>("Parameter1_S1"));
|
|
dat_821.Add("Parameter2_S1", e.Row_DAT.Field<double>("Parameter2_S1"));
|
|
dat_821.Add("Parameter3_S1", e.Row_DAT.Field<double>("Parameter3_S1"));
|
|
dat_821.Add("Parameter4_S1", e.Row_DAT.Field<double>("Parameter4_S1"));
|
|
dat_821.Add("Parameter5_S1", e.Row_DAT.Field<double>("Parameter5_S1"));
|
|
dat_821.Add("Parameter1_S2", e.Row_DAT.Field<double>("Parameter1_S2"));
|
|
dat_821.Add("Parameter2_S2", e.Row_DAT.Field<double>("Parameter2_S2"));
|
|
dat_821.Add("Parameter3_S2", e.Row_DAT.Field<double>("Parameter3_S2"));
|
|
dat_821.Add("Parameter4_S2", e.Row_DAT.Field<double>("Parameter4_S2"));
|
|
dat_821.Add("Parameter5_S2", e.Row_DAT.Field<double>("Parameter5_S2"));
|
|
dat_821.Add("Parameter1_S3", e.Row_DAT.Field<double>("Parameter1_S3"));
|
|
dat_821.Add("Parameter2_S3", e.Row_DAT.Field<double>("Parameter2_S3"));
|
|
dat_821.Add("Parameter3_S3", e.Row_DAT.Field<double>("Parameter3_S3"));
|
|
dat_821.Add("Parameter4_S3", e.Row_DAT.Field<double>("Parameter4_S3"));
|
|
dat_821.Add("Parameter5_S3", e.Row_DAT.Field<double>("Parameter5_S3"));
|
|
dat_821.Add("StepName_S1", e.Row_DAT.Field<string>("StepName_S1"));
|
|
dat_821.Add("StepName_S2", e.Row_DAT.Field<string>("StepName_S2"));
|
|
dat_821.Add("StepName_S3", e.Row_DAT.Field<string>("StepName_S3"));
|
|
dat_821.Add("StepID_S1", e.Row_DAT.Field<string>("StepID_S1"));
|
|
dat_821.Add("StepID_S2", e.Row_DAT.Field<string>("StepID_S2"));
|
|
dat_821.Add("StepID_S3", e.Row_DAT.Field<string>("StepID_S3"));
|
|
dat_821.Add("ID", ID);
|
|
|
|
DataRow drEmployee = MainWindowViewModel.Machines.Select("NAME='" + machine + "'").First();
|
|
int index = Convert.ToInt16(drEmployee.Field<object>("ID"));
|
|
MainWindowViewModel.stringQueue.Enqueue(new MainWindowViewModel.QueueString
|
|
{
|
|
ID = index,
|
|
DAT = "SC821" + MainWindowViewModel.Selet_Machines(MainWindowViewModel.Machines, "SYSKEY", "ID='" + index + "'") + dat_821.ToJsonString()
|
|
});
|
|
TechnologicalProcess_bool = true;
|
|
}
|
|
private void ListViewItem_Jump(object sender, MouseButtonEventArgs e)
|
|
{
|
|
Dictionary<string, object> dat_821 = new Dictionary<string, object>();
|
|
dat_821.Clear();
|
|
dat_821.Add("INSTRUCTION", "JUMP");
|
|
dat_821.Add("ID", ID);
|
|
dat_821.Add("Numder", Numder);
|
|
dat_821.Add("P1", P1);
|
|
dat_821.Add("P2", P2);
|
|
dat_821.Add("P3", P3);
|
|
dat_821.Add("P4", P4);
|
|
dat_821.Add("P5", P5);
|
|
|
|
DataRow row = MainWindowViewModel.dt_TP.Select("Step='" + ID + "'").First();
|
|
row.BeginEdit();
|
|
row["RUN"] = 2;
|
|
row.EndEdit();
|
|
row.AcceptChanges();
|
|
|
|
DataRow drEmployee = MainWindowViewModel.Machines.Select("NAME='" + machine + "'").First();
|
|
int index = Convert.ToInt16(drEmployee.Field<object>("ID"));
|
|
MainWindowViewModel.stringQueue.Enqueue(new MainWindowViewModel.QueueString
|
|
{
|
|
ID = index,
|
|
DAT = "SC821" + MainWindowViewModel.Selet_Machines(MainWindowViewModel.Machines, "SYSKEY", "ID='" + index + "'") + dat_821.ToJsonString()
|
|
});
|
|
|
|
TechnologicalProcess_bool = true;
|
|
}//跳步
|
|
private void ListViewItem_Insert(object sender, MouseButtonEventArgs e)
|
|
{
|
|
if (string.IsNullOrEmpty(Numder)) { Numder = null; P1 = "0"; P2 = "0"; P3 = "0"; P4 = "0"; P5 = "0"; }
|
|
if (ID == null) ID = MainWindowViewModel.dt_TP.Rows.Count.ToString();
|
|
ViewStep viewstop = new ViewStep(Numder, MainWindowViewModel.dt_TP.Select("STEP = " + ID).First());
|
|
viewstop.AddressUpdated += new ViewStep.AddressUpdateHandler(Insert_ButtonClicked);
|
|
viewstop.data = ID;
|
|
viewstop.ShowDialog();
|
|
}//插入
|
|
private void Insert_ButtonClicked(object sender, AddressUpdateEventArgs e)//插入返回结果
|
|
{
|
|
DataRow dataRow = MainWindowViewModel.dt_TP.NewRow();
|
|
dataRow.BeginEdit();
|
|
dataRow.ItemArray = e.Row_DAT.ItemArray;
|
|
dataRow.EndEdit();
|
|
MainWindowViewModel.dt_TP.Rows.InsertAt(dataRow, Convert.ToInt16( ID )- 1);
|
|
DatSteps(MainWindowViewModel.dt_TP);
|
|
TechnologicalProcess_View = ToObservableCollection<TechnologicalP>(MainWindowViewModel.dt_TP);
|
|
|
|
Dictionary<string, object> dat_821 = new Dictionary<string, object>();
|
|
dat_821.Clear();
|
|
dat_821.Add("INSTRUCTION", "INSERT");
|
|
dat_821.Add("StepID", e.StepID);
|
|
dat_821.Add("StepName", e.StepNAME);
|
|
dat_821.Add("ParameterName", e.PNAME);
|
|
dat_821.Add("Parameter1", e.Row_DAT.Field<double>("Parameter1"));
|
|
dat_821.Add("Parameter2", e.Row_DAT.Field<double>("Parameter2"));
|
|
dat_821.Add("Parameter3", e.Row_DAT.Field<double>("Parameter3"));
|
|
dat_821.Add("Parameter4", e.Row_DAT.Field<double>("Parameter4"));
|
|
dat_821.Add("Parameter5", e.Row_DAT.Field<double>("Parameter5"));
|
|
dat_821.Add("Parameter1_S1", e.Row_DAT.Field<double>("Parameter1_S1"));
|
|
dat_821.Add("Parameter2_S1", e.Row_DAT.Field<double>("Parameter2_S1"));
|
|
dat_821.Add("Parameter3_S1", e.Row_DAT.Field<double>("Parameter3_S1"));
|
|
dat_821.Add("Parameter4_S1", e.Row_DAT.Field<double>("Parameter4_S1"));
|
|
dat_821.Add("Parameter5_S1", e.Row_DAT.Field<double>("Parameter5_S1"));
|
|
dat_821.Add("Parameter1_S2", e.Row_DAT.Field<double>("Parameter1_S2"));
|
|
dat_821.Add("Parameter2_S2", e.Row_DAT.Field<double>("Parameter2_S2"));
|
|
dat_821.Add("Parameter3_S2", e.Row_DAT.Field<double>("Parameter3_S2"));
|
|
dat_821.Add("Parameter4_S2", e.Row_DAT.Field<double>("Parameter4_S2"));
|
|
dat_821.Add("Parameter5_S2", e.Row_DAT.Field<double>("Parameter5_S2"));
|
|
dat_821.Add("Parameter1_S3", e.Row_DAT.Field<double>("Parameter1_S3"));
|
|
dat_821.Add("Parameter2_S3", e.Row_DAT.Field<double>("Parameter2_S3"));
|
|
dat_821.Add("Parameter3_S3", e.Row_DAT.Field<double>("Parameter3_S3"));
|
|
dat_821.Add("Parameter4_S3", e.Row_DAT.Field<double>("Parameter4_S3"));
|
|
dat_821.Add("Parameter5_S3", e.Row_DAT.Field<double>("Parameter5_S3"));
|
|
dat_821.Add("StepName_S1", e.Row_DAT.Field<string>("StepName_S1"));
|
|
dat_821.Add("StepName_S2", e.Row_DAT.Field<string>("StepName_S2"));
|
|
dat_821.Add("StepName_S3", e.Row_DAT.Field<string>("StepName_S3"));
|
|
dat_821.Add("StepID_S1", e.Row_DAT.Field<string>("StepID_S1"));
|
|
dat_821.Add("StepID_S2", e.Row_DAT.Field<string>("StepID_S2"));
|
|
dat_821.Add("StepID_S3", e.Row_DAT.Field<string>("StepID_S3"));
|
|
dat_821.Add("ID", ID);
|
|
|
|
DataRow drEmployee = MainWindowViewModel.Machines.Select("NAME='" + machine + "'").First();
|
|
int index = Convert.ToInt16(drEmployee.Field<object>("ID"));
|
|
MainWindowViewModel.stringQueue.Enqueue(new MainWindowViewModel.QueueString
|
|
{
|
|
ID = index,
|
|
DAT = "SC821" + MainWindowViewModel.Selet_Machines(MainWindowViewModel.Machines, "SYSKEY", "ID='" + index + "'") + dat_821.ToJsonString()
|
|
});
|
|
|
|
}
|
|
private void ListViewItem_Delete(object sender, MouseButtonEventArgs e)
|
|
{
|
|
if (!string.IsNullOrEmpty(machine))
|
|
{
|
|
Dictionary<string, object> dat_821 = new Dictionary<string, object>();
|
|
dat_821.Clear();
|
|
dat_821.Add("INSTRUCTION", "DELETE");
|
|
dat_821.Add("ID", ID);
|
|
DataRow drEmployee = MainWindowViewModel.Machines.Select("NAME='" + machine + "'").First();
|
|
int index = Convert.ToInt16(drEmployee.Field<object>("ID"));
|
|
MainWindowViewModel.stringQueue.Enqueue(new MainWindowViewModel.QueueString
|
|
{
|
|
ID = index,
|
|
DAT = "SC821" + MainWindowViewModel.Selet_Machines(MainWindowViewModel.Machines, "SYSKEY", "ID='" + index + "'") + dat_821.ToJsonString()
|
|
});
|
|
|
|
MainWindowViewModel.dt_TP.Select("Step="+ID).First().Delete();
|
|
MainWindowViewModel.dt_TP.AcceptChanges();
|
|
DatSteps(MainWindowViewModel.dt_TP);
|
|
TechnologicalProcess_View = ToObservableCollection<TechnologicalP>(MainWindowViewModel.dt_TP);
|
|
}
|
|
}//删除
|
|
string Numder = null;
|
|
string ID = null;
|
|
string P1, P2, P3, P4, P5;
|
|
|
|
private void MenuItem_edit(object sender, RoutedEventArgs e)//右键编辑
|
|
{
|
|
int rownum = Gridstep.SelectedIndex;//获取鼠标选中行并定义变量
|
|
if (rownum != -1)//判断鼠标定位是否有效
|
|
{
|
|
ID = (Gridstep.Columns[2].GetCellContent(Gridstep.Items[rownum]) as TextBlock).Text;//定位第0列,
|
|
Numder = (Gridstep.Columns[3].GetCellContent(Gridstep.Items[rownum]) as TextBlock).Text;//定位第1列,
|
|
|
|
if (ID == null) ID = MainWindowViewModel.dt_TP.Rows.Count.ToString();
|
|
ViewStep viewstop = new ViewStep(Numder, MainWindowViewModel.dt_TP.Select("STEP = " + ID).First());
|
|
viewstop.AddressUpdated += new ViewStep.AddressUpdateHandler(edit_ButtonClicked);
|
|
viewstop.data = ID;
|
|
viewstop.ShowDialog();
|
|
}
|
|
}
|
|
private void MenuItem_Insert(object sender, RoutedEventArgs e)//右键插入
|
|
{
|
|
int rownum = Gridstep.SelectedIndex;//获取鼠标选中行并定义变量
|
|
if (rownum != -1)//判断鼠标定位是否有效
|
|
{
|
|
ID = (Gridstep.Columns[2].GetCellContent(Gridstep.Items[rownum]) as TextBlock).Text;//定位列,
|
|
|
|
if (string.IsNullOrEmpty(Numder)) { Numder = null; P1 = "0"; P2 = "0"; P3 = "0"; P4 = "0"; P5 = "0"; }
|
|
if (ID == null) ID = MainWindowViewModel.dt_TP.Rows.Count.ToString();
|
|
ViewStep viewstop = new ViewStep(Numder, MainWindowViewModel.dt_TP.Select("STEP = " + ID).First());
|
|
viewstop.AddressUpdated += new ViewStep.AddressUpdateHandler(Insert_ButtonClicked);
|
|
viewstop.data = ID;
|
|
viewstop.ShowDialog();
|
|
}
|
|
}
|
|
private void MenuItem_Delete(object sender, RoutedEventArgs e)//右键删除
|
|
{
|
|
int rownum = Gridstep.SelectedIndex;//获取鼠标选中行并定义变量
|
|
if (rownum != -1)//判断鼠标定位是否有效
|
|
{
|
|
ID = (Gridstep.Columns[2].GetCellContent(Gridstep.Items[rownum]) as TextBlock).Text;//定位第0列,
|
|
if (!string.IsNullOrEmpty(machine))
|
|
{
|
|
Dictionary<string, object> dat_821 = new Dictionary<string, object>();
|
|
dat_821.Clear();
|
|
dat_821.Add("INSTRUCTION", "DELETE");
|
|
dat_821.Add("ID", ID);
|
|
DataRow drEmployee = MainWindowViewModel.Machines.Select("NAME='" + machine + "'").First();
|
|
int index = Convert.ToInt16(drEmployee.Field<object>("ID"));
|
|
MainWindowViewModel.stringQueue.Enqueue(new MainWindowViewModel.QueueString
|
|
{
|
|
ID = index,
|
|
DAT = "SC821" + MainWindowViewModel.Selet_Machines(MainWindowViewModel.Machines, "SYSKEY", "ID='" + index + "'") + dat_821.ToJsonString()
|
|
});
|
|
|
|
MainWindowViewModel.dt_TP.Select("Step=" + ID).First().Delete();
|
|
MainWindowViewModel.dt_TP.AcceptChanges();
|
|
DatSteps(MainWindowViewModel.dt_TP);
|
|
TechnologicalProcess_View = ToObservableCollection<TechnologicalP>(MainWindowViewModel.dt_TP);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void CountDown()
|
|
{
|
|
DispatcherTimer timer1s = new DispatcherTimer//初始化循环,每1秒调用一次Tick
|
|
{
|
|
Interval = TimeSpan.FromSeconds(2)//秒
|
|
};
|
|
timer1s.Tick += Tick_Event_1S;
|
|
timer1s.Start();
|
|
}//时间周期初始化
|
|
int Time_D = 0;
|
|
void Tick_Event_1S(object sender, EventArgs e)//Tick_Event周期执行事件1S
|
|
{
|
|
DATA_view();
|
|
if (Paused.IsHitTestVisible)
|
|
{
|
|
if (!Resume.IsHitTestVisible)
|
|
{
|
|
Time_D++;
|
|
if (Time_D > 10)
|
|
{
|
|
TechnologicalProcess_bool = true;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Time_D=0;
|
|
}
|
|
|
|
if (!string.IsNullOrEmpty(machine))
|
|
{
|
|
try
|
|
{
|
|
DataRow drEmployee = MainWindowViewModel.Machines.Select("NAME='" + machine + "'").First();
|
|
int State_ = Convert.ToInt16(drEmployee.Field<object>("State"));
|
|
int index = Convert.ToInt16(drEmployee.Field<object>("ID"));
|
|
if ((State_ == 101) || (State_ == 201) || (State_ == 202) || (State_ == 309))//获得细节信息
|
|
{
|
|
if (machines_info == 0)
|
|
{
|
|
MainWindowViewModel.stringQueue.Enqueue(new MainWindowViewModel.QueueString
|
|
{
|
|
ID = index,
|
|
DAT = "SC832" + MainWindowViewModel.Selet_Machines(MainWindowViewModel.Machines, "SYSKEY", "ID='" + index + "'")
|
|
});
|
|
}//信息
|
|
else if (machines_info == 1)
|
|
{
|
|
|
|
}//输送状态
|
|
else if (machines_info == 2 && Product_bool)
|
|
{
|
|
Product_bool = false;
|
|
DyelotView dyelotView = new DyelotView();
|
|
dyelotView.DyelotDatatable(Product_DAT);
|
|
Picture.Content = dyelotView;
|
|
}//单据
|
|
|
|
MainWindowViewModel.stringQueue.Enqueue(new MainWindowViewModel.QueueString
|
|
{
|
|
ID = index,
|
|
DAT = "SC831" + MainWindowViewModel.Selet_Machines(MainWindowViewModel.Machines, "SYSKEY", "ID='" + index + "'")
|
|
});
|
|
}
|
|
else
|
|
{
|
|
MainWindowViewModel.MachineLOG = null;
|
|
MainWindowViewModel.dt_TP.Clear();
|
|
}
|
|
}
|
|
catch (Exception )
|
|
{
|
|
MainWindowViewModel.MachineLOG = null;
|
|
MainWindowViewModel.dt_TP.Clear();
|
|
}//返回错误为空
|
|
}
|
|
}
|
|
|
|
public string sys_machine; //显示log
|
|
public string Sys_machine //通知UI控件参数改变
|
|
{
|
|
get { return sys_machine; }
|
|
set { sys_machine = value; OnPropertyChanged("Sys_machine"); }
|
|
}
|
|
|
|
bool _isInteractive;
|
|
public bool IsInteractive//步骤表交互选择
|
|
{
|
|
get => _isInteractive;
|
|
set
|
|
{
|
|
_isInteractive = value;
|
|
OnPropertyChanged("IsInteractive");
|
|
}
|
|
}
|
|
private void Gridstep_ContextMenuOpening(object sender, ContextMenuEventArgs e)
|
|
{
|
|
if(!IsInteractive) e.Handled = true;//阻止菜单显示
|
|
}
|
|
public static bool TechnologicalProcess_bool = true;
|
|
private async void DATA_view()//IO显示
|
|
{
|
|
await Task.Run(() =>
|
|
{
|
|
try
|
|
{
|
|
TechnologicalMachine_View = ToObservableCollection<TechnologicalM>(MainWindowViewModel.Machines);
|
|
}
|
|
catch (Exception) { }
|
|
try
|
|
{
|
|
if (MainWindowViewModel.dt_TP.Rows.Count > 0)
|
|
{
|
|
if (TechnologicalProcess_bool)
|
|
{
|
|
TechnologicalProcess_View = ToObservableCollection<TechnologicalP>(MainWindowViewModel.dt_TP);
|
|
|
|
}
|
|
Sys_machine = MainWindowViewModel.MachineLOG;
|
|
}
|
|
}
|
|
catch (Exception) { }
|
|
});
|
|
}
|
|
ObservableCollection<TechnologicalP> technologicalProcess_View = new ObservableCollection<TechnologicalP>();
|
|
ObservableCollection<TechnologicalM> technologicalMachine_View = new ObservableCollection<TechnologicalM>();
|
|
public ObservableCollection<TechnologicalP> TechnologicalProcess_View
|
|
{
|
|
get { return technologicalProcess_View; }
|
|
set
|
|
{
|
|
technologicalProcess_View = value;
|
|
RaisePropertyChanged("TechnologicalProcess_View");
|
|
}
|
|
}
|
|
public ObservableCollection<TechnologicalM> TechnologicalMachine_View
|
|
{
|
|
get { return technologicalMachine_View; }
|
|
set
|
|
{
|
|
technologicalMachine_View = value;
|
|
RaisePropertyChanged("TechnologicalMachine_View");
|
|
}
|
|
}
|
|
public class TechnologicalM
|
|
{
|
|
public string Name { get; set; }
|
|
public string WorkOrder { get; set; }
|
|
public string Dyelot { get; set; }
|
|
public string Temperature { get; set; }
|
|
public string WaterLevel { get; set; }
|
|
public string Process { get; set; }
|
|
public string Step { get; set; }
|
|
public string Message { get; set; }
|
|
public string State { get; set; }
|
|
public bool LOCK { get; set; }
|
|
public bool AUTO { get; set; }
|
|
|
|
}
|
|
public class TechnologicalP
|
|
{
|
|
public int RUN { get; set; }
|
|
public string ProgramID { get; set; }
|
|
public string Program { get; set; }
|
|
public double Step { get; set; }
|
|
public string StepID { get; set; }
|
|
public string StepName { get; set; }
|
|
public string StepID_S1 { get; set; }
|
|
public string StepName_S1 { get; set; }
|
|
public string StepID_S2 { get; set; }
|
|
public string StepName_S2 { get; set; }
|
|
public string StepID_S3 { get; set; }
|
|
public string StepName_S3 { get; set; }
|
|
public string ParameterName { get; set; }
|
|
public string Parameter1 { get; set; }
|
|
public string Parameter2 { get; set; }
|
|
public string Parameter3 { get; set; }
|
|
public string Parameter4 { get; set; }
|
|
public string Parameter5 { get; set; }
|
|
public string DYELOT { get; set; }
|
|
public string Remark { get; set; }
|
|
}
|
|
public ObservableCollection<T> ToObservableCollection<T>(DataTable dt) where T : class, new()
|
|
{
|
|
try
|
|
{
|
|
Type t = typeof(T);
|
|
PropertyInfo[] propertys = t.GetProperties();
|
|
ObservableCollection<T> lst = new ObservableCollection<T>();
|
|
string typeName = string.Empty;
|
|
foreach (DataRow dr in dt.Rows)
|
|
{
|
|
T entity = new T();
|
|
foreach (PropertyInfo pi in propertys)
|
|
{
|
|
typeName = pi.Name;
|
|
if (dt.Columns.Contains(typeName))
|
|
{
|
|
if (!pi.CanWrite) continue;
|
|
object value = dr[typeName];
|
|
if (value == DBNull.Value) continue;
|
|
if (pi.PropertyType == typeof(string))
|
|
{
|
|
pi.SetValue(entity, value.ToString(), null);
|
|
}
|
|
else if (pi.PropertyType == typeof(int) || pi.PropertyType == typeof(int?))
|
|
{
|
|
pi.SetValue(entity, int.Parse(value.ToString()), null);
|
|
}
|
|
else if (pi.PropertyType == typeof(DateTime?) || pi.PropertyType == typeof(DateTime))
|
|
{
|
|
pi.SetValue(entity, DateTime.Parse(value.ToString()), null);
|
|
}
|
|
else if (pi.PropertyType == typeof(float))
|
|
{
|
|
pi.SetValue(entity, float.Parse(value.ToString()), null);
|
|
}
|
|
else if (pi.PropertyType == typeof(double))
|
|
{
|
|
pi.SetValue(entity, double.Parse(value.ToString()), null);
|
|
}
|
|
else
|
|
{
|
|
pi.SetValue(entity, value, null);
|
|
}
|
|
}
|
|
}
|
|
lst.Add(entity);
|
|
}
|
|
return lst;
|
|
}
|
|
catch (Exception) { return null; }
|
|
}
|
|
public void DatSteps(DataTable db)//行号刷新
|
|
{
|
|
int a = db.Rows.Count;
|
|
for (int i = 0; i < a; i++)
|
|
{
|
|
DataRow dr = db.Rows[i];
|
|
dr.BeginEdit();
|
|
dr["Step"] = i + 1;
|
|
dr.EndEdit();
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|