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.
		
		
		
		
		
			
		
			
				
					
					
						
							683 lines
						
					
					
						
							38 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							683 lines
						
					
					
						
							38 KiB
						
					
					
				| using DyeingComputer.UserClass; | |
| using System; | |
| using System.Collections.Generic; | |
| using System.Data; | |
| using System.Linq; | |
| using System.Net; | |
| using System.Net.Http; | |
| using System.Net.Sockets; | |
| using System.Reflection.Emit; | |
| using System.Text; | |
| using System.Threading; | |
| using System.Threading.Tasks; | |
| using System.Diagnostics; | |
| using TouchSocket.Core; | |
| using TouchSocket.Sockets; | |
| using DyeingComputer.ViewModel; | |
| using System.Runtime.InteropServices; | |
| using ScottPlot.Colormaps; | |
| using static System.Windows.Forms.AxHost; | |
| using static System.Windows.Forms.VisualStyles.VisualStyleElement.TaskbarClock; | |
| using static System.Windows.Forms.VisualStyles.VisualStyleElement; | |
| using Newtonsoft.Json; | |
| using static DyeingComputer.UserClass.SqliteHelper; | |
| using DyeingComputer.View; | |
| using System.Windows; | |
| using System.Windows.Controls; | |
| using static System.Net.WebRequestMethods; | |
| using System.Collections; | |
| 
 | |
