博主仅仅是记录一下,避免遗忘。
一、编码器
博主使用了欧姆龙的单端A/B/Z三相增量式编码器:

施耐德PLC配置见下:


编码器的块的配置效果:

二、步进电机驱动器
PTO块配置见下:

PTO块使用见下:




三、PID
PID块定义:

PID块的代码:
Timer1(IN:=EN AND NOT Timer1.Q,PT:=CYCLE); // 定时器周期执行
IF EN AND Timer1.Q THEN //若已经配置使能及定时器
CASE MODE OF
0: //位置式PID
EK_0 :=SV-PV;
EK_SUM:=EK_SUM+EK_0;
Y := KP * EK_0 + KI*EK_SUM + KD*(EK_0-EK_1);
EK_1 :=EK_0;
IF ABS(EK_0) <=1 THEN
EK_SUM:=0.0; // 误差过零,消除积分
END_IF
1: //增量式PID
EK_0 :=SV-PV;
Y := Y + ( KP*(EK_0-EK_1) + KI*EK_0 + KD*(EK_0-2*(EK_1-EK_2)));
EK_2 := EK_1;
EK_1:= EK_0;
END_CASE
IF Y > Y_MAX THEN
Y:=Y_MAX;
ELSIF Y< Y_MIN THEN
Y:=Y_MIN;
END_IF
M_EK_0 :=EK_0;
M_EK_1 :=EK_1;
M_EK_2 :=EK_2;
M_EK_SUM :=EK_SUM;
ELSIF NOT EN THEN
EK_0 :=0;
EK_1 :=0;
EK_2 :=0;
EK_SUM :=0;
Y :=0;
END_IF
PID块的引用:
