首页 理论教育 -功能指令

-功能指令

时间:2022-02-14 理论教育 版权反馈
【摘要】:看门狗复位指令允许S7-200PLCCPU的系统看门狗定时器被重新触发,这样可以在不引起看门狗错误的情况下,增加扫描所允许的时间。跳转指令和与之相应的标号指令必须位于同一段程序代码。SCR指令能够按照自然工艺段在LAD、FBD或STL中编制状态控制程序。在装载SCR指令与SCR结束指令之间的所有逻辑操作的执行取决于S堆栈的值。在PLC中,每个状态用状态软元件——状态继电器S表示。

1.传送指令

1)字节、字、双字或者实数传送

其LAD指令格式如图7-23所示。

字节传送(MOVB)、字传送(MOVW)、双字传送(MOVD)和实数传送(MOVR)指令在不改变原值的情况下将IN中的值传送到OUT。使用双字传送指令可以创建一个指针

2)块传送

其LAD指令格式如图7-24所示。

图7-23 数据传送指令的LAD格式

图7-24 块传送指令的LAD格式

字节块传送(BMB)、字块传送(BMW)和双字块传送(BMD)指令传送指定数量的数据到一个新的存储区,数据的起始地址IN,数据长度为N个字节、字或者双字,新块的起始地址为OUT。N的范围从1到255。

【例7-1】 传送类指令应用,如图7-25所示。

程序执行完毕后,将16#AB传送到VB0中,并将以VB10为首地址的4个单元(即VB10、VB11、VB12、VB13)中的数据依次传送到VB100、VB101、VB102、VB103中。

图7-25 例7-1图

2.程序控制指令

1)条件结束(END)

其LAD指令格式如图7-26所示。

条件结束指令根据前面的逻辑关系终止当前扫描周期,可以在主程序中使用条件结束指令,但不能在子程序或中断服务程序中使用该命令。

2)停止(STOP)

其LAD指令格式如图7-26所示。

图7-26 END、STOP、WDR指令的LAD格式

停止指令导致CPU从RUN到STOP模式,从而可以立即终止程序的执行。

如果STOP指令在中断程序中执行,那么该中断立即终止,并且忽略所有挂起的中断,继续扫描程序的剩余部分。完成当前周期的剩余动作,包括主用户程序的执行,并在当前扫描的最后,完成从RUN到STOP模式的转变。

3)看门狗复位(WDR)

其LAD指令格式如图7-26所示。

看门狗复位指令允许S7-200PLCCPU的系统看门狗定时器被重新触发,这样可以在不引起看门狗错误的情况下,增加扫描所允许的时间。使用WDR指令时要小心,因为如果用循环指令去阻止扫描完成或过度的延迟扫描完成的时间,那么在终止本次扫描之前,下列操作过程将被禁止:

(1)通信(自由端口方式除外);

(2)I/O更新(立即I/O除外);

(3)强制更新;

(4)SM位更新(SM0,SM5~SM29不能被更新);

(5)运行时间诊断;

(6)由于扫描时间超过25s,10ms和100ms定时器将不会正确累计时间;

(7)在中断程序中的STOP指令。

如果希望程序的扫描周期超过500ms,或者在中断事件发生时有可能使程序的扫描周期超过500ms时,应该使用看门狗复位指令来重新触发看门狗定时器。每次使用看门狗复位指令,应该对每个扩展模块的某一个输出字节使用一个立即写指令来复位每个扩展模块的看门狗。

【例7-2】 END、STOP、WDR指令的应用,如图7-27所示。

当检测到I/O错误时,强制切换到STOP模式。当M5.6接通时,允许扫描周期扩展,重新触发S7-200PLCCPU的看门狗。当I0.0接通时,终止当前扫描周期。

4)For-Next循环指令

FOR和NEXT指令可以描述需重复进行一定次数的循环体。每条FOR指令必须对应一条NEXT指令。For-Next循环嵌套(一个For-Next循环在另一个For-Next循环之内)深度可达8层。

FOR-NEXT指令执行FOR指令和NEXT指令之间的指令,必须指定计数值或者当前循环次数(INDX)、初始值(INIT)和终止值(FINAL)。NEXT指令标志着FOR循环的结束。例如,给定初值(INIT)为1,终值(FINAL)为10,那么随着当前计数值(INDX)从1增加到10,FOR与NEXT之间的指令被执行10次。如果初值大于终值,那么循环体不被执行。每执行一次循环体,当前计数值增加1,并且将其结果同终值作比较,如果大于终值,那么终止循环。

