西门子 S7-200CPU PID 控制图解
一、PID控制 S7-200 能够进行 PID 控制。S7-200 CPU 最多可以支持 8 个 PID 控制回路(8 个 PID 指令功能块)。 PID 是闭环控制系统的比例-积分-微分控制算法。 PID 控制器根据设定值(给定)与被控对象的实际值(反馈)的差值,按照 PID 算法 计算出控制器的输出量,控制执行机构去影响被控对象的变化。 PID 控制是负反馈闭环控制,能够抑制系统闭环内的各种因素所引起的扰动,使被控对象 的实际值(反馈)跟随给定变化。 根据具体项目的控制要求,在实际应用中有可能用到其中的一部分,比如常用的是 PI (比例-积分)控制,这时没有微分控制部分。 PID 算法在 S7-200 中的实现 PID 控制最初在模拟量控制系统中实现,随着离散控制理论的发展,PID 也在计算机化 控制系统中实现。 为便于实现,S7-200 中的 PID 控制采用了迭代算法。详细的计算方法请参考《S7-200 系统手册》中 PID 指令部分的相关内容。 计算机化的 PID 控制算法有几个关键的参数 Kc(Gain,增益),Ti(积分时间常 数),Td(微分时间常数),Ts(采样时间)。 在 S7-200 中 PID 功能是通过 PID 指令功能块实现。通过定时(按照采样时间)执行 PID 功能块,按照 PID 运算规律,根据当时的给定、反馈、比例-积分-微分数据, 计算出控制量。 PID 功能块通过一个 PID 回路表交换数据,这个表是在 V 数据存储区中的开辟,长度为 36 字节。因此每个 PID 功能块在调用时需要指定两个要素:PID 控制回路号,以及 控制回路表的起始地址(以 VB 表示)。 由于 PID 可以控制温度、压力等等许多对象,它们各自都是由工程量表示,因此有一 种通用的数据表示方法才能被 PID 功能块识别。S7-200 中的 PID 功能使用占调节范围 的百分比的方法抽象地表示被控对象的数值大小。在实际工程中,这个调节范围往往 被认为与被控对象(反馈)的测量范围(量程)一致。 PID 功能块只接受 0.0 - 1.0 之间的实数(实际上就是百分比)作为反馈、给定与控 制输出的有效数值,如果是直接使用 PID 功能块编程,必须保证数据在这个范围之 内,否则会出错。其他如增益、采样时间、积分时间、微分时间都是实数。 因此,必须把外围实际的物理量与 PID 功能块需要的(或者输出的)数据之间进行转 换。这就是所谓输入/输出的转换与标准化处理。《S7-200 系统手册》上有详细的介 绍。 S7-200 的编程软件 Micro/WIN 提供了 PID 指令向导,以方便地完成这些转换/ 标准化处理。除此之外,PID 指令也同时会被自动调用。 二、调试 PID 控制器 PID 控制的效果就是看反馈(也就是控制对象)是否跟随设定值(给定),是否响应 快速、稳定,是否能够抑制闭环中的各种扰动而回复稳定。 要衡量 PID 参数是否合适,必须能够连续观察反馈对于给定变化的响应曲线;而实际 上 PID 的参数也是通过观察反馈波形而调试的。因此,没有能够观察反馈的连续变化 波形曲线的有效手段,就谈不上调试 PID 参数。 观察反馈量的连续波形,可以使用带慢扫描记忆功能的示波器(如数字示波器),波 形记录仪,或者在 PC 机上做的趋势曲线监控画面等。 新版编程软件 STEP 7 - Micro/WIN V4.0 内置了一个 PID 调试控制面板工具,具有 图形化的给定、反馈、调节器输出波形显示,可以用于手动调试 PID 参数。对于没有 “自整定 PID”功能的老版 CPU,也能实现 PID 手动调节。 PID 参数的取值,以及它们之间的配合,对 PID 控制是否稳定具有重要的意义。这些 主要参数是: • 采样时间: 计算机必须按照一定的时间间隔对反馈进行采样,才能进行 PID 控制的计算。采样时 间就是对反馈进行采样的间隔。短于采样时间间隔的信号变化是不能测量到的。过短 的采样时间没有必要,过长的采样间隔显然不能满足扰动变化比较快、或者速度响应 要求高的场合。 编程时指定的 PID 控制器采样时间必须与实际的采样时间一致。S7-200 中 PID 的采 样时间精度用定时中断来保证。 • 增益(Gain,放大系数,比例常数) 增益与偏差(给定与反馈的差值)的乘积作为控制器输出中的比例部分。过大的增益 会造成反馈的振荡。 • 积分时间(Integral Time) 偏差值恒定时,积分时间决定了控制器输出的变化速率。积分时间越短,偏差得到的 修正越快。过短的积分时间有可能造成不稳定。 积分时间的长度相当于在阶跃给定下,增益为“1”的时候,输出的变化量与偏差值相 等所需要的时间,也就是输出变化到二倍于初始阶跃偏差的时间。 如果将积分时间设为最大值,则相当于没有积分作用。 • 微分时间(Derivative Time) 偏差值发生改变时,微分作用将增加一个尖峰到输出中,随着时间流逝减小。微分时间越长,输出的变化越大。微分使控制对扰动的敏感度增加,也就是偏差的变化率越 大,微分控制作用越强。微分相当于对反馈变化趋势的预测性调整。 如果将微分时间设置为 0 就不起作用,控制器将作为 PI 调节器工作。 常问问题 1、对于某个具体的 PID 控制项目,是否可能事先得知比较合适的参数?有没有相关的经验数据? 虽然有理论上计算 PID 参数的方法,但由于闭环调节的影响因素很多而不能全部在数学上精确地描述,计算出的数值往往没有什么实际意义。因此,除了实际调试获得参数外,没有什么可用的经验参数值存在。甚至对于两套看似一样的系统,都可能通过实际调试得到完全不同的参数值。 2、PID 控制不稳定怎么办?如何调试 PID? 闭环系统的调试,首先应当做开环测试。所谓开环,就是在 PID 调节器不投入工作的 时候,观察: • 反馈通道的信号是否稳定 • 输出通道是否动作正常 可以试着给出一些比较保守的 PID 参数,比如放大倍数(增益)不要太大,可以小于1,积分时间不要太短,以免引起振荡。在这个基础上,可以直接投入运行观察反馈的波形变化。给出一个阶跃给定,观察系统的响应是最好的方法。 如果反馈达到给定值之后,历经多次振荡才能稳定或者根本不稳定,应该考虑是否增益过大、积分时间过短;如果反馈迟迟不能跟随给定,上升速度很慢,应该考虑是否增益过小、积分时间过长…… 总之,PID 参数的调试是一个综合的、互相影响的过程,实际调试过程中的多次尝试是非常重要的步骤,也是必须的。 S7-200 的新一代产品提供了自整定的 PID 细调功能。 3、没有采用积分控制时,为何反馈达不到给定? 这是必然的。因为积分控制的作用在于消除纯比例调节系统固有的“静差”。没有积分控制的比例控制系统中,没有偏差就没有输出量,没有输出就不能维持反馈值与给定值相等。所以永远不能做到没有偏差。 4、如何实现 PID 反作用调节? 参见 PID 向导中的常问问题。 5、S7-200 控制变频器,在变频器也有 PID 控制功能时,应当使用谁的 PID 功能? 可以根据具体情况使用。一般来说,如果需要控制的变量直接与变频器直接有关,比如变频水泵控制水压等,可以优先考虑使用变频器的 PID 功能。 6、《S7-200 系统手册》上的附录 H.14“用 S7-200 实现 PID 控制”的例子,是否可以直接使用? 《S7-200 系统手册》中的附录 H 在英文原版中并不存在。 H.14 的 PID 例子是在第一代产品还不支持 PID 运算指令时的产物。现在用户可以使用PID 指令块,或者 PID Wizard(PID 向导)编辑 PID 控制程序。 三、PID Wizard - PID 向导 Micro/WIN 提供了 PID Wizard(PID 指令向导),可以帮助用户方便地生成一个闭环控制过程的 PID 算法。此向导可以完成绝大多数 PID 运算的自动编程,用户只需在主程序中调用 PID 向导生成的子程序,就可以完成 PID 控制任务。 PID 向导既可以生成模拟量输出 PID 控制算法,也支持开关量输出;既支持连续自动调节,也支持手动参与控制。建议用户使用此向导对 PID 编程,以避免不必要的错误。如果用户不能确定中文编程界面的语义,我们建议用户使用英文版本的Micro/WIN,以免对向导中相关概念发生误解。 建议用户使用较新的编程软件版本。在新版本中的 PID 向导获得了改善。 四、PID 向导编程步骤 在 Micro/WIN 中的命令菜单中选择 Tools > Instruction Wizard,然后在指令向导窗口中选择 PID 指令:

