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.
		
		
		
		
		
			
		
			
				
					
					
						
							676 lines
						
					
					
						
							33 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							676 lines
						
					
					
						
							33 KiB
						
					
					
				| using DyeingComputer.UserClass; | |
| using LiveChartsCore.Geo; | |
| using Newtonsoft.Json; | |
| using Newtonsoft.Json.Linq; | |
| using OpenTK.Graphics.ES11; | |
| using ScottPlot.Palettes; | |
| using SunlightCentralizedControlManagement_SCCM_.EX.Exchange; | |
| using SunlightCentralizedControlManagement_SCCM_.Properties; | |
| using SunlightCentralizedControlManagement_SCCM_.UserClass; | |
| using SunlightCentralizedControlManagement_SCCM_.WindowsView; | |
| using System; | |
| using System.Collections.Generic; | |
| using System.Collections.ObjectModel; | |
| using System.ComponentModel; | |
| using System.Data; | |
| using System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder; | |
| using System.Data.SqlClient; | |
| using System.Diagnostics.Eventing.Reader; | |
| using System.Linq; | |
| using System.Reflection; | |
| using System.Speech.Synthesis; | |
| using System.Text; | |
| using System.Threading; | |
| using System.Threading.Tasks; | |
| using System.Timers; | |
| using System.Windows.Controls; | |
| using System.Windows.Forms; | |
| using System.Windows.Media; | |
| using System.Windows.Threading; | |
| using System.Xml.Linq; | |
| using TouchSocket.Core; | |
| using TouchSocket.Sockets; | |
| using static MaterialDesignThemes.Wpf.Theme; | |
| using static SunlightCentralizedControlManagement_SCCM_.UserClass.SqliteHelper; | |
| using static SunlightCentralizedControlManagement_SCCM_.ViewModel.ManualDyelotModel; | |
| using static System.Net.WebRequestMethods; | |
| using static System.Windows.Forms.AxHost; | |
| 
 | |