图7-27 例7-2图

【例7-3】 For-Next循环指令应用,如图7-28所示。

图7-28 例7-3图

当I2.0接通时,外循环(1)执行100次。当I2.1接通时,外循环每执行一次,内循环执行两次。第一个NEXT,回路2结束。第二个NEXT,回路1结束。

5)跳转指令

其LAD指令格式如图7-29所示。

跳转到标号指令(JMP)执行程序内标号N指定的程序分支。标号指令标记跳转目的地的位置N。该指令可以在主程序、子程序或者中断服务程序中使用跳转指令。跳转指令和与之相应的标号指令必须位于同一段程序代码。(无论是主程序、子程序还是中断服务程序)

图7-29 跳转指令格式

要注意以下几点。

(1)不能从主程序跳到子程序或中断程序,同样不能从子程序或中断程序跳出。

(2)可以在SCR程序段中使用跳转指令,但相应的标号指令必须也在同一个SCR段中。

(3)N=0~255。

6)顺序控制继电器(SCR)指令

Ⅰ.指令介绍

SCR指令能够按照自然工艺段在LAD、FBD或STL中编制状态控制程序。只要应用中包含的一系列操作反复执行,就可以使用SCR使程序更加结构化,以至于直接针对应用。这样可以使得编程和调试更加快速和简单。

LSCR:SCR装载指令标志着一个SCR段的开始,SCR结束指令则标志着SCR段的结束。在装载SCR指令与SCR结束指令之间的所有逻辑操作的执行取决于S堆栈的值。而在SCR结束指令和下一条装载SCR指令之间的逻辑操作则不依赖于S堆栈的值。

SCRT:SCR传输指令,将程序控制权从一个激活的SCR段传递到另一个SCR段。执行SCRT指令可以使当前激活的程序段的S位复位,同时使下一个将要执行的程序段的S位置位。

SCRE:SCR条件结束指令,可以使程序退出一个激活的程序段而不执行SCRE与SCRE之间的指令。

Ⅱ.顺序控制功能图

顺序控制功能图(SFC)主要用于设计具有明显阶段性工作顺序的系统。一个控制过程可以分为若干工序(阶段),将这些工序称为状态。状态与状态之间由转换条件分隔,相邻的状态具有不同的动作形式。在PLC中,每个状态用状态软元件——状态继电器S表示。S7-200PLC的状态继电器编号为S0.0~S31.7。

顺序控制功能图设计的程序比用基本指令设计的梯形图更直观、易懂,并且根据顺序功能图能够快速编写出LAD程序。编写顺序控制功能图要把握好四要素。

(1)驱动有关负载:在本状态下做什么。如图7-30所示,在当前状态S0.1下,驱动负载Q0.0。

(2)指定转移条件:在顺序控制功能图中,相邻的两个状态之间实现转移必须满足一定的条件。如图7-30所示,当I0.2接通时,系统从S0.1转移到S0.2。

(3)转移方向(目标):置位下一个状态。如图7-30所示,当I0.2接通时,如果原来处于S0.1状态,则程序将从S0.1转移到S0.2。

(4)顺序控制功能图及顺序控制继电器(SCR)指令应用。

图7-30 顺序控制功能图的三要素

使用顺序功能图编程有3种形式,即顺序结构、选择分支结构及并行分支结构。

①顺序结构。使用顺序控制功能图编程时,程序中只有一个流动的路径称为顺序结构,如图7-31所示。每一个顺序控制功能图一般设定一个初始状态。初始状态的编程要特别注意,在开始运行时,初始状态必须用其他方法预先驱动,使其处于工作状态。

②选择分支结构。在多个分支流程中根据条件选择一条分支流程运行,其他分支的条件不能同时满足。程序中每次只满足一个分支转移条件,执行一条分支流程,就称为选择性分支结构,如图7-32所示。

图7-31 顺序结构图

图7-32 选择分支结构

③并行分支结构。在顺序控制程序中,当条件满足后,程序将同时转移到多个分支程序,执行多个流程,这种程序结构称为并行分支结构,如图7-33所示。

【例7-4】 使用顺序控制结构,编写出实现红绿灯循环显示的程序。(要求循环间隔时间为1s)

根据控制要求首先画出红绿灯顺序显示的功能流程图7-34所示。启动条件为按钮I0.0,步进条件为时间,状态步的动作为点红灯、熄灭绿灯,同时启动定时器,步进条件满足时,关断本步,进入下一步。

梯形图程序如图7-35所示。

