用西门子s7_300实现PID控制在OB35中实现PID控制程序,OB35是一个以固定时间间隔循环执行的组织块,HardwareConfig界面里可以设置间隔时间,而这也即是PID的采样时间。应该注意设置的间隔值比OB35中程序运行时间长,否则会造成系统异常。我想了解FB41设定值SP_INT的值和PV_IN的设定规则。例如我现场用量程是-40度-120度的温度变送器测温送给PLC,然后通过PID控制输出控制调节阀。那么我的SP_int能不能直接设定我工艺要求的温度,比如说80度。因为我已经把温度变送上来的0-27648的数转换成了工程值(上位机显示),PV_IN能不能直接用我转换好的工程值呢?在PID调节中有不同的物理量,因此在参数设定中需将其规格化:1.规格化概念及方法:PID参数中重要的几个变量,给定值,反馈值和输出值都是用0.0~1.0之间的实数表示,而这几个变量在实际中都是来自与模拟输入,或者输出控制模拟量的因此,需要将模拟输入转换为0.0~1.0的数据,或将0.0~1.0的数据转换为模拟输出,这个过程称为规格化规格化的方法:(即变量相对所占整个值域范围内的百分比对应与27648数字量范围内的量)对于输入和反馈,执行:变量*100/27648,然后将结果传送到PV-IN和SP-INT对于输出变量,执行:LMN*27648/100,然后将结果取整传送给PQW即可;2.例:输入参数:SP_INT(给定值):0--100%的实数。假定模块的输入变量量程为0-10Mpa,则SP_IN的范围0.0-1.00对应0-10Mpa.可以根据这一比例关系来设置给定值。例:如给定5.0MpaSP_INT(给定值)=5.0/(10.0-0.0)*100.0=50.0(50%)PV_IN(过程值,即反馈值):0--100%的实数。此值来自与阀门阀位(开度)的相应的压力反馈值。其范围0.0-1.0对应0-100%.即,当模拟量模板输入为数值为27648时则对应100%(量程的上限),数值为0时则对应0%(量程的下限)。可以根据这一比例关系来换算PV_IN值。例:如输入数值为12000时PV_IN(过程值,即反馈值)=12000/27648*100.0=43.403(43.403%)输出参数:当通过PID控制器(FB41)运算后,即得出调节值LMN_PER,该值已转化范围为0-27648的整型数值。例如经运算为43.403%,LMN_PER=43.403*27648/100,取整后为12000,将LMN_PER送入模拟量输出模板即可.上述调节阀门是气开式的,即输入20mA时阀门全开,4mA时全闭(失电全闭)。若调节阀门是气闭式的,即输入20mA时阀门全闭,4mA时全开(失电全开),FB41的SP_INT与PV_IN的数值互换即可(按制冷调节即可),此时如需输入MAN数值也应作相应处理。阿鸣说的不错,但不完整,最后的建议有违人们的一般思维逻辑,能不能提出个符合一般思维逻辑的编程方法,借楼主的的问题抛出个讨论题,期望大家踊跃参与讨论题目如下:1.加热/制冷,正作用/反作用,气开/气闭阀这3组条件的各取其一排列组合2.双向作用,正作用/反作用,双向阀(4-12ma加热,12-20ma制冷/或反之)要求尽量利用FB41的自身功能完成,并且符合人们的正向思维逻辑关于版主的这个论题贴出这么久了,还没人论答,现我来谈一下吧!1、关于PID功能块FB41如何简单、高效的实现“正/反”控制作用的问题(例如:加热/制冷问题、如何适应气动调节阀的气开/气关方向等问题),其实在“找答案”栏目中已多次有人问答了。2、但是,大多数人都提出了和“阿鸣”相同的方案,即:将FB41功能块的SP_INT与PV_IN的连接引脚变量互换。3、这种将FB41功能块的SP_INT与PV_IN的连接引脚变量互换的方法虽是可行,但却使PID功能块引脚定义与实际使用不符,带来了一些混乱!4、最好的方法是:改变GAIN(比例增益)设置值的符号方向。例如:原比例增益值GAIN=2.5;如果需要输出值(LMN)反向,可直接修改为GAIN=-2.5,即可!5、关于PID控制正/负作用方向问题,可参见以下我在“找答案”栏目中的类似回答:=47544&cid=10296、另外,关于版主提出的“双向和正/反作用,双向阀(4~12mADC加热,12~20mADC制冷,或反之)”问题。这在过程控制系统中称之为“分程调节”控制。也就是将PID调节输出(LMN)信号以半量程分界点(12mADC)为基准,比较判断PID调节输出(LMN)信号的正/反作用方向。至于正/反作用方向,仍然是改变GAIN(比例增益)设置值的符号方向,只是需要增加对PID调节输出(LMN)信号值以12mADC为基准值的比较判断。7、最后需要注意的是:分程调节控制时的半量程分界点基准值比较判断,还应增加死区(即:滞后Hysteresis)功能,以免出现PID调节输出(LMN)信号值在半量程分界点附近振荡现象!谢谢各位,请问如果是热电阻信号的话,还是按照上面说的归格化?热电阻输入乘0.1就是实际的温度值,但是热电阻的范围怎么确定?不同情况下我外部测温的实际范围是不同的,难道都统一处理?还有,手册里面说也可以输入物理值,只要设定和输入都是同样的单位,是不是意味着我可以用实际的工程值给SP_iNT赋值,用实际的测量工程值给PV_IN赋值。通俗点,比如我现场要实现一个压力控制,压力测量量程是-150Kpa~+150KPa,设定值工艺要求是10Kpa,比如现场测量的压力值是110Kpa,那么压力变送器输出4-20ma信号,送给AD采样后的值应该为0-27648这个范围,我再经过FC105转换后的数据就是110Kpa,那么我能不能直接把设定值10Kpa赋值给sp_int,把采样转换后的值110Kpa赋值给Pv_int?1、设定值SP_INT是可以直接赋值实际的测量工程值单位的,前提是测量值也必需是先被转换为实际的测量工程值单位(例如:使用FC105块)后,再接入FB41块的PV_IN引脚。否则,SP_INT和PV_IN的单位就不统一了,没法进行偏差ER比较!总之,必需保持SP_INT和PV_IN的单位统一,才能进行偏差ER比较。2、关于热电阻温度信号值的范围(即:PV_IN的测量量程),这就必需查看实际安装在现场的热电阻传感器的铭牌标识,厂家通常会将这个测温量程参数标识在铭牌上的!谢谢!若直接采用工程值,那么pid调节后的LMN输出范围是多少呢?是0-1之间吗?为什么有人说必须规格化?有没有人提供个实例程序啊关于S7-300/400系列FB41功能块的PID算法输出有LMN和LMN_PER这两个,简述如下:1、LMN=(LMNLIMIT的输出)×LMN_FAC+LMN_OFF;其中,“LMN_FAC”的默认值为“1”,“LMN_OFF”的默认值为“0”。2、“CPR_OUT”功能可以将浮点值“LMN”转换为一个外围设备值,转换公式如下:LMN_PER=LMN×27648/1003、另外,查看FB41的帮助(F1键)中的功能图表后,就知道了!