S7_200 Smart PLC PID常见的问题

西门子 S7_200 Smart PLC PLC PID 调节常见的问题和处理办法。

1.PID向导生成的程序不执行?

a.必须保证用SM0.0无条件调用PID0_CTRL程序
b.在程序的其它部分不要再使用SMB34定时中断,也不要对SMB34赋值
c.确认当前工作状态:手动还是自动

2. 如何实现PID反作用调节?

在有些控制中需要PID反作用调节。例如:在夏天控制空调制冷时,若反馈温度(过程值)低于设定温度,需要关阀,减小输出控制(减少冷水流量等),这就是PID反作用调节(在PID正作用中若过程值小于设定值,则需要增大输出控制)。
若想实现PID反作用调节,需要把PID回路的增益设为负数。对于增益为0的积分或微分控制来说,如果指定积分时间、微分时间为负值,则是反作用回路。

3.如何根据工艺要求有选择地投入PID功能?

可使用”手动/自动”切换的功能。PID向导生成的PID功能块需要保证每个扫描周期都调用,所以建议在主程序内使用SM0.0调用。

4.做完PID向导后,如何知道向导中设定值,过程值及PID等参数所用的地址?

做完PID向导后可在符号表中,查看PID向导所生成的符号表(上例中为PID0_SYM),可看到各参数所用的详细地址,及数值范围。
在数据块中,查看PID指令回路表的相关参数。用户可以在状态表中, 输入相应的参数地址,然后在线写入需要的PID参数数值,这样用户就可根据工艺需要随时对PID参数、设定值等进行调整。

5.PID已经调整合适,如何正式确定参数?

可以在数据块中直接写入参数,作为初始值使用。

6.对于某个具体的PID控制项目,是否可能事先得知比较合适的参数?有没有相关的经验数据?

虽然有理论上计算PID参数的方法,但由于闭环调节的影响因素很多而不能全部在数学上精确地描述,计算出的数值往往没有什么实际意义。因此,除了实际调试获得参数外,没有什么可用的经验参数值存在。甚至对于两套看似一样的系统,都可能通过实际调试得到完全不同的参数值。

7.PID控制不稳定怎么办?如何调试PID

闭环系统的调试,首先应当做开环测试。所谓开环,就是在PID调节器不投入工作的时候,观察:

反馈通道的信号是否稳定
输出通道是否动作正常

可以试着给出一些比较保守的PID参数,比如放大倍数(增益)不要太大,可以小于1,积分时间不要太短,以免引起振荡。在这个基础上,可以直接投入运行观察反馈的波形变化。给出一个阶跃给定,观察系统的响应是最好的方法。
如果反馈达到给定值之后,历经多次振荡才能稳定或者根本不稳定,应该考虑是否增益过大、积分时间过短;如果反馈迟迟不能跟随给定,上升速度很慢,应该考虑是否增益过小、积分时间过长……总之,PID参数的调试是一个综合的、互相影响的过程,实际调试过程中的多次尝试是非常重要的步骤,也是必须的。

8.没有采用积分控制时,为何反馈达不到给定?

这是必然的。因为积分控制的作用在于消除纯比例调节系统固有的“静差”。没有积分控制的比例控制系统中,没有偏差就没有输出量,没有输出就不能维持反馈值与给定值相等。所以永远不能做到没有偏差。

9.S7-200 SMART控制变频器,在变频器也有PID控制功能时,应当使用谁的PID功能?

可以根据具体情况使用。一般来说,如果需要控制的变量直接与变频器直接有关,比如变频水泵控制水压等,可以优先考虑使用变频器的PID功能。

10.做完PID向导后,能否查看PID生成的子程序,中断程序?

PID向导生成的子程序,中断程序用户是无法看到的,也不能对其进行修改。没有密码能够打开这些子程序,一般的应用也没有必要打开查看。

11.指令块与向导使用的PID回路号是否可以重复?

不可以重复,使用PID向导时,对应回路的指令块也会调用,所以指令块与向导使用的PID回路号不能重复,否则会产生预想不到的结果。

12.同一个程序里既使用PID指令块又使用向导,PID数目怎样计算?

使用PID向导时,对应回路的指令块也会调用,所以PID指令块与向导一共支持8个。

13.PID指令块可以在主程序/子程序里调用吗?(PID指令块常见问题)

可以,但是不推荐,主程序/子程序的循环时间每个周期都可能不同,不能保证精确的采样,建议用定时中断,例如SMB34/SMB35。