分析:当I0.0输入有效时,启动S0.0,执行程序的第一步,输出Q0.0置1(点亮红灯), Q0.1置0(熄灭绿灯),同时启动定时器T37,经过1s,步进转移指令使得S0.1置1,S0.0置0,程序进入第二步,输出点Q0.1置1(点亮绿灯),输出点Q0.0置0(熄灭红灯),同时启动定时器T38,经过1s,步进转移指令使得S0.0置1,S0.1置0,程序进入第一步执行,如此周而复始,循环工作。

4.子程序指令

子程序调用指令(CALL)将程序控制权交给子程序SBR N。调用子程序时可以带参数也可以不带参数。子程序执行完成后,控制权返回到调用子程序的指令的下一条指令。

子程序条件返回指令(CRET)根据它前面的逻辑决定是否终止子程序。要添加一个子程序可以在“命令”菜单中选择“Edit”→“Insert”→“Subroutine”。

图7-33 并行分支结构

图7-34 例7-4功能流程图

图7-35 例7-4梯形图

在主程序中,可以嵌套调用子程序(在子程序中调用子程序),最多嵌套8层。在中断服务程序中,不能嵌套调用子程序。在被中断服务程序调用的子程序中不能再出现子程序调用。不禁止递归调用(子程序调用自己),但是当使用带子程序的递归调用时应慎重。

5.中断程序

1)中断程序的创建

可以采用下列方法创建中断程序:在“编辑”菜单中选择“插入”→“中断”命令;或在程序编辑器视窗中单击鼠标右键,从弹出的菜单中选择“插入”→“中断”命令;或用鼠标右键单击指令树上的“程序块”图标,并从弹出的菜单中选择“插入”→“中断”命令。创建成功后程序编辑器将显示新的中断程序,程序编辑器底部出现标有新的中断程序的标签,可以对新的中断程序编程。

2)中断事件与中断指令

Ⅰ.中断事件

S7-200PLC支持通信口中断、I/O中断和时基中断3种中断类型,其中通信口中断为最高级。3种中断类型共有33种事件。

所谓通信口中断,系指S7-200PLC用来生成通信中断程序以控制通信口的事件。PLC的串行通信口可由LAD或STL程序来控制。通信口的这种操作模式称为自由端口模式。在自由端口模式下,用户可用程序定义波特率、每个字符位数、奇偶校验和通信协议。利用接收和发送中断可简化程序对通信的控制。对于更多信息,可参考发送和接收指令。

所谓I/O中断系指S7-200PLC对I/O点状态的各种变化产生中断事件。这些事件可以对高速计数器、脉冲输出或输入的上升或下降状态做出响应。I/O中断包含上升沿或下降沿中断、高速计数器中断和脉冲串输出(PTO)中断。S7-200PLC的CPU可用输入I0.0至I0.3的上升沿或下降沿产生中断。上升沿事件和下降沿事件可被这些输入点捕获。这些上升沿/下降沿事件可被用于指示当某个事件发生时必须引起注意的条件。高速计数器中断允许响应诸如当前值等于预置值、相应于轴转动方向变化的计数方向改变和计数器外部复位等事件而产生的中断。每种高速计数器可对高速事件实时响应,而PLC扫描速率对这些高速事件是不能控制的。脉冲串输出中断给出了已完成指定脉冲数输出的指示。脉冲串输出的一个典型应用是对步进电动机进行控制。

所谓时基中断系指S7-200PLC产生使程序在指定的间隔上起作用的事件。时基中断包括定时中断和定时器T32/T96中断,可以用定时中断指定一个周期性的活动。周期以1 ms为增量单位,周期时间可从1ms到255ms。对定时中断0,必须把周期时间写入SMB34;对定时中断1,必须把周期时间写入SMB35。每当定时器溢出时,定时中断事件把控制权交给相应的中断程序。如可用定时中断以固定的时间间隔去控制模拟量输入的采样或者执行一个PID回路。

当把某个中断程序连接到一个定时中断事件上,如果该定时中断被允许,那就开始计时。在连接期间,系统捕捉周期时间值,因而后来的对SMB34和SMB35的更改不会影响周期。为改变周期时间,首先必须修改周期时间值,然后重新把中断程序连接到定时中断事件上。当重新连接时,定时中断功能清除前一次连接时的任何累计值,并用新值重新开始计时。

一旦允许,定时中断就连续地运行,指定时间间隔的每次溢出时执行被连接的中断程序。如果退出RUN模式或分离定时中断,则定时中断被禁止。如果执行了全局中断禁止指令,定时中断事件会继续出现,每个出现的定时中断事件将进入中断队列(直到中断允许或队列满)。

