大家好!
我想用S7-300PLC的FB41作一个位置闭环,要求到设定位置就以零速度停止运行。我使用绝对编码器实时反馈液压马达的运行位置,S7-300PLC通过总线给比例阀放大器命令值,控制比例阀的开口度,从而控制液压马达运动速度,精度在5mm以内即可,但要求零距离(到目标距离)以零速度将马达停下来。我想用FB41来做,但不知道如何做PID控制,FB41是模拟量PID控制,我的所有数值都是通过总线得到或发出的纯数据值,能不能使用FB41?如何使用FB41?或采用别的控制方式。请有做过相关项目的提供意见。
第一次做这样的控制,没有相关经验,PID以前没有用过,请大家给我建议或方案!!谢谢!!
最佳答案
用Step7中SFB41/FB 41、SFB42/FB42、SFB43/FB43实现PID控制
http://www.ad.siemens.com.cn/download/docMessage.aspx?ID=1231&loginID=&srno=&sendtime=
具体做法:S7300 PLC通过OB35调用FB41功能块实现PID控制,步骤为:
建立OB35组织块,插入PID控制功能块FB41(从插入选项中,点击标准库,在里面选PID控制里面的FB41——之前我就是因为没用过标准库,在网上看到插入FB41,我就自己建了一个FB41,结果什么也没有,当然没有参数设置了。——插入时,会要求你填写一个DB块的名称,我输入DB20,然后系统会自动给出一个梯形图的块,同时产生一个DB20数据块,里面的参数具体的含义,我这里把用到的给注释了一下,还有很多没用到的参数,你如果要弄清楚的话,网上有很多,就不说了哈)
对其参数进行设置。大多数参数采用系统默认值,配置程序如下: (前面几句赋值,是我把它转化为语句表时,它自动生成的,你自己试一下就晓得了)
A M 300.0
= L 20.0
BLD 103
A M 300.1
= L 20.1
BLD 103
CALL "CONT_C" , DB20
COM_RST :=L20.0 //重新启动PID,在OB100中对M300.0置位
MAN_ON :=L20.1 //手动与自动切换,当MD300.1为1时是手动
PVPER_ON:= //默认为0,设为1时表示反馈量不经规格化处理直接采用
P_SEL := //比例选择,默认为on,表示选择P有效
I_SEL := //积分选择,默认为on,表示选择I有效
D_SEL := //微分选择,默认为off,表示选择P无效
CYCLE :=T#200MS //PID采样周期
SP_INT :=MD306 //设定压差,通过触摸屏设置
PV_IN :=MD310 //反馈值,经PLC程序规格化后给MD310
PV_PER := //未经规格化的反馈值
MAN :=MD320 //手动状态下的输入值,由触摸屏输入
GAIN :=MD324 //比例增益,由触摸屏输入
TI :=MD328 //积分时间,由触摸屏输入
DEADB_W :=MD340 //死区宽度,默认值为0,调整时由触摸屏输入
LMN :=MD350 //PID输出
…… //其它参数均采用系统默认
NOP 0
由于反馈值和输出值都是0-100%之间的实数,所以要将其规格化:输入时,变量*100/27648,赋值给PV-IN和SP-INT,输出时,LMN*27648/100,取整。
提问者对于答案的评价:
回答不错
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc246587.html