14.SMB34定时最大255ms,如果采样时间是1S怎样实现?(PID指令块常见问题)

采样时间是1S,要求PID指令块每隔1S调用一次。可以先做一个250ms的定时中断,然后编程累加判断每4次中断执行一次PID指令即可。

15.PID指令块怎样实现手动调节?(PID指令块常见问题)

可以简单地使用”调用/不调用”指令的方式控制自动/手动模式。不调用PID指令时,可以手动给输出地址0.0-1.0之间的实数。

16.PID指令块实现数字量输出?(PID指令块常见问题)

a.通过PWM指令,将PID输出值转换为所需时间基准的整数,送到PWM的Pulse,控制脉宽(该法简单易用,但是要求输出点只能是Q0.0或Q0.1)。
b.自己编程实现类似于PWM的输出。(虽然不限制Q点,但编程较复杂,不建议使用,可以直接考虑用PID向导)。

S7-200 Smart PLC USS通信的常见问题

1.S7-200 SMART CPU USS 协议库能否与第三方变频器进行通信,其支持与哪些变频器通信?

USS 协议(Universal Serial Interface Protocol,即通用串行接口协议)是西门子专为西门子驱动装置开发的通用通信协议,不能用于与第三方变频器通信。
S7-200 SMART USS 协议库可用与MicroMaster 3、MicroMaster 4、Sinamics G110、Sinamics G120、Sinamics S110以及Sinamics V20 系列变频器通信。

2.S7-200 SMART CPU 与西门子变频器 USS 通信不上的可能原因?

USS 通信需要从硬件接线和编程两个方面进行故障排查。硬件接线方面需要注意以下几点:
● S7-200 SMART CPU 的通信端口是非隔离型,通信距离最长 50m,超出 50m 距离需要增加 RS485 中继器。
● S7-200 SMART CPU 的通信端口是非隔离型,与变频器通信时需要做好等电位连接。通过将 CPU 模块右下角的传感器电源的 M 端与其它变频器通信端口的 0V 参考点连接起来做到等电位连接。
编程方面需要注意以下几点:
● 需要使用沿信号调用 USS_INIT 指令用于启用、初始化 USS 通信, USS 从站站地址需要在主站的轮询地址表中被激活。
● 需要使用 SM0.0 调用 USS_CTRL 指令,每一个 USS 从站只能使用一条 USS_CTRL 指令。

3.S7-200 SMART CPU 集成的RS485 端口(端口 0 )以及 SB CM01 信号板(端口 1 )两个通信端口能否同时进行 USS 通信?

S7-200 SMART CPU 两个通信端口不能同时进行 USS 通信,端口 0 与端口 1 在同一时刻只能有一个端口用于 USS 通信。

4.同一时刻触发多条 USS_RPM_x ?或 USS_WPM_x 指令,为什么只有一条参数读写指令被执行,其它参数读写指令报 8# 错误(通信端口忙于处理其它指令)?

USS_RPM_x 指令和USS_WPM_x 指令同一时刻只能激活一条指令,多条参数读写指令的执行可以采用轮询方式。

5. USS_RPM_R 指令数据读取变频器参数时,为什么读出的数值会出现跳变?

USS_RPM_R 指令输入参数 XMT_REQ 为 True 时将启动参数读取请求并清除输出参数 Value 数值,所以会造成读出的参数数值跳变的现象。可以使用 USS_RPM_R 指令的 Done 完成位的上升沿信号来保存读取的参数值。

S7-200 Smart PLC Modbus通信的常见问题

1.S7-200 SMART 是否支持 Modbus ASCII 通信模式?

STEP 7-Micro/WIN SMART 软件未提供Modbus ASCII 通信模式指令库。S7-200 SMART CPU若用于Modbus ASCII 通信时,则需要用户使用自由口通信模式进行编程。

2.S7-200 SMART CPU 集成的RS485 端口(端口 0 )以及SB CM01 信号板(端口 1 )两个通信端口能否同时作为 Modbus RTU 主站或者同时作为 Modbus RTU从站?

S7-200 SMART V2.2版本支持两个通信端口同时做MODBUS RTU主站,不支持同时做MODBUS RTU从站。

3.S7-200 SMART CPU作为 Modbus RTU 主站如何访问 Modbus 地址范围大于49999 的保持寄存器?

通常 Modbus 协议的保持寄存器范围在 40001 到 49999 之间,这个范围对于多数应用来说已经足够了,但有些 Modbus 从站保持寄存器区的地址会超出该范围。Modbus RTU 主站协议库支持保持寄存器地址范围为(40001 到 49999) 或者(400001 到 465536)。如果 Modbus 从站地址范围为 400001 – 465536,只需在调用 MBUS_MSG 子程序时给 Addr 参数赋相应的值即可,如 416768。