定时器T32/T96中断允许及时地响应一个给定的时间间隔。这些中断只支持1ms分辨率的延时接通定时器(TON)和延时断开定时器(TOF)T32和T96。T32和T96定时器在其他方面工作正常。一旦中断允许,当有效定时器的当前值等于预置值时,在CPU的正常1ms定时刷新中,执行被连接的中断程序。首先把一个中断程序连接到T32/T96中断事件上,然后允许该中断。

Ⅱ.中断指令

中断指令包括中断允许(ENI)、中断禁止(DISI)、中断连接指令(ATCH)、中断分离指令(DTCH)、清除中断指令(CLR EVNT)和中断条件返回指令(CRETI),其LAD格式如图7-36所示。

图7-36 中断指令LAD格式

中断允许指令ENI全局地允许所有被连接的中断事件。

中断禁止指令DISI全局地禁止处理所有中断事件。当进入RUN模式时,初始状态为禁止中断。在RUN模式,可以执行全局中断允许指令(ENI)允许所有中断。全局中断禁止指令(DISI)不允许处理中断服务程序,但中断事件仍然会排队等候。

中断连接指令ATCH将中断事件EVNT与中断服务程序号相联系,并启动中断事件。

中断分离指令DTCH将中断事件EVNT与中断服务程序之间的关联切断,并禁止该中断事件。

清除中断指令CLR EVNT从中断队列中清除所有EVNT类型的中断事件。使用此指令从中断队列中清除不需要的中断事件。如果此指令用于清除假的中断事件,在从队列中清除事件之前要首先分离事件。否则,在执行清除事件指令之后,新的事件将被增加到队列中。

中断条件返回指令CRETI用于根据前面的逻辑操作的条件,从中断服务程序中返回。

Ⅲ.中断优先级和中断队列

在各个指定的优先级之内,CPU按先来先服务的原则处理中断。任何时间点上,只有一个用户中断程序正在执行。一旦中断程序开始执行,它要一直执行到结束,而且不会被别的中断程序,甚至是更高优先级的中断程序所打断。当另一个中断正在处理中,新出现的中断需要排队,等待处理。

【例7-5】 中断程序应用,如图7-37所示。

说明:当I0.0的上升沿到来时,产生中断,使得Q0.0立即置位;当I0.1的下降沿到来时,产生中断,使得Q0.0立即复位。

6.高速计数器指令

PLC的普通计数器的计数过程与扫描工作方式有关,CPU通过每一扫描周期读取一次被测信号的方法来捕捉被测信号的上升沿,被测信号的频率较高时,会丢失计数脉冲,因为普通计数器的工作频率很低,一般仅有几十赫兹。高速计数器可以对普通计数器无能为力的事件进行计数,S7-200PLC有6个高速计数器HSC0~HSC5,可以设置多达12种不同的操作模式。

图7-37 例7-5图

一般来说,高速计数器被用作驱动鼓式计时器,该设备有一个安装了增量轴式编码器的轴,以恒定的速度转动。轴式编码器每圈提供一个确定的计数值和一个复位脉冲。来自轴式编码器的时钟和复位脉冲作为高速计数器的输入。

高速计数器装入一组预置值中的第一个值,当前计数值小于当前预置值时,希望的输出有效。计数器设置成在当前值等于预置值和有复位时产生中断。随着每次当前计数值等于预置值的中断事件的出现,一个新的预置值被装入,并重新设置下一个输出状态。当出现复位中断事件时,设置第一个预置值和第一个输出状态,这个循环又重新开始。

对于操作模式相同的计数器,其计数功能是相同的。计数器共有4种基本类型:带有内部方向控制的单相计数器(模式0~2),带有外部方向控制的单相计数器(模式3~5),带有两个时钟输入的双相计数器(模式6~8)和A/B相正交计数器(模式9~11)。高速计数器可以被配置为12种模式中的任意一种,参见表7-6。

表7-6 高速计数器的输入点

续表

每一个计数器都有时钟、方向控制、复位、启动的特定输入。对于双相计数器,两个时钟都可以运行在最高频率。在正交模式下,可以选择一倍速(1×)或者四倍速(4×)计数速率。所有计数器都可以运行在最高频率下而互不影响。表7-6中给出了与高速计数器相关的时钟、方向控制、复位和启动输入点。同一个输入点不能用于两个不同的功能,但是任何一个没有被高速计数器的当前模式使用的输入点,都可以被用作其他用途。

