永发信息网

pid控制的算法

答案:1  悬赏:10  手机版
解决时间 2021-03-17 17:37
pid控制的算法
最佳答案
给你个PID控制算法的程序段,该程序是西门子PLC的SCL程序。带"_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-PW;
IF PV 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
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
含有讽刺意味的风凉话—————()言()语
老太婆摊摊面北辰店怎么去啊,有知道地址的么
杭州牌照现在值多少钱
辅警年龄大了单位不要你,让你自己写辞职报告
鸿蒙三灵根是什么?
输入一个0~99999之间任意的一个数,系统将返
我有一个部落冲突的账号,年前玩的还好好的,
业主要求总包单位与精装单位签合同,但原施工
青海伊美物业管理有限公司盛世豪庭服务中心这
金猪拱门是什么意思?
浙江大华技术股份有限公司网络摄像头怎样安装
我的三星a7手机放口袋自己成雪花屏了,用手摇
一个男的不愿意提起一个女孩是什么意思,因为
耒阳市天为置业有限公司地址有知道的么?有点
无证酒驾撞人特穷要不到钱该我到霉了吗?告上
推荐资讯
地铁2号线上海路哪个出口到华侨路房产局
梦到我姑被车撞死了,哟打电话找家里人就是打
工程里说的“葫芦”,英语是什么?
漫步者,飞利浦,奇声,家庭影院哪个更好?
男人为什么喜欢耍酷?女人为什么喜欢装可爱呢
极品飞车9黑夜mod怎么使用
王者荣耀怎么投诉建议
南京高阳科技有限公司怎么样??
2o16年1月12日今禾是几九了
早上4点起床跑步好不好
女字旁一个以字读什么
描写紧张时的心情片段
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?