, ET=> NT_Time); CurrentTime := TIME_TO_REAL(NT_Time) / 1000.0; // 将毫秒转换为秒 IF NOT AutoTuneActive THEN StepResponseStartTime := 0.0; IF Done THEN Done := FALSE; END_IF; END_IF; monitor:=StepResponsePVStart + StepResponseAmplitude * 0.63; IF AutoTuneActive THEN // 开始阶跃响应测试 IF StepResponseStartTime = 0.0 THEN StepResponseStartTime := CurrentTime; // 记录开始时间 StepResponsePVStart := PV; // 记录初始PV值 Output := StepResponseAmplitude; // 设置阶跃输出 END_IF // 等待系统响应 IF PV >= StepResponsePVStart + StepResponseAmplitude * 0.63 THEN StepResponseTime := CurrentTime - StepResponseStartTime; // 计算响应时间 StepResponsePVEnd := PV; // 记录结束PV值 AutoTuneActive := FALSE; // 结束自整定 Done:=TRUE; Ku := 4 * StepResponseAmplitude / (StepResponsePVEnd - StepResponsePVStart); // 临界增益 Tu := StepResponseTime; // 临界周期 Kp := 0.6 * Ku; Ki := 1.2 * Ku / Tu; Kd := 0.075 * Ku * Tu; END_IF END_IF ]]>