第六章2程序流控制指令
计数器比较置位指令)而中断执行中断程序的场合。
计数器中断指针为I0□0(□=1~6,计数器中断6点,不可 重复使用)。计数器中断与HSCS(高速计数器比较置位)指 令配合使用,根据高速计数器的计数当前值与计数设定值的 关系来确定是否执行相应的中断服务程序。
图中,执行第3步,将K1000与C255的当前值比较,当C255的当 前值由999变到1000时,驱动计数器中断器I010(梯形图表示
子程序调用举例
程序功能是:X1、X2、X3分 别接通时,将相应的数据传送到 D0、D10,然后调用子程序;在 子程序中,将D0、D10存储的数 据相加,运算结果存储在D20, 用D20存储数据控制输出字元件 K1Y0。
四、中断指令
中断返回 IRET (Interruption Return) 开中断 EI (Interruption Enable) 关中断 DI (Interruption Disable) 均无操作数 I100
如图, • X000为ON时,程序跳到指针P8处。 • X000为OFF时,不执行跳转,程序按原顺序执行。 • 如果用M8000的常开触点驱动CJ指令,相当于无条件跳转指令,因为 运行时特殊辅助寄存器M8000总是ON。
用跳转指令实现选择运行程序段 应用跳转指令的程序结构如
图所示。X3是手动/自动选择
警戒定时器指令的应用
3. (1)WDT指令是在控制程序中刷新警戒定时器的指令。如果执行 程序的扫描周期时间(从0步到END或FEND指令之间)达200ms,则 PLC将停止运行。这时应将WDT指令插到合适的程序步中刷新警 戒时钟,以便程序得以继续运行直到END。例如将一个扫描周期 为240ms的程序分为2个120ms程序。如图所示,在这两个程序之 间插入WDT (2)如果希望每次扫描周期时间超过200ms,则可用移动指令MOV 把限制值写入特殊数据寄存器D8000
程序梯形图
二、子程序指令
子程序调用 子程序返回 无操作数 说明 CALL (Sub-Routine Call) SRET 无操作数 (Sub-Routine Return) 操作数:指针P0~P127
子程序应该在主程序结束之后编程。
CJ指令的指针与CALL的指针不能重复。 主程序允许嵌套,嵌套级别最多为5级。 子程序只能用T192~T199和T246~T249作定时器。 同一指针只能出现一次 标号P63相当于END。
说明 在执行某个中断子程序时,禁止其它中断请求。 中断程序允许嵌套,嵌套级别为2级。 中断指针共有15个:输入中断6个,定时器中断3个, 计数器中断6个。 中断程序用T192~T199和T246~T249作定时器。 中断的优先级别 多个中断信号不同时产生时,按先后顺序中断。 多个中断信号同时产生时,按指针大小中断。
第二节 程序流控制
一、条件跳转指令 CJ 二、子程序指令 CALL SRET 三、中断指令 IRET EI DI 四、主程序结束指令 FEND
五、警戒时钟定时器指令 WDT
六、循环指令 FOX NEXT
1.条件跳转指令
CJ和CJ(P)为条件跳转指令,在某种条件下需要跳过一部分 程序时,采用跳转指令,这样可以减少扫描时间,提高程序 执行速度。 操作数:指针 P0~P127
图中一开始为允许中断。当X1从OFF→ON且保持ON,程序跳到指针I101 处执行中断程序,执行第13行将K100送到D1,然后返回主程序,对定时器 T0计时。当计时达到D1当前值K100时,T0触点闭合,Y0
(2)定时器中断
定时器中断用于需要指定中断时间执行中断程序的地方,主要
用于高速处理或每隔一定时间执行的程序等问题。定时器的中 断指针为:
开关的信号输入端。当X3未 接通时,执行手动程序段, 反之执行自动程序段。X3的 常开/常闭接点起联锁作用,
使手动、自动两个程序段只
能选择其一。
图 手动/自动程序跳转
条件跳转指令应用举例
【例题】 某台设备具有手动/自动两种操作方式。SB3是操作
方式选择开关,当SB3处于断开状态时,选择手动操作方式;当
I
定时器中断 10~99ms 定时器中断号(6~8),每个定时器只能用 1 次
定时器中断由编号为I6,I7,I8三个专用定时器中的一个,在 10~99ms中任选一个作为中断设定时间,每隔此设定时间中断 一次,例如 I650,即每隔50ms,在标号I650之后对程序执行
中断,直到执行IRET指令返回原状态。
无操作数
警戒定时器是一个专用定时器,其设定值存放在特殊 的数据寄存器D8000中,并以ms为计时单位。
当PLC一上电,则对警戒定时器进行初始化,将K100 (设定值为100ms)装入D8000中,每个扫描周期结束 时,马上刷新警戒定时器的当前值,使PLC能正常运 行。
当扫描周期大于100ms时,即超过了警戒定时器的设 定值,警戒定时器的逻辑线圈被接通,CPU立即停止 执行用户程序,同时切断全部输出,并且报警显示。
为I10),执行计数器中断程序。
中断指令使用说明:
( 1 ) EI 与 FEND 之间或 EI 与 DI 之间为允许中断范围。 DI与EI之间为禁止中断范围。 (2)中断信号的脉宽必须大于200µ s。 ( 3 )如果特殊辅助继电器 M8050 ~ M8059 为 ON ,则禁 止各对应输入编号进行中断,见附录特殊辅助继电器。 图中,如果M8051为OFF,按住X1,执行中断程序,运 行情况如图一样。如果按X10,M8051接通,则按X1, 程序也不执行中断。 (4)中断程序在执行过程中,不响应其他的中断(其 他中断为等待状态 ) 。不能重复使用与高速计数器相 关的输入,不能重复使用I000与I001相同的输入。
(5)如果有多个依次发出的中断信号,则优先级按 发生的先后为序,发生越早则优先级越高,若同时发
( 6 )一个中断程序执行时,其他中断被禁止。但是 在中断程序中编入EI和DI指令时,可实现中断嵌套。 多个中断信号产生的顺序,遵照中断指针号较低的有 优先权的规定。
( 7 )如果中断信号产生禁止中断区间 ( DI ~ EI 之 间),这个中断信号被存储,并在EI指令后执行。 ( 8)可编程控制器平时处于禁止中断状态。如果 EIDI 指令在扫描过程中有中断输入时,则执行中断程序 (从中断标号到IRET之间的程序)。
IRET FEND EI
X0 开中断范围
DI
X10 中断子程序1
梯形图
I101
中断子程序2
IRET
说明
在执行某个中断子程序时,禁止其它中断请求。 用于中断的指针用来指明某一中断源的中断程序 的入口。 中断程序允许嵌套,嵌套级别为2级。 中断指针共有15个:输入中断6个,定时器中断3个, 计数器中断6个。 中断程序用T192~T199和T246~T249作定时器。 中断的优先级别 多个中断信号不同时产生时,按先后顺序中断。 多个中断信号同时产生时,按指针大小中断。
输入中断用来接收特定的输入地址号的输入信号,输入中断指针 I□0△。最高位□与X000~X005的元件号相对应,单元的输入号为 0~5(从X000~X005输入)。最低位△为0时表示下降沿中断,反 之为上升沿中断
I 0 输入中断 0:下降沿中断 1:上升沿中断
输入号(0~5)每个输入只能用 1 次
如果正常的扫描周期超过警戒时钟的设定值,可以在适 当程序步中加入WDT指令,适时刷新警戒时钟,使程序 能顺利执行。 也可以通过MOV指令修改警戒定时器的设定值(D8000 的值)。 可以计算出程序扫描周期的最大值作为警戒时钟的设定 值。
P63表示跳到END
梯形图
X000 CJ X001 P10 Y001
X10
CJ
P0
X11
CJ P0
…
…
X002 标号P10
Y002
X12 P0 Y1
( b) 图 CJ指令的使用
( a)
说明 CJ指令跳过部分程序,可以缩短程序的扫描周期。 一个指针只能出现一次。 如果积算型定时器和计数器的RST指令在跳转程序之内,即使跳 转程序生效,RST指令仍然有效。
…
FEND X12 P8 X11 Y21
…
Y30 SRET
子 程 序
…
说明
FEND指令表示主程序结束,与END指令的功能一样,程序执行 到FEND时,进行输出处理、输入处理、监视定时器和计数器 刷新,全部完成以后返回到程序的第00步。 执行到该指令时程序返回到0步。 中断服务子程序和子程序应该写在FEND之后,并且用IRET 和SRET返回。 如果多次使用FEND指令,在最后的FEND和END之间编写子程 序或中断子程序。 FEND主程序结束指令使用时应注意,子程序和中断子程序 必须写在主程序结束指令FEND和END指令之间。
例如,I001为输入X0从OFF→ON变化时,执行由该指针作 为标号后面的中断程序,并根据 IRET 指令返回。 当M8050-M8058为ON时,禁止执行相应的输入中断, M8059为ON时禁止所有计数器中断
中断程序由中断指针入口,到中断返回指令IRET结束。例如中 断指针I101的意义为当程序执行到X1时转到中断指针I101的程 序行执行,一直到IRET为止,之后返回主程序。中断程序编写 在主程序结束之间,如图所示。
该指令可以连续和脉冲执行方式。
被跳过去的程序中各元件的状态为 Y、M、S保持跳转前状态不变。
定时器T和计数器C如果被CJ指令跳过,跳转期间它们的当前 值将被保存。如果在跳转开始时定时器和计数器正在工作, 在跳转期间它们将停止定时和计数。
T192~T199和高速计数器C235~C255如果在驱动后跳转,则 继续工作,输出触点也会动作。
定时器中断指针为I6□□~I8□□,低两位是以ms为单位定 时时间(1~99ms)。M8056~M5058为ON时,将分别禁止定时 中断0~2。