1.08k likes | 1.25k Views
第五章. 高速计数器控制指令. 高速计数器控制指令. 高速计数器概述. 高速计数器的计数功能. 高速计数器的中断功能. 高速计数器控制指令. 一、 高速计数器概述. CPM1A 系列 PLC 设置了高频脉冲输入点,配合相关指令及必要的设定,可以对高频脉冲进行处理。. CPM1A 系列 PLC 的高频脉冲输入点是 00000~00002 。. 可以用高速计数器对高频脉冲进行计数。. 可以用高速计数器实现中断处理。. - DC24V +. CPM1A PLC. 旋转编码器. COM. 00000. 00001. 00002. Z 相. A 相.
E N D
第五章 高速计数器控制指令
高速计数器控制指令 高速计数器概述 高速计数器的计数功能 高速计数器的中断功能 高速计数器控制指令
一、 高速计数器概述 CPM1A系列PLC设置了高频脉冲输入点,配合相关指令及必要的设定,可以对高频脉冲进行处理。 CPM1A系列PLC的高频脉冲输入点是00000~00002。 可以用高速计数器对高频脉冲进行计数。 可以用高速计数器实现中断处理。
-DC24V + CPM1A PLC 旋转编码器 COM 00000 00001 00002 Z相 A相 B相 + DC24V COM - 旋 转 编 码 器 高频脉冲可来源于控制现场,也可由旋转编码器提供。 一种旋转编码器与PLC的连接示意图
A相 B相 1 2 3 4 递减计数脉冲 递增计数脉冲 计数脉冲 各种脉冲信号的波形 单相脉冲 A超前B A滞后B 两相脉冲 1 2 3 4 5 6 7 8 7 6 5 4 3 2 1 0 有的旋转编码器可提供三相脉冲,即A、B、Z相。
二、高速计数器的计数功能 高速计数器的计数模式 高速计数器的复位方式 使用高速计数器时的设定 高速计数器的溢出 计数器当前值的存储区
1. 高速计数器的计数模式 (1) 递增计数模式 高频脉冲由PLC的00000输入点输入,在输入计数脉冲的前沿,高速计数器的当前值加1。 最高计数频率是5 KHz,计数范围是0~65535(00000000~0000FFFF)
(2) 增减计数模式 在增减计数时可使用旋转编码器。旋转编码器的A 相脉冲接00000 输入点,B 相脉冲接00001输入点,复位Z信号接在00002输入点。 递增计数:当A相超前B相90°时,在A、B相脉冲的前沿,计数器的当前值加1。 递减计数:当B相超前A相90°时,在A、B相脉冲的前沿,计数器的当前值减1。 增减计数的最高计数频率是2.5 KHz,计数范围是-32767~+32767(F0007FFF~00007FFF,第一位的F表示负数)。
Z信号 00002 25200 Ts 复位 复位 2.高速计数器的复位方式 高速计数器复位时,其当前值为0。 (1) Z信号 + 软件复位 ① 若高速计数器的复位标志位25200先ON时,在复位Z信号ON的前沿时刻,高速计数器复位; ②若复位Z信号先ON时,在25200 ON后一个扫描周期时,高速计数器复位。 Ts是扫描周期。
25200 Ts 复位 (2) 软件复位 当25200 ON一个扫描周期后高速计数器复位。 另外,当PLC断电再上电时高速计数器自动复位。
3.使用高速计数器时的设定 使用高速计数器前必须进行必要的设定,否则使用无效。 对CPM1A系列PLC,设定值写入DM6642中。 用设定值确定高速计数器功能是否使用、复位方式、计数模式等。 不能用程序写入设定值(用编程工具)。
通道号 各 位 数 字 的 含 义 位号 DM6642 计数模式 ( 4:递增计数 0:增减计数) 00 ~ 03 复位方式设定 ( 0:Z信号 + 软件复位; 1:软件复位) 04 ~ 07 高速计数器使用/不使用 ( 00:不使用;01:使用) 08 ~ 15 高速计数器的设定 例如:DM6642的内容为 # 0114 使用高速计数器 软件复位 递增计数
4. 高速计数器的溢出 当高速计数器计数时: 若从上限值开始进行递增计数就会发生上溢出,其当前值为0FFF FFFF; 若从下限开始进行递减计数就会发生下溢出,其当前值为FFFF FFFF 。 发生溢出时计数器停止计数。 重新复位高速计数器时,将清除溢出状态。
5.高速计数器的当前值存储区 对CPM1A系列PLC,高速计数器的当前值存放在SR248和SR249中。 SR248存放低4位, SR249存放高4位。 在高速计数器执行高速计数操作后,可以利用指令从SR248和SR249中读出其当前值,也可以利用指令更改其当前值。
二、高速计数器的中断功能 高速计数器中断功能有两种模式 目标值比较中断模式 区 域比较中断模式
TB 目标值的个数 目标值比较表 TB+1 目标值1低4位 目标2 目标1 TB+2 目标值1高4位 中断处理子程序号 TB+3 TB+4 目标值2低4位 TB+5 目标值2高4位 TB+6 中断处理子程序号 …… …… 1.高速计数器的目标值比较中断 采取目标值比较中断时,要建立一个目标值比较表 最多放16个目标 表中数据可预先写入 在高速计数器计数过程中,若其当前值与比较表中某个目标值相同时,则停止执行主程序而转去执行与该目标值对应的子程序。 子程序执行完毕,返回到断点处继续执行主程序。
TB 下限值1低4位 区 域比较表 TB+1 下限值1高4位 区域2 区域1 TB+2 上限值1低4位 比较表分8个区域 上限值1高4位 TB+3 TB+4 中断处理子程序号 TB+5 下限值2低4位 TB+6 下限值2高4位 每个区占5个通道 TB+7 上限值2低4位 TB+8 上限值2高4位 TB+9 中断处理子程序号 …… …… 2.高速计数器的区域比较中断 采取区域比较中断时要建立一个区域比较表 表中数据可预先写入 当实际使用的区域不满8个时,要把其余存放上、下限值的通道都置为0,将存放子程序号的通道都置为FFFF。
区域比较中断的执行过程 若高速计数器的当前值落在比较表中某个区域时(下限值 ≤计数器PV值≤上限值) ,则停止执行主程序而转去执行与该区域对应的中断子程序。子程序执行完毕,返回到断点处继续执行主程序。 执行区域比较中断时,比较结果存放在AR1100~AR1107中。 例如,当计数器的当前值落在比较表的区域1中时,AR1100置为ON,当计数器的当前值落在比较表的区域2中时,AR1101置为ON等。
CTBL (63) @CTBL(63) CTBL (63) P C TB @ CTBL (63) P C TB P P C C TB TB 三、高速计数器控制指令 比较表登录指令 P:端口定义(000) C:控制数据 TB :比较表首通道 C的含义 000:登录一个目标值比较表,并启动比较。 001:登录一个区域比较表,并启动比较。 002:登录一个目标值比较表,用指令INI启动比较 003:登录一个区域比较表, 用指令INI启动比较
INI(61) @INI(61) INI (61) P C P1 @ INI (61) P C P1 P P C C P1 P1 操作模式控制指令 P:端口定义(000) C:控制数据 P1 :设定值首通道 C的含义 000:启动CTBL定义的比较表(P1固定为000)。 001:停止CTBL定义的比较表(P1固定为000)。 002:更新高速计数器的当前值。 将P1+1(高4位)、 P1 (低4位)传送到IR248和249中,作为高速计数器的新当前值。 003:停止脉冲输出(P1固定为000)。
PRV (62) @PRV(62) PRV (62) P C D @ PRV (62) P C D P P C C D D 读出当前值指令 P:端口定义(000) C:控制数据(000) D:目的首通道 读出的当前值低4位放在D, 高4位放在D+1中。 配合上述各指令,可以编写使用高速计数器的程序。
00002 2个目标值 25315 比较表首地址 软件复位 CTBL(63) 000 000 DM0000 SBN(92) 011 5000 目标值1:5000 25313 0000 @CMP HR 00 HR10 子程序号 0010 0000 目标值2:20000 0002 00100 25200 25505 0011 子程序号 01101 SBN (92) 010 RET (93) 25313 @MOV #5000 HR00 比较表首地址DM0000 END (01) RET (93) 使用高速计数器举例 高速计数器目标值比较中断 登录比较表、启动比较 中断处理子程序也要放在主程序之后、END之前。
00002 2个目标值 25315 CTBL(63) 000 000 DM0000 SBN(92) 011 5000 目标值1:5000 25313 0000 @CMP HR 00 HR10 子程序号 0010 0000 目标值2:20000 0002 00100 25200 25505 0011 子程序号 01101 SBN (92) 010 RET (93) 25313 @MOV #5000 HR00 比较表首地址DM0000 END (01) RET (93) 设DM6642的内容为#0104——表示使用高速计数器、递增计数、Z信号+软复位。 若高速计数器的当前值等于目标值1时,中断主程序而执行010号中断子程序:把#5000传送到HR00中。子程序执行完毕返回断点处继续执行主程序。
00002 2个目标值 25315 CTBL(63) 000 000 DM0000 SBN(92) 011 5000 目标值1:5000 25313 0000 @CMP HR 00 HR10 子程序号 0010 0000 目标值2:20000 0002 00100 25200 25505 0011 子程序号 01101 SBN (92) 010 RET (93) 25313 @MOV #5000 HR00 比较表首地址DM0000 END (01) RET (93) 若高速计数器的当前值等于目标值2时,中断主程序而执行011号中断子程序:将HR00与HR10中的内容进行一次比较,若HR00的内容大于HR10时,01101为ON。子程序执行完毕返回断点处继续执行主程序。若00100 ON且有Z信号时,高速计数器复位。
25315 CTBL (61) 000 003 DM0000 25313 PRV (62) 000 000 LR00 更新当前值 启动比较 读出当前值 比较表首地址 1500 下限1:1500 0000 INI (61) 000 002 HR00 00100 3000 上限1:3000 25200 0000 0000 子程序号 SBN (92) 000 7500 下限2:7500 00005 子程序000 0000 @INI (61) 000 000 000 0000 REN (93) 上限2:10000 0001 SBN (92) 001 0001 子程序号 25313 子程序001 XFER(70) # 0002 248 HR00 没用的区域 RET (93) END (01) 将248、249内容传送到HR00、HR01。 使用高速计数器举例 高速计数器区域比较中断 登录比较表、用INI启动
25315 CTBL (61) 000 003 DM0000 25313 执行XFER(70)指令,可将高速计数器的当前值248和249中的内容传送到HR00和HR01中。这样,一旦PLC掉电,高速计数器的当前值能被保存在HR00和HR01中。 PRV (62) 000 000 LR00 INI (61) 000 002 HR00 00100 25200 SBN (92) 000 00005 子程序000 @INI (61) 000 000 000 REN (93) 再上电时通过执行第一个INI指令,就可以把掉电前的当前值传送到高速计数器的当前值通道248、249中,作为新当前值。 SBN (92) 001 25313 子程序001 XFER(70) # 0002 248 HR00 RET (93) END (01) 设DM6642 的内容为 0100,表示使用高速计数器、增减计数方式、复位方式是采用Z信号+软复位。
25315 CTBL (61) 000 003 DM0000 25313 PRV (62) 000 000 LR00 执行当前值读出指令PRV,将248、249中的当前值读到LR00中去。 若00100 ON且有Z信号,则高速计数器复位 INI (61) 000 002 HR00 00100 25200 SBN (92) 000 00005 子程序000 @INI (61) 000 000 000 REN (93) SBN (92) 001 25313 子程序001 XFER(70) # 0002 248 HR00 RET (93) END (01)
高速计数器控制指令小结 1. 高速计数器的计数功能 (1) 高速计数器的计数模式可分为递增计数和增减计数(可配合使用旋转编码器)两类。 (2) 高速计数器的复位可分为软件复位和Z+软件复位两种方式。Z信号由旋转编码器提供。 (3) 使用高速计数器必须在DM6642中进行设定,以确定使用/不使用高速计数器、计数模式、复位方式 (4) 使用高速计数器时,SR248、249存放计数器当前值,不可另作它用。
2. 高速计数器的中断功能 (1) 高速计数器的中断分为目标值比较中断和区域比较中断。 (2) 使用两种比较中断时,要用指令CTBL确定一个比较表,以确定启动比较的方式(直接或用INI启动)及子程序号。 (3) 用指令INI可以改变计数器的当前值或停止比较。 (4) 用指令PRV可以读出计数器的当前值。 3. 注意执行各种指令时对标志位的影响。
脉冲输出控制指令 中断控制指令 步进控制指令 特 殊 指 令
概 述 CPM1A系列PLC的输出点01000和01001可输出20Hz~2KHz的脉冲信号。 输出的脉冲可设置成两类:独立模式和连续模式。 输出脉冲的模式和频率要用控制指令来设定。 ◎ 同一时刻只能从一个点输出脉冲。 ◎ 正在输出脉冲时,不能用指令改变输出脉冲个数。
PULS(65) @PULS(65) 000 000 000 000 N N @PULS(65) 000 000 N PULS(65) 000 000 N 输出脉冲控制指令 1. 设置脉冲指令 N:存放输出脉冲个数的首通道( N低4位、N+1高4位) 功能:在执行条件为ON时,设定独立模式脉冲输出的脉冲个数。
SPED(64) @SPED(64) P P M M F F @SPED(64) P M F SPED(64) P M F 2. 速度输出指令 P:000→由01000输出 010→由01001输出 M:000→独立模式 001→连续模式 F:取值范围为 0002~0200 →对应20~2000Hz 功能:在执行条件为ON时,设定脉冲的输出点、输出模式及脉冲频率。
当SPED指令的F设为0000,也可以停止脉冲输出。 00000 @SPED(64) 000 001 # 0150 固定设置 固定设置 00001 @INI(61) 000 003 000 使用脉冲输出指令举例(1) 连续输出模式 从01000输出 连续模式 1500Hz 停止脉冲输出 程序功能 当00000 OFF→ON时,执行@SPED指令,从01000输出1500 Hz的连续脉冲信号。 当00001O FF→ON时,执行@INI指令停止脉冲输出。
对独立模式,当输出脉冲达到设定个数时,能自动停止脉冲输出。对独立模式,当输出脉冲达到设定个数时,能自动停止脉冲输出。 固定设置 固定设置 00100 @PULS(65) 000 000 DM0000 @SPED(64) 010 000 # 0050 使用脉冲输出指令举例(2) 独立输出模式 存放设置脉冲个数的首通道 从01001输出脉冲 独立模式 脉冲频率500Hz 程序功能 当00100 OFF→ON时,执行@PULS指令设置输出脉冲的个数,执行@SPED指令启动脉冲输出,从01001输出500Hz的脉冲信号。
外部输入中断功能 间隔定时器中断功能 中 断 的 优 先 级 中 断 控 制 指 令
一、外部输入中断功能 1. 外部输入中断的输入点 CPM1A系列20、30、40点的主机为00003~00006。 CPM1A系列10点的主机为00003和00004。 中断输入点的编号 00003:中断输入0 00004:中断输入1 00005:中断输入2 00006:中断输入3 2. 外部输入中断的优先级 中断输入0 →中断输入1 →中断输入2 → 中断输入3
3. 外部输入中断的模式 (1)输入中断模式 在中断输入点非屏蔽时,只要中断输入点接通即产生中断响应;在该点屏蔽时,待解除屏蔽时再响应中断。 (2)计数中断模式 对中断输入点进行高速计数,当达到设定次数时产生中断,且停止计数。计数范围0~65535、最高1KHz。 计数器的设定值和(当前值-1)存放在指定的通道中。
4. 外部输入中断子程序的编号 中断输入0 (输入点00003): 子程序号为000 中断输入1 (输入点00004): 子程序号为001 中断输入2 (输入点00005): 子程序号为002 中断输入3 (输入点00006): 子程序号为003 当不使用中断时,000~003可作为普通子程序号.
DM6628 03 02 01 00 注意:不论哪种模式的中断,其子程序必须用SBN/RET指令定义,且必须放在主程序之后、END之前。 5. 外部输入中断的设定 输入点00003 ( 0:普通输入点 1:中断输入点 ) 输入点00004 ( 0:普通输入点 1:中断输入点 ) 输入点00005 ( 0:普通输入点 1:中断输入点 ) 输入点00006 ( 0:普通输入点 1:中断输入点 )
二、间隔定时器中断功能 1. 间隔定时器 当间隔定时器(递减)定时到,可以不受扫描周期影响,停止主程序而转去执行子程序。 间隔定时器可以实现高精度的定时和中断处理。 2. 间隔定时器的中断模式 (1) 单次中断模式 当间隔定时器定时到,停止定时并产生中断信号,但只执行一次中断。
(2) 重复中断模式 间隔定时器每隔一定时间产生一次中断,停止执行主程序而去执行中断子程序。 在执行中断子程序的同时,定时器的当前值又恢复为设定值并重新开始定时,直到定时器停止计数为止。 3. 间隔定时器的中断处理子程序 不论是何种间隔定时器中断模式,子程序号都是由指令STEM来确定的。
三、中断的优先级 外部输入中断0→外部输入中断1→外部输入中断2→外部输入中断3→间隔定时器中断→ 高速计数器中断. 在执行某中断子程序时,若发生了优先级更高的中断,则立即停止执行当前的中断子程序,而转去执行优先级更高的子程序。 该子程序执行完毕再返回断点处继续执行程序。 同时发生了几个中断请求信号时,先响应优先级最高的中断。
D 03 02 01 00 @INT(89) CC 000 D INT(89) CC 000 D 四、中断控制指令 1. 中断控制指令 功能:当执行条件为ON时,根据CC的内容执行6种功能中的一种。 D:设定输入点屏蔽/非屏蔽 CC:控制码 CC= 000 (屏蔽/不屏蔽输入点) 输入点00003 ( 0:不屏蔽 1:屏蔽 ) 输入点00004 ( 0:不屏蔽 1:屏蔽 ) 输入点00005 ( 0:不屏蔽 1:屏蔽 ) 输入点00006 ( 0:不屏蔽 1:屏蔽 )
D D 03 02 01 00 03 02 01 00 CC= 001 清除/不清除输入中断记忆 输入点00003 ( 0:不清除 1:清除 ) 输入点00004 ( 0:不清除 1:清除 ) 输入点00005 ( 0:不清除 1:清除 ) 输入点00006 ( 0:不清除 1:清除 ) CC= 002 读出中断输入点当前状态 输入点00003 ( 0:不屏蔽 1:屏蔽) 输入点00004 ( 0:不屏蔽 1:屏蔽) 输入点00005 ( 0:不屏蔽 1:屏蔽) 输入点00006 ( 0:不屏蔽 1:屏蔽)
D 03 02 01 00 CC= 003 更新/不更新计数设定值 输入点00003 ( 0:更新 1:不更新 ) 输入点00004 ( 0:更新 1:不更新 ) 输入点00005 ( 0:更新 1:不更新 ) 输入点00006 ( 0:更新 1:不更新 ) CC = 100 (D=000) 屏蔽所有中断输入点 屏蔽所有中断。若有中断信号先记忆,待解除屏蔽时立即响应. CC = 200 (D=000) 解除所有中断屏蔽 解除所有中断屏蔽,恢复到执行‘屏蔽所有中断’之前的状态,但不解除‘单独中断类’的中断。
25315 INT(89) 000 中断屏蔽设定 000 为固定设置 # 000C 20000 20001 00003、00004 01000 为非屏蔽 SBN(92) 000 25313 子程序 000 20000 RET(93) SBN(92) 001 25313 子程序 001 20001 RET(93) 外部输入中断举例 设DM6628为0011,即00003和00004为中断输入点。 当00003 接通时产生中断,停止执行主程序、转去执行子程序000使20000 ON,返回执行主程序使01000 ON。 C(1100) 当00004接通产生中断时,转去执行子程序001使20001 ON,返回执行主程序使01000 OFF。