提示:

CPU221和CPU222支持HSC0、HSC3、HSC4和HSC5,不支持HSC1和HSC2。

CPU224、CPU224XP和CPU226全部支持6个高速计数器:HSC0~HSC5。

1)与高速计数器相关的寄存器

与高速计数器相关的寄存器是高速计数器控制字节、初始值寄存器、预置值寄存器、状态字节。

Ⅰ.高速计数器的控制字节

只有定义了计数器和计数器模式,才能对计数器的动态参数进行编程。每个高速计数器都有一个控制字节,这些字节的各个位的意义见表7-7。在执行HDEF指令前,必须把这些控制位设定到希望的状态。否则,计数器对计数模式的选择取缺省设置。一旦HDEF指令被执行,就不能再更改计数器的设置,除非先进入STOP模式。

表7-7 高速计数器的控制字节

续表

Ⅱ.高速计数器的预置值和当前值寄存器

每个高速计数器都有一个32位的初始值和一个32位的预置值。初始值和预置值都是符号整数。为了向高速计数器装入新的初始值和预置值,必须先设置控制字节,并且把初始值和预置值存入特殊存储器中,然后执行HSC指令,从而将新的值传送到高速计数器。表7-8中对保存新的初始值和预置值的特殊存储器作了说明。

除去控制字节和新的初始值与预置值保存字节外,每个高速计数器的当前值只能使用数据类型HC(高速计数器当前值)后面跟表7-8中列出的计数器号(0、1、2、3、4或5)的格式进行读取。可用读操作直接访问当前值,但是写操作只能用HSC指令来实现。

表7-8 高速计数器的预置值和当前值寄存器

所有计数器模式都支持在HSC的当前值等于预设值时产生一个中断事件。使用外部复位端的计数模式支持外部复位中断。除去模式0、1和2之外,所有计数器模式支持计数方向改变中断。每种中断条件都可以分别使能或者禁止。

Ⅲ.状态字节

每个高速计数器都有一个状态字节,其中的状态存储位指出了当前计数方向,当前值是否大于或者等于预置值。表7-9给出了每个高速计数器状态位的定义。只有在执行中断服务程序时,状态位才有效。监视高速计数器状态的目的是使其他事件能够产生中断以完成更重要的操作。

表7-9 高速计数器的状态字节

2)高速计数器指令

高速计数器指令的LAD格式如图7-38所示。

(1)高速计数器选择指令HDEF。其为指定的高速计数器(HSCx)选择操作模式。对于每一个高速计数器,使用一条定义高速计数器指令。

(2)高速计数器启动指令HSC。用于启动标号为N的高速计数器。

图7-38 高速计数器指令的LAD格式

(3)高速计数器编程可以使用指令向导来配置计数器。向导程序使用下列信息:计数器的类型和模式、计数器的预置值、计数器的初始值和计数的初始方向。要启动HSC指令向导,可以在“命令”菜单窗口中选择“Tools”→“Instruction Wizard”,然后在向导窗口中选择HSC指令。

对高速计数器编程,必须完成下列基本操作:

①定义计数器和模式;

②设置控制字节;

③设置初始值;

④设置预置值;

⑤指定并使能中断服务程序;

⑥激活高速计数器。

由于中断事件产生的速率远低于高速计数器的计数速率,用高速计数器可实现精确控制,而与PLC整个扫描周期的关系不大。采用中断的方法允许在简单的状态控制中用独立的中断程序装入一个新的预置值。

在使用高速计数器之前,应该用HDEF(高速计数器定义)指令为计数器选择一种计数模式。使用初次扫描存储器位SM0.1(该位仅在第一次扫描周期接通,之后断开)来调用一个包含HDEF指令的子程序。

【例7-6】 包装生产线产品累计和包装的PLC控制。

控制要求:某产品包装生产线应用高速计数器对产品进行累计和包装,要求每检测到1000个产品时,自动启动包装机进行包装,计数方向由外部信号控制。

(1)方案设计。选择高速计数器HC0,因为计数方向可由外部信号控制,并且不要求复位信号输入,确定工作模式为3。采用当前值等于设定值时执行中断事件,中断事件号为12,当12号事件发生时,启动包装机工作子程序SBR 2。高速计数器的初始化采用子程序SBR 1。

调用高速计数器初始化子程序的条件采用SM0.1初始脉冲信号。

HC0的当前值存入SMD38,设定值1000写入SMD42。

(2)程序编写,其结果如图7-39所示。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