| namespace DyeingComputer.UserClass | |
| {/// <summary> | |
|  /// 异步TCP服务器 | |
|  /// </summary> | |
|     public class AsyncTcpServer | |
|     { | |
|         //设置系统时间的API函数 | |
|         [DllImport("kernel32.dll")] | |
|         private static extern bool SetLocalTime(ref SYSTEMTIME time); | |
|         [StructLayout(LayoutKind.Sequential)] | |
|         private struct SYSTEMTIME | |
|         { | |
|             public short year; | |
|             public short month; | |
|             public short dayOfWeek; | |
|             public short day; | |
|             public short hour; | |
|             public short minute; | |
|             public short second; | |
|             public short milliseconds; | |
|         } | |
|         /// <summary> | |
|         /// 设置系统时间 | |
|         /// </summary> | |
|         /// <param name="dt">需要设置的时间</param> | |
|         /// <returns>返回系统时间设置状态,true为成功,false为失败</returns> | |
|         private static bool SetLocalDateTime(DateTime dt) | |
|         { | |
|             SYSTEMTIME st; | |
|             st.year = (short)dt.Year; | |
|             st.month = (short)dt.Month; | |
|             st.dayOfWeek = (short)dt.DayOfWeek; | |
|             st.day = (short)dt.Day; | |
|             st.hour = (short)dt.Hour; | |
|             st.minute = (short)dt.Minute; | |
|             st.second = (short)dt.Second; | |
|             st.milliseconds = (short)dt.Millisecond; | |
|             bool rt = SetLocalTime(ref st); | |
|             return rt; | |
|         } | |
| 
 | |
| 
 | |
|         public static string[] Prohibit = new string[10] { "S01", "S02", "S03", "S05", "S06", "S07", "SL1", "SL2", "SL3", ""};//禁止操作的指令 | |
|         public static SQLiteHelper SQLiteHelpers = null;  //定义数据库 | |
|         public static readonly string DBAddress = Environment.CurrentDirectory + "\\DataBase\\800COMPUTER.db";  //数据库路径 | |
|         public static async Task Main() | |
|         { | |
|             NetFwManger.AllowPort(7790,"TCP");//开放7790端口 | |
|             TcpService service = new TcpService(); | |
|             service.Connecting = (client, e) => { return EasyTask.CompletedTask; };//有客户端正在连接 | |
|             service.Connected = (client, e) => { return EasyTask.CompletedTask; };//有客户端成功连接 | |
|             service.Closing = (client, e) => { return EasyTask.CompletedTask; };//有客户端正在断开连接,只有当主动断开时才有效。 | |
|             service.Closed = (client, e) => { return EasyTask.CompletedTask; };//有客户端断开连接 | |
|             service.Received = (client, e) => | |
|             { | |
|                 MainWindowViewModel.RX++; | |
|                 string SYSAPI = e.ByteBlock.Span.ToString(Encoding.ASCII).Substring(0,5); | |
|                 string DAT = e.ByteBlock.Span.ToString(Encoding.UTF8).Substring(5); | |
|                 string SYSDAT ="";// = e.ByteBlock.Span.ToString(Encoding.ASCII).Substring(5); | |
|                 string SYSKEY =""; | |
|                 if (DAT.Length >= 16) SYSKEY = DAT.Substring(0,16); | |
|                 if (DAT.Length > 16) SYSDAT = DAT.Substring(16); | |
|                 //LogGing.LogSQLDATA("800", "TcpServer", "API:"+ SYSAPI); | |
|                 if (SYSAPI == "SC800") | |
|                 { | |
|                     Dictionary<string, object> Chart_new = new Dictionary<string, object>();//缓存函数 | |
|                     Chart_new.Add("MACHINE", MainWindowViewModel.S01); | |
|                     Chart_new.Add("GROUP", MainWindowViewModel.S05); | |
|                     Chart_new.Add("SYSKEY", MainWindowViewModel.SYSKEY); | |
|                     Chart_new.Add("TIME", MainWindowViewModel.SYSTime); | |
|                     client.SendAsync("SC800" + "[" + MainWindowViewModel.S01 + "]" + Chart_new.ToJsonString()); | |
|                     MainWindowViewModel.TX++; | |
|                     APILog.DBlog(client.IP,SYSKEY,SYSAPI,SYSDAT);//记录指令 | |
|                 } | |
|                 else if (SYSAPI == "SC810") | |
|                 { | |
|                     if (SYSKEY == MainWindowViewModel.SYSKEY) | |
|                     { | |
|                         try | |
|                         { | |
|                             Dictionary<string, object> WorkOrder_dat; | |
|                             WorkOrder_dat = SerializeConvert.JsonDeserializeFromString<Dictionary<string, object>>(SYSDAT); | |
|                             //WorkOrder_dat.GetValue("WorkOrder"); | |
|                             bool dat_w = SQLDATA.WorkOrder(                                | |
|                                 WorkOrder_dat.GetValue("WorkOrder").ToString(),                                 | |
|                                 WorkOrder_dat.GetValue("ProgramName").ToString(),                                 | |
|                                 WorkOrder_dat.GetValue("StartTime").ToString(),                                 | |
|                                 WorkOrder_dat.GetValue("EndTime").ToString(),                                 | |
|                                 WorkOrder_dat.GetValue("Time").ToString(),                                 | |
|                                 WorkOrder_dat.GetValue("Remark").ToString(),                                 | |
|                                 WorkOrder_dat.GetValue("lock").ToString(),                                | |
|                                 WorkOrder_dat.GetValue("State").ToString(),                                                           | |
|                                 WorkOrder_dat.GetValue("ProgramID").ToString(),                          | |
|                                 WorkOrder_dat.GetValue("color").ToString(),                           | |
|                                 WorkOrder_dat.GetValue("Dyelot").ToString()); | |
|                             if (!dat_w) { client.SendAsync("SC910" + "[" + MainWindowViewModel.S01 + "]" +  | |
|                                 WorkOrder_dat.GetValue("WorkOrder").ToString()); } | |
|                             else { client.SendAsync("SC810" + "[" + MainWindowViewModel.S01 + "]" +  | |
|                                 WorkOrder_dat.GetValue("WorkOrder").ToString()); MainWindowViewModel.TX++; } | |
| 
 | |
|                             APILog.DBlog(client.IP, SYSKEY, SYSAPI, SYSDAT);//记录指令 | |
|                         } | |
|                         catch(Exception ex) | |
|                         { | |
|                             client.SendAsync("SC990" + "[" + MainWindowViewModel.S01 + "]" + ex); | |
|                         } | |
|                     } | |
|                     else { client.SendAsync("SC999"); } | |
|                 }//WorkOrder表信息检查写入 | |
|                 else if (SYSAPI == "SC811") | |
|                 { | |
|                     if (SYSKEY == MainWindowViewModel.SYSKEY) | |
|                     { | |
|                         try | |
|                         { | |
|                             DataTable WorkOrder_dat; | |
|                             WorkOrder_dat = SerializeConvert.JsonDeserializeFromString<DataTable>(SYSDAT); | |
|                             bool dat_w = SQLDATA.WorkOderStep(WorkOrder_dat); | |
|                             if (!dat_w)  | |
|                             { | |
|                                 client.SendAsync("SC911" + "[" + MainWindowViewModel.S01 + "]" + | |
|                                 WorkOrder_dat.Select().First().Field<object>("WorkOrder"));  | |
|                             } | |
|                             else  | |
|                             {  | |
|                                 client.SendAsync("SC811" + "[" + MainWindowViewModel.S01 + "]" + | |
|                                 WorkOrder_dat.Select().First().Field<object>("WorkOrder")); | |
|                                 MainWindowViewModel.TX++; | |
|                             } | |
|                             APILog.DBlog(client.IP, SYSKEY, SYSAPI, SYSDAT);//记录指令 | |
|                         } | |
|                         catch(Exception ex) | |
|                         { | |
|                             client.SendAsync("SC991" + "[" + MainWindowViewModel.S01 + "]" + ex); | |
|                         } | |
|                     } | |
|                     else { client.SendAsync("SC999"); } | |
|                 }//WorkOrderstep表信息检查写入 | |
|                 else if (SYSAPI == "SC813") | |
|                 { | |
|                     if (SYSKEY == MainWindowViewModel.SYSKEY) | |
|                     { | |
|                         try | |
|                         { | |
|                             DataTable Dyelot_dat; | |
|                             Dyelot_dat = SerializeConvert.JsonDeserializeFromString<DataTable>(SYSDAT); | |
|                             bool dat_w = SQLDATA.WorkOderStep(Dyelot_dat); | |
|                             if (!dat_w) | |
|                             { | |
|                                 client.SendAsync("SC913" + "[" + MainWindowViewModel.S01 + "]" + | |
|                                 Dyelot_dat.Select().First().Field<object>("Dyelot")); | |
|                             } | |
|                             else | |
|                             { | |
|                                 client.SendAsync("SC813" + "[" + MainWindowViewModel.S01 + "]" + | |
|                                 Dyelot_dat.Select().First().Field<object>("Dyelot")); | |
|                                 MainWindowViewModel.TX++; | |
|                             } | |
| 
 | |
|                             APILog.DBlog(client.IP, SYSKEY, SYSAPI, SYSDAT);//记录指令 | |
|                         } | |
|                         catch (Exception ex) { client.SendAsync("SC991" + "[" + MainWindowViewModel.S01 + "]" + ex); } | |
|                     } | |
|                     else { client.SendAsync("SC999"); } | |
|                 }//写入领料单 | |
|                 else if (SYSAPI == "SC820") | |
|                 { | |
|                     if (SYSKEY == MainWindowViewModel.SYSKEY) | |
|                     { | |
|                         try | |
|                         { | |
|                             if (SYSDAT.Length == 21) | |
|                             { | |
|                                 SYSDAT = SYSDAT.Substring(1, 19); | |
|                                 DateTime dt; | |
|                                 if (DateTime.TryParse(SYSDAT, out dt)) | |
|                                     SetLocalDateTime(dt); | |
|                             } | |
|                             client.SendAsync("SC820" + "[" + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + "]"); | |
|                             MainWindowViewModel.TX++; | |
|                             APILog.DBlog(client.IP, SYSKEY, SYSAPI, SYSDAT);//记录指令 | |
|                         } | |
|                         catch (Exception ex) { client.SendAsync("SC920" + "[" + MainWindowViewModel.S01 + "]" + ex); } | |
|                     } | |
|                     else { client.SendAsync("SC999"); } | |
|                 }//设置系统时间 | |
|                 else if (SYSAPI == "SC821") | |
|                 { | |
|                     if (SYSKEY == MainWindowViewModel.SYSKEY) | |
|                     { | |
|                         try | |
|                         { | |
|                             Dictionary<string, object> dat_821; | |
|                             dat_821 = SerializeConvert.JsonDeserializeFromString<Dictionary<string, object>>(SYSDAT); | |
|                             if (dat_821.GetValue("INSTRUCTION").ToString() == "START") | |
|                             { | |
|                                 SQLDATA.TechnologicalProcess_START(dat_821.GetValue("ProgramID").ToString()); | |
| 
 | |
|                                 client.SendAsync("SC821" + SYSKEY + SYSDAT); | |
|                             } | |
|                             else if (dat_821.GetValue("INSTRUCTION").ToString() == "STOP") | |
|                             { | |
|                                 MainWindowViewModel.WORK_RUN = 0;//停止 | |
|                                 MainWindowViewModel.DIDETime = 0; | |
| 
 | |
|                                 client.SendAsync("SC821" + SYSKEY + SYSDAT); | |
|                             } | |
|                             else if (dat_821.GetValue("INSTRUCTION").ToString() == "PAUSE") | |
|                             { | |
|                                 MainWindowViewModel.WORK_RUN = 1;//暂停 | |
|  | |
|                                 client.SendAsync("SC821" + SYSKEY + SYSDAT); | |
|                             } | |
|                             else if (dat_821.GetValue("INSTRUCTION").ToString() == "CONTINUE") | |
|                             { | |
|                                 MainWindowViewModel.WORK_RUN = 2;// | |
|                                                                  //        | |
|                                 client.SendAsync("SC821" + SYSKEY + SYSDAT); | |
|                             } | |
|                             else if (dat_821.GetValue("INSTRUCTION").ToString() == "JUMP") | |
|                             { | |
|                                 MainWindowViewModel.RUN_DATATABLE = MainWindowViewModel.dt_TP;//缓存表 | |
|                                 MainWindowViewModel.RUN_STEPID = Convert.ToInt16(dat_821.GetValue("ID").ToString());//插入步骤号                              | |
|                                 MainWindowViewModel.STEP_START(dat_821.GetValue("Numder").ToString(), Convert.ToDouble(dat_821.GetValue("P1")), | |
|                                     Convert.ToDouble(dat_821.GetValue("P2")), Convert.ToDouble(dat_821.GetValue("P3")), | |
|                                     Convert.ToDouble(dat_821.GetValue("P4")), Convert.ToDouble(dat_821.GetValue("P5"))); | |
|                             } | |
|                             else if (dat_821.GetValue("INSTRUCTION").ToString() == "INSERT") | |
|                             { | |
|                                 int d = Convert.ToInt16(dat_821.GetValue("ID")); | |
|                                 SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径 | |
|                                 SQLiteHelpers.Open();  //打开数据库 | |
|                                 /**插入行**/ | |
|                                 string ProgramID = SQLiteHelpers.ExecuteScalar("select ProgramID from RUN where Step = '1'", null).ToString(); | |
|                                 string ProgramNAME = SQLiteHelpers.ExecuteScalar("select Program from RUN where Step = '1'", null).ToString(); | |
|                                 // TechnologicalProcessView.SQLiteHelpers.Close(); | |
|                                 DataRow dr = MainWindowViewModel.dt_TP.NewRow();//添加表数据            | |
|                                 dr["ProgramID"] = ProgramID; | |
|                                 dr["Program"] = ProgramNAME; | |
|                                 MainWindowViewModel.dt_TP.Rows.InsertAt(dr, d - 1); | |
|                                 /**编辑行号**/ | |
|                                 TechnologicalProcessView.Dat(); | |
|                                 /**编辑行信息**/ | |
|                                 DataRow drtt = MainWindowViewModel.dt_TP.Rows[d - 1]; | |
|                                 drtt.BeginEdit(); | |
|                                 drtt["StepID"] = dat_821.GetValue("StepID").ToString(); | |
|                                 drtt["StepName"] = dat_821.GetValue("StepName").ToString(); | |
|                                 drtt["ParameterName"] = dat_821.GetValue("ParameterName").ToString(); | |
|                                 drtt["Parameter1"] = dat_821.GetValue("Parameter1").ToString(); | |
|                                 drtt["Parameter2"] = dat_821.GetValue("Parameter2").ToString(); | |
|                                 drtt["Parameter3"] = dat_821.GetValue("Parameter3").ToString(); | |
|                                 drtt["Parameter4"] = dat_821.GetValue("Parameter4").ToString(); | |
|                                 drtt["Parameter5"] = dat_821.GetValue("Parameter5").ToString(); | |
| 
 | |
|                                 drtt["RUN"] = "0"; | |
|                                 drtt["DYELOT"] = MainWindowViewModel.WorkNumder; | |
|                                 drtt.EndEdit(); | |
| 
 | |
|                                 //    var _TechnologicalProcessView = Application.Current.Windows.Cast<UserControl>().FirstOrDefault(window => window is TechnologicalProcessView) as TechnologicalProcessView;//跨页面 | |
|                                 //    _TechnologicalProcessView.Grid.ItemsSource = TechnologicalProcessView.sql.Tables[0].DefaultView; | |
|                                 //_TechnologicalProcessView.Grid.SelectedIndex = -1; | |
|                                 /**存入信息**/ | |
|                                 /**存入信息**/ | |
|                              //   SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径 | |
|                             //    SQLiteHelpers.Open();  //打开数据库 | |
|                                 SQLiteHelpers.Delete("RUN", null, null); | |
|                                 DataTable data_t = MainWindowViewModel.dt_TP.Clone(); | |
|                                 for (int i = 0; i < MainWindowViewModel.dt_TP.Rows.Count; i++) | |
|                                 { | |
|                                     data_t.Clear();//清空 | |
|  | |
|                                     DataRow dt = MainWindowViewModel.dt_TP.Rows[i];//行转换 | |
|                                     DataRow drT = data_t.NewRow(); | |
|                                     drT.ItemArray = dt.ItemArray; | |
|                                     data_t.Rows.InsertAt(drT, 0); | |
|                                     drT.BeginEdit(); //添加订单号 | |
|                                     drT["DYELOT"] = MainWindowViewModel.WorkNumder; | |
|                                     drT.EndEdit(); | |
| 
 | |
|                                     SQLiteHelpers.InsertData("RUN", SQLiteHelpers.DataTableToDictionary(data_t));//行插入                                                                                      | |
|                                 } | |
|                                 SQLiteHelpers.Close();  //关闭连接 | |
|  | |
|                                 client.SendAsync("SC831" + "[" + MainWindowViewModel.S01 + "]" + MainWindowViewModel.dt_TP.ToJsonString()); | |
|                                 MainWindowViewModel.TX++; | |
|                             }//插入 | |
|                             else if (dat_821.GetValue("INSTRUCTION").ToString() == "EDIT") | |
|                             { | |
|                                 int n = Convert.ToInt16(dat_821.GetValue("ID").ToString()); | |
|                                 /**编辑行信息**/ | |
|                                 DataRow dr = MainWindowViewModel.dt_TP.Rows[n - 1]; | |
|                                 dr.BeginEdit(); | |
|                                 dr["StepID"] = dat_821.GetValue("StepID").ToString(); | |
|                                 dr["StepName"] = dat_821.GetValue("StepName").ToString(); | |
|                                 dr["ParameterName"] = dat_821.GetValue("ParameterName").ToString(); | |
|                                 dr["Parameter1"] = dat_821.GetValue("Parameter1").ToString(); | |
|                                 dr["Parameter2"] = dat_821.GetValue("Parameter2").ToString(); | |
|                                 dr["Parameter3"] = dat_821.GetValue("Parameter3").ToString(); | |
|                                 dr["Parameter4"] = dat_821.GetValue("Parameter4").ToString(); | |
|                                 dr["Parameter5"] = dat_821.GetValue("Parameter5").ToString(); | |
|                                 dr.EndEdit(); | |
| 
 | |
|                                 var _TechnologicalProcessView = Application.Current.Windows.Cast<UserControl>().FirstOrDefault(window => window is TechnologicalProcessView) as TechnologicalProcessView;//跨页面 | |
|                                                                                                                                                                                                          //    _TechnologicalProcessView.Grid.ItemsSource = TechnologicalProcessView.sql.Tables[0].DefaultView; | |
|                                 _TechnologicalProcessView.GridSTEP.SelectedIndex = -1; | |
|                                 /**存入信息**/ | |
|                                 SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径 | |
|                                 SQLiteHelpers.Open();  //打开数据库 | |
|                                 SQLiteHelpers.Delete("RUN", null, null); | |
|                                 DataTable data_t = MainWindowViewModel.dt_TP.Clone(); | |
|                                 for (int i = 0; i < MainWindowViewModel.dt_TP.Rows.Count; i++) | |
|                                 { | |
|                                     data_t.Clear();//清空 | |
|  | |
|                                     DataRow dt = MainWindowViewModel.dt_TP.Rows[i];//行转换 | |
|                                     DataRow drT = data_t.NewRow(); | |
|                                     drT.ItemArray = dt.ItemArray; | |
|                                     data_t.Rows.InsertAt(drT, 0); | |
|                                     drT.BeginEdit(); //添加订单号 | |
|                                     drT["DYELOT"] = MainWindowViewModel.WorkNumder; | |
|                                     drT.EndEdit(); | |
| 
 | |
|                                     SQLiteHelpers.InsertData("RUN", SQLiteHelpers.DataTableToDictionary(data_t));//行插入                                                                                      | |
|                                 } | |
|                                 SQLiteHelpers.Close();  //关闭连接 | |
|  | |
|                                 client.SendAsync("SC831" + "[" + MainWindowViewModel.S01 + "]" + MainWindowViewModel.dt_TP.ToJsonString()); | |
|                                 MainWindowViewModel.TX++; | |
|                             }//编辑 | |
|                             else if (dat_821.GetValue("INSTRUCTION").ToString() == "DELETE") | |
|                             { | |
|                                 int d = Convert.ToInt16(dat_821.GetValue("ID")); | |
|                                 MainWindowViewModel.dt_TP.Rows.RemoveAt(d - 1); | |
|                                 TechnologicalProcessView.Dat(); | |
|                                 /**存入信息**/ | |
|                                 SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径                                 | |
|                                 SQLiteHelpers.Open();  //打开数据库                                 | |
|                                 SQLiteHelpers.Delete("RUN", null, null); | |
|                                 DataTable data_t = MainWindowViewModel.dt_TP.Clone(); | |
|                                 for (int i = 0; i < MainWindowViewModel.dt_TP.Rows.Count; i++) | |
|                                 { | |
|                                     data_t.Clear();//清空 | |
|  | |
|                                     DataRow dt = MainWindowViewModel.dt_TP.Rows[i];//行转换 | |
|                                     DataRow drT = data_t.NewRow(); | |
|                                     drT.ItemArray = dt.ItemArray; | |
|                                     data_t.Rows.InsertAt(drT, 0); | |
|                                     drT.BeginEdit(); //添加订单号 | |
|                                     drT["DYELOT"] = MainWindowViewModel.WorkNumder; | |
|                                     drT.EndEdit(); | |
| 
 | |
|                                     SQLiteHelpers.InsertData("RUN", SQLiteHelpers.DataTableToDictionary(data_t));//行插入                                                                                      | |
|                                 } | |
|                                 SQLiteHelpers.Close();  //关闭连接                                                                      | |
|  | |
|                                 client.SendAsync("SC831" + "[" + MainWindowViewModel.S01 + "]" + MainWindowViewModel.dt_TP.ToJsonString()); | |
|                                 MainWindowViewModel.TX++; | |
|                             }//删除 | |
|                             else | |
|                             { | |
|                                 client.SendAsync("SC821" + SYSKEY + SYSDAT); | |
|                             } | |
|                             APILog.DBlog(client.IP, SYSKEY, SYSAPI, SYSDAT);//记录指令 | |
|                         } | |
|                         catch (Exception ex) { client.SendAsync("SC921" + "[" + MainWindowViewModel.S01 + "]" + ex); } | |
|                     } | |
|                     else { client.SendAsync("SC999"); } | |
|                 }//启停跳步指令 | |
|                 else if (SYSAPI == "SC830") | |
|                 { | |
|                     if (SYSKEY == MainWindowViewModel.SYSKEY) | |
|                     { | |
|                         try { | |
|                             Dictionary<string, object> Chart_new = new Dictionary<string, object>();//缓存函数 | |
|                             Chart_new.Add("Status", MainWindowViewModel.StatusStr); | |
|                             Chart_new.Add("Machine", MainWindowViewModel.S01); | |
|                             Chart_new.Add("WorkNumder", MainWindowViewModel.WorkNumder); | |
|                             Chart_new.Add("Time", MainWindowViewModel.SYSTime); | |
|                             Chart_new.Add("Process", MainWindowViewModel.ProgramName); | |
|                             Chart_new.Add("Step", MainWindowViewModel.Process_step); | |
|                             Chart_new.Add("MST", MainWindowViewModel.TEMP_co); | |
|                             Chart_new.Add("MTT", MainWindowViewModel.Selet_dtm("1010")); | |
|                             Chart_new.Add("MTL", MainWindowViewModel.Selet_dtm("1015")); | |
|                             Chart_new.Add("MTH", MainWindowViewModel.Selet_dtm("1009")); | |
|                             Chart_new.Add("MUT", MainWindowViewModel.Selet_dtm("1011")); | |
|                             Chart_new.Add("STTA", MainWindowViewModel.Selet_dtm("1012")); | |
|                             Chart_new.Add("STLA", MainWindowViewModel.Selet_dtm("1017")); | |
|                             Chart_new.Add("STTB", MainWindowViewModel.Selet_dtm("1013")); | |
|                             Chart_new.Add("STLB", MainWindowViewModel.Selet_dtm("1018")); | |
|                             Chart_new.Add("STTC", MainWindowViewModel.Selet_dtm("1014")); | |
|                             Chart_new.Add("STLC", MainWindowViewModel.Selet_dtm("1019")); | |
|                             client.SendAsync("SC830" + "[" + MainWindowViewModel.S01 + "]" + Chart_new.ToJsonString()); | |
|                             MainWindowViewModel.TX++; | |
|                         } | |
|                         catch (Exception ex) { client.SendAsync("SC931" + "[" + MainWindowViewModel.S01 + "]" + ex); } | |
|                     } | |
|                     else { client.SendAsync("SC999"); } | |
|                 }//当前信息 | |
|                 else if (SYSAPI == "SC831") | |
|                 { | |
|                     if (SYSKEY == MainWindowViewModel.SYSKEY) | |
|                     { | |
|                         try | |
|                         { | |
|                             client.SendAsync("SC831" + "[" + MainWindowViewModel.S01 + "]" + MainWindowViewModel.dt_TP.ToJsonString()); | |
|                             MainWindowViewModel.TX++; | |
|                         } | |
|                         catch (Exception ex) { client.SendAsync("SC931" + "[" + MainWindowViewModel.S01 + "]" + ex); } | |
|                     } | |
|                     else { client.SendAsync("SC999"); } | |
|                 }//当前工作表 | |
|                 else if (SYSAPI == "SC832") | |
|                 { | |
|                     if (SYSKEY == MainWindowViewModel.SYSKEY) | |
|                     { | |
|                         try | |
|                         { client.SendAsync("SC832" + "[" + MainWindowViewModel.S01 + "]" + MainWindowViewModel.SYSlog); | |
|                             MainWindowViewModel.TX++; | |
|                         } | |
|                         catch (Exception ex) { client.SendAsync("SC932" + "[" + MainWindowViewModel.S01 + "]" + ex); } | |
|                     } | |
|                     else { client.SendAsync("SC999"); } | |
|                 }//当前细节信息 | |
|                 else if (SYSAPI == "SC833") | |
|                 { | |
|                     if (SYSKEY == MainWindowViewModel.SYSKEY) | |
|                     { | |
|                         try | |
|                         { | |
|                             SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径 | |
|                             SQLiteHelpers.Open();  //打开数据库 | |
|                             string sql_script = "select * from Dyelot where WorkOrder = '" + MainWindowViewModel.WorkNumder + "'"; | |
|                             DataTable dt = SQLiteHelpers.ExecuteDataSet(sql_script, null).Tables[0];  //转换 | |
|                             SQLiteHelpers.Close();  //关闭连接 | |
|  | |
|                             client.SendAsync("SC833" + "[" + MainWindowViewModel.S01 + "]" + dt.ToJsonString()); | |
|                             MainWindowViewModel.TX++; | |
|                         } | |
|                         catch (Exception ex) { client.SendAsync("SC933" + "[" + MainWindowViewModel.S01 + "]" + ex); } | |
|                     } | |
|                     else { client.SendAsync("SC999"); } | |
|                 }//当前领料单 | |
|                 else if (SYSAPI == "SC851") | |
|                 { | |
|                     if (SYSKEY == MainWindowViewModel.SYSKEY) | |
|                     { | |
|                         try | |
|                         { | |
|                             client.SendAsync("SC851" + "[" + MainWindowViewModel.S01 + "]" + JsonConvert.SerializeObject(MainWindowViewModel.dt_d));//数字开关信息 | |
|                         } | |
|                         catch (Exception ex) { client.SendAsync("SC951" + "[" + MainWindowViewModel.S01 + "]" + ex); } | |
|                     } | |
|                     else { client.SendAsync("SC999"); } | |
|                 }//数字开关表 | |
|                 else if (SYSAPI == "SC852") | |
|                 { | |
|                     if (SYSKEY == MainWindowViewModel.SYSKEY) | |
|                     { | |
|                         try | |
|                         { | |
|                             client.SendAsync("SC852" + "[" + MainWindowViewModel.S01 + "]" + MainWindowViewModel.dt_a.ToJsonString());//寄存器信息 | |
|                         } | |
|                         catch (Exception ex) { client.SendAsync("SC952" + "[" + MainWindowViewModel.S01 + "]" + ex); } | |
|                     } | |
|                     else { client.SendAsync("SC999"); } | |
|                 }//寄存器表  | |
|                 else if (SYSAPI == "SC853") | |
|                 { | |
|                     if (SYSKEY == MainWindowViewModel.SYSKEY) | |
|                     { | |
|                         try | |
|                         { | |
|                             client.SendAsync("SC853" + "[" + MainWindowViewModel.S01 + "]" + MainWindowViewModel.dt_m.ToJsonString());//缓存信息 | |
|                         } | |
|                         catch (Exception ex) { client.SendAsync("SC953" + "[" + MainWindowViewModel.S01 + "]" + ex); } | |
|                     } | |
|                     else { client.SendAsync("SC999"); } | |
|                 }//缓存表 | |
|                 else if (SYSAPI == "SC854") | |
|                 { | |
|                     if (SYSKEY == MainWindowViewModel.SYSKEY) | |
|                     { | |
|                         try | |
|                         { | |
|                             client.SendAsync("SC854" + "[" + MainWindowViewModel.S01 + "]" + MainWindowViewModel.dt_ParameterSet.ToJsonString());//缓存信息 | |
|  | |
|                             APILog.DBlog(client.IP, SYSKEY, SYSAPI, SYSDAT);//记录指令                                                                             | |
|                         } | |
|                         catch (Exception ex) { client.SendAsync("SC954" + "[" + MainWindowViewModel.S01 + "]" + ex); } | |
|                     } | |
|                     else { client.SendAsync("SC999"); } | |
|                 }//程序设置表 | |
|                 else if (SYSAPI == "SC855") | |
|                 { | |
|                     if (SYSKEY == MainWindowViewModel.SYSKEY) | |
|                     { | |
|                         try | |
|                         { | |
|                             client.SendAsync("SC855" + "[" + MainWindowViewModel.S01 + "]" + MainWindowViewModel.dt_SysSet.ToJsonString());//缓存信息 | |
|                             APILog.DBlog(client.IP, SYSKEY, SYSAPI, SYSDAT);//记录指令 | |
|                         } | |
|                         catch (Exception ex) { client.SendAsync("SC955" + "[" + MainWindowViewModel.S01 + "]" + ex); } | |
|                     } | |
|                     else { client.SendAsync("SC999"); } | |
|                 }//系统设置表 | |
|                 else if (SYSAPI == "SC861") | |
|                 { | |
|                     if (SYSKEY == MainWindowViewModel.SYSKEY) | |
|                     { | |
|                         try | |
|                         { | |
|                             Dictionary<string, object> dat_861; | |
|                             dat_861 = SerializeConvert.JsonDeserializeFromString<Dictionary<string, object>>(SYSDAT); | |
| 
 | |
|                             Dictionary<string, object> datagrid_v = new Dictionary<string, object>();//缓存函数 | |
|                             datagrid_v.Add("Value", dat_861.GetValue("Value"));  | |
|                              | |
|                             SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径 | |
|                             SQLiteHelpers.Open();  //打开数据库 | |
|                             SQLiteHelpers.Update("Parameters", datagrid_v, "ParameterID ='" + dat_861.GetValue("ID") + "'", null);//更新 | |
|                             MainWindowViewModel.dt_ParameterSet = SQLiteHelpers.ExecuteDataSet("select * from Parameters order by ParameterID asc", null).Tables[0]; | |
|                             SQLiteHelpers.Close();//关闭数据库 | |
|  | |
|                             client.SendAsync("SC854" + "[" + MainWindowViewModel.S01 + "]" + MainWindowViewModel.dt_ParameterSet.ToJsonString());//缓存信息 | |
|  | |
|                             APILog.DBlog(client.IP, SYSKEY, SYSAPI, SYSDAT);//记录指令 | |
|                         } | |
|                         catch (Exception ex) | |
|                         {  | |
|                             client.SendAsync("SC961" + "[" + MainWindowViewModel.S01 + "]" + ex);  | |
|                         } | |
|                     } | |
|                     else { client.SendAsync("SC999"); } | |
|                 }//修改软件设置 | |
|                 else if (SYSAPI == "SC862") | |
|                 { | |
|                     if (SYSKEY == MainWindowViewModel.SYSKEY) | |
|                     { | |
|                         try | |
|                         { | |
|                             Dictionary<string, object> dat_862; | |
|                             dat_862 = SerializeConvert.JsonDeserializeFromString<Dictionary<string, object>>(SYSDAT); | |
| 
 | |
|                             if (((IList)Prohibit).Contains(dat_862.GetValue("ID")))//是否允许操作 | |
|                             { | |
|                                 client.SendAsync("SC980" + "[" + MainWindowViewModel.S01 + "]" + "Settings that are not allowed to be modified remotely"); | |
|                             } | |
|                             else | |
|                             { | |
|                                 Dictionary<string, object> datagrid_v = new Dictionary<string, object>();//缓存函数 | |
|                                 datagrid_v.Add("Value", dat_862.GetValue("Value")); | |
| 
 | |
|                                 SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径 | |
|                                 SQLiteHelpers.Open();  //打开数据库 | |
|                                 SQLiteHelpers.Update("System", datagrid_v, "ParameterID ='" + dat_862.GetValue("ID") + "'", null);//更新 | |
|                                 MainWindowViewModel.dt_SysSet = SQLiteHelpers.ExecuteDataSet("select * from System order by ParameterID asc", null).Tables[0]; | |
|                                 SQLiteHelpers.Close();//关闭数据库 | |
|  | |
|                                 client.SendAsync("SC855" + "[" + MainWindowViewModel.S01 + "]" + MainWindowViewModel.dt_SysSet.ToJsonString());//缓存信息 | |
|  | |
|                                 APILog.DBlog(client.IP, SYSKEY, SYSAPI, SYSDAT);//记录指令 | |
|                             } | |
|                         } | |
|                         catch (Exception ex) | |
|                         {  | |
|                             client.SendAsync("SC962" + "[" + MainWindowViewModel.S01 + "]" + ex);  | |
|                         } | |
|                     } | |
|                     else { client.SendAsync("SC999"); } | |
|                 }//修改系统 | |
|  | |
|                 return EasyTask.CompletedTask; | |
|             }; | |
| 
 | |
|             await service.SetupAsync(new TouchSocketConfig()//载入配置 | |
|                 .SetMaxBufferSize(1024 * 1024) | |
|                 .SetMinBufferSize(1024 * 64) | |
|                 .SetListenIPHosts(new IPHost[] { new IPHost("tcp://127.0.0.1:7789"), new IPHost(7790) })//同时监听两个地址 | |
|                 .ConfigureContainer(a =>//容器的配置顺序应该在最前面 | |
|                 { | |
|                     //a.AddConsoleLogger();//添加一个控制台日志注入(注意:在maui中控制台日志不可用) | |
|                 }) | |
|                 .ConfigurePlugins(a => | |
|                 { | |
|                     //a.Add<DifferentProtocolPlugin>(); | |
|                 }) | |
|                 ); | |
|             await service.StartAsync();//启动 | |
|  | |
|             LogGing.LogGingDATA("800SREVER:START"); | |
|         } | |
|     } | |
| 
 | |
|     class MyTcpService : TcpService<MyTcpSessionClient> | |
|     { | |
|         protected override MyTcpSessionClient NewClient() | |
|         { | |
|             return new MyTcpSessionClient(); | |
|         } | |
|     } | |
| 
 | |
|     class MyTcpSessionClient : TcpSessionClient | |
|     { | |
|         internal void SetDataHandlingAdapter(SingleStreamDataHandlingAdapter adapter) | |
|         { | |
|             base.SetAdapter(adapter); | |
|         } | |
|     } | |
| 
 | |
|     /// <summary> | |
|     /// 此插件实现,按照不同端口,使用不同适配器。 | |
|     /// <list type="bullet"> | |
|     /// <item>7789端口:使用"**"结尾的数据</item> | |
|     /// <item>7790端口:使用"##"结尾的数据</item> | |
|     /// </list> | |
|     /// </summary> | |
|     internal class DifferentProtocolPlugin : PluginBase, ITcpConnectingPlugin, ITcpReceivedPlugin | |
|     { | |
|         public async Task OnTcpConnecting(ITcpSession client, ConnectingEventArgs e) | |
|         { | |
|             if (client is MyTcpSessionClient sessionClient) | |
|             { | |
|                 if (sessionClient.ServicePort == 7789) | |
|                 { | |
|                     sessionClient.SetDataHandlingAdapter(new TerminatorPackageAdapter("**")); | |
|                 } | |
|                 else | |
|                 { | |
|                     sessionClient.SetDataHandlingAdapter(new TerminatorPackageAdapter("##")); | |
|                 } | |
|             } | |
| 
 | |
|             await e.InvokeNext(); | |
|         } | |
| 
 | |
|         public async Task OnTcpReceived(ITcpSession client, ReceivedDataEventArgs e) | |
|         { | |
|             //如果是自定义适配器,此处解析时,可以判断e.RequestInfo的类型 | |
|  | |
|             if (client is ITcpSessionClient sessionClient) | |
|             { | |
|                 sessionClient.Logger.Info($"{sessionClient.GetIPPort()}收到数据,服务器端口:{sessionClient.ServicePort},数据:{e.ByteBlock}"); | |
|             } | |
| 
 | |
|             await e.InvokeNext(); | |
|         } | |
|     } | |
| } | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 |