|
|
|
using SkiaSharp;
|
|
|
|
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.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 VncSharpWpf;
|
|
|
|
using System.Xml.Linq;
|
|
|
|
using TouchSocket.Core;
|
|
|
|
using TouchSocket.Sockets;
|
|
|
|
using static SunlightCentralizedControlManagement_SCCM_.WindowsView.ViewStep;
|
|
|
|
using static System.Net.WebRequestMethods;
|
|
|
|
using static System.Windows.Forms.VisualStyles.VisualStyleElement.Rebar;
|
|
|
|
using SunlightCentralizedControlManagement_SCCM_.UserClass;
|
|
|
|
using System.Net.NetworkInformation;
|
|
|
|
|
|
|
|
namespace SunlightCentralizedControlManagement_SCCM_.View
|
|
|
|
{
|
|
|
|
/// <summary>
|
|
|
|
/// MonitorView.xaml 的交互逻辑
|
|
|
|
/// </summary>
|
|
|
|
public partial class MonitorView : UserControl
|
|
|
|
{
|
|
|
|
public MonitorView()
|
|
|
|
{
|
|
|
|
InitializeComponent();
|
|
|
|
CountDown();
|
|
|
|
}
|
|
|
|
|
|
|
|
private string machine;
|
|
|
|
private string workOrder;
|
|
|
|
private string dyelot;
|
|
|
|
private int machines_info=0;
|
|
|
|
public static string Sys_log;
|
|
|
|
|
|
|
|
private void Griddata_SelectionChanged(object sender, SelectionChangedEventArgs e)//设备列表
|
|
|
|
{
|
|
|
|
Stop.IsEnabled = true;
|
|
|
|
Insert.IsEnabled = false;
|
|
|
|
edit.IsEnabled = false;
|
|
|
|
Paused.IsEnabled = false;
|
|
|
|
Resume.IsEnabled = false;
|
|
|
|
Delete.IsEnabled = false;
|
|
|
|
Jump.IsEnabled = false;
|
|
|
|
MainWindowViewModel.TechnologicalProcess_bool = true;
|
|
|
|
int rownum = Griddata.SelectedIndex;//获取鼠标选中行并定义变量
|
|
|
|
if (rownum != -1)//判断鼠标定位是否有效
|
|
|
|
{
|
|
|
|
machine = (Griddata.Columns[1].GetCellContent(Griddata.Items[rownum]) as TextBlock).Text;//定位第1列,
|
|
|
|
workOrder = (Griddata.Columns[2].GetCellContent(Griddata.Items[rownum]) as TextBlock).Text;//定位第列,
|
|
|
|
dyelot = (Griddata.Columns[3].GetCellContent(Griddata.Items[rownum]) as TextBlock).Text;//定位第列,
|
|
|
|
|
|
|
|
machin_LOG.Text = Properties.Resources.Machine + ":" + machine + " " + Properties.Resources.WorkOrder + ":" + workOrder;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private void Gridstep_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
|
|
|
{
|
|
|
|
Paused.IsEnabled = true;
|
|
|
|
MainWindowViewModel.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 ListViewItem_DyeingMachine(object sender, MouseButtonEventArgs e)
|
|
|
|
{
|
|
|
|
machines_info = 0;
|
|
|
|
log.Visibility = Visibility.Visible;
|
|
|
|
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 async void ListViewItem_Screen(object sender, MouseButtonEventArgs e)
|
|
|
|
{
|
|
|
|
machines_info = 1;
|
|
|
|
log.Visibility = Visibility.Visible;
|
|
|
|
Picture.Visibility = Visibility.Collapsed;
|
|
|
|
|
|
|
|
RemoteDesktopWpf remoteDesktopWpf = new RemoteDesktopWpf();
|
|
|
|
Picture.Content = remoteDesktopWpf;
|
|
|
|
|
|
|
|
|
|
|
|
DataRow drEmployee = MainWindowViewModel.Machines.Select("NAME='" + machine + "'").First();
|
|
|
|
string host = drEmployee.Field<string>("IP");
|
|
|
|
int port = Convert.ToInt16(drEmployee.Field<int>("PORT"));
|
|
|
|
string password = "123456";//drEmployee.Field<string>("SYSKEY");
|
|
|
|
|
|
|
|
if (await PingTest(host))
|
|
|
|
{
|
|
|
|
if (!remoteDesktopWpf.IsConnected)
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
remoteDesktopWpf.VncPort = port;
|
|
|
|
remoteDesktopWpf.Passwd = password;
|
|
|
|
remoteDesktopWpf.Connect(host, true, false);
|
|
|
|
}
|
|
|
|
catch (Exception ex)
|
|
|
|
{
|
|
|
|
LogGing.ERRDATA(ex);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}//远程
|
|
|
|
private void ListViewItem_Receipt(object sender, MouseButtonEventArgs e)
|
|
|
|
{
|
|
|
|
machines_info = 2;
|
|
|
|
log.Visibility = Visibility.Visible;
|
|
|
|
Picture.Visibility = Visibility.Collapsed;
|
|
|
|
DyelotView dyelotView = new DyelotView();
|
|
|
|
dyelotView.Dyelot(workOrder);
|
|
|
|
Picture.Content = dyelotView;
|
|
|
|
}//单据
|
|
|
|
private void ListViewItem_Curve(object sender, MouseButtonEventArgs e)
|
|
|
|
{
|
|
|
|
log.Visibility = Visibility.Collapsed;
|
|
|
|
Picture.Visibility = Visibility.Visible;
|
|
|
|
Picture.Content = new View.CurveDiagram(true, "", "", "", workOrder);
|
|
|
|
machines_info = 3;
|
|
|
|
}//曲线
|
|
|
|
private void ListViewItem_Resume(object sender, MouseButtonEventArgs e)
|
|
|
|
{
|
|
|
|
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", index) + dat_821.ToJsonString()
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
Insert.IsEnabled = false;
|
|
|
|
edit.IsEnabled = false;
|
|
|
|
Paused.IsEnabled = false;
|
|
|
|
Resume.IsEnabled = false;
|
|
|
|
Delete.IsEnabled = false;
|
|
|
|
Jump.IsEnabled = false;
|
|
|
|
MainWindowViewModel.TechnologicalProcess_bool = true;
|
|
|
|
}//恢复
|
|
|
|
private void ListViewItem_Paused(object sender, MouseButtonEventArgs e)
|
|
|
|
{
|
|
|
|
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", index) + dat_821.ToJsonString()
|
|
|
|
});
|
|
|
|
}
|
|
|
|
Insert.IsEnabled = true;
|
|
|
|
edit.IsEnabled = true;
|
|
|
|
Paused.IsEnabled = true;
|
|
|
|
Resume.IsEnabled = true;
|
|
|
|
Delete.IsEnabled = true;
|
|
|
|
Jump.IsEnabled = true;
|
|
|
|
}//暂停
|
|
|
|
private void ListViewItem_Stop(object sender, MouseButtonEventArgs 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", 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"; }
|
|
|
|
ViewStep viewstop = new ViewStep(Numder, P1, P2, P3, P4, P5);
|
|
|
|
viewstop.data = ID;
|
|
|
|
viewstop.AddressUpdated += new ViewStep.AddressUpdateHandler(edit_ButtonClicked);
|
|
|
|
viewstop.ShowDialog();
|
|
|
|
}//编辑
|
|
|
|
string Numder = null;
|
|
|
|
string ID = null;
|
|
|
|
string P1 = "0", P2 = "0", P3 = "0", P4 = "0", P5 = "0";
|
|
|
|
private void edit_ButtonClicked(object sender, AddressUpdateEventArgs e)//编辑返回结果
|
|
|
|
{
|
|
|
|
|
|
|
|
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.P1);
|
|
|
|
dat_821.Add("Parameter2", e.P2);
|
|
|
|
dat_821.Add("Parameter3", e.P3);
|
|
|
|
dat_821.Add("Parameter4", e.P4);
|
|
|
|
dat_821.Add("Parameter5", e.P5);
|
|
|
|
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", index) + dat_821.ToJsonString()
|
|
|
|
});
|
|
|
|
|
|
|
|
MainWindowViewModel.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 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", index) + dat_821.ToJsonString()
|
|
|
|
});
|
|
|
|
|
|
|
|
MainWindowViewModel.TechnologicalProcess_bool = true;
|
|
|
|
}//跳步
|
|
|
|
private void ListViewItem_Insert(object sender, MouseButtonEventArgs e)
|
|
|
|
{
|
|
|
|
ViewStep viewstop = new ViewStep(null, "0", "0", "0", "0", "0");
|
|
|
|
viewstop.data = ID;
|
|
|
|
viewstop.AddressUpdated += new ViewStep.AddressUpdateHandler(Insert_ButtonClicked);
|
|
|
|
viewstop.ShowDialog();
|
|
|
|
}//插入
|
|
|
|
private void Insert_ButtonClicked(object sender, AddressUpdateEventArgs e)//cr返回结果
|
|
|
|
{
|
|
|
|
MainWindowViewModel.TechnologicalProcess_bool = true;
|
|
|
|
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.P1);
|
|
|
|
dat_821.Add("Parameter2", e.P2);
|
|
|
|
dat_821.Add("Parameter3", e.P3);
|
|
|
|
dat_821.Add("Parameter4", e.P4);
|
|
|
|
dat_821.Add("Parameter5", e.P5);
|
|
|
|
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", 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", index) + dat_821.ToJsonString()
|
|
|
|
});
|
|
|
|
|
|
|
|
MainWindowViewModel.TechnologicalProcess_bool = true;
|
|
|
|
}
|
|
|
|
}//删除
|
|
|
|
|
|
|
|
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
|
|
|
|
{
|
|
|
|
if (Paused.IsEnabled)
|
|
|
|
{
|
|
|
|
if (!Resume.IsEnabled)
|
|
|
|
{
|
|
|
|
Time_D++;
|
|
|
|
if (Time_D > 10)
|
|
|
|
{
|
|
|
|
Paused.IsEnabled = false;
|
|
|
|
MainWindowViewModel.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", index)
|
|
|
|
});
|
|
|
|
}//信息
|
|
|
|
else if (machines_info == 1)
|
|
|
|
{
|
|
|
|
|
|
|
|
}//输送状态
|
|
|
|
else if (machines_info == 2)
|
|
|
|
{
|
|
|
|
MainWindowViewModel.stringQueue.Enqueue(new MainWindowViewModel.QueueString
|
|
|
|
{
|
|
|
|
ID = index,
|
|
|
|
DAT = "SC833" + MainWindowViewModel.Selet_Machines(MainWindowViewModel.Machines, "SYSKEY", index)
|
|
|
|
});
|
|
|
|
}//单据
|
|
|
|
|
|
|
|
MainWindowViewModel.stringQueue.Enqueue(new MainWindowViewModel.QueueString
|
|
|
|
{
|
|
|
|
ID = index,
|
|
|
|
DAT = "SC831" + MainWindowViewModel.Selet_Machines(MainWindowViewModel.Machines, "SYSKEY", index)
|
|
|
|
});
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
MainWindowViewModel.MachineLOG = null;
|
|
|
|
MainWindowViewModel.dt_TP.Clear();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (Exception )
|
|
|
|
{
|
|
|
|
MainWindowViewModel.MachineLOG = null;
|
|
|
|
MainWindowViewModel.dt_TP.Clear();
|
|
|
|
}//返回错误为空
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|