1.程序家族有哪些成员?
PLC的控制程序一般由主程序、子程序和中断程序组成。西门子的S7-300/400将子程序分为功能(Function,或称为函数)和功能块(Function Block)。
在每一个扫描循环周期,CPU都要调用一次主程序,用户程序必须有一个并且只能有一个主程序。小型控制系统可以只有主程序。
中断程序用于快速响应中断事件。在中断事件发生时,CPU将停止执行当时正在处理的程序或任务,去执行用户编写的中断程序。执行完中断程序后,继续执行被暂停执行的程序或任务。
2.哪些情况需要使用子程序?
当系统规模很大、控制要求复杂时,如果将全部控制任务放在主程序中,主程序将会非常复杂,既难以调试,也难以阅读。使用子程序可以将程序分成容易管理的小块,使程序结构简单清晰,易于调试、查错和维护。
子程序也可以用于需要多次反复执行相同任务的地方,只需要编写一次子程序,别的程序在需要的时候多次调用它,而无需重写该程序。
3.怎样调用子程序?
主程序可以调用子程序,子程序也可以嵌套调用别的子程序。嵌套调用的层数是有限制的,例如S7-200的最大嵌套深度为8级。
执行完子程序后,返回调用它的程序中的调用指令的下一条指令。
4.每个扫描周期都会执行子程序吗?
子程序的调用可以是有条件的,在被调用期间,每个扫描周期都要执行一次被调用的子程序。调用条件不满足时不会执行子程序中的指令,因此使用子程序可以减少扫描循环时间。
5.停止调用子程序后,子程序中的线圈处于什么状态?
停止调用子程序后,不再执行子程序中的指令。子程序中线圈对应的编程元件如果没有受到别的程序的控制,将保持子程序最后一次执行后的状态不变。即使控制这些线圈的触点的状态变化,该线圈对应的元件的状态也不会变化,因为这时根本就没有执行子程序中的指令。
6.怎样实现子程序的无条件调用?
有的PLC的子程序调用指令不能直接接到左侧的垂直“电源”线上,需要通过触点电路来控制是否调用子程序,即子程序的调用是有条件的。可以用一直为ON的特殊位元件(例如S7-200的SM0.0或FX系列的M8000)的常开触点来实现子程序的无条件调用。
不同品牌的PLC的子程序大致可以分为两种,一种子程序没有输入、输出参数和局部变量,另一种则有。
1.什么是全局变量和局部变量?
以西门子的S7-200为例,输入I、输出Q、变量存储器V、内部存储器位M、定时器T、计数器C等属于全局变量,可以在符号表中为全局变量定义符号名。
程序组织单元(Program Organizational Unit)简称为POU,包括主程序、子程序和中断程序。每个POU均有自己的64字节局部变量,局部变量用L(Local)来表示,局部变量只能在它所在的POU中使用。与此相反,全局变量可以在各POU中使用。
2.局部变量有哪些类型?
子程序可以使用下列局部变量:
1) TEMP (临时变量)是暂时保存在局部数据区中的变量。只有在执行该POU时,定义的临时变量才被使用,POU执行完后,不再保存临时变量的数值。主程序和中断程序的局部变量表中只有TEMP变量。
2) IN(输入参数)由调用它的POU提供的传入子程序的输入参数。
3) OUT(输出参数)是子程序的执行结果,它被返回给调用它的POU。
4) IN_OUT(输入_输出参数)的初始值由调用它的POU传送给子程序,并用同一变量将子程序的执行结果返回给调用它的POU。
主程序和中断程序的局部变量表中只有临时变量TEMP。
3.子程序的输入、输出参数有什么作用?
具有输入、输出参数和局部变量的子程序易于实现结构化编程,对于长期生产同类设备或生产线的厂家尤为有用。编程人员为设备的各部件或工艺功能编写了大量的通用的子程序。即使不知道子程序的内部代码,只要知道子程序的功能和输入、输出参数的意义,就可以用它们快速“组装”出满足不同的用户要求的控制程序。就好像可以用数字集成电路芯片组成复杂的数字电路一样。
如果子程序没有输入、输出参数,这种子程序没有明确的软件接口,使用起来很不方便。
4.局部变量有什么优点?
1) 子程序如果没有局部变量,它和调用它的程序之间只能通过全局变量来交换数据,子程序内部也只能使用全局变量。将它移植到别的项目时,需要对各POU使用的全局变量作统一安排,以保证不会出现地址冲突。当程序很复杂,子程序很多时,这种地址分配是很花时间的。
如果子程序有局部变量,并且在子程序中只使用局部变量,不使用全局变量,因为与其他POU没有地址冲突,不作任何改动,就可以将子程序移植到别的项目中去。
为了减少移植子程序的工作量,在子程序中应尽量避免使用全局变量和全局符号。
2) 如果使用局部变量表中的临时变量(TEMP),同一片物理存储器可以在不同的程序中重复使用。
下面以S7-200为例,介绍子程序的编程和调用的过程。
1.创建子程序
生成项目时,自动生成一个子程序。打开程序编辑器,执行“编辑”菜单中的命令“插入”→“子程序”,将自动生成和打开新的子程序。
2.生成局部变量
名为“模拟量计算”的子程序如下图所示,在该子程序的局部变量表中,定义了3个输入(IN)参数,一个输出(OUT)参数,和名为“暂存1”的临时(TEMP)变量。局部变量表最左边的一列是自动分配的每个变量在局部存储器(L)中的地址。
3.编写子程序的梯形图
局部变量表的下面是程序区(见上图),输入参数“转换值”是来自模拟量输入模块的与模拟量成正比的转换值,输出参数“模拟值”是计算出的对应的模拟量(例如压力、温度等)的工程值。子程序中变量名称前的“#”表示该变量是局部变量,它是编程软件自动添加的,输入局部变量时不用输入“#”号。特殊存储器位SM0.0的常开触点总是闭合。
4.子程序的调用
可以在主程序、其他子程序或中断程序中调用子程序,调用子程序时将执行子程序中的指令,直至子程序结束,然后返回调用它的程序中该子程序调用指令的下一条指令之处。
创建子程序后,在上图左边指令树最下面的“调用子程序”文件夹中自动生成刚创建的子程序“模拟量计算”对应的图标。
在梯形图程序中插入子程序调用指令时,首先打开主程序,显示出需要调用子程序的网络。打开指令树最下面的“调用子程序”文件夹,用鼠标左键按住需要调用的子程序图标,将它“拖”到程序编辑器中需要的位置。放开左键,子程序块便被放置在该位置。
子程序方框中左边的“转换值”等是在子程序“模拟量计算”的变量声明表中定义的输入参数,右边的“模拟值”是输出参数。它们被称为子程序的形式参数,简称为形参,形参在子程序内部的程序中使用。调用子程序时,需要为每个形参指定实际的参数(简称为实参),例如为形参“转换值”指定的实参为模拟量输入字AIW2(见上图)。
子程序调用指令中的实参的有效操作数为存储器地址、常量、全局符号和调用指令所在的POU中的局部变量,不能指定被调用子程序中的局部变量。
CPU调用子程序时,输入参数被复制到子程序的局部存储器,子程序执行完后,从局部存储器复制输出参数到指定的输出参数地址。
故障安全 SIMATIC S7-1200 控制器基于 S7-1200 标准 CPU 并提供了其它安全相关功能。
它们可用于符合 IEC 61508 的 SIL 3 以及 ISO 13849-1 的 PL e 的安全任务。
安全相关程序是在 TIA 博途中创建的。STEP 7 Safety 组态工具为用 LAD 和 FBD 语言编写的安全相关程序提供了命令、操作和块。为此,我们提供了一个经 TüV 认同的预组态块库以提供安全功能。
特性 |
CPU 1214 FC |
CPU 1215 FC |
---|---|---|
类型 |
DC/DC/DC、DC/DC/继电器 |
DC/DC/DC、DC/DC/继电器 |
主存储器,集成式 |
125 KB |
150 KB |
装载存储器,集成式 |
4 MB |
4 MB |
存储卡 |
SIMATIC 存储卡(可选) |
SIMATIC 存储卡(可选) |
标准数字量输入/输出,集成式 |
14/10 |
14/10 |
标准模拟量输入,集成式 |
2 |
2 |
标准模拟量输出,集成式 |
- |
2 |
过程映像 |
1024 字节用于输入/1024 字节用于输出 |
1024 字节用于输入/1024 字节用于输出 |
通过信号板进行扩展 |
最多 1 个 |
最多 1 个 |
通过信号模块进行扩展 |
最多 8 个 |
最多 8 个 |
通过通信模块进行扩展 |
最多 3 个 |
最多 3 个 |
SIMATIC S7-1200 是用于本地和分布式自动化解决方案的理想控制器,可满足中央系统中的安全要求。
通过工程组态,故障安全 SIMATIC S7-1200 可提供预组装、经过测试和 TüV 认证的块,可用于实现所有常见安全功能,如急停或带或不带互锁功能的保护门监控。
机械特性
S7-200PLC中断指令介绍
中断指令有4条,包括开、关中断指令,中断连接、分离指令。指令格式如表1所示。
开中断(ENI)指令全局性允许所有中断事件。关中断(DISI)指令全局性禁止所有中断事件,中断事件的每次出现均被排队等候,直至使用全局开中断指令重新启用中断。
PLC转换到RUN(运行)模式时,中断开始时被禁用,可以通过执行开中断指令,允许所有中断事件。执行关中断指令会禁止处理中断,但是现用中断事件将继续排队等候。
中断连接指令(ATCH)指令将中断事件(EVNT)与中断程序号码(INT)相连接,并启用中断事件。
分离中断(DTCH)指令取消某中断事件(EVNT)与所有中断程序之间的连接,并禁用该中断事件。
注意:一个中断事件只能连接一个中断程序,但多个中断事件可以调用一个中断程序。
表1 中断指令格式
LAD
STL
ENI
DISI
ATCH INT,EVNT
DTCH EVNT
操作数及数据类型
无
无
INT:常量 0-127
EVNT:常量,CPU 224: 0-23; 27-33
INT/EVNT数据类型:字节
EVNT:常量, CPU 224: 0-23; 27-33
数据类型:字节
1. 开、关中断指令
2. 中断连接、分离指令
S7-200 CPU22X 系列PLC I/O 点数扩展和编址
S7-200 CPU22X 系列的每种主机所提供的本机I/O点的I/O地址是固定的,进行扩展时,可以在CPU右边连接多个扩展模块。如图所示,每个扩展模块的组态地址编号取决于各模块的类型和该模块在I/O链中所处的位置。输入与输出模块的地址不会冲突,模拟量控制模块地址也不会影响数字量。
编址方法是同样类型输入或输出点的模块在链中按所处的位置而递增,这种递增是按字节进行的,如果CPU或模块在为物理I/0点分配地址时未用完一个字节,那些未用的位也不能分配给I/O链中的后续模块。
例如,某一控制系统选用CPU224,系统所需的输入/输出点数为:数字量输入24点、数字量输出20点、模拟量输入6点和模拟量输出2点。
本系统可有多种不同模块的选取组合,并且各模块在I/O链中的位置排列方式也可能有多种,图2所示为其中的一种模块连接形式。表1所示为其对应的各模块的编址情况。
图2 模块连接形式 |
表1 各模块的编址
主机 |
模块 1 |
模块 2 I/O |
模块 3 |
模块 4 |
模块 5 |
I0.0 Q0.0 |
I2.0
|
Q2.0
|
AIW0 AQW0
|
I3.0 Q3.0
|
AIW8 AQW4
AIW10
|
● 同类型输入或输出的模块按顺序进行编制。
● 数字量模块总是保留以8位(1个字节)递增的过程映象寄存器空间。如果模块没有给保留字节中每一位提供相应的物理点,那些未用位不能分配给I/O链中的后续模块。对于输入模块,这些保留字节中未使用的位会在每个输入刷新周期中被清零。
● 模拟量I/O点总是以两点递增的方式来分配空间。如果模块没有给每个点分配相应的物理点,则这些I/O点会消失并且不能够分配给I/O链中的后续模块。
可编程控制器梯形图设计规则
1.触点的安排
梯形图的触点应画在水平线上,不能画在垂直分支上。
2.串、并联的处理
在有几个串联回路相并联时,应将触点最多的那个串联回路放在梯形图最上面。在有几个并联回路相串联时,应将触点最多的并联回路放在梯形图的最左面。
3.线圈的安排
不能将触点画在线圈右边,只能在触点的右边接线圈。
4.不准双线圈输出
如果在同一程序中同一元件的线圈使用两次或多次,则称为双线圈输出。这时前面的输出无效,只有最后一次才有效,所以不应出现双线圈输出。
5.重新编排电路
如果电路结构比较复杂,可重复使用一些触点画出它的等效电路,然后再进行编程就比较容易。
6.编程顺序
对复杂的程序可先将程序分成几个简单的程序段,每一段从最左边触点开始,由上之下向右进行编程,再把程序逐段连接起来。