|
|
|
@ -62,6 +62,10 @@ namespace DyeingComputer.ViewModel |
|
|
|
CountDown(); //启动循环任务
|
|
|
|
SQL_data(); //读数据库
|
|
|
|
UPort(); //启动串口
|
|
|
|
|
|
|
|
|
|
|
|
AddressUpdateEventArgs e = new AddressUpdateEventArgs("1","001","0","0","120","30","60","0","0"); |
|
|
|
STEP_START(e); |
|
|
|
} |
|
|
|
|
|
|
|
double MT33; |
|
|
|
@ -72,13 +76,16 @@ namespace DyeingComputer.ViewModel |
|
|
|
dt_sys = SQLiteHelpers.ExecuteDataSet("select * from Parameters order by ParameterID desc", null).Tables[0]; //读取表写入缓存
|
|
|
|
SQLiteHelpers.Close(); |
|
|
|
|
|
|
|
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")); |
|
|
|
MT33 = Convert.ToDouble(Selet_sys("MT33"));//温度偏差参数
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
DataTable dt_sys = new DataTable(); |
|
|
|
public string Selet_sys(string key)//配置缓存
|
|
|
|
@ -152,14 +159,15 @@ 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")) + MT33) /10 + " ℃"; |
|
|
|
|
|
|
|
Work_Temp = Selet_dtm("1010") + " ℃"; |
|
|
|
Work_Numder = WorkNumder.ToString(); |
|
|
|
// Status_Str = "qweqeqwqqfwfqef";
|
|
|
|
|
|
|
|
if (LINK_OK) Modbus_link(); |
|
|
|
|
|
|
|
DIDETime++; |
|
|
|
STEP_RUN(); |
|
|
|
|
|
|
|
IO_data(); |
|
|
|
} |
|
|
|
void Tick_Event_5S(object sender, EventArgs e)//Tick_Event周期执行事件5S
|
|
|
|
@ -188,7 +196,7 @@ namespace DyeingComputer.ViewModel |
|
|
|
double TEMP_co = 0; //计算温度
|
|
|
|
|
|
|
|
|
|
|
|
public void STEP_START(object sender, AddressUpdateEventArgs e) |
|
|
|
public void STEP_START(AddressUpdateEventArgs e) |
|
|
|
{ |
|
|
|
if (e.StepID == "001") |
|
|
|
{ |
|
|
|
@ -201,7 +209,8 @@ namespace DyeingComputer.ViewModel |
|
|
|
if (STEP_P1 > t_t) { THL_mode = 1; } |
|
|
|
else if (STEP_P1 < t_t) { THL_mode = 2; } |
|
|
|
|
|
|
|
updata_dtm("1003", STEP_P2 / 60); |
|
|
|
TEMP_co = t_t; |
|
|
|
updata_dtm("1003", STEP_P2 / 600); |
|
|
|
STEP_TIME = Convert.ToInt16(STEP_P3) * 60; |
|
|
|
SETP_runtime =true; |
|
|
|
} |
|
|
|
@ -216,10 +225,14 @@ namespace DyeingComputer.ViewModel |
|
|
|
{ |
|
|
|
case "001": |
|
|
|
double TO = 0; |
|
|
|
double T = Selet_dtm("1010"); //实际温度
|
|
|
|
if (THL_mode == 0) //保温
|
|
|
|
{ |
|
|
|
STEP_TIME--; |
|
|
|
if (STEP_TIME == 0) STEP_finish = true; |
|
|
|
//STEP_TIME--;
|
|
|
|
if (STEP_TIME == 0) { STEP_finish = true; } |
|
|
|
else { STEP_TIME--; } |
|
|
|
TO = pid.PID_iterate(STEP_P1, T, ts); |
|
|
|
if (TO < 0) TO = 0; |
|
|
|
|
|
|
|
int TIME_H = STEP_TIME / 3600; |
|
|
|
int TIME_M = (STEP_TIME - TIME_H * 3600) / 60; |
|
|
|
@ -229,15 +242,17 @@ namespace DyeingComputer.ViewModel |
|
|
|
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; |
|
|
|
TO = pid.PID_iterate(TEMP_co, T, ts); |
|
|
|
if (TO < 0) TO = 0; |
|
|
|
if (STEP_P1 <T) 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 = pid.PID_iterate(TEMP_co, T, ts); |
|
|
|
if (TO > 0) TO = 0; |
|
|
|
TO = Math.Abs(TO); |
|
|
|
if (STEP_P1 > Selet_dtm("1010")) THL_mode = 0; |
|
|
|
if (STEP_P1 > T) THL_mode = 0; |
|
|
|
} |
|
|
|
|
|
|
|
updata_dtm("1004", TO); |
|
|
|
@ -360,6 +375,7 @@ namespace DyeingComputer.ViewModel |
|
|
|
{ |
|
|
|
updata_dtm("1001", LINK_RUN); |
|
|
|
updata_dtm("1002", LINK_ERR); |
|
|
|
updata_dtm("1010", (Convert.ToDouble(Selet_dta("4001")) + MT33)/10); |
|
|
|
|
|
|
|
await Task.Run(() => |
|
|
|
{ |
|
|
|
|