diff --git a/ConvertMoels/BoolToVisidilityConvert.cs b/ConvertMoels/BoolToVisidilityConvert.cs
new file mode 100644
index 0000000..f3b5ea0
--- /dev/null
+++ b/ConvertMoels/BoolToVisidilityConvert.cs
@@ -0,0 +1,27 @@
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Data;
+
+namespace SunlightCentralizedControlManagement_SCCM_.ConvertMoels
+{
+ internal class BoolToVisidilityConvert : IValueConverter
+ {
+ public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
+ {
+ return (value is bool boolvalue && boolvalue) ?
+ Visibility.Visible:
+ Visibility.Collapsed;
+ }
+
+ public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+
+ }
+}
diff --git a/ConvertMoels/StateToColorConvert.cs b/ConvertMoels/StateToColorConvert.cs
index affad62..0be5ef3 100644
--- a/ConvertMoels/StateToColorConvert.cs
+++ b/ConvertMoels/StateToColorConvert.cs
@@ -23,7 +23,7 @@ namespace SunlightCentralizedControlManagement_SCCM_.ConvertMoels
if (i == "201") return "#FF00FF00";
else if (i == "202") return "#FFFFFF00";
- else if (i == "309") return "#FFFF0000";
+ else if (i == "309") return "#FFFFFFFF";
else if (i == "800") return "#FFFF0000";
else return "#FF000000";
}
diff --git a/SunlightCentralizedControlManagement_SCCM_.csproj b/SunlightCentralizedControlManagement_SCCM_.csproj
index 8c761e2..02150fb 100644
--- a/SunlightCentralizedControlManagement_SCCM_.csproj
+++ b/SunlightCentralizedControlManagement_SCCM_.csproj
@@ -102,6 +102,7 @@
+
DispenseState.xaml
@@ -140,6 +141,7 @@
+
diff --git a/View/MonitorView.xaml b/View/MonitorView.xaml
index 7096876..2929b2c 100644
--- a/View/MonitorView.xaml
+++ b/View/MonitorView.xaml
@@ -8,12 +8,13 @@
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
xmlns:rdp="clr-namespace:VncSharpWpf;assembly=VncSharpWpf"
xmlns:viewmodel="clr-namespace:SunlightCentralizedControlManagement_SCCM_.ViewModel"
- xmlns:ConvertMoels="clr-namespace:SunlightCentralizedControlManagement_SCCM_.ConvertMoels"
- d:DataContext="{d:DesignInstance Type=viewmodel:MainWindowViewModel}"
+ xmlns:ConvertMoels="clr-namespace:SunlightCentralizedControlManagement_SCCM_.ConvertMoels"
+ d:DataContext="{d:DesignInstance Type=local:MonitorView}"
mc:Ignorable="d"
d:DesignHeight="1000" d:DesignWidth="1900">
+
@@ -40,6 +41,9 @@
+
+
+
@@ -91,7 +95,7 @@
-
+
@@ -103,9 +107,11 @@
HorizontalGridLinesBrush="#FFC9C9C9" VerticalGridLinesBrush="#FFC9C9C9" Background="White"
GridLinesVisibility="All" ColumnHeaderHeight="40" HorizontalContentAlignment="Right" BorderBrush="{x:Null}"
CanUserReorderColumns="False" CanUserSortColumns="False" CanUserResizeRows="False" CanUserResizeColumns="False"
- CanUserDeleteRows="False" SelectionMode="Single" FontSize="15" Focusable="True" >
-
+ CanUserDeleteRows="False" SelectionMode="Single" FontSize="15" Focusable="True" ContextMenuOpening="Gridstep_ContextMenuOpening">
+
@@ -135,7 +150,7 @@
-
+
diff --git a/View/MonitorView.xaml.cs b/View/MonitorView.xaml.cs
index 26a43e3..3a96aba 100644
--- a/View/MonitorView.xaml.cs
+++ b/View/MonitorView.xaml.cs
@@ -33,29 +33,48 @@ using System.Net.NetworkInformation;
namespace SunlightCentralizedControlManagement_SCCM_.View
{
+
///
/// MonitorView.xaml 的交互逻辑
///
- public partial class MonitorView : UserControl
+ 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 = new MainWindowViewModel();
+ 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;
-
private void Griddata_SelectionChanged(object sender, SelectionChangedEventArgs e)//设备列表
{
Stop.IsEnabled = true;
@@ -69,7 +88,9 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
Curve.IsEnabled = true;
Screen.IsEnabled = true;
Receipt.IsEnabled = true;
- MainWindowViewModel.TechnologicalProcess_bool = true;
+ TechnologicalProcess_bool = true;
+ IsInteractive = false;
+
int rownum = Griddata.SelectedIndex;//获取鼠标选中行并定义变量
if (rownum != -1)//判断鼠标定位是否有效
{
@@ -87,7 +108,7 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
private void Gridstep_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
- MainWindowViewModel.TechnologicalProcess_bool = false;
+ TechnologicalProcess_bool = false;
int rownum = Gridstep.SelectedIndex;//获取鼠标选中行并定义变量
if (rownum != -1)//判断鼠标定位是否有效
{
@@ -191,6 +212,7 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
}//曲线
private void ListViewItem_Resume(object sender, MouseButtonEventArgs e)
{
+ IsInteractive = false;
if (!string.IsNullOrEmpty(machine))
{
Dictionary dat_821 = new Dictionary();
@@ -209,10 +231,11 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
Resume.IsEnabled = false;
Delete.IsEnabled = false;
Jump.IsEnabled = false;
- MainWindowViewModel.TechnologicalProcess_bool = true;
+ TechnologicalProcess_bool = true;
}//恢复
private void ListViewItem_Paused(object sender, MouseButtonEventArgs e)
{
+ IsInteractive = true;
if (!string.IsNullOrEmpty(machine))
{
Dictionary dat_821 = new Dictionary();
@@ -236,6 +259,7 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
}//暂停
private void ListViewItem_Stop(object sender, MouseButtonEventArgs e)
{
+ IsInteractive = false;
if (!string.IsNullOrEmpty(machine))
{
Dictionary dat_821 = new Dictionary();
@@ -282,7 +306,7 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
DAT = "SC821" + MainWindowViewModel.Selet_Machines(MainWindowViewModel.Machines, "SYSKEY", "ID='" + index + "'") + dat_821.ToJsonString()
});
- MainWindowViewModel.TechnologicalProcess_bool = true;
+ TechnologicalProcess_bool = true;
}
private void ListViewItem_Jump(object sender, MouseButtonEventArgs e)
@@ -306,7 +330,7 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
DAT = "SC821" + MainWindowViewModel.Selet_Machines(MainWindowViewModel.Machines, "SYSKEY", "ID='" + index + "'") + dat_821.ToJsonString()
});
- MainWindowViewModel.TechnologicalProcess_bool = true;
+ TechnologicalProcess_bool = true;
}//跳步
private void ListViewItem_Insert(object sender, MouseButtonEventArgs e)
{
@@ -317,7 +341,7 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
}//插入
private void Insert_ButtonClicked(object sender, AddressUpdateEventArgs e)//cr返回结果
{
- MainWindowViewModel.TechnologicalProcess_bool = true;
+ TechnologicalProcess_bool = true;
Dictionary dat_821 = new Dictionary();
dat_821.Clear();
dat_821.Add("INSTRUCTION", "INSERT");
@@ -355,7 +379,7 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
DAT = "SC821" + MainWindowViewModel.Selet_Machines(MainWindowViewModel.Machines, "SYSKEY", "ID='" + index + "'") + dat_821.ToJsonString()
});
- MainWindowViewModel.TechnologicalProcess_bool = true;
+ TechnologicalProcess_bool = true;
}
}//删除
string Numder = null;
@@ -414,11 +438,11 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
DAT = "SC821" + MainWindowViewModel.Selet_Machines(MainWindowViewModel.Machines, "SYSKEY", "ID='" + index + "'") + dat_821.ToJsonString()
});
- MainWindowViewModel.TechnologicalProcess_bool = true;
+ TechnologicalProcess_bool = true;
}
}
}
-
+
public void CountDown()
{
DispatcherTimer timer1s = new DispatcherTimer//初始化循环,每1秒调用一次Tick
@@ -431,6 +455,7 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
int Time_D = 0;
void Tick_Event_1S(object sender, EventArgs e)//Tick_Event周期执行事件1S
{
+ DATA_view();
if (Paused.IsEnabled)
{
if (!Resume.IsEnabled)
@@ -438,7 +463,7 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
Time_D++;
if (Time_D > 10)
{
- MainWindowViewModel.TechnologicalProcess_bool = true;
+ TechnologicalProcess_bool = true;
}
}
}
@@ -496,8 +521,152 @@ namespace SunlightCentralizedControlManagement_SCCM_.View
}//返回错误为空
}
}
-
+
+ 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(MainWindowViewModel.Machines);
+ }
+ catch (Exception) { }
+ try
+ {
+ if (MainWindowViewModel.dt_TP.Rows.Count >= 0)
+ {
+ if (TechnologicalProcess_bool)
+ {
+ TechnologicalProcess_View = ToObservableCollection(MainWindowViewModel.dt_TP);
+
+ }
+ Sys_machine = MainWindowViewModel.MachineLOG;
+ }
+ }
+ catch (Exception) { }
+ });
+ }
+ ObservableCollection technologicalProcess_View = new ObservableCollection();
+ ObservableCollection technologicalMachine_View = new ObservableCollection();
+ public ObservableCollection TechnologicalProcess_View
+ {
+ get { return technologicalProcess_View; }
+ set
+ {
+ technologicalProcess_View = value;
+ RaisePropertyChanged("TechnologicalProcess_View");
+ }
+ }
+
+
+ public ObservableCollection 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 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 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 ObservableCollection ToObservableCollection(DataTable dt) where T : class, new()
+ {
+ Type t = typeof(T);
+ PropertyInfo[] propertys = t.GetProperties();
+ ObservableCollection lst = new ObservableCollection();
+ 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;
+ }
}
}
diff --git a/ViewModel/MainWindowViewModel.cs b/ViewModel/MainWindowViewModel.cs
index 84f70dd..07eb287 100644
--- a/ViewModel/MainWindowViewModel.cs
+++ b/ViewModel/MainWindowViewModel.cs
@@ -331,12 +331,12 @@ namespace SunlightCentralizedControlManagement_SCCM_.ViewModel
set { sys_Time = value; OnPropertyChanged("Sys_Time"); }
}
public static string MachineLOG;
- public string sys_machine; //显示log
+ /* public string sys_machine; //显示log
public string Sys_machine //通知UI控件参数改变
{
get { return sys_machine; }
set { sys_machine = value; OnPropertyChanged("Sys_machine"); }
- }
+ }*/
public static object Selet_Machines(DataTable DB, string name, string key)//查询
{
@@ -422,11 +422,11 @@ namespace SunlightCentralizedControlManagement_SCCM_.ViewModel
}
}
catch (Exception) { }
- try
+ /* try
{
TechnologicalMachine_View = ToObservableCollection(Machines);
}
- catch (Exception) { }
+ catch (Exception) { }*/
try
{
if (dt_ParameterSet.Rows.Count >= 0)
@@ -443,7 +443,7 @@ namespace SunlightCentralizedControlManagement_SCCM_.ViewModel
}
}
catch (Exception) { }
- try
+ /* try
{
if (dt_TP.Rows.Count >= 0)
{
@@ -451,7 +451,7 @@ namespace SunlightCentralizedControlManagement_SCCM_.ViewModel
Sys_machine = MachineLOG;
}
}
- catch (Exception) { }
+ catch (Exception) { }*/
});
}
@@ -460,8 +460,8 @@ namespace SunlightCentralizedControlManagement_SCCM_.ViewModel
ObservableCollection sysData_M = new ObservableCollection();
ObservableCollection paramete_Set = new ObservableCollection();
ObservableCollection sys_Set = new ObservableCollection();
- ObservableCollection technologicalProcess_View = new ObservableCollection();
- ObservableCollection technologicalMachine_View = new ObservableCollection();
+ //ObservableCollection technologicalProcess_View = new ObservableCollection();
+ //ObservableCollection technologicalMachine_View = new ObservableCollection();
public ObservableCollection SYSData_A
{
@@ -491,7 +491,7 @@ namespace SunlightCentralizedControlManagement_SCCM_.ViewModel
RaisePropertyChanged("SYSData_M");
}
}
- public ObservableCollection TechnologicalProcess_View
+ /* public ObservableCollection TechnologicalProcess_View
{
get { return technologicalProcess_View; }
set
@@ -508,7 +508,7 @@ namespace SunlightCentralizedControlManagement_SCCM_.ViewModel
technologicalMachine_View = value;
RaisePropertyChanged("TechnologicalMachine_View");
}
- }
+ }*/
public ObservableCollection Paramete_Set
{
get { return paramete_Set; }
@@ -551,7 +551,7 @@ namespace SunlightCentralizedControlManagement_SCCM_.ViewModel
public string PLC { get; set; }
public string type { get; set; }
}
- public class TechnologicalM
+ /* public class TechnologicalM
{
public string Name { get; set; }
public string WorkOrder { get; set; }
@@ -578,7 +578,7 @@ namespace SunlightCentralizedControlManagement_SCCM_.ViewModel
public string Parameter4 { get; set; }
public string Parameter5 { get; set; }
public string DYELOT { get; set; }
- }
+ }*/
public class ParameterSet
{ public string Category { get; set; }
public string ParameterID { get; set; }
diff --git a/ViewModel/MonitorViewModel.cs b/ViewModel/MonitorViewModel.cs
new file mode 100644
index 0000000..dfc2cf4
--- /dev/null
+++ b/ViewModel/MonitorViewModel.cs
@@ -0,0 +1,162 @@
+using SunlightCentralizedControlManagement_SCCM_.EX;
+using SunlightCentralizedControlManagement_SCCM_.UserClass;
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.ComponentModel;
+using System.Data;
+using System.Data.SqlClient;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Threading;
+using static SunlightCentralizedControlManagement_SCCM_.ViewModel.MainWindowViewModel;
+
+namespace SunlightCentralizedControlManagement_SCCM_.ViewModel
+{
+
+ public class MonitorViewModel : ViewModelBase
+ {
+ public MonitorViewModel()
+ {
+ // DispatcherTimer timer1s = new DispatcherTimer(DispatcherPriority.Normal);//初始化循环,每1秒调用一次Tick
+ // timer1s.Interval = TimeSpan.FromMilliseconds(950);//秒
+ // timer1s.Tick += Tick_Main_1S;
+ // timer1s.Start();
+ }
+
+ void Tick_Main_1S(object sender, EventArgs e)//Tick_Event周期执行事件1S
+ {
+ DATA_view();
+ }
+
+
+ public string sys_machine; //显示log
+ public string Sys_machine //通知UI控件参数改变
+ {
+ get { return sys_machine; }
+ set { sys_machine = value; OnPropertyChanged("Sys_machine"); }
+ }
+ public static bool TechnologicalProcess_bool = true;
+ private async void DATA_view()//IO显示
+ {
+ await Task.Run(() =>
+ {
+
+
+ try
+ {
+ TechnologicalMachine_View = ToObservableCollection(Machines);
+ }
+ catch (Exception) { }
+
+ try
+ {
+ if (dt_TP.Rows.Count >= 0)
+ {
+ if (TechnologicalProcess_bool) TechnologicalProcess_View = ToObservableCollection(dt_TP);
+ Sys_machine = MachineLOG;
+ }
+ }
+ catch (Exception) { }
+ });
+ }
+ ObservableCollection technologicalProcess_View = new ObservableCollection();
+ ObservableCollection technologicalMachine_View = new ObservableCollection();
+ public ObservableCollection TechnologicalProcess_View
+ {
+ get { return technologicalProcess_View; }
+ set
+ {
+ technologicalProcess_View = value;
+ RaisePropertyChanged("TechnologicalProcess_View");
+ }
+ }
+ public ObservableCollection 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 class TechnologicalP
+ {
+ 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 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 ObservableCollection ToObservableCollection(DataTable dt) where T : class, new()
+ {
+ Type t = typeof(T);
+ PropertyInfo[] propertys = t.GetProperties();
+ ObservableCollection lst = new ObservableCollection();
+ 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;
+ }
+ }
+}