| namespace SunlightCentralizedControlManagement_SCCM_.ViewModel | |
| { | |
|     /// <summary> | |
|     /// 变量传递至ui | |
|     /// </summary> | |
|     public class ViewModelBase : 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 class MainWindowViewModel : ViewModelBase | |
|     { | |
|         //调用配置文件 | |
|         private static UserClass.IniFile.IniFiles Configini = new UserClass.IniFile.IniFiles(Convert.ToString(System.AppDomain.CurrentDomain.BaseDirectory) + "SCCM.ini"); | |
|         public static string SQLIP;    //读配置文件 | |
|         public static string SQLNAME; | |
|         public static string SQMOD; | |
|         public static string SQLUSER; | |
|         public static string SQLPASWORD; | |
|         public static string SN_ID; | |
|         public static string SN_KEY; | |
|         public static bool DyelotsDispenser; | |
|         public static SqlConnection conn_SC =new SqlConnection();//数据库 | |
|         private SQLiteHelper SQLiteHelpers = null;  //定义数据库 | |
|         private BDC_SQL.BDCSqlHelper bDCSqlHelper = new BDC_SQL.BDCSqlHelper(); | |
|         private readonly string DBAddress = Environment.CurrentDirectory + "\\DataBase\\SCCM.db";  //数据库路径 | |
|         public static DataTable Machines = new DataTable();  //设备表缓存 | |
|        // public static DataRow MachinesROW; | |
|         public static DataTable USER_data = new DataTable(); | |
|         public static DataTable Dyelot_CALL = new DataTable(); | |
|         public static UserControls.info[] inf = new UserControls.info[999]; //定义总览信息卡 | |
|         public static int ERR_c = 0;//错误计数器 | |
|         public static bool[] USER_Capacity { set; get; } = new bool[99]; | |
|          | |
|         public MainWindowViewModel() | |
|         { | |
|             try | |
|             { | |
|                 SQLIP = Configini.IniReadvalue("SQL_SERVER", "SQL1");    //读配置文件 | |
|                 SQLNAME = Configini.IniReadvalue("SQL_SERVER", "SQL2"); | |
|                 SQMOD = Configini.IniReadvalue("SQL_SERVER", "SQL3"); | |
|                 SQLUSER = Configini.IniReadvalue("SQL_SERVER", "SQL4"); | |
|                 SQLPASWORD = Configini.IniReadvalue("SQL_SERVER", "SQL5"); | |
|                 SN_ID = Configini.IniReadvalue("SN", "SN2"); | |
|                 SN_KEY = Configini.IniReadvalue("SN", "SN1"); | |
|                 DyelotsDispenser = Convert.ToBoolean(Configini.IniReadvalue("SYS", "DyelotsDispenser")); | |
|             } | |
|             catch (Exception ex) { LogGing.ERRDATA(ex); } | |
| 
 | |
|             SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径 | |
|             SQLiteHelpers.Open();  //打开数据库 | |
|             Machines = SQLiteHelpers.ExecuteDataSet("select * from Machines Order by id", null).Tables[0];  //读取表写入缓存 | |
|             USER_data = SQLiteHelpers.ExecuteDataSet("select * from USER order by Name desc", null).Tables[0]; | |
|             Dyelot_CALL = SQLiteHelpers.ExecuteDataSet("select * from Dyelot", null).Tables[0].Clone(); | |
|             SQLiteHelpers.Close(); | |
|             | |
|             USERCapacity(App.USER_Purview);//App.USER_Purview); | |
|             CountDown(); | |
|             TcpClientNEW(); | |
|             SQL_LINK(); | |
|         } | |
|         public static void USERCapacity(string user) //权限 | |
|         { | |
|             if (user != "ENGINEER") | |
|             { | |
|                 string USER_Cap = USER_data.Select("Name='" + user + "'").First().Field<string>("Capacity").ToString(); | |
|                 for (int i = 0; i < USER_Cap.Length; i++) | |
|                 { | |
|                     if (USER_Cap.Substring(i, 1) == "1") | |
|                     { | |
|                         USER_Capacity[i] = true; | |
|                     } | |
|                     else | |
|                     { | |
|                         USER_Capacity[i] = false; | |
|                     } | |
|                 } | |
|             } | |
|             else  | |
|             { | |
|                 for (int i = 0; i < 99; i++) | |
|                 {                         | |
|                     USER_Capacity[i] = true;                  | |
|                 } | |
|             } | |
|         } | |
|              | |
|         public async void SQL_LINK()//连接dbc数据库 | |
|         { | |
|             if (conn_SC.State == ConnectionState.Open) conn_SC.Close(); | |
|             try | |
|             { | |
|                 if (SQMOD == "Windows Authentication")    //连接数据库测试 | |
|                 { | |
|                     conn_SC = new SqlConnection("server=" + SQLIP + ";database=" + SQLNAME + ";Trusted_Connection=SSPI"); | |
|                 } | |
|                 else | |
|                 { | |
|                     conn_SC = new SqlConnection("server=" + SQLIP + ";database=" + SQLNAME + ";User ID=" + SQLUSER + ";Password=" + SQLPASWORD); | |
|                 } | |
|                 await conn_SC.OpenAsync();     //连接数据库 | |
|                 conn_SC.Close(); | |
|             } | |
|             catch (Exception ex) | |
|             { | |
|                 LogGing.LogGingDATA("[Database='" + ex + "']=SQLSERVER"); | |
|                 ERR_c++; | |
|             } | |
|                          | |
|             if (SQMOD == "Windows Authentication")    //连接数据库测试 | |
|             { | |
|                 bDCSqlHelper.Config(SQLIP, SQLNAME, SQLUSER, SQLPASWORD, true); | |
|             } | |
|             else | |
|             { | |
|                 bDCSqlHelper.Config(SQLIP, SQLNAME, SQLUSER, SQLPASWORD, false); | |
|             } | |
|         } | |
| 
 | |
|         public void CountDown() | |
|         { | |
|             DispatcherTimer dis1s = new DispatcherTimer | |
|             { | |
|                 Interval = TimeSpan.FromSeconds(1) //秒 | |
|             }; | |
|             dis1s.Tick += new EventHandler(Tick_Main_1S);//每执行的方法 | |
|             dis1s.Start();//计时开始   | |
|             DispatcherTimer dis50ms = new DispatcherTimer | |
|             { | |
|                 Interval = TimeSpan.FromMilliseconds(20) //毫秒 | |
|             }; | |
|             dis50ms.Tick += new EventHandler(DisTimer_50MS);//每执行的方法 | |
|             dis50ms.Start();//计时开始                         | |
|         }//时间周期初始化         | |
|         int Time5 = 0, Time60 = 0; | |
|         void DisTimer_50MS(object sender, EventArgs e)//Tick_Event周期执行事件50MS | |
|         { | |
|             if (stringQueue.Count > 0) //信息发送队列 | |
|             { | |
|                 QueueString t = stringQueue.Dequeue(); | |
|                 MachiensTcpClient[t.ID].SendAsync(t.DAT); | |
|             }                  | |
|         } | |
|         void Tick_Main_1S(object sender, EventArgs e)//Tick_Event周期执行事件1S | |
|         { | |
|             //下传工单信息 | |
|             SQLiteHelper WorkOrderSQL = new SQLiteHelper(DBAddress); //数据库连接路径             | |
|             WorkOrderSQL.Open();  //打开数据库 | |
|             DataTable WorkOrderstepdata = WorkOrderSQL.ExecuteDataSet("select * from WorkOrder where State='111'" + | |
|                 "AND EndTime >'" + DateTime.Now.AddHours(-8).ToString("yyyy/MM/dd  HH:mm:ss") + "'", null).Tables[0];  //读取表写入缓存            | |
|             for (int k = 0; k < WorkOrderstepdata.Rows.Count; k++) | |
|             { | |
|                 string WorkOrderdata_m = WorkOrderstepdata.Select()[k].Field<object>("Machines").ToString(); | |
|                 DataTable dataTable = WorkOrderSQL.ExecuteDataSet("select * from WorkorderSteps where WorkOrder='" + | |
|                     WorkOrderstepdata.Select()[k].Field<object>("WorkOrder").ToString() + "'", null).Tables[0]; | |
|                 int index = Convert.ToInt16(Selet_Machines(Machines, "ID", "Name='" + WorkOrderdata_m + "'").ToString()); | |
|                 stringQueue.Enqueue(new QueueString | |
|                 { | |
|                     ID = index, | |
|                     DAT = "SC811" + Selet_Machines(Machines, "SYSKEY", "ID='" + index + "'") + dataTable.ToJsonString() | |
|                 }); | |
|                 WorkOrderSQL.Update("WorkOrder", new Dictionary<string, object> { { "State", 112 } }, | |
|                     "WorkOrder ='" + WorkOrderstepdata.Select()[k].Field<object>("WorkOrder").ToString() + "'", null); | |
|             } | |
|             //下传工单总览 | |
|             DataTable WorkOrderdata = WorkOrderSQL.ExecuteDataSet("select * from WorkOrder where State='100' " + | |
|                 "AND EndTime >'" + DateTime.Now.AddHours(-8).ToString("yyyy/MM/dd  HH:mm:ss") + "'", null).Tables[0];  //读取表写入缓存            | |
|             for (int k = 0; k < WorkOrderdata.Rows.Count; k++) | |
|             { | |
|                 string WorkOrderdata_m = WorkOrderdata.Select()[k].Field<object>("Machines").ToString(); | |
|                 string State = Selet_Machines(Machines, "State", "Name='" + WorkOrderdata_m + "'").ToString(); | |
| 
 | |
|                 if ((State == "101") || (State == "201") || (State == "202") || (State == "309")) | |
|                 { | |
|                     DataTable dataTable = WorkOrderdata.Clone(); | |
|                     // WorkOrderdata.Columns.Remove("Machines"); | |
|                     DataRow dt_temp = WorkOrderdata.Select()[k]; | |
|                     dt_temp.BeginEdit(); | |
|                     dt_temp["State"] = "101"; | |
|                     dt_temp.EndEdit(); | |
|                     dataTable.Rows.Add(dt_temp.ItemArray); | |
| 
 | |
|                     int index = Convert.ToInt16(Selet_Machines(Machines, "ID", "Name='" + WorkOrderdata_m + "'").ToString()); | |
|                     stringQueue.Enqueue(new QueueString | |
|                     { | |
|                         ID = index, | |
|                         DAT = "SC810" + Selet_Machines(Machines, "SYSKEY", "ID='" + index + "'") + DataTableToDictionary(dataTable).ToJsonString() | |
|                     }); | |
|                     WorkOrderSQL.Update("WorkOrder", new Dictionary<string, object> { { "State", 110 } }, | |
|                         "WorkOrder ='" + WorkOrderdata.Select()[k].Field<object>("WorkOrder").ToString() + "'", null); | |
|                 } | |
|             } | |
|             WorkOrderSQL.Close(); | |
| 
 | |
|             //系统时间 | |
|             Sys_Time = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); | |
|             //更新机台状态与发送指令 | |
|             for (int i = 0; i < Machinesdata_Count; i++) | |
|             { | |
|                 if (Selet_Machines(Machines, "State", "ID='" + i + "'").ToString() == "802") | |
|                 { | |
|                     stringQueue.Enqueue(new QueueString | |
|                     { | |
|                         ID = i, | |
|                         DAT = "SC830" + Selet_Machines(Machines, "SYSKEY", "ID='" + i + "'").ToString() | |
|                     });//信息插入队列 | |
|  | |
|                     string mode = Machines.Select("ID='" + i + "'").First().Field<string>("LOCK");//发送锁定状态 | |
|                     if (mode == "True") | |
|                     { | |
|                         Dictionary<string, object> dat_821 = new Dictionary<string, object>(); | |
|                         dat_821.Clear(); | |
|                         dat_821.Add("LOCK", "True"); | |
|                         DataRow drEmployee = Machines.Select("ID='" + i + "'").First(); | |
|                         int index = Convert.ToInt16(drEmployee.Field<object>("ID")); | |
|                         stringQueue.Enqueue(new QueueString | |
|                         { | |
|                             ID = index, | |
|                             DAT = "SC829" + Selet_Machines(Machines, "SYSKEY", "ID='" + index + "'") + dat_821.ToJsonString() | |
|                         }); | |
|                     } | |
| 
 | |
|                     Updata_Machines(Machines, "State", "ID='" + i + "'", "101"); | |
|                 } | |
|             } | |
|             for (int i = 0; i < Machinesdata_Count; i++) | |
|             { | |
|                 int m_run = (int)Selet_Machines(Machines, "WORK_RUN", "ID='" + i + "'"); | |
|                 if (m_run==0) | |
|                 { | |
|                     Updata_Machines(Machines, "State", "ID='" + i + "'", "101");//停止状态 | |
|                 } | |
|                 else if (m_run==1) | |
|                 { | |
|                     Updata_Machines(Machines, "State", "ID='" + i + "'", "101");//暂停状态 | |
|                 }  | |
|                 else if (m_run==2) | |
|                 { | |
|                     Updata_Machines(Machines, "State", "ID='" + i + "'", "202");//运行 | |
|                 } | |
| 
 | |
|                 if ((bool)Selet_Machines(Machines, "ERR", "ID='" + i + "'")) | |
|                 { | |
|                     Updata_Machines(Machines, "State", "ID='" + i + "'", "309");//错误 | |
|                 } | |
| 
 | |
|                 string mac_s = Selet_Machines(Machines, "State", "ID='" + i + "'").ToString(); | |
|                 if ((mac_s == "101") || (mac_s == "201") || (mac_s == "202") || (mac_s == "301") || (mac_s == "309"))//获取信息 | |
|                 { | |
|                     stringQueue.Enqueue(new QueueString | |
|                     { | |
|                         ID = i, | |
|                         DAT = "SC830" + Selet_Machines(Machines, "SYSKEY", "ID='" + i + "'").ToString() | |
|                     });//信息插入队列 | |
|                 } | |
|             } | |
|             if (Time5 > 5) | |
|             { | |
|                 Tick_Event_5S(); | |
|                 Time5 = 0; | |
|             } | |
|             else { Time5++; } | |
|             if (Time60 > 60) | |
|             { | |
|                 Tick_Event_60S(); | |
|                 Time60 = 0; | |
|             } | |
|             else { Time60++; } | |
|         } | |
|         async void Tick_Event_5S()//Tick_Event周期执行事件5S | |
|         { | |
|             for (int i = 0; i < Machinesdata_Count; i++) | |
|             {/**发送800指令**/ | |
|                 if (Selet_Machines(Machines, "State", "ID='" + i + "'").ToString() == "801") | |
|                 { | |
|                     stringQueue.Enqueue(new QueueString | |
|                     { | |
|                         ID = i, | |
|                         DAT = "SC800:SCCM[" + MachiensTcpClient[i].IP + ";" + MachiensTcpClient[i].Port + "]" | |
|                     });//信息插入队列 | |
|                 } | |
| 
 | |
|                 /**染机用户信息**/ | |
|                 try | |
|                 { | |
|                     if ((int)Selet_Machines(Machines, "UserInfoStart", "ID='" + i + "'") == 901) | |
|                     { | |
|                         MainWindow.InfData.Rows.Add(new object[] { | |
|                         Selet_Machines(Machines, "Name", "ID='" + i + "'"), | |
|                         Properties.Resources.Pequest + Selet_Machines(Machines, "UserInfo", "ID='" + i + "'"), | |
|                         Selet_Machines(Machines, "SYSKEY", "ID='" + i + "'"), | |
|                         Selet_Machines(Machines, "ID", "ID='" + i + "'")}); | |
|                         Updata_Machines(Machines, "UserInfoStart", "ID='" + i + "'", "900"); | |
|                     } | |
|                     if (Selet_Machines(Machines, "UserInfoStart", "ID='" + i + "'").ToString() == "902") | |
|                     { | |
|                         MainWindow.InfData.Select("ID='" + i + "'").First().Delete(); | |
|                     } | |
|                 } | |
|                 catch (Exception) { } | |
|                 /**染机呼叫状态**/ | |
|                 try | |
|                 { | |
|                     if ((bool)Selet_Machines(Machines, "CALL", "ID='" + i + "'")) | |
|                     { | |
|                         stringQueue.Enqueue(new QueueString | |
|                         { | |
|                             ID = i, | |
|                             DAT = "SC827" + Selet_Machines(Machines, "SYSKEY", "ID='" + i + "'") | |
|                         }); | |
|                     } | |
|                 } | |
|                 catch (Exception) { } | |
|                 try | |
|                 {//处理呼叫请求列表 | |
|                     if (Dyelot_CALL.Select("State='202'").Count() > 0)  | |
|                     { | |
|                         DataRow row = Dyelot_CALL.Select("State='202'").First(); | |
|                         var r = await bDCSqlHelper.UPDATA("Machines", "Name = '" + row.Field<string>("Machine") + "'", row); | |
|                         if (r > 0) | |
|                         { | |
|                             DataRow[] dataRows = Dyelot_CALL.Select("Dyelot='" + row.Field<string>("Dyelot") + | |
|                                 "' and Redye='" + row.Field<int>("Redye") + | |
|                                 "' and Step='" + row.Field<int>("Step") + "'"); | |
|                             foreach (DataRow dataRow in dataRows) | |
|                             { | |
|                                 dataRow.BeginEdit(); | |
|                                 dataRow["State"] = 203; | |
|                                 dataRow.EndEdit(); | |
|                             } | |
|                             Dictionary<string, object> dat_ = new Dictionary<string, object>();//缓存函数 | |
|                             dat_.Add("State", 203); | |
|                             SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径 | |
|                             SQLiteHelpers.Open();  //打开数据库 | |
|                             SQLiteHelpers.Update("DyelotHistory", dat_, | |
|                                 "Dyelot='" + row.Field<string>("Dyelot") + | |
|                                 "' and Redye='" + row.Field<int>("Redye") + | |
|                                 "' and Step='" + row.Field<int>("Step") + "'", null);// 执行插入                                                      | |
|                             SQLiteHelpers.Close(); | |
|                         } | |
|                     } | |
|                 } | |
|                 catch (Exception) { } | |
|                 try | |
|                 {//检查呼叫回复列表 | |
|                     if (Dyelot_CALL.Select("State='203'").Count() > 0)  | |
|                     { | |
|                         DataTable dt = new DataTable(); | |
|                         int ri = 0; | |
|                        // DataRow[] dataRows = Dyelot_CALL.Select("State='203'"); | |
|                         foreach (DataRow dataRow in Dyelot_CALL.Select("State='203'")) | |
|                         { | |
|                             ri++; | |
|                             if ((dataRow["State"].ToString() != "301") && (dataRow["State"].ToString() != "309")) | |
|                             { | |
|                                 if (dataRow.Field<int>("Type") == 2) | |
|                                 { | |
|                                     dt = await bDCSqlHelper.SELECT("Machines", "Name = '" + dataRow.Field<string>("Machine") + | |
|                                         "' AND (DyeState = 301 OR DyeState = 309)"); | |
| 
 | |
|                                     if (dt.Rows.Count > 0) | |
|                                     { | |
|                                         if (dt.Select("DyeState = 301").Count() > 0) | |
|                                         { | |
|                                             Dyelot_CALL.Rows.Remove(dataRow); | |
| 
 | |
|                                             DataTable dr = await bDCSqlHelper.SELECT("DyelotsBulkedRecipe", | |
|                                                 "Dyelot = '" + dataRow.Field<string>("Dyelot") + | |
|                                                 "' AND ReDye = " + dataRow.Field<int>("ReDye") + | |
|                                                 " AND StepNumber = " + dataRow.Field<int>("StepNumber")); | |
| 
 | |
|                                             foreach (DataRow Row in dr.Rows) | |
|                                             { | |
|                                                 DataRow data = Dyelot_CALL.Select("ProductCode='" + Row.Field<string>("ProductCode") + "'").First(); | |
|                                                 data.BeginEdit(); | |
|                                                 data["Amount"] = Row.Field<float>("Amount"); | |
|                                                 data["DispenseEndTime"] = Row.Field<DateTime>("DispenseEndTime").ToString("yyyy/MM/dd  HH:mm:ss"); | |
|                                                 data.EndEdit(); | |
|                                             } | |
|                                         } | |
|                                         else | |
|                                         { | |
|                                             MainWindow.InfData.Rows.Add(new object[] { dataRow["Machine"], | |
|                                             Resources.Dyelot + dataRow["Dyelot"] + Resources.Step + dataRow["Step"]+ | |
|                                             Resources.DispenseException, | |
|                                             Selet_Machines(Machines, "SYSKEY", "Name='" + dataRow["Machine"] + "'"), | |
|                                             Selet_Machines(Machines, "ID", "Name='" + dataRow["Machine"] + "'")}); | |
| 
 | |
|                                         } | |
|                                     } | |
|                                 } | |
|                                 else if (dataRow.Field<int>("Type") == 3) | |
|                                 { | |
|                                     dt = await bDCSqlHelper.SELECT("Machines", "Name = '" + dataRow.Field<string>("Machine") + | |
|                                         "' AND (PowderState = 301 OR PowderState = 309)"); | |
|                                     if (dt.Rows.Count > 0) | |
|                                     { | |
|                                         if (dt.Select("PowderState = 301").Count() > 0) | |
|                                         { | |
|                                             Dyelot_CALL.Rows.Remove(dataRow);  | |
|                                             DataTable dr = await bDCSqlHelper.SELECT("DyelotsBulkedRecipe", | |
|                                                 "Dyelot = '" + dataRow.Field<string>("Dyelot") + | |
|                                                 "' AND ReDye = " + dataRow.Field<int>("ReDye") + | |
|                                                 " AND StepNumber = " + dataRow.Field<int>("StepNumber")); | |
| 
 | |
|                                             foreach (DataRow Row in dr.Rows) | |
|                                             { | |
|                                                 DataRow data = Dyelot_CALL.Select("ProductCode='" + Row.Field<string>("ProductCode") + "'").First(); | |
|                                                 data.BeginEdit(); | |
|                                                 data["Amount"] = Row.Field<float>("Amount"); | |
|                                                 data["DispenseEndTime"] = Row.Field<DateTime>("DispenseEndTime").ToString("yyyy/MM/dd  HH:mm:ss"); | |
|                                                 data.EndEdit(); | |
|                                             } | |
|                                         } | |
|                                         else | |
|                                         { | |
|                                             MainWindow.InfData.Rows.Add(new object[] { dataRow["Machine"], | |
|                                             Resources.Dyelot + dataRow["Dyelot"] + Resources.Step + dataRow["Step"]+ | |
|                                             Resources.DispenseException, | |
|                                             Selet_Machines(Machines, "SYSKEY", "Name='" + dataRow["Machine"] + "'"), | |
|                                             Selet_Machines(Machines, "ID", "Name='" + dataRow["Machine"] + "'")}); | |
| 
 | |
|                                         } | |
|                                     } | |
|                                 } | |
|                                 else | |
|                                 { | |
|                                     dt = await bDCSqlHelper.SELECT("Machines", "Name = '" + dataRow.Field<string>("Machine") + | |
|                                         "' AND (ChemicalState = 301 OR ChemicalState = 309)"); | |
|                                     if (dt.Rows.Count > 0) | |
|                                     { | |
|                                         if (dt.Select("PowderState = 301").Count() > 0) | |
|                                         { | |
|                                             Dyelot_CALL.Rows.Remove(dataRow); | |
|                                             DataTable dr = await bDCSqlHelper.SELECT("DyelotsBulkedRecipe", | |
|                                                "Dyelot = '" + dataRow.Field<string>("Dyelot") + | |
|                                                "' AND ReDye = " + dataRow.Field<int>("ReDye") + | |
|                                                " AND StepNumber = " + dataRow.Field<int>("StepNumber")); | |
| 
 | |
|                                             foreach (DataRow Row in dr.Rows) | |
|                                             { | |
|                                                 DataRow data = Dyelot_CALL.Select("ProductCode='" + Row.Field<string>("ProductCode") + "'").First(); | |
|                                                 data.BeginEdit(); | |
|                                                 data["Amount"] = Row.Field<float>("Amount"); | |
|                                                 data["DispenseEndTime"] = Row.Field<DateTime>("DispenseEndTime").ToString("yyyy/MM/dd  HH:mm:ss"); | |
|                                                 data.EndEdit(); | |
|                                             } | |
|                                         } | |
|                                         else | |
|                                         { | |
|                                             MainWindow.InfData.Rows.Add(new object[] { dataRow["Machine"], | |
|                                             Resources.Dyelot + dataRow["Dyelot"] + Resources.Step + dataRow["Step"]+ | |
|                                             Resources.DispenseException, | |
|                                             Selet_Machines(Machines, "SYSKEY", "Name='" + dataRow["Machine"] + "'"), | |
|                                             Selet_Machines(Machines, "ID", "Name='" + dataRow["Machine"] + "'")}); | |
| 
 | |
|                                         } | |
|                                     } | |
|                                 } | |
| 
 | |
|                             } | |
|                         } | |
|                     } | |
|                 } | |
|                 catch (Exception) { } | |
| 
 | |
| 
 | |
|             } | |
|         } | |
|         void Tick_Event_60S() | |
|         { | |
|             for (int i = 0; i < Machinesdata_Count; i++) | |
|             { | |
|                 if (Selet_Machines(Machines, "State", "ID='" + i + "'").ToString() == "800") | |
|                 { | |
|                     MachiensTcpClient[i] = new TcpClient(); | |
|                     DataRow dt = machinesdata[i]; | |
|                     _ = AsyncTcpClient.TcpClient(MachiensTcpClient[i]  //建立tcp连接 | |
|                     , Selet_Machines(Machines, "IP", "ID='" + Convert.ToInt16(dt["ID"]) + "'" ).ToString() | |
|                     , Selet_Machines(Machines, "PORT", "ID='" + Convert.ToInt16(dt["ID"]) + "'").ToString()); | |
|                 } | |
|             }//重连 | |
|         }      | |
|         | |
|         public static TcpClient[] MachiensTcpClient = new TcpClient[999]; | |
|         public static DataRow[] machinesdata = new DataRow[999]; | |
|         public int Machinesdata_Count; | |
|         public void TcpClientNEW() | |
|         { | |
|             // bool Machine_ ; | |
|             machinesdata = Machines.Select("PORT>0 AND IP<>''", "id asc");//获取连接有效的组 | |
|             Machinesdata_Count = machinesdata.Count(); | |
| 
 | |
|             for (int i = 0; i < Machinesdata_Count; i++) | |
|             { | |
|                 MachiensTcpClient[i] = new TcpClient(); | |
|                 DataRow dt = machinesdata[i]; | |
|                 Updata_Machines(Machines, "State", "ID='" + Convert.ToInt16(dt["ID"]) + "'", "800"); | |
|                 Updata_Machines(Machines, "Temperature", "ID='" + Convert.ToInt16(dt["ID"]) + "'", "0.0"); | |
|                 Updata_Machines(Machines, "WaterLevel", "ID='" + Convert.ToInt16(dt["ID"]) + "'", "0"); | |
|                 Updata_Machines(Machines, "WORK_RUN", "ID='" + Convert.ToInt16(dt["ID"]) + "'", "-1"); | |
|                 Updata_Machines(Machines, "ERR", "ID='" + Convert.ToInt16(dt["ID"]) + "'", "False"); | |
|                 Updata_Machines(Machines, "UserInfoStart", "ID='" + Convert.ToInt16(dt["ID"]) + "'", "900"); | |
|                 _ = AsyncTcpClient.TcpClient(MachiensTcpClient[i]  //建立tcp连接 | |
|                 , Selet_Machines(Machines, "IP", "ID='" + Convert.ToInt16(dt["ID"]) + "'").ToString() | |
|                 , Selet_Machines(Machines, "PORT", "ID='" + Convert.ToInt16(dt["ID"]) + "'").ToString()); | |
|             } | |
|         } | |
| 
 | |
|         public static string SYS_WorkNumder; //工单号 | |
|         public static int SYS_AT1; //附缸1-3 | |
|         public static int SYS_AT2; | |
|         public static int SYS_AT3; | |
| 
 | |
|         public string sys_Time;  //显示系统时间 | |
|         public string Sys_Time  //通知UI控件参数改变 | |
|         { | |
|             get { return sys_Time; } | |
|             set { sys_Time = value; OnPropertyChanged("Sys_Time"); } | |
|         } | |
|         public static string MachineLOG; | |
|       /*  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)//查询 | |
|         { | |
|             try | |
|             { | |
|                 lock (DB) | |
|                 { | |
|                     DataRow drEmployee = DB.Select(key).First(); | |
|                     object index = drEmployee.Field<object>(name); | |
|                     return index; | |
|                 } | |
|             } | |
|             catch (Exception ex) | |
|             {                 | |
|                 LogGing.LogGingDATA("SDTD:" + ex.ToString()); | |
|                 return "ERR"; | |
|             } | |
|         } | |
|         public static void Updata_Machines(DataTable DB, string name, string key, string Value)//更新数据 | |
|         { | |
|             try | |
|             { | |
|                 lock (DB) | |
|                 { | |
|                     DataRow drEmployee = DB.Select(key).First(); | |
|                     drEmployee.BeginEdit(); | |
|                     drEmployee[name] = Value; | |
|                     drEmployee.EndEdit(); | |
|                     drEmployee.AcceptChanges(); | |
|                    // drEmployee.ClearErrors(); | |
|                 } | |
|             } | |
|             catch (Exception ex) | |
|             {                 | |
|                 LogGing.LogGingDATA("SDTD:" + ex.ToString());                 | |
|             } | |
|         }         | |
| 
 | |
|         public static DataTable dt_d = new DataTable("DIO"); | |
|         public static DataTable dt_a = new DataTable("AIO"); | |
|         public static DataTable dt_m = new DataTable("M"); | |
|         public static DataTable dt_TM = new DataTable(); | |
|         public static DataTable dt_TP = new DataTable(); | |
|         public static DataTable dt_ParameterSet = new DataTable(); | |
|         public static DataTable dt_SysSet = new DataTable(); | |
|         public static bool TechnologicalProcess_bool =true; | |
|        // public static bool A_view =true; | |
|       //  public static bool D_view =true; | |
|         public static bool IO_view; | |
|       //  public static bool ParameterSet_view=true; | |
|       //  public static bool SysSet_view=true; | |
|         public static string machine; | |
|         public static string workOrder; | |
|         public static string dyelot; | |
|         public static string machin_LOG; | |
|                     | |
|         //通讯队列 | |
|         public static UInt32 RX=0; | |
|         public static UInt32 TX=0; | |
|         public class QueueString | |
|         { | |
|             public int ID { get; set; } | |
|             public string DAT { get; set; } | |
|         } | |
|         public static class Queue | |
|         { | |
|             public static int ID { get; set; } | |
|             public static string DAT { get; set; } | |
|         } | |
|         // 创建一个字符串类型的队列 | |
|         public static Queue<QueueString> stringQueue = new Queue<QueueString>(); | |
|         /// <summary> | |
|         /// 将 DataTable 转换为 Dictionary 类型数据 | |
|         /// </summary> | |
|         public Dictionary<string, object> DataTableToDictionary(DataTable dataTable) | |
|         { | |
|             Dictionary<string, object> result = new Dictionary<string, object>(); | |
|             if (dataTable != null) | |
|             { | |
|                 foreach (DataRow dataRow in dataTable.Rows) | |
|                 { | |
|                     foreach (DataColumn dataColumn in dataTable.Columns) | |
|                     { | |
|                         result.Add(dataColumn.ColumnName, dataRow[dataColumn].ToString()); | |
|                         //result = Console.WriteLine(dataRow[dataColumn].ToString()); | |
|                         //result.Add(dataColumn.ColumnName, dataRow[dataColumn].ToString())(new RepeatDictionaryComparer()); | |
|                     } | |
|                 } | |
|             } | |
|             else | |
|             { | |
|                 result = null; | |
|             } | |
|             return result; | |
|         } | |
|     } | |
| }
 | |
| 
 |