|
|
@ -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) |
|
|
|