1 1 1 0 1 2 3 4 5 6 7 8 9 10 I/O中断 11 12 13 14 15 16 17 18 19 20 21 22 23 0 定时中断 1 2 3 24 25 26 19 20 0 2 4 6 1 3 5 7 12 27 28 13 14 15 16 17 18 32 29 30 31 33 10 11 21 22 通信口1:接收信息完成 通信口1:接收字符 通信口1:发送完成 PTO 0脉冲串输出完成中断 PTO 1脉冲串输出完成中断 I0.0上升沿中断 I0.1上升沿中断 I0.2上升沿中断 I0.3上升沿中断 10.0下降沿中断 I0.1下降沿中断 I0.2下降沿中断 I0.3下降沿中断 HSC0当前值=预置值中断 HSC0计数方向改变中断 HSC0外部复位中断 HSC1当前值=预置值中断 HSC1计数方向改变中断 HSC1外部复位中断 HSC2当前值=预置值中断 HSC2计数方向改变中断 HSC2外部复位中断 HSC3当前值=预置值中断 HSC4当前值=预置值中断 HSC4计数方向改变 HSC4外部复位 HSC5当前值=预置值中断 定时中断0 定时中断1 定时 高速计数器 外部输入 脉冲输出 通信口1 定时器T32 CT=PT中断 定时器T96 CT=PT中断 定时器 表6-3 中断队列的最多中断个数和溢出标志位
队列 CPU 221 CPU 222 CPU 224 CPU 226和CPU 226XM 4 16 8 4 16 8 8 16 8 溢出标志位 SM4.0 SM4.1 SM4.2 通讯中断队列 4 I/O中断队列 16 定时中断队列 8 6.2.2 中断指令
中断指令有4条,包括开、关中断指令,中断连接、分离指令。指令格式如表6-4所示。 1. 开、关中断指令
开中断(ENI)指令全局性允许所有中断事件。关中断(DISI)指令全局性禁止所有中断事件,中断
事件的每次出现均被排队等候,直至使用全局开中断指令重新启用中断。
PLC转换到RUN(运行)模式时,中断开始时被禁用,可以通过执行开中断指令,允许所有中断事件。执行关中断指令会禁止处理中断,但是现用中断事件将继续排队等候。
2. 中断连接、分离指令
中断连接指令(ATCH)指令将中断事件(EVNT)与中断程序号码(INT)相连接,并启用中断事件。 分离中断(DTCH)指令取消某中断事件(EVNT)与所有中断程序之间的连接,并禁用该中断事件。 注意:一个中断事件只能连接一个中断程序,但多个中断事件可以调用一个中断程序。
表6-4中断指令格式
LAD STL 操作数及数据类型 ENI 无 DISI 无 ATCH INT,EVNT INT:常量 0-127 INT/EVNT数据类型:字节 DTCH EVNT EVNT:常量, 数据类型:字节 EVNT:常量,CPU 224: 0-23; 27-33 CPU 224: 0-23; 27-33 6.2.3 中断程序
1. 中断程序的概念
中断程序是为处理中断事件而事先编好的程序。中断程序不是由程序调用,而是在中断事件发生时由操作系统调用。在中断程序中不能改写其他程序使用的存储器,最好使用局部变量。中断程序应实现特定的任务,应“越短越好”,中断程序由中断程序号开始,以无条件返回指令(CRETI)结束。在中断程序中禁止使用DISI、ENI、HDEF、LSCR和END指令。
2. 建立中断程序的方法
方法一:从“编辑”菜单→选择插入(Insert)→ 中断(Interrupt)。 方法二:从指令树,用鼠标右键单击“程序块”图标并从弹出菜单→选择插入(Insert)→ 中断(Interrupt)。 方法三:从“程序编辑器”窗口,从弹出菜单用鼠标右键单击插入(Insert)→ 中断(Interrupt)。 程序编辑器从先前的POU显示更改为新中断程序,在程序编辑器的底部会出现一个新标记,代表新的中断程序。
6.2.4 程序举例
【例6-1】编写由I0.1的上升沿产生的中断事件的初始化程序。
分析:查表6-2可知,I0.1上升沿产生的中断事件号为2。所以在主程序中用ATCH指令将事件号2和中断程序0连接起来,并全局开中断。程序如图6-1所示。
【例6-2】编程完成采样工作,要求每10ms采样一次。
分析:完成每10ms采样一次,需用定时中断,查表6-2可知,定时中断0的中断事件号为10。因此在主程序中将采样周期(10ms)即定时中断的时间间隔写入定时中断0的特殊存储器SMB34,并将中断事件10和INT-0连接,全局开中断。在中断程序0中,将模拟量输入信号读入,程序如图6-2所示。 【例6-3】利用定时中断功能编制一个程序,实现如下功能:当I0.0由OFF→ON,Q0.0亮1s,灭1s,如此循环反复直至I0.0由ON→OFF,Q0.0变为OFF。
程序如图6-3所示。
6.2.5 中断程序编程实训
1. 实训目的
(1)熟悉中断指令的使用方法。 (2)掌握定时中断设计程序的方法。 2. 实训内容
(1)利用T32定时中断编写程序,要求产生占空比为50%,周期为4s的的方波信号。 (2)用定时中断实现喷泉的模拟控制,控制要求如【例5-7】。 3. 参考程序
(1)产生占空比为50%,周期为4s的的方波信号,主程序和中断程序如图6-4所示。 (2)喷泉的模拟控制参考程序如图6-5所示。
分析:程序中采用定时中断0,其中断号为10,定时中断0的周期控制字SMB34中的定时时间设定值的范围为1-255ms。喷泉模拟控制的移位时间为0.5s,大于定时中断0的最大定时时间设定值255ms,所以将中断的时间间隔设为100ms,这样中断执行5次,其时间间隔为0.5s,在程序中用VB0来累计中断的次数,每执行一次中断,VB0在中断程序中加1,当VB0=5时,即时间间隔为0.5s,QB0移一位。
4. 输入并调试程序
用状态图监视程序的运行,并记录观察到的现象。
6.3 高速计数器与高速脉冲输出
前面讲的计数器指令的计数速度受扫描周期的影响,对比CPU扫描频率高的脉冲输入,就不能满足控制要求了。为此,SIMATIC S7-200系列PLC设计了高速计数功能(HSC),其计数自动进行不受扫描周期的影响,最高计数频率取决于CPU的类型,CPU22x系列最高计数频率为30KHz,用于捕捉比CPU扫描速更快的事件,并产生中断,执行中断程序,完成预定的操作。高速计数器最多可设置12种不同的操作模式。用高速计数器可实现高速运动的精确控制。
SIMATIC S7-200 CPU22x系列PLC还设有高速脉冲输出,输出频率可达20KHz,用于PTO(输出一个频率可调,占空比为50%的脉冲)和PWM(输出占空比可调的脉冲),高速脉冲输出的功能可用于对电动机进行速度控制及位置控制和控制变频器使电机调速。
6.3.1 占用输入/输出端子
1. 高速计数器占用输入端子
CPU224有六个高速计数器,其占用的输入端子如表6-5所示。
表6-5 高速计数器占用的输入端子
高速计数器 HSC0 HSC1 HSC2 HSC3 使用的输入端子 I0.0, I0.1, I0.2 I0.6, I0.7, I1.0, I1.1 I1.2, I1.3, I1.4, I1.5 I0.1 HSC4 HSC5 I0.3, I0.4, I0.5 I0.4 各高速计数器不同的输入端有专用的功能,如:时钟脉冲端、方向控制端、复位端、起动端。
注意:同一个输入端不能用于两种不同的功能。但是高速计数器当前模式未使用的输入端均可用于其他用途,如作为中断输入端或作为数字量输入端。例如,如果在模式2中使用高速计数器HSC0,模式2使用I0.0和I0.2,则I0.1可用于边缘中断或用于HSC3。
2. 高速脉冲输出占用的输出端子
S7-200有PTO、PWM两台高速脉冲发生器。 PTO脉冲串功能可输出指定个数、指定周期的方波脉冲(占空比50%);PWM功能可输出脉宽变化的脉冲信号,用户可以指定脉冲的周期和脉冲的宽度。若一台发生器指定给数字输出点Q0.0,另一台发生器则指定给数字输出点Q0.1。当PTO、PWM发生器控制输出时,将禁止输出点Q0.0、Q0.1的正常使用;当不使用PTO、PWM高速脉冲发生器时,输出点Q0.0、Q0.1恢复正常的使用,即由输出映像寄存器决定其输出状态。
6.3.2 高速计数器的工作模式
1. 高速计数器的计数方式
(1)单路脉冲输入的内部方向控制加/减计数。即只有一个脉冲输入端,通过高速计数器的控制字节的第3位来控制作加计数或者减计数。该位=1,加计数;该位=0,减计数。如图6-6所示内部方向控制的单路加/减计数 。
(2)单路脉冲输入的外部方向控制加/减计数。即有一个脉冲输入端,有一个方向控制端,方向输入信号等于1时,加计数;方向输入信号等于0时,减计数。如图6-7所示外部方向控制的单路加/减计数。
(3)两路脉冲输入的单相加/减计数。即有两个脉冲输入端,一个是加计数脉冲,一个是减计数脉冲,计数值为两个输入端脉冲的代数和。如图6-8所示。
(4)两路脉冲输入的双相正交计数。即有两个脉冲输入端,输入的两路脉冲A 相、B相,相位互差90°(正交),A 相超前B相90°时,加计数;A 相滞后B相90°时,减计数。在这种计数方式下,可选择1x 模式(单倍频,一个时钟脉冲计一个数)和4x 模式(四倍频,一个时钟脉冲计四个数)。如图6-9,图6-10所示。
2. 高速计数器的工作模式
高速计数器有12种工作模式,模式0~模式2采用单路脉冲输入的内部方向控制加/减计数;模式3~模式5采用单路脉冲输入的外部方向控制加/减计数;模式6~模式8采用两路脉冲输入的加/减计数;模式9~模式11采用两路脉冲输入的双相正交计数。
S7-200 CPU224有 HSC0-HSC5六个高速计数器,每个高速计数器有多种不同的工作模式。HSC0和HSC4有模式0、1、3、4、6、7、8、9、10;HSC1和HSC2有模式0~模式11;HSC3和HSC5有模式只有模式0。每种高速计数器所拥有的工作模式和其占有的输入端子的数目有关。如表6-6所示。
表6-6 高速计数器的工作模式和输入端子的关系及说明 HSC编号及其对应 的输入 端子 HSC模式 功能及说明 HSC0 HSC4 HSC1 HSC2 HSC3 I0.0 I0.3 I0.6 I1.2 I0.1 占用的输入端子及其功能 I0.1 I0.4 I0.7 I1.3 × I0.2 I0.5 I1.0 I1.4 × × × I1.1 I1.5 × HSC5 0 1 2 3 4 5 6 7 8 9 10 11 单路脉冲输入的内部方向控制加/减计数。控制字SM37.3=0,减计数; SM37.3=1,加计数。 单路脉冲输入的外部方向控制加/减计数。方向控制端=0,减计数; 方向控制端=1,加计数。 两路脉冲输入的单相加/减计数。 加计数有脉冲输入,加计数; 减计数端脉冲输入,减计数。 两路脉冲输入的双相正交计数。 A相脉冲超前B相脉冲,加计数; A相脉冲滞后B相脉冲,减计数。 I0.4 脉冲输入端 × × × × 方向控制端 × × 复位端 复位端 × 复位端 复位端 × 复位端 复位端 × 复位端 复位端 × × × 起动 × × 起动 × × 起动 × × 起动 脉冲输入端 加计数脉冲输入端 减计数脉冲输入端 A相脉冲输入端 B相脉冲输入端 说明:表中×表示没有
选用某个高速计数器在某种工作方式下工作后,高速计数器所使用的输入不是任意选择的,必须按系统指定的输入点输入信号。如HSC1在模式11下工作,就必须用I0.6为A相脉冲输入端,I0.7为 B相脉冲输入端,I1.0为复位端,I1.1为起动端。
6.3.3 高速计数器的控制字和状态字
1. 控制字节
定义了计数器和工作模式之后,还要设置高速计数器的有关控制字节。每个高速计数器均有一个控制字节,它决定了计数器的计数允许或禁用,方向控制(仅限模式0、1和2)或对所有其他模式的初始化计数方向,装入当前值和预置值。控制字节每个控制位的说明如表6-7所示。
2. 状态字节
每个高速计数器都有一个状态字节,状态位表示当前计数方向以及当前值是否大于或等于预置值。每个高速计数器状态字节的状态位如表6-8所示。状态字节的0-4位不用。监控高速计数器状态的目的是使外部事件产生中断,以完成重要的操作。
表6-7 HSC的控制字节
HSC0 SM37.0 HSC1 SM47.0 SM47.1 SM47.2 SM47.3 SM47.4 SM47.5 HSC2 SM57.0 SM57.1 SM57.2 SM57.3 SM57.4 SM57.5 HSC3 HSC4 SM147.0 HSC5 说明 复位有效电平控制: 0=复位信号高电平有效;1=低电平有效 起动有效电平控制: 0=起动信号高电平有效;1=低电平有效 正交计数器计数速率选择: 0=4×计数速率;1=1×计数速率 计数方向控制位: 0 = 减计数1 = 加计数 向HSC写入计数方向: 0 = 无更新1 = 更新计数方向 向HSC写入新预置值: 0 = 无更新1 = 更新预置值 SM37.2. SM37.3 SM37.4 SM37.5 SM147.2 SM137.3 SM147.3 SM157.3 SM137.4 SM147.4 SM157.4 SM137.5 SM147.5 SM157.5