using DyeingComputer.UserClass; using DyeingComputer.View; using DyeingComputer.ViewModel; using Newtonsoft.Json; using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Diagnostics; using System.Linq; using System.Net; using System.Net.Http; using System.Net.Sockets; using System.Reflection.Emit; using System.Runtime.InteropServices; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using TouchSocket.Core; using TouchSocket.Sockets; using static DyeingComputer.UserClass.SqliteHelper; using static System.Net.WebRequestMethods; using static System.Windows.Forms.AxHost; using static System.Windows.Forms.VisualStyles.VisualStyleElement; using static System.Windows.Forms.VisualStyles.VisualStyleElement.Button; using static System.Windows.Forms.VisualStyles.VisualStyleElement.TaskbarClock; namespace DyeingComputer.UserClass {/// /// 异步TCP服务器 /// 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; } /// /// 设置系统时间 /// /// 需要设置的时间 /// 返回系统时间设置状态,true为成功,false为失败 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(7789, "TCP");//开放7790端口 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 Chart_new = new Dictionary();//缓存函数 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 WorkOrder_dat; WorkOrder_dat = SerializeConvert.JsonDeserializeFromString>(SYSDAT); //WorkOrder_dat.GetValue("WorkOrder"); object i = MainWindow.SQLiteHelpers.ExecuteScalar("select * from WorkOrder where WorkOrder = " + WorkOrder_dat.GetValue("WorkOrder").ToString(), null); if (i != null) { client.SendAsync("SC910" + "[" + MainWindowViewModel.S01 + "]" + WorkOrder_dat.GetValue("WorkOrder").ToString()); } else { client.SendAsync("SC810" + "[" + MainWindowViewModel.S01 + "]" + WorkOrder_dat.GetValue("WorkOrder").ToString()); MainWindowViewModel.TX++; } MainWindow.SQLiteHelpers.InsertData("WorkOrder", WorkOrder_dat); 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(SYSDAT); bool dat_w = SQLDATA.WorkOderStep(WorkOrder_dat); if (!dat_w) { client.SendAsync("SC911" + "[" + MainWindowViewModel.S01 + "]" + WorkOrder_dat.Select().First().Field("WorkOrder")); } else { client.SendAsync("SC811" + "[" + MainWindowViewModel.S01 + "]" + WorkOrder_dat.Select().First().Field("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 == "SC812") { if (SYSKEY == MainWindowViewModel.SYSKEY) { try { Dictionary WorkOrder_dat; WorkOrder_dat = SerializeConvert.JsonDeserializeFromString>(SYSDAT); MainWindow.SQLiteHelpers.InsertData("WorkorderSet", WorkOrder_dat);//行插入 client.SendAsync("SC812" + "[" + MainWindowViewModel.S01 + "]" + WorkOrder_dat.GetValue("WorkOrder").ToString()); MainWindowViewModel.TX++; APILog.DBlog(client.IP, SYSKEY, SYSAPI, SYSDAT);//记录指令 } catch (Exception ex) { client.SendAsync("SC992" + "[" + MainWindowViewModel.S01 + "]" + ex); } } else { client.SendAsync("SC999"); } }//WorkOrderset表信息检查写入 else if (SYSAPI == "SC813") { if (SYSKEY == MainWindowViewModel.SYSKEY) { try { DataTable Dyelot_dat; Dyelot_dat = SerializeConvert.JsonDeserializeFromString(SYSDAT); bool dat_w = SQLDATA.Dyelot(Dyelot_dat); if (!dat_w) { client.SendAsync("SC913" + "[" + MainWindowViewModel.S01 + "]" + Dyelot_dat.Select().First().Field("Dyelot")); } else { client.SendAsync("SC813" + "[" + MainWindowViewModel.S01 + "]" + Dyelot_dat.Select().First().Field("Dyelot")); MainWindowViewModel.TX++; } APILog.DBlog(client.IP, SYSKEY, SYSAPI, SYSDAT);//记录指令 } catch (Exception ex) { client.SendAsync("SC993" + "[" + 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 dat_821; dat_821 = SerializeConvert.JsonDeserializeFromString>(SYSDAT); if (dat_821.GetValue("INSTRUCTION").ToString() == "START") { MainWindowViewModel.Dyelot_dat = MainWindow.SQLiteHelpers.ExecuteDataSet("select * from Dyelot where ReDye=0 AND WorkOrder = '" + dat_821.GetValue("WorkOrder").ToString() + "'", null).Tables[0]; var DT_Set = MainWindow.SQLiteHelpers.ExecuteDataSet("select * from WorkOrderSet where WorkOrder = '" + dat_821.GetValue("WorkOrder").ToString() + "'", null).Tables[0].Rows[0]; MainWindowViewModel.Updata_dtm("1020", DT_Set.Field("PumpSpeed")); MainWindowViewModel.Updata_dtm("1030", DT_Set.Field("Swing")); MainWindowViewModel.Updata_dtm("1021", DT_Set.Field("Blower")); MainWindowViewModel.Updata_dtm("1025", DT_Set.Field("ClothWheel")); MainWindowViewModel.Updata_dtm("1026", DT_Set.Field("ClothWheel")); MainWindowViewModel.Updata_dtm("1027", DT_Set.Field("ClothWheel")); MainWindowViewModel.Updata_dtm("1028", DT_Set.Field("ClothWheel")); MainWindowViewModel.Updata_dtm("1029", DT_Set.Field("ClothWheel")); MainWindowViewModel.Updata_dtm("1035", DT_Set.Field("ClothWheel")); MainWindowViewModel.Updata_dtm("1036", DT_Set.Field("ClothWheel")); MainWindowViewModel.Updata_dtm("1037", DT_Set.Field("ClothWheel")); MainWindowViewModel.Updata_dtm("1038", DT_Set.Field("ClothWheel")); MainWindowViewModel.Updata_dtm("1039", DT_Set.Field("ClothWheel")); MainWindowViewModel.Updata_dtm("1040", DT_Set.Field("ClothWheel")); MainWindowViewModel.Updata_dtm("1041", DT_Set.Field("ClothWheel")); DataTable WorkorderSteps = MainWindow.SQLiteHelpers.ExecuteDataSet( "select * from WorkorderSteps where ReDye=0 AND WorkOrder='" + dat_821.GetValue("WorkOrder").ToString() + "'", null).Tables[0]; //读取表写入缓存 DataTable Workorder = MainWindow.SQLiteHelpers.ExecuteDataSet( "select * from Workorder where ReDye=0 AND WorkOrder='" + dat_821.GetValue("WorkOrder").ToString() + "'", null).Tables[0]; //读取表写入缓存 MainWindowViewModel.ProgramName = Workorder.Rows[0].Field("ProgramName"); MainWindowViewModel.WorkNumder = Workorder.Rows[0].Field("WorkOrder"); MainWindow.SQLiteHelpers.Delete("RUN", null, null); //删除run信息 for (int i = 0; i < WorkorderSteps.Rows.Count; i++) { DataRow dr = WorkorderSteps.Rows[i];//行转 MainWindow.SQLiteHelpers.InsertData("RUN", MainWindow.SQLiteHelpers.ToDictionary(dr));//行插入 } Dictionary updata_temp = new Dictionary();//缓存函数 updata_temp.Add("State", 205); MainWindow.SQLiteHelpers.Update("WorkOrder", updata_temp, "WorkOrder='" + dat_821.GetValue("WorkOrder").ToString() + "'", null); updata_temp.Clear(); //使用前清缓存 updata_temp.Add("RUN", 1); MainWindow.SQLiteHelpers.Update("RUN", updata_temp, "Step=1", null); //SQLiteHelpers.Close(); //关闭连接 /*触发启动*/ string Numder = WorkorderSteps.Select("Step = 1").First().Field("StepID");// double P1 = WorkorderSteps.Select("Step = 1").First().Field("Parameter1"); double P2 = WorkorderSteps.Select("Step = 1").First().Field("Parameter2"); double P3 = WorkorderSteps.Select("Step = 1").First().Field("Parameter3"); double P4 = WorkorderSteps.Select("Step = 1").First().Field("Parameter4"); double P5 = WorkorderSteps.Select("Step = 1").First().Field("Parameter5"); MainWindowViewModel.RUN_STEPID = Convert.ToInt16(1);//插入步骤号 MainWindowViewModel.STEP_START(Numder, Convert.ToDouble(P1), Convert.ToDouble(P2), Convert.ToDouble(P3), Convert.ToDouble(P4), Convert.ToDouble(P5)); MainWindowViewModel.WORK_RUN = 2; APILog.LOGlog(MainWindowViewModel.WorkNumder.ToString(), "CentralControl", "START", "STEP = " + MainWindowViewModel.RUN_STEPID + ";StepID=" + Numder + ";P1=" + P1 + ";P2=" + P2 + ";P3=" + P3 + ";P4=" + P4 + ";P5=" + P5); client.SendAsync("SC821" + SYSKEY + SYSDAT); } else if (dat_821.GetValue("INSTRUCTION").ToString() == "STOP") { MainWindowViewModel.WORK_RUN = 0;//停止 MainWindowViewModel.DIDETime = 0; APILog.LOGlog(MainWindowViewModel.WorkNumder.ToString(), "CentralControl", "STOP", MainWindowViewModel.WorkNumder.ToString()); client.SendAsync("SC821" + SYSKEY + SYSDAT); }//停止 else if (dat_821.GetValue("INSTRUCTION").ToString() == "PAUSE") { MainWindowViewModel.WORK_RUN = 1;//暂停 MainWindowViewModel.errTabler.Clear(); APILog.LOGlog(MainWindowViewModel.WorkNumder.ToString(), "CentralControl", "PAUSE", MainWindowViewModel.WorkNumder.ToString()); client.SendAsync("SC821" + SYSKEY + SYSDAT); }//暂停 else if (dat_821.GetValue("INSTRUCTION").ToString() == "CONTINUE") { MainWindowViewModel.errTabler.Clear(); MainWindowViewModel.WORK_RUN = 2;//PAUSE APILog.LOGlog(MainWindowViewModel.WorkNumder.ToString(), "CentralControl", "CONTINUE", MainWindowViewModel.WorkNumder.ToString()); client.SendAsync("SC821" + SYSKEY + SYSDAT); }//运行 else if (dat_821.GetValue("INSTRUCTION").ToString() == "JUMP") { MainWindowViewModel.RUN_STEPID = Convert.ToInt16(dat_821.GetValue("ID"));//步骤号 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"))); APILog.LOGlog(MainWindowViewModel.WorkNumder.ToString(), "CentralControl", "JUMP", "STEP = " + MainWindowViewModel.RUN_STEPID + ";"+dat_821.GetValue("Numder").ToString()+";P1="+ Convert.ToDouble(dat_821.GetValue("P1")) + ";P2=" + Convert.ToDouble(dat_821.GetValue("P2")) + ";P3=" + Convert.ToDouble(dat_821.GetValue("P3")) + ";P4=" + Convert.ToDouble(dat_821.GetValue("P4")) + ";P5=" + 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 = MainWindow.SQLiteHelpers.ExecuteScalar("select ProgramID from RUN where Step = '1'", null).ToString(); string ProgramNAME = MainWindow.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["Parameter1_S1"] = dat_821.GetValue("Parameter1_S1").ToString(); drtt["Parameter2_S1"] = dat_821.GetValue("Parameter2_S1").ToString(); drtt["Parameter3_S1"] = dat_821.GetValue("Parameter3_S1").ToString(); drtt["Parameter4_S1"] = dat_821.GetValue("Parameter4_S1").ToString(); drtt["Parameter5_S1"] = dat_821.GetValue("Parameter5_S1").ToString(); drtt["Parameter1_S2"] = dat_821.GetValue("Parameter1_S2").ToString(); drtt["Parameter2_S2"] = dat_821.GetValue("Parameter2_S2").ToString(); drtt["Parameter3_S2"] = dat_821.GetValue("Parameter3_S2").ToString(); drtt["Parameter4_S2"] = dat_821.GetValue("Parameter4_S2").ToString(); drtt["Parameter5_S2"] = dat_821.GetValue("Parameter5_S2").ToString(); drtt["Parameter1_S3"] = dat_821.GetValue("Parameter1_S3").ToString(); drtt["Parameter2_S3"] = dat_821.GetValue("Parameter2_S3").ToString(); drtt["Parameter3_S3"] = dat_821.GetValue("Parameter3_S3").ToString(); drtt["Parameter4_S3"] = dat_821.GetValue("Parameter4_S3").ToString(); drtt["Parameter5_S3"] = dat_821.GetValue("Parameter5_S3").ToString(); drtt["StepName_S1"] = dat_821.GetValue("StepName_S1").ToString(); drtt["StepName_S2"] = dat_821.GetValue("StepName_S2").ToString(); drtt["StepName_S3"] = dat_821.GetValue("StepName_S3").ToString(); drtt["StepID_S1"] = dat_821.GetValue("StepID_S1").ToString(); drtt["StepID_S2"] = dat_821.GetValue("StepID_S2").ToString(); drtt["StepID_S3"] = dat_821.GetValue("StepID_S3").ToString(); drtt["RUN"] = "0"; drtt["DYELOT"] = MainWindowViewModel.WorkNumder; drtt.EndEdit(); // var _TechnologicalProcessView = Application.Current.Windows.Cast().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(); //打开数据库 MainWindow.SQLiteHelpers.Delete("RUN", null, null); for (int i = 0; i < MainWindowViewModel.dt_TP.Rows.Count; i++) { DataRow dt = MainWindowViewModel.dt_TP.Rows[i];//行转换 dt.BeginEdit(); //添加订单号 dt["DYELOT"] = MainWindowViewModel.WorkNumder; dt.EndEdit(); MainWindow.SQLiteHelpers.InsertData("RUN", MainWindow.SQLiteHelpers.ToDictionary(dt));//行插入 } //SQLiteHelpers.Close(); //关闭连接 APILog.LOGlog(MainWindowViewModel.WorkNumder.ToString(), "CentralControl", "INSERT", drtt.ToJsonString()); 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["Parameter1_S1"] = dat_821.GetValue("Parameter1_S1").ToString(); dr["Parameter2_S1"] = dat_821.GetValue("Parameter2_S1").ToString(); dr["Parameter3_S1"] = dat_821.GetValue("Parameter3_S1").ToString(); dr["Parameter4_S1"] = dat_821.GetValue("Parameter4_S1").ToString(); dr["Parameter5_S1"] = dat_821.GetValue("Parameter5_S1").ToString(); dr["Parameter1_S2"] = dat_821.GetValue("Parameter1_S2").ToString(); dr["Parameter2_S2"] = dat_821.GetValue("Parameter2_S2").ToString(); dr["Parameter3_S2"] = dat_821.GetValue("Parameter3_S2").ToString(); dr["Parameter4_S2"] = dat_821.GetValue("Parameter4_S2").ToString(); dr["Parameter5_S2"] = dat_821.GetValue("Parameter5_S2").ToString(); dr["Parameter1_S3"] = dat_821.GetValue("Parameter1_S3").ToString(); dr["Parameter2_S3"] = dat_821.GetValue("Parameter2_S3").ToString(); dr["Parameter3_S3"] = dat_821.GetValue("Parameter3_S3").ToString(); dr["Parameter4_S3"] = dat_821.GetValue("Parameter4_S3").ToString(); dr["Parameter5_S3"] = dat_821.GetValue("Parameter5_S3").ToString(); dr["StepName_S1"] = dat_821.GetValue("StepName_S1").ToString(); dr["StepName_S2"] = dat_821.GetValue("StepName_S2").ToString(); dr["StepName_S3"] = dat_821.GetValue("StepName_S3").ToString(); dr["StepID_S1"] = dat_821.GetValue("StepID_S1").ToString(); dr["StepID_S2"] = dat_821.GetValue("StepID_S2").ToString(); dr["StepID_S3"] = dat_821.GetValue("StepID_S3").ToString(); dr.EndEdit(); var _TechnologicalProcessView = Application.Current.Windows.Cast().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(); //打开数据库 MainWindow.SQLiteHelpers.Delete("RUN", null, null); DataTable data_t = MainWindowViewModel.dt_TP.Clone(); for (int i = 0; i < MainWindowViewModel.dt_TP.Rows.Count; i++) { DataRow dt = MainWindowViewModel.dt_TP.Rows[i];//行转换 dt.BeginEdit(); //添加订单号 dt["DYELOT"] = MainWindowViewModel.WorkNumder; dt.EndEdit(); MainWindow.SQLiteHelpers.InsertData("RUN", MainWindow.SQLiteHelpers.ToDictionary(dt));//行插入 } //SQLiteHelpers.Close(); //关闭连接 APILog.LOGlog(MainWindowViewModel.WorkNumder.ToString(), "CentralControl", "EDIT", dr.ToJsonString()); 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(); //打开数据库 MainWindow.SQLiteHelpers.Delete("RUN", null, null); DataTable data_t = MainWindowViewModel.dt_TP.Clone(); for (int i = 0; i < MainWindowViewModel.dt_TP.Rows.Count; i++) { DataRow dt = MainWindowViewModel.dt_TP.Rows[i];//行转换 dt.BeginEdit(); //添加订单号 dt["DYELOT"] = MainWindowViewModel.WorkNumder; dt.EndEdit(); MainWindow.SQLiteHelpers.InsertData("RUN", MainWindow.SQLiteHelpers.ToDictionary(dt));//行插入 } //SQLiteHelpers.Close(); //关闭连接 APILog.LOGlog(MainWindowViewModel.WorkNumder.ToString(), "CentralControl", "DELETE","ID="+ dat_821.GetValue("ID").ToString()); 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 == "SC822") { if (SYSKEY == MainWindowViewModel.SYSKEY) { try { DataTable Workorder = MainWindow.SQLiteHelpers.ExecuteDataSet( "select * from Workorder where ReDye=0 AND State='101'AND StartTime >'"+ DateTime.Now.AddHours(-1).ToString("yyyy/MM/dd HH:mm:ss") +"'", null).Tables[0]; //读取表写入缓存 client.SendAsync("SC822" + "[" + MainWindowViewModel.S01 + "]" + Workorder.ToJsonString()); APILog.DBlog(client.IP, SYSKEY, SYSAPI, SYSDAT);//记录指令 } catch (Exception ex) { client.SendAsync("SC922" + "[" + MainWindowViewModel.S01 + "]" + ex); } } else { client.SendAsync("SC999"); } }//最近可用工艺 else if (SYSAPI == "SC827") { if (SYSKEY == MainWindowViewModel.SYSKEY) { try { // SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径 // SQLiteHelpers.Open(); //打开数据库 string sql_script = "select * from Dyelot where State = '201' AND WorkOrder = '" + MainWindowViewModel.WorkNumder + "'"; DataTable dt = MainWindow.SQLiteHelpers.ExecuteDataSet(sql_script, null).Tables[0]; //转换 //SQLiteHelpers.Close(); //关闭连接 client.SendAsync("SC827" + "[" + MainWindowViewModel.S01 + "]" + dt.ToJsonString()); MainWindowViewModel.TX++; } catch (Exception ex) { client.SendAsync("SC927" + "[" + MainWindowViewModel.S01 + "]" + ex); } } else { client.SendAsync("SC999"); } }//呼叫领料单 else if (SYSAPI == "SC828") { if (SYSKEY == MainWindowViewModel.SYSKEY) { try { Dictionary Dyelot_dat; Dyelot_dat = SerializeConvert.JsonDeserializeFromString>(SYSDAT); // SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径 // SQLiteHelpers.Open(); //打开数据库 Dictionary Product_data = new Dictionary();//缓存函数 Product_data.Add("State", Dyelot_dat.GetValue("State")); if (Dyelot_dat.GetValue("State").ToString() == "301") { Product_data.Add("Amount", Dyelot_dat.GetValue("Amount")); Product_data.Add("DispenseEndTime", Dyelot_dat.GetValue("DispenseEndTime")); } MainWindow.SQLiteHelpers.Update("Dyelot", Product_data, "Dyelot ='" + Dyelot_dat.GetValue("Dyelot") + "' AND Step ='" + Dyelot_dat.GetValue("Step") + "' AND ProductCode='" + Dyelot_dat.GetValue("ProductCode") + "'", null); MainWindowViewModel.Dyelot_dat = MainWindow.SQLiteHelpers.ExecuteDataSet( "select * from Dyelot where WorkOrder = '" + MainWindowViewModel.WorkNumder + "'", null).Tables[0]; int dt = MainWindow.SQLiteHelpers.ExecuteDataSet("select * from Dyelot where Dyelot='" + Dyelot_dat.GetValue("Dyelot") + "' AND State ='201'", null).Tables[0].Rows.Count; if (dt == 0) MainWindowViewModel.CALL_FR = false; //SQLiteHelpers.Close(); //关闭连接 client.SendAsync("SC828" + SYSKEY + SYSDAT); MainWindowViewModel.TX++; APILog.DBlog(client.IP, SYSKEY, SYSAPI, SYSDAT);//记录指令 } catch (Exception ex) { client.SendAsync("SC928" + "[" + MainWindowViewModel.S01 + "]" + ex); } } else { client.SendAsync("SC999"); } }//输送状态指令 else if (SYSAPI == "SC829") { if (SYSKEY == MainWindowViewModel.SYSKEY) { try { Dictionary dat_829; dat_829 = SerializeConvert.JsonDeserializeFromString>(SYSDAT); if (dat_829.GetValue("NAME").ToString() == "LOCK") { if (dat_829.GetValue("VALUE").ToString() == "True") { MainWindowViewModel._Lock_bool = true; client.SendAsync("SC829" + SYSKEY + SYSDAT); } else { MainWindowViewModel._Lock_bool = false; client.SendAsync("SC829" + SYSKEY + SYSDAT); } } else if (dat_829.GetValue("NAME").ToString() == "AUTO") { if (dat_829.GetValue("VALUE").ToString() == "True") { MainWindowViewModel._AUTO_bool = true; client.SendAsync("SC829" + SYSKEY + SYSDAT); } else { MainWindowViewModel._AUTO_bool = false; client.SendAsync("SC829" + SYSKEY + SYSDAT); } } MainWindowViewModel.TX++; APILog.DBlog(client.IP, SYSKEY, SYSAPI, SYSDAT);//记录指令 } catch (Exception ex) { client.SendAsync("SC929" + "[" + MainWindowViewModel.S01 + "]" + ex); } } else { client.SendAsync("SC999"); } }//锁指令 else if (SYSAPI == "SC830") { if (SYSKEY == MainWindowViewModel.SYSKEY) { try { Dictionary Chart_new = new Dictionary();//缓存函数 Chart_new.Add("ERR", MainWindowViewModel.ERR_JOG); Chart_new.Add("UserButton", MainWindowViewModel._UserButton); Chart_new.Add("UserInfoStart", MainWindowViewModel.UserInfoStart); Chart_new.Add("UserInfo", MainWindowViewModel.UserInfo); Chart_new.Add("WORK_RUN", MainWindowViewModel.WORK_RUN); Chart_new.Add("RUN_STEPID", MainWindowViewModel.RUN_STEPID); Chart_new.Add("LOCK", MainWindowViewModel._Lock_bool); Chart_new.Add("CALL", MainWindowViewModel.CALL_FR); 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++; MainWindowViewModel.UserInfoStart = 900; } 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 = MainWindow.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 == "SC859") { if (SYSKEY == MainWindowViewModel.SYSKEY) { try { // SQLiteHelper SQLiteHelpersLOG = new SQLiteHelper(Environment.CurrentDirectory+"\\DataBase\\LOG.db"); //数据库连接路径 // SQLiteHelpersLOG.Open(); //打开数据库 Dictionary dat_859; dat_859 = SerializeConvert.JsonDeserializeFromString>(SYSDAT); if (dat_859.GetValue("INSTRUCTION").ToString() == "SERVER") { var dt_ = APILog.LOGSELECT("select * from SERVER where TIME >'" + DateTime.Parse(dat_859.GetValue("TIME_S").ToString()).ToString("yyyy/MM/dd HH:mm:ss") + "' and TIME <'" + DateTime.Parse(dat_859.GetValue("TIME_E").ToString()).ToString("yyyy/MM/dd HH:mm:ss") + "'"); client.SendAsync("SC859" + "[" + MainWindowViewModel.S01 + "]" + dt_.ToJsonString());//缓存信息 APILog.DBlog(client.IP, SYSKEY, SYSAPI, SYSDAT);//记录指令 } else if (dat_859.GetValue("INSTRUCTION").ToString() == "OperationLog") { var dt_ = APILog.LOGSELECT("select * from OperationLog where TIME >'" + DateTime.Parse(dat_859.GetValue("TIME_S").ToString()).ToString("yyyy/MM/dd HH:mm:ss") + "' and TIME <'" + DateTime.Parse(dat_859.GetValue("TIME_E").ToString()).ToString("yyyy/MM/dd HH:mm:ss") + "'"); client.SendAsync("SC859" + "[" + MainWindowViewModel.S01 + "]" + dt_.ToJsonString());//缓存信息 APILog.DBlog(client.IP, SYSKEY, SYSAPI, SYSDAT);//记录指令 } else if (dat_859.GetValue("INSTRUCTION").ToString() == "IOLog") { var dt_ = APILog.LOGSELECT("select * from IOLog where TIME >'" + DateTime.Parse(dat_859.GetValue("TIME_S").ToString()).ToString("yyyy/MM/dd HH:mm:ss") + "' and TIME <'" + DateTime.Parse(dat_859.GetValue("TIME_E").ToString()).ToString("yyyy/MM/dd HH:mm:ss") + "'"); dt_.Columns.Remove("type"); dt_.Columns.Remove("Value"); dt_.Columns.Remove("PLC"); client.SendAsync("SC859" + "[" + MainWindowViewModel.S01 + "]" + dt_.ToJsonString());//缓存信息 APILog.DBlog(client.IP, SYSKEY, SYSAPI, SYSDAT);//记录指令 } else if (dat_859.GetValue("INSTRUCTION").ToString() == "ERRLog") { var dt_ = APILog.LOGSELECT("select * from ERRLog where TIME >'" + DateTime.Parse(dat_859.GetValue("TIME_S").ToString()).ToString("yyyy/MM/dd HH:mm:ss") + "' and TIME <'" + DateTime.Parse(dat_859.GetValue("TIME_E").ToString()).ToString("yyyy/MM/dd HH:mm:ss") + "'"); client.SendAsync("SC859" + "[" + MainWindowViewModel.S01 + "]" + dt_.ToJsonString());//缓存信息 APILog.DBlog(client.IP, SYSKEY, SYSAPI, SYSDAT);//记录指令 } } catch (Exception ex) { client.SendAsync("SC959" + "[" + MainWindowViewModel.S01 + "]" + ex.Message); } } else { client.SendAsync("SC999"); } }//读取设备日志 else if (SYSAPI == "SC861") { if (SYSKEY == MainWindowViewModel.SYSKEY) { try { Dictionary dat_861; dat_861 = SerializeConvert.JsonDeserializeFromString>(SYSDAT); Dictionary datagrid_v = new Dictionary();//缓存函数 datagrid_v.Add("Value", dat_861.GetValue("Value")); // SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径 // SQLiteHelpers.Open(); //打开数据库 MainWindow.SQLiteHelpers.Update("Parameters", datagrid_v, "ParameterID ='" + dat_861.GetValue("ID") + "'", null);//更新 MainWindowViewModel.dt_ParameterSet = MainWindow.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 dat_862; dat_862 = SerializeConvert.JsonDeserializeFromString>(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 datagrid_v = new Dictionary();//缓存函数 datagrid_v.Add("Value", dat_862.GetValue("Value")); // SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径 // SQLiteHelpers.Open(); //打开数据库 MainWindow.SQLiteHelpers.Update("System", datagrid_v, "ParameterID ='" + dat_862.GetValue("ID") + "'", null);//更新 MainWindowViewModel.dt_SysSet = MainWindow.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 * 100) .SetMinBufferSize(1024 * 1024) .SetListenIPHosts(new IPHost[] { new IPHost(7789), new IPHost(7790) })//同时监听两个地址 .ConfigureContainer(a =>//容器的配置顺序应该在最前面 { }) .ConfigurePlugins(a => { }) ); await service.StartAsync();//启动 LogGing.LogGingDATA("800SREVER:START"); } } class MyTcpService : TcpService { protected override MyTcpSessionClient NewClient() { return new MyTcpSessionClient(); } } class MyTcpSessionClient : TcpSessionClient { internal void SetDataHandlingAdapter(SingleStreamDataHandlingAdapter adapter) { base.SetAdapter(adapter); } } /// /// 此插件实现,按照不同端口,使用不同适配器。 /// /// 7789端口:使用"**"结尾的数据 /// 7790端口:使用"##"结尾的数据 /// /// 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(); } } }