diff --git a/ViewModel/MainWindowViewModel.cs b/ViewModel/MainWindowViewModel.cs index e6083bf..72bb2bc 100644 --- a/ViewModel/MainWindowViewModel.cs +++ b/ViewModel/MainWindowViewModel.cs @@ -23,6 +23,7 @@ using OpenTK.Graphics.ES11; using DyeingComputer.Properties; using Microsoft.Win32; using static DyeingComputer.Windows.ViewStep; +using System.Windows.Media; namespace DyeingComputer.ViewModel @@ -63,22 +64,21 @@ namespace DyeingComputer.ViewModel UPort(); //启动串口 } - double ST11; + double MT33; void SYS_SET() { SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径 SQLiteHelpers.Open(); //打开数据库 - dt_sys = SQLiteHelpers.ExecuteDataSet("select * from System", null).Tables[0]; //读取表写入缓存 + dt_sys = SQLiteHelpers.ExecuteDataSet("select * from Parameters order by ParameterID desc", null).Tables[0]; //读取表写入缓存 SQLiteHelpers.Close(); - - ST11 = Convert.ToDouble(Selet_sys("ST11"));//温度偏差参数 - - pid.Kp = Convert.ToDouble(Selet_sys("ST01")); //读取pid - pid.Ki = Convert.ToDouble(Selet_sys("ST02")); - pid.Kd = Convert.ToDouble(Selet_sys("ST03")); - pid.N = Convert.ToDouble(Selet_sys("ST04")); - pid.OutputUpperLimit = Convert.ToDouble(Selet_sys("ST05")); - pid.OutputLowerLimit = Convert.ToDouble(Selet_sys("ST06")); + + MT33 = Convert.ToDouble(Selet_sys("MT33"));//温度偏差参数 + pid.Kp = Convert.ToDouble(Selet_sys("MT21")); //读取pid + pid.Ki = Convert.ToDouble(Selet_sys("MT22")); + pid.Kd = Convert.ToDouble(Selet_sys("MT23")); + pid.N = Convert.ToDouble(Selet_sys("MT24")); + pid.OutputUpperLimit = Convert.ToDouble(Selet_sys("MT25")); + pid.OutputLowerLimit = Convert.ToDouble(Selet_sys("MT26")); } DataTable dt_sys = new DataTable(); public string Selet_sys(string key)//配置缓存 @@ -152,21 +152,21 @@ namespace DyeingComputer.ViewModel void Tick_Event_1S(object sender, EventArgs e)//Tick_Event周期执行事件1S { Sys_Time = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); - Work_Temp = (Convert.ToDouble(Selet_dta("4001")) + ST11)/10 + " ℃"; + Work_Temp = (Convert.ToDouble(Selet_dta("4001")) + MT33) /10 + " ℃"; Work_Numder = WorkNumder.ToString(); // Status_Str = "qweqeqwqqfwfqef"; if (LINK_OK) Modbus_link(); - if (!SETP_runtime) STEP_RUN(); DIDETime++; + STEP_RUN(); IO_data(); } void Tick_Event_5S(object sender, EventArgs e)//Tick_Event周期执行事件5S { if (!LINK_OK) Modbus_link(); if (Name_err != null) Status_Str = Name_err.ToString(); - if(SETP_runtime) STEP_RUN(); + // if(SETP_runtime) STEP_RUN(); } void DisTimer_100MS(object sender, EventArgs e)//Tick_Event周期执行事件100MS { @@ -181,7 +181,12 @@ namespace DyeingComputer.ViewModel double STEP_P3 = 0; double STEP_P4 = 0; double STEP_P5 = 0; - bool SETP_runtime = false; + bool SETP_runtime = false; //步骤开始 + bool STEP_finish = false; //步骤结束 + int STEP_TIME = 0; //步骤计时S + int THL_mode = 0; //温控模式 0保温 1加热 2降 + double TEMP_co = 0; //计算温度 + public void STEP_START(object sender, AddressUpdateEventArgs e) { @@ -192,13 +197,17 @@ namespace DyeingComputer.ViewModel STEP_P2 = Convert.ToDouble(e.P2); STEP_P3 = Convert.ToDouble(e.P3); - updata_dtm("1003",Convert.ToDouble( e.P2)/12); + double t_t = Convert.ToDouble(Selet_dtm("1010")); + if (STEP_P1 > t_t) { THL_mode = 1; } + else if (STEP_P1 < t_t) { THL_mode = 2; } - SETP_runtime=true; - //STEP_RUN(); + updata_dtm("1003", STEP_P2 / 60); + STEP_TIME = Convert.ToInt16(STEP_P3) * 60; + SETP_runtime =true; } } + TimeSpan ts=new TimeSpan(1);//1秒间隔 void STEP_RUN() { if (SETP_runtime) @@ -206,7 +215,33 @@ namespace DyeingComputer.ViewModel switch (STEP_ID) { case "001": + double TO = 0; + if (THL_mode == 0) //保温 + { + STEP_TIME--; + if (STEP_TIME == 0) STEP_finish = true; + + int TIME_H = STEP_TIME / 3600; + int TIME_M = (STEP_TIME - TIME_H * 3600) / 60; + int TIME_S = STEP_TIME - TIME_H * 3600 - TIME_M * 60; + Status_Str = Resources.Temperature+Resources.Time+ string.Format(" {0:D2}", TIME_H) + ":" + string.Format(" {0:D2}", TIME_M) + ":" + string.Format(" {0:D2}", TIME_S); + } + else if (THL_mode == 1)//升温 + { + TEMP_co = TEMP_co + (STEP_P2 / 60); + TO = pid.PID_iterate(TEMP_co, Selet_dtm("1010"), ts); + if (STEP_P1 < Selet_dtm("1010")) THL_mode = 0; + } + else if (THL_mode == 2)//降温 + { + TEMP_co = TEMP_co - (STEP_P2 / 60); + TO = pid.PID_iterate(TEMP_co, Selet_dtm("1010"), ts); + TO = Math.Abs(TO); + if (STEP_P1 > Selet_dtm("1010")) THL_mode = 0; + } + updata_dtm("1004", TO); + updata_dtm("1005", TEMP_co); break; case "007": @@ -233,7 +268,7 @@ namespace DyeingComputer.ViewModel int TIMEH = DIDETime / 3600; int TIMEM = (DIDETime - TIMEH * 3600) / 60; int TIMES = DIDETime - TIMEH*3600 - TIMEM*60; - Status_Str = Properties.Resources.Dide + string.Format(" {0:D4}", TIMEH) +":"+ string.Format(" {0:D2}", TIMEM) + ":" + string.Format(" {0:D2}", TIMES); + Status_Str = Resources.Dide + string.Format(" {0:D4}", TIMEH) +":"+ string.Format(" {0:D2}", TIMEM) + ":" + string.Format(" {0:D2}", TIMES); } } } @@ -343,12 +378,12 @@ namespace DyeingComputer.ViewModel }); } - public int Selet_dtm(string key)//M寄存器 + public double Selet_dtm(string key)//M寄存器 { try { DataRow[] arrRows = dt_m.Select("ID='" + key+"'"); - int index = Convert.ToInt16(arrRows[0]["Value"].ToString()); + double index = Convert.ToDouble(arrRows[0]["Value"].ToString()); return index; } catch (Exception ex)