图 1. 选择 PID 向导 在使用向导时必须先对项目进行编译,在随后弹出的对话框中选择“Yes” ,确认编译。如果已有的程序中存在错误,或者有没有编完的指令,编译不能通过。 如果你的项目中已经配置了一个 PID 回路,则向导会指出已经存在的 PID 回路,并让你选择是配置修改已有的回路,还是配置一个新的回路:

图 2. 选择需要配置的回路 第一步:定义需要配置的 PID 回路号

图 3. 选择 PID 回路号 第二步:设定 PID 回路参数

图 4. 设置 PID 参数 a. 定义回路设定值(SP,即给定)的范围: 在低限(Low Range)和高限(High Range)输入域中输入实数,缺省值为 0.0 和 100.0, 表示给定值的取值范围占过程反馈量程的百分比。 这个范围是给定值的取值范围。它也可以用实际的工程单位数值表示。参见:设置给定-反 馈的量程范围。 以下定义 PID 回路参数,这些参数都应当是实数: b. Gain(增益):即比例常数。 c. Integral Time(积分时间):如果不想要积分作用,可以把积分时间设为无穷大:9999.99 d. Derivative Time(微分时间):如果不想要微分回路,可以把微分时间设为 0 。 e. Sample Time(采样时间):是 PID 控制回路对反馈采样和重新计算输出值的时间间 隔。在向导完成后,若想要修改此数,则必须返回向导中修改,不可在程序中或状态表中修改。 注意:关于具体的 PID 参数值,每一个项目都不一样,需要现场调试来定,没有所谓经验参数。 第三步:设定回路输入输出值

