PID控制工具在哪
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PID控制工具在哪相关的知识,希望对你有一定的参考价值。
参考技术A 你说的是什么软件上的PID控制工具?PID控制是一种算法,我可以给你个例子程序。给你个Step 7写的PID控制的FC模块。带"_IN"与带"_OUT"的变量,如果前缀是一样的,要求连接同一个变量。
FUNCTION FC1 : VOID
VAR_INPUT
Run:BOOL; //True-运行,False-停止
Auto:BOOL; //True-自动,False-手动
ISW:BOOL; //True-积分有效,False-积分无效
DSW:BOOL; //True-微分有效,False-微分无效
SetMV:REAL; //手动时的开度设定值
SVSW:REAL; //当设定值低于SVSW时,开度为零
PV:REAL; //测量值
SV:REAL; //设定值
DeadBand:REAL; //死区大小
PBW:REAL; //比例带大小
IW:REAL; //积分带大小
DW:REAL; //微分带大小
dErr_IN:REAL; //误差累积
LastPV_IN:REAL; //上一控制周期的测量值
END_VAR
VAR_OUTPUT
MV:REAL; //输出开度
dErr_OUT:REAL; //误差累积
LastPV_OUT:REAL;//上一控制周期的测量值
END_VAR
VAR
Err:REAL; //误差
dErr:REAL; //误差累积
PBH:REAL; //比例带上限
PBL:REAL; //比例带下限
PVC:REAL; //测量值在一个控制周期内的变化率,即测量值变化速率
P:REAL; //比例项
I:REAL; //积分项
D:REAL; //微分项
END_VAR
IF Run=1 THEN
IF Auto=1 THEN
IF SV>=SVSW THEN
Err:=SV-PV;
PBH:=SV+PBW;
PBL:=SV-PBW;
IF PV<PBL THEN
MV:=1;
ELSIF PV>PBH THEN
MV:=0;
ELSE
P:=(PBH-PV)/(PBH-PBL); //计算比例项
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////以下为积分项的计算//////////////////////////////////////////////////////////////
IF ISW=1 THEN
dErr:=dErr_IN;
IF (PV<(SV-DeadBand)) OR (PV>(SV+DeadBand)) THEN
IF (dErr+Err)<(0-IW) THEN
dErr:=0-IW;
ELSIF (dErr+Err)>IW THEN
dErr:=IW;
ELSE
dErr:=dErr+Err;
END_IF;
END_IF;
I:=dErr/IW;
dErr_OUT:=dErr;
ELSE
I:=0;
END_IF;
/////////////////////////////////////////////以上为积分项的计算//////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////以下为微分项的计算//////////////////////////////////////////////////////////////
IF DSW=1 THEN
PVC:=LastPV_IN-PV;
D:=PVC/DW;
LastPV_OUT:=PV;
ELSE
D:=0;
END_IF;
/////////////////////////////////////////////以上为微分项的计算//////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
IF (P+I+D)>1 THEN
MV:=1;
ELSIF (P+I+D)<0 THEN
MV:=0;
ELSE
MV:=P+I+D;
END_IF;
END_IF;
ELSE
MV:=0;
END_IF;
ELSE
MV:=SetMV;
END_IF;
ELSE
MV:=0;
END_IF;
END_FUNCTION
进行整定时先进行P调节,使I和D作用无效,观察温度变化曲线,若变化曲线多次出现波形则应该放大比例(P)参数,若变化曲线非常平缓,则应该缩小比例(P)参数。比例(P)参数设定好后,设定积分(I)参数,积分(I)正好与P参数相反,曲线平缓则需要放大积分(I),出现多次波形则需要缩小积分(I)。比例(P)和积分(I)都设定好以后设定微分(D)参数,微分(D)参数与比例(P)参数的设定方法是一样的。
当初写这段程序的就是为了使用调功器来控制炉子的温度的,已经在我单位的调功器上运行成功了,还有就是我单位的调功器没有使用微分(D),只是用了比例(P)和积分(I)。
精品课设经典PID与模糊PID控制的对比与分析
【精品课设】经典PID与模糊PID控制的对比与分析(一)
目录
0研究背景
写在前面:
1.本代码基于MATLAB2019a版本,低版本或者不同版本可能会报错,mdl文件或slx文件打开可能会失败;
2.如果运行时间过长,请观察设置参数是否一致。
3.本博客附上算法运行图并详细介绍,如果转载请注明出处;
4.如果本博客恰巧与您的研究有所关联,欢迎您的咨询qq1366196286 ,同时代码下载见评论的下载链接。
文档下载:https://download.csdn.net/download/qq_42249050/19746440 |
代码下载:https://download.csdn.net/download/qq_42249050/19746530 |
1经典PID控制的设计
1.1 经典PID控制律的设计
PID控制律的微分方程、各个环节的影响作用、以及Simulink组成在其他博客均有论述。如读者还存在疑惑,可转到之前的博客进行观看。
基于遗传算法的PID参数整定研究(一)
参数智能整定#基于智能算法的PID参数整定研究
图1 PID控制结构方框图
1.2 被控对象传递函数的代码实现
被控对象的传递函数为:
图2 被控对象运行显示图
Continuous_PID.m
clc;
clear;
% Target = 1000; %目标值
% sys1= tf([0,300,200,350],[1,0.5,0.05,0]); %建立被控对象传递函数 零点为-1 极点为-50
%sys2=tf([0.02 1],1); %建立被控对象传递函数 无零点 极点为-20
%% 设置被控对象的传递函数
Target = 1.000;
sys1=tf(5.235e005,[1, 87.35, 1.047e004, 0]);
%% PID传递函数
% kp0=0.90; % PID控制参数的大小
% ki0=0.05;
% kd0=0.2;
Kp = 0.90;
Ki = 0.05;
Kd = 0;
sysP = Kp;
sysI = tf(Ki,[1,0]);
sysD = tf([Kd,0],1);
sysPI = parallel(sysP,sysI); %将比例积分微分环节并联得到PID传递函数
sysPID = parallel(sysPI,sysD);
sysG = series(sysPID,sys1); %将两传递函数串联 得到最终的传递函数G
sysH = 1; %反馈函数为空
sysResult = feedback(sysG,sysH); %负反馈
step(Target * sysResult,0.5); %串联并加入反馈后的传递函数阶跃
% %(仅绘制过渡过程的曲线,x坐标限制为[0,1])
% p1=plot(time,Target,'-.');
% xlim([0,0.5]);
% hold on;%指令信号的曲线(即期望输入)
% p2=plot(time,y);
% xlim([0,0.5]);
% hold on;%不含积分分离的PID曲线
程序运行结果图如下:
图3 连续系统下的PID仿真模拟图
Discrete_PID.m
clc;
clear;
Ts = 0.001; %采样时间=0.001s
sys = tf([0,300,200,350],[1,0.5,0.05,0]); %建立被控对象传递函数 无零点 极点为-10
dsys = c2d(sys,Ts,'z'); %将传递函数离散化 采样周期Ts
[num,den] = tfdata(dsys,'v'); %取出离散化后的传递函数参数
Error = 0; %当前偏差
ErrorLast = 0; %上次偏差
ErrorSum = 0; %累积偏差
u_1 = 0; %上时刻控制量
u_2 = 0; %上上时刻控制量
u_3 = 0; %上上上时刻控制量
y_1 = 0; %上时刻输出量
y_2 = 0; %上上时刻输出量
y_3 = 0; %上上上时刻输出量
y_4 = 0; %上上上上时刻输出量
%PID参数
Kp = 1.2;
Ki = 0.1;
Kd = 0.005;
u = zeros(1,1000); %预先分配内存
y = zeros(1,1000);
Target = zeros(1,1000); %目标值
time = zeros(1,1000);%时刻点(设定1000个)
for k = 1:1:1000
time(k) = k * Ts; %时间参数
Target(k) = 1000;
y(k) = num(4)*u_3 + num(3)*u_2 + num(2)*u_1 - den(4)*y_3 - den(3)*y_2 - den(2)*y_1;%系统响应输出序列
Error = Target(k) - y(k); %误差信号
u(k) = Kp*Error + Ki*ErrorSum + Kd*(Error - ErrorLast); %系统PID控制器输出序列
ErrorSum = ErrorSum + Error; %误差的累加和
u_3 = u_2;
u_2 = u_1;
u_1 = u(k); %前一个的控制器输出值
y_4 = y_3;
y_3 = y_2;
y_2 = y_1;
y_1 = y(k); %前一个的系统响应输出值
ErrorLast = Error; %前一个误差信号的值
end
%(仅绘制过渡过程的曲线,x坐标限制为[0,1])
p1=plot(time,Target,'-.');xlim([0,0.5]);hold on;%指令信号的曲线(即期望输入)
p2=plot(time,y);xlim([0,0.5]);hold on;%不含积分分离的PID曲线
程序运行结果图如下:
图4 离散系统下的PID仿真模拟图
1.3 基于频域PID参数的Z-N整定
基于频域PID参数的Z-N整定可参考之前的博客文章,如下:
运行整定程序,可得图5~图。其中图5给出了系统未补偿的根轨迹图。
图5 系统未补偿的根轨迹图
需要在图5上可选定穿越虚轴时的增益Km和该点的wm值,即临界状态值。其中,整定程序中,sys_pid和sysc分别为控制器和闭环系统的传递函数。
图6 整定前后的系统Bode图
图6示出整定前后系统的伯特图,可见该系统整定后,频带拓宽,相移超前。
图7 系统整定后的根轨迹图
图7示出整定后系统的根轨迹,所有极点位于负半面,达到完全稳定状态。
程序运行结果如下:
ZN_Tuning.m
%PID Controler Based on Ziegler-Nichols
clear all;
close all;
% sys=tf(400,[1,30,200,0]);
sys=tf(5.235e005,[1, 87.35, 1.047e004, 0]);
figure(1);
rlocus(sys);
[km,pole]=rlocfind(sys)
wm=imag(pole(2));
kp=0.6*km
kd=kp*pi/(4*wm)
ki=kp*wm/pi
figure(2);
grid on;
bode(sys,'r');
sys_pid=tf([kd,kp,ki],[1,0])
sysc=series(sys,sys_pid)
hold on;
bode(sysc,'b')
figure(3);
rlocus(sysc);
代码程序及仿真图 |
2模糊PID控制的设计
2.1 模糊PID控制律的设计
模糊自适应PID控制器是根据对输入信号的动态跟踪,采用模糊控制以及模糊推理,对PID的各个参数进行实时调整,实现在线整定的。它是模糊控制与传统PID控制的组合体,结合了各自的控制优点,为提高控制精度提供了充分的条件。其控制原理如图8所示。
图8 模糊PID控制的控制原理图
2.2 模糊PID控制的仿真结果
模糊推理系统的建立
模糊PID的仿真结果
代码程序及仿真图 |
3仿真对比与分析
将模糊PID控制与传统PID控制的输出响应进行对比,可得:
代码程序及仿真图 |
以上是关于PID控制工具在哪的主要内容,如果未能解决你的问题,请参考以下文章