4.S7-200 SMART CPU作为 Modbus RTU 主站,多次调用 MBUS_MSG 指令时,为什么该指令会出现 6# 错误代码?

a.同一时间只能有一条 MBUS_MSG 指令处于激活状态,如果激活多条 MBUS_MSG 指令,将执行第一条 MBUS_MSG 指令,所有后续 MBUS_MSG 指令将中止执行并出现 6# 错误代码。多条 MBUS_MSG 指令的执行需要采用轮询方式 。

b.Modbus库存储区中分配的建议地址区与编程中已使用的V存储区有重叠。

5.S7-200 SMART CPU作为 Modbus RTU 主站,从站故障或者通信线路断开时,主站会尝试发送多次请求报文,从而导致通信时间过长。如何减少主站的重发次数,以提高通信效率?

MBUS_MSG 指令被激活时将发送 Modbus 请求报文帧,如果在Timeout 参数定义的时间间隔内主站未接收到从站应答,Modbus RTU 主站协议库默认的情况下还会再发送 2 次 Modbus 请求报文帧;在最后一次请求报文帧发送后,经过 Timeout 参数定义的时间间隔后还未收到应答时, MBUS_MSG 指令的 Done 完成位才被设置为 1 。将 mModbusRetries 变量的数值由 2 改为 0 ,即可取消 Modbus 请求报文帧的重试次数。mModbusRetries 变量的绝对地址可通过查询Modbus RTU 主站协议库的符号表获取,如图 1. Modbus RTU 主站指令符号表所示。

Modbus RTU 主站指令符号表

6.为什么有的 HMI 软件使用 Modbus RTU 协议可以读取作为 Modbus RTU 从站 S7-200 SMART CPU 的数据,但是不能写入数据?

可能此软件使用Modbus功能15写多个开关量输出功能到S7-200 SMART CPU时,没有遵守从站协议中“以整字节地址边界(如Q0.0、Q2.0)开始、以8的整数倍为位个数”的规约。定义HMI 软件严格执行此规律可以避免发生写入错误的情况

7.为什么有的 HMI 软件使用 Modbus RTU 协议读取作为 Modbus RTU 从站 S7-200 SMART CPU 的浮点型数据时会出现错误?

可能此HMI软件使用Modbus RTU通信协议时,处理保持寄存器中浮点数的存储格式与西门子的浮点数存储格式不同。西门子的PLC遵循“高字节低地址、低字节高地址”的规约。
Modbus RTU的保持寄存器以“字”为单位,1个浮点型数据则由2个“字”构成。HMI软件在处理时可能会将保持寄存器的两个“字”互换位置,造成不能识别以西门子格式表示的浮点数。如果HMI软件一方无法处理这种浮点数,则可在S7-200 SMART CPU中编程将存入保持寄存器区的浮点数的高“字”和低“字”互换。

8.S7-200 SMART紧凑型CPU作为 Modbus RTU 从站时,已经将 MBUS_INIT 指令的Mode 输入参数设置为“1”了,但是 MBUS_SLAVE 指令还是会出现 10 号错误(从站功能未启用)?

S7-200 SMART紧凑型CPU 不能扩展信号模块,不具有模拟量输入通道,如果MBUS_INIT 指令的MaxAI 输入参数设置不为“0”,则MBUS_SLAVE 指令会出现 10 号错误。

9.S7-200 SMART 使用S7-200的Modbus slave库无法初始化成功?

如下图所示,使用STEP 7-Micro/WIN SMART 直接打开S7-200 MODBUS 通信程序并做相关设置后测试,

首先,图中的MBUS_INIT的相关参数针对200smart来说,设置均正常,但是从测试结果可以看出,初始化MBUS_INIT报错1:存储器范围出错,而且MBUS_SLAVE报错10:从站功能未启用

Modbus Slave 报错

这是因为200的库程序里针对过程映像区MaxIQ(0-128),AaxAI(0-32)做的报警判断,如下图Modbus Slave程序所示,S7-200的过程映像区最大0-31,所以超过31会报错,【但S7-200smart的AI过程映像区最大255】

10.S7-200 SMART CPU作为 Modbus RTU 从站时,是否支持 Modbus RTU 主站发送的广播命令?

S7-200 SMART CPU 作为 Modbus RTU 从站时,不支持广播命令。