图 5. 设定 PID 输入输出参数 在图 5 中,首先设定过程变量的范围: a. 指定输入类型 o Unipolar:单极性,即输入的信号为正,如 0-10V 或 0-20mA 等。 o Bipolar:双极性,输入信号在从负到正的范围内变化。如输入信号为±10V±5V 等时选用 。 o 20% Offset:选用 20%偏移。如果输入为 4-20mA 则选单极性及此项,4mA 是 0- 20mA 信号的 20%,所以选 20% 偏移,即 4mA 对应 6400,20mA 对应 32000。 b. 反馈输入取值范围 o 在 a.设置为 Unipolar 时,缺省值为 0 - 32000,对应输入量程范围 0 - 10V 或 0 - 20mA 等,输入信号为正 。 o 在 a.设置为 Bipolar 时,缺省的取值为-32000 - +32000,对应的输入范围根据量程不同可 以是±10V、±5V 等 。 o 在 a.选中 20% Offset 时,取值范围为 6400 - 32000,不可改变 此反馈输入 也可以是工 程单位数值,参见:设置给定-反馈的量程范围。然后定义输出类型。 c. Output Type(输出类型) 可以选择模拟量输出或数字量输出。模拟量输出用来控制一些需要模拟量给定的设备,如比 例阀、变频器等;数字量输出实际上是控制输出点的通、断状态按照一定的占空比变化,可 以控制固态继电器(加热棒等) d. 选择模拟量则需设定回路输出变量值的范围,可以选择: o Unipolar:单极性输出,可为 0-10V 或 0-20mA 等 。 o Bipolar:双极性输出,可为正负 10V 或正负 5V 等 。 o 20% Offset:如果选中 20% 偏移,使输出为 4 - 20mA 。 e. 取值范围: o d 为 Unipolar 时,缺省值为 0 到 32000 o d 为 Bipolar 时,取值-32000 到 32000 o d 为 20% Offset 时,取值 6400 - 32000,不可改变 如果选择了开关量输出,需要设 定此占空比的周期。 第四步:设定回路报警选项

图 6. 设定回路报警限幅值 向导提供了三个输出来反映过程值(PV)的低值报警、高值报警及过程值模拟量模块错误状 态。当报警条件满足时,输出置位为 1。这些功能在选中了相应的选择框之后起作用。 a.使能低值报警并设定过程值(PV)报警的低值,此值为过程值的百分数,缺省值为 0.10,即 报警的低值为过程值的 10%。此值最低可设为 0.01,即满量程的 1% 。 b.使能高值报警并设定过程值(PV)报警的高值,此值为过程值的百分数,缺省值为 0.90,即 报警的高值为过程值的 90%。此值最高可设为 1.00,即满量程的 100% 。 c.使能过程值(PV)模拟量模块错误报警并设定模块于 CPU 连接时所处的模块位置。“0”就是 第一个扩展模块的位置。 第五步:指定 PID 运算数据存储区

