看过这个块的说明,需要再state=0也就是未激活的模式下才能更改正反作用
按照动作逻辑写的程序如下
IF "FC_CP_FP"(In_Signal := #PID_InOut.Input.BTN_ControlPoN, SaveStatus := #FP_SaveStatus[0])
OR "FC_CP_FP"(In_Signal := NOT #PID_InOut.Input.BTN_ControlPoN, SaveStatus := #FP_SaveStatus[1])
THEN
"DB_MISC".Last_State := #PID_InsDB.State;
#PID_InOut.Input.SET_Mode := 0;
#PID_InOut.Input.BTN_ModeActive := true;
#PID_InsDB.Config.InvertControl := #PID_InOut.Input.BTN_ControlPoN;
#PID_InsDB(ModeActivate := #PID_InOut.Input.BTN_ModeActive,
Mode := #PID_InOut.Input.SET_Mode);
#PID_InOut.Input.BTN_ModeActive := false;
#PID_InOut.Input.SET_Mode := "DB_MISC".Last_State;
#PID_InOut.Input.BTN_ModeActive := true;
#PID_InsDB(ModeActivate := #PID_InOut.Input.BTN_ModeActive,
Mode := #PID_InOut.Input.SET_Mode);
#PID_InOut.Input.BTN_ModeActive := false;
END_IF;
逻辑很简单,就是发生更改正反作用的外部信号上升沿或者下降沿就保存上一次的模式(自动或手动)然后执行一次指令进入成未激活模式更改正反作用,再用保存下来的上一次的模式执行一次PID指令恢复到之前的模式
现在的情况是红色代码以上的部分结果都正常,但是就是恢复不到之前的模式,就停在未激活模式下了
第一次使用1500的PID块,不知道是不是还有什么其他的要求,求前辈指导