西门子模块6ES7307-1EA01-0AA0现货供应
西门子模块6ES7307-1EA01-0AA0现货供应
OB按优先级大小执行,如果所发生事件的优先级高于当前执行的OB ,则中断此 OB 的执行。优先级相同的事件,将按发生的时间顺序进行处理。
与S7-300/400比较,S7-1200/1500的错误处理有了较大的变化,本文主要介绍S7-1200/1500所支持的错误处理组织块以及CPU对这些错误的响应。
1 S7-1200/1500的错误处理组织块
1.1 S7-1200的错误处理组织块
图1-1
S7-1200不再支持同步错误中断组织块OB121,OB122 。
1.2 S7-1500的错误处理组织块
图1-2
S7-1200与S7-1500支持的错误处理组织块的块号与S7-300/400保持一致,不同的是S7-1500除时间错误中断组织块OB80的优先级22不能改变外,其它的错误处理组织块的优先级都可以修改。如诊断中断OB82:
图1-3
除了可以修改错误中断OB的优先级,S7-1500的事件中断(如硬件中断)的优先级也可以修改,这样用户通过修改优先级可避免重要的中断请求被其它中断请求延迟或中断。
2 CPU对会引起错误中断的响应
CPU对错误处理组织块的响应表:
错误处理OB | 故障类别 | ‘到达事件‘ 触发 | ‘离去事件‘ 触发 | OB没有装载CPU停机 | |||
S7-1200 | S7-1500 | S7-300/400 | |||||
OB80 | 超出*大循环时间* | 异步 | 是 | 否 | 是 | 是 | 是 |
时间错误** | 否*** | 否*** | 是 | ||||
OB82 | 异步 | 是 | 是 | 否*** | 否*** | 是 | |
OB83 | 异步 | 是 | 是 | - | 否*** | 是 | |
OB86 | 异步 | 是 | 是 | - | 否*** | 是 | |
OB121 | 同步 | 是 | 否 | - | 是 | 是 | |
OB122 | 同步 | 是 | 否 | - | 否*** | 是 |
表2-1
注:
-: 不支持。
*: 超出*大循环时间请求OB80时而下载OB80并不会使CPU停机,但如果一个周期内超时两倍的循环监控时间 S7-1200/1500/300/400都会停机。
**: 由时间事件(如循环中断,延时中断,时间中断)触发的时间错误。
***:CPU不会停机,但会在诊断缓冲区产生诊断记录。
3 GET_ERROR,GET_ERR_ID对PLC错误处理的影响
GET_ERROR和GET_ERR_ID是“获取本地错误信息”指令,S7-1200/1500可通过编程用来查询程序块内出现的错误,这种程序执行中发生的错误就是所说的‘同步‘错误。
图3-1
“获取本地错误信息”指令支持块内进行本地错误处理。将“获取本地错误信息”插入块
的程序代码中时,如果发生错误,则将忽略所有预定义的系统响应。
GET_ERROR指令可以读到详细的错误信息,GET_ERR_ID只读到其中的错误编号。
具体用法可参考软件在线帮助或参考STEP7 Professional V12的手册
因为GET_ERROR和GET_ERR_ID对PLC的同步错误处理的影响相同,下面只对GET_ERROR指令进行说明。
3.1 GET_ERROR对S7-1200同步错误处理的影响
因为S7-1200不支持OB121,OB122,在发生‘同步‘错误时,只在CPU的诊断缓冲区产生错误记录:同时ERR LED闪烁
举例:IO访问错误
程序中访问了外设地址ID1000:P,对S7-1200来说,ID1000是默认分配给高速计数通道HSC1,但是在实际的组态中没有使能HSC1,那么就不存在这个外设。
图3-2
S7-1200每执行一次这条指令,在诊断缓冲区产生一条错误记录,同时ERR LED闪烁,直到 ”Tag_1”复位。
图3-3
在发生错误指令的下面执行GET_ERROR:
图3-4
错误仍然存在,但CPU不报错,诊断缓冲区也不会产生任何相关错误记录。
3.2 GET_ERROR对S7-1500同步错误处理的影响
与S7-1200比较,因为S7-1500支持两个同步错误处理组织块OB121,OB122,GET_ERROR对S7-1500的同步错误处理的影响还要考虑对OB121,OB122的影响。
本文的表2-1说明了S7-1500没有执行GET_ERROR的情况下CPU的响应,下面对同步错误发生时执行GET_ERROR后CPU的响应。
S7-1500在发生两种同步错误时在有无下载对应错误处理组织块(程序错误:OB121,IO访问错误:O122)的响应是不同的,但在发生这两种错误的程序块中执行GET_ERROR后,S7-1500将忽略所有预定义的对这个程序块中出现的错误的系统响应,因此会产生以下结果:
n CPU ERR LED不会闪烁
n 诊断缓冲区不会产生错误记录
n 不再触发OB121和OB122,发生程序错误时即使不下载OB121 CPU也不会停机
PID控制的难点在于整定控制器的参数。为了学习整定PID控制器参数的方法,必须做闭环实验,开环运行PID程序没有任何意义。用硬件组成一个闭环需要PLC的CPU模块、模拟量输入模块和模拟量输出模块,此外还需要被控对象、检测元件、变送器和执行机构。例如可以用电热水壶作为被控对象,用热电阻检测温度,用温度变送器将温度转换为标准电压,用移相控制的交流固态调压器作执行机构。
有没有比较简单的实现PID闭环控制的方法呢?
在控制理论中,用传递函数来描述被控对象、检测元件、执行机构和PID控制器。
被控对象一般是串联的惯性环节和积分环节的组合。在实验室可以用以运算放大器为核心的模拟电路来模拟广义的被控对象(包括检测元件和执行机构)的传递函数。我曾将这种运放电路用于S7-200和S7-1200的PID参数自动调节实验。
用运算放大器模拟被控对象一般需要做印刷电路板,还是比较麻烦。有没有更简单的方法呢?
除了用运算放大器来模拟被控对象的传递函数,也可以用PLC的程序来模拟。为此我编写了用来模拟被控对象的S7-200的子程序,它也可以用于S7-200 SMART。使用模拟的被控对象的PID闭环示意图如下图所示,虚线右边是被控对象,DISV是系统的扰动输入值。虚线左边是PLC的PID控制程序。
被控对象的数学模型为3个串联的惯性环节,其增益为GAIN,3个惯性环节的时间常数分别为TIM1~TIM3。其传递函数为
分母中的“s”为自动控制理论中拉普拉斯变换的拉普拉斯算子。将某一时间常数设为0,可以减少惯性环节的个数。图中被控对象的输入值INV是PID控制器的输出值。被控对象的输出值OUTV作为PID控制器的过程变量(反馈值)PV。
下图是模拟被控对象的子程序,实际上只用了两个惯性环节,其时间常数分别为5000ms和2000ms。用与PID的采样周期相同的定时中断时间间隔来调用这个子程序。
下图是用来监视PID回路运行情况的STEP 7-Micro/WIN的PID调节控制面板,可以用它进行PID参数自整定或手动调节PID参数的实验。标有PV(即被控量)的是过程变量的阶跃响应曲线。
将上图中的积分时间由0.03min(分钟)增大到0.12min,下图的超调量有明显的减小。通过修改PID的参数,观察被控量阶跃响应曲线给出的超调量和调节时间等特征量的变化情况,可以形象直观、快速地学习和掌握PID参数的整定方法。