图 7. 分配运算数据存储区 PID 指令(功能块)使用了一个 120 个字节的 V 区参数表来进行控制回路的运算工作; 除此之外,PID 向导生成的输入/输出量的标准化程序也需要运算数据存储区。需要为它们 定义一个起始地址,要保证该地址起始的若干字节在程序的其它地方没有被重复使用。如果 点击“Suggest Address”,则向导将自动为你设定当前程序中没有用过的 V 区地址。 自动分配的地址只是在执行 PID 向导时编译检测到空闲地址。向导将自动为该参数表分配 符号名,用户不要再自己为这些参数分配符号名,否则将导致 PID 控制不执行。 第六步:定义向导所生成的 PID 初使化子程序和中断程序名及手/自动模式

图 8. 指定子程序、中断服务程序名和选择手动控制 向导已经为初使化子程序和中断子程序定义了缺省名,你也可以修改成自己起的名字。 a. 指定 PID 初使化子程序的名字。 b. 指定 PID 中断子程序的名字 注意: 1.如果你的项目中已经存在一个 PID 配置,则中断程序名为只读,不可更改。因为 一个项目中所有 PID 共用一个中断程序,它的名字不会被任何新的 PID 所更改。 2.PID 向导中断用的是 SMB34 定时中断,在用户使用了 PID 向导后,注意在其它编程时 不要再用此中断,也不要向 SMB34 中写入新的数值,否则 PID 将停止工作。 c.此处可以选择添加 PID 手动控制模式。在 PID 手动控制模式下,回路输出由手动输出设 定控制,此时需要写入手动控制输出参数一个 0.0-1.0 的实数,代表输出 的 0%-100%而不是直接去改变输出值。此功能提供了 PID 控制的手动和自动之间的无 扰切换能力。 第七步:生成 PID 子程序、中断程序及符号表等一旦点击完成按钮,将在你的项目中生成 上述 PID 子程序、中断程序及符号表等。 图 9. 生成 PID 子程序、中断程序和符号表等 第八步:配置完 PID 向导,需要在程序中调用向导生成的 PID 子程序(如下图)

图 10. PID 子程序

图 11. 调用 PID 子程序 a.必须用 SM0.0 来使能 PID,以保证它的正常运行 b.此处输入过程值(反馈)的模拟量输入地址 c.此处输入设定值变量地址(VDxx),或者直接输入设定值常数,根据向导中的设定 0.0 -100.0,此处应输入一个 0.0-100.0 的实数,例:若输入 20,即为过程值的 20%,假设 过程值 AIW0 是量程为 0-200 度的温度值,则此处的设定值 20 代表 40 度(即 200 度 的 20%);如果在向导中设定给定范围为 0.0 - 200.0,则此处的 20 相当于 20 度. d.此处用 I0.0 控制 PID 的手/自动方式,当 I0.0 为 1 时,为自动,经过 PID 运算从 AQW0 输出;当 I0.0 为 0 时,PID 将停止计算,AQW0 输出为 ManualOutput(VD4) 中的设定值,此时不要另外编程或直接给 AQW0 赋值。若在向导中没有选择 PID 手动功 能,则此项不会出现 e.定义 PID 手动状态下的输出,从 AQW0 输出一个满值范围内对应此值的输出量。此处 可输入手动设定值的变量地址(VDxx),或直接输入数。数值范围为 0.0-1.0 之间的一个 实数,代表输出范围的百分比。例:如输入 0.5,则设定为输出的 50%。若在向导中没有 选择 PID 手动功能,则此项不会出现 f.此处键入控制量的输出地址 g.当高报警条件满足时,相应的输出置位为 1,若在向导中没有使能高报警功能,则此项将不会出现 h.当低报警条件满足时,相应的输出置位为 1,若在向导中没有使能低报警功能,则此项将不会出现 i.当模块出错时,相应的输出置位为 1,若在向导中没有使能模块错误报警功能,则此项将不会出现调用 PID 子程序时,不用考虑中断程序。子程序会自动初始化相关的定时中断处 理事项,然后中断程序会自动执行。 第九步:实际运行并调试 PID 参数 没有一个 PID 项目的参数不需要修改而能直接运行,因此需要在实际运行时调试 PID 参 数。查看 Data Block(数据块),以及 Symbol Table(符号表)相应的 PID 符号标签的内容,可以找到包括 PID 核心指令所用的控制回路表,包括比例系数、积分时间等等。将此表的地址复制到 Status Chart(状态表)中,可以在监控模式下在线修改 PID 参数,而不必停机再次做组态参数调试合适后,用户可以在数据块中写入,也可以再做一次向导,或者编程向相应的数据区传送参数。

