资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,高速计数器控制指令,第五章,高速计数器控制指令,高速计数器概述,高速计数器控制指令,高速计数器的计数功能,高速计数器的中断功能,CPM1A系列PLC设置了高频脉冲输入点,配合相关指令及必要的设定,可以对高频脉冲进行处理。,可以用高速计数器对高频脉冲进行计数。,可以用高速计数器实现中断处理。,一、 高速计数器概述,CPM1A系列PLC的高频脉冲输入点是0000000002。,高频脉冲可来源于控制现场,也可由旋转编码器提供。,旋 转 编 码 器,一种旋转编码器与PLC的连接示意图,00000,00001,00002,CPM1A PLC,DC24V,+,-,COM,-,DC24V,+,A相,B相,Z相,COM,旋转编码器,两相脉冲,单相脉冲,计数脉冲,1 2 3 4,递增计数脉冲,递减计数脉冲,A相,B相,1 2 3 4 5 6 7 8 7 6 5 4 3 2 1 0,有的旋转编码器可提供三相脉冲,即A、B、Z相。,各种脉冲信号的波形,A超前B,A滞后B,二、高速计数器的计数功能,高速计数器的计数模式,计数器当前值的存储区,高速计数器的复位方式,使用高速计数器时的设定,高速计数器的溢出,1. 高速计数器的计数模式,高频脉冲由PLC的00000输入点输入,在输入计数脉冲的前沿,高速计数器的当前值加1。,(1) 递增计数模式,最高计数频率是5 KHz,计数范围是065535,(000000000000FFFF),增减计数的最高计数频率是2.5 KHz,计数范围是-32767+32767(F0007FFF00007FFF,第一位的F表示负数)。,(2) 增减计数模式,在增减计数时可使用旋转编码器。旋转编码器的A 相脉冲接00000 输入点,B 相脉冲接00001输入点,复位Z信号接在00002输入点。,递增计数:,当A相超前B相90时,在A、B相脉冲的前沿,计数器的当前值加1。,递减计数:,当B相超前A相90时,在A、B相脉冲的前沿,计数器的当前值减1。,2高速计数器的复位方式,高速计数器复位时,其当前值为0。, 若高速计数器的复位标志位25200先ON时,在复位Z信号ON的前沿时刻,高速计数器复位;,若复位Z信号先ON时,在25200 ON后一个扫描周期时,高速计数器复位。,Ts,是扫描周期。,25200,复位,Z信号,00002,Ts,复位,(1)Z信号 + 软件复位,Ts,复位,25200,(2) 软件复位,当25200 ON一个扫描周期后高速计数器复位。,另外,当PLC断电再上电时高速计数器自动复位。,3使用高速计数器时的设定,使用高速计数器前必须进行必要的设定,否则使用无效。,对CPM1A系列PLC,设定值写入DM6642中。,不能用程序写入设定值(用编程工具)。,用设定值确定高速计数器功能是否使用、复位方式、计数模式等。,高速计数器的设定,位号,DM6642,00 03,04 07,08 15,通道号,复位方式设定,( 0:Z信号 + 软件复位; 1:软件复位),高速计数器使用/不使用,( 00:不使用;01:使用),计数模式 ( 4:递增计数 0:增减计数),各 位 数 字 的 含 义,例如:DM6642的内容为 # 0114,使用高速计数器,软件复位,递增计数,4. 高速计数器的溢出,当高速计数器计数时:,若从下限开始进行,递减计数,就会发生,下溢出,,其当前值为FFFF FFFF 。,重新复位高速计数器时,将清除溢出状态。,若从上限值开始进行,递增计数,就会发生,上溢出,,其当前值为0FFF FFFF;,发生溢出时计数器停止计数。,5高速计数器的当前值存储区,对CPM1A系列PLC,高速计数器的当前值存放在SR248和SR249中。,在高速计数器执行高速计数操作后,可以利用指令从SR248和SR249中读出其当前值,也可以利用指令更改其当前值。,SR248存放低4位, SR249存放高4位。,二、高速计数器的中断功能,高速计数器中断功能有两种模式,区 域比较中断模式,目标值比较中断模式,1高速计数器的目标值比较中断,最多放16个目标,采取目标值比较中断时,要建立一个目标值比较表,目标1,TB,TB+1,TB+2,TB+3,TB+4,TB+5,TB+6,目标值的个数,目标值1低4位,目标值1高4位,中断处理子程序号,目标值2低4位,目标值2高4位,中断处理子程序号,目标值比较表,目标2,在高速计数器计数过程中,若其当前值与比较表中某个目标值相同时,则停止执行主程序而转去执行与该目标值对应的子程序。,表中数据可预先写入,子程序执行完毕,返回到断点处继续执行主程序。,2高速计数器的区域比较中断,采取区域比较中断时要建立一个区域比较表,TB,TB+1,TB+2,TB+3,TB+4,TB+5,TB+6,下限值1低4位,下限值1高4位,上限值1低4位,上限值1高4位,中断处理子程序号,下限值2低4位,中断处理子程序号,区 域比较表,下限值2高4位,TB+7,TB+8,TB+9,上限值2高4位,上限值2低4位,区域1,区域2,每个区占5个通道,比较表分8个区域,表中数据可预先写入,当实际使用的区域不满8个时,要把其余存放上、下限值的通道都置为0,将存放子程序号的通道都置为FFFF。,区域比较中断的执行过程,若高速计数器的当前值落在比较表中某个区域时(下限值 计数器PV值上限值) ,则停止执行主程序而转去执行与该区域对应的中断子程序。子程序执行完毕,返回到断点处继续执行主程序。,执行区域比较中断时,比较结果存放在AR1100AR1107中。,例如,当计数器的当前值落在比较表的区域1中时,AR1100置为ON,当计数器的当前值落在比较表的区域2中时,AR1101置为ON等。,三、高速计数器控制指令,CTBL,(63),P,C,TB,CTBL,(63),P,C,TB,CTBL (63),P,C,TB,CTBL,(63),P,C,TB,P:端口定义(000) C:控制数据 TB :比较表首通道,C的含义,比较表登录指令,000:,登录一个目标值比较表,并启动比较。,001:登录一个区域比较表,并启动比较。,002:登录一个目标值比较表,用指令INI启动比较,003:登录一个区域比较表, 用指令INI启动比较,INI,(61),P,C,P1,INI,(61),P,C,P1,INI(61),P,C,P1,INI(61),P,C,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),P,C,D,PRV,(62),P,C,D,PRV,(62),P,C,D,PRV(62),P,C,D,P:端口定义(000) C:控制数据(000) D:目的首通道,读出当前值指令,读出的当前值低4位放在D, 高4位放在D+1中。,配合上述各指令,,,可以编写使用高速计数器的程序。,高速计数器目标值比较中断,使用高速计数器举例,MOV,#5000,HR00,CTBL(63),000,000,DM0000,SBN (92) 010,RET (93),25315,25313,25200,00100,SBN(92) 011,CMP,HR 00,HR10,RET (93),END (01),01101,25313,25505,00002,5000,0000,0010,0000,0002,0011,2个目标值,目标值1:5000,子程序号,目标值2:20000,子程序号,比较表首地址DM0000,中断处理子程序也要放在主程序之后、END之前。,登录比较表、启动比较,比较表首地址,软件复位,设DM6642的内容为#0104表示使用高速计数器、递增计数、Z,信号+软复位。,若高速计数器的当前值等于目标值1时,中断主程序而执行010号中断子程序:把#5000传送到HR00中。子程序执行完毕返回断点处继续执行主程序。,MOV,#5000,HR00,CTBL(63),000,000,DM0000,SBN (92) 010,RET (93),25315,25313,25200,00100,SBN(92) 011,CMP,HR 00,HR10,RET (93),END (01),01101,25313,25505,00002,5000,0000,0010,0000,0002,0011,2个目标值,目标值1:5000,子程序号,目标值2:20000,子程序号,比较表首地址DM0000,若高速计数器的当前值等于目标值2时,中断主程序而执行011号中断子程序:将HR00与HR10中的内容进行一次比较,若HR00的内容大于HR10时,01101为ON。子程序执行完毕返回断点处继续执行主程序。若00100 ON且有Z信号时,高速计数器复位。,MOV,#5000,HR00,CTBL(63),000,000,DM0000,SBN (92) 010,RET (93),25315,25313,25200,00100,SBN(92) 011,CMP,HR 00,HR10,RET (93),END (01),01101,25313,25505,00002,5000,0000,0010,0000,0002,0011,2个目标值,目标值1:5000,子程序号,目标值2:20000,子程序号,比较表首地址DM0000,高速计数器区域比较中断,使用高速计数器举例,CTBL (61),000,003,DM0000,25315,INI (61),000,002,HR00,INI (61),000,000,000,00005,XFER(70),# 0002,248,HR00,25313,PRV (62),000,000,LR00,25313,SBN (92) 000,子程序000,REN (93),SBN (92) 001,子程序001,RET (93),END (01),25200,00100,1500,0000,3000,0000,0000,7500,0000,下限1:1500,上限1:3000,子程序号,子程序号,0000,0001,0001,下限2:7500,上限2:10000,没用的区域,登录比较表、用INI启动,比较表首地址,更新当前值,启动比较,将248、249内容传送到HR00、HR01,。,读出当前值,CTBL (61),000,003,DM0000,25315,INI (61),000,002,HR00,INI (61),000,000,000,00005,XFER(70),# 0002,248,HR00,25313,PRV (62),000,000,LR00,25313,SBN (92) 000,子程序000,REN (93),SBN (92) 001,子程序001,RET (93),END (01),25200,00100,设DM6642 的内容为 0100,表示使用高速计数器、增减计数方式、复位方式是采用Z信号+软复位。,执行XFER(70)指令,可将高速计数器的当前值248和249中的内容传送到HR00和HR01中。这样,一旦PLC掉电,高速计数器的当前值能被保存在HR00和HR01中。,再上电时通过执行第一个INI指令,就可以把掉电前的当前值传送到高速计数器的当前值通道248、249中,作为新当前值。,执行当前值读出指令PRV,将248、249中的当前值读到LR00中去。,若00100 ON且有Z信号,则高速计数器复位,CTBL (61),000,003,DM0000,25315,INI (61),000,002,HR00,INI (61),000,000,000,00005,XFER(70),# 0002,248,HR00,25313,PRV (62),000,000,LR00,25313,SBN (92) 000,子程序000,REN (93),SBN (92) 001,子程序001,RET (93),END (01),25200,00100,高速计数器控制指令小结,1. 高速计数器的计数功能,(1) 高速计数器的计数模式可分为,递增,计数和,增减,计数(可配合使用旋转编码器)两类。,(2) 高速计数器的复位可分为,软件,复位和,Z+软件,复位两种方式。Z信号由旋转编码器提供。,(3) 使用高速计数器必须在DM6642中进行设定,以确定,使用/不使用,高速计数器、计数,模式,、,复位,方式,(4) 使用高速计数器时,SR248、249存放计数器当前值,不可另作它用。,2. 高速计数器的中断功能,(1) 高速计数器的中断分为目标值比较中断和区域比较中断。,(2) 使用两种比较中断时,要用指令CTBL确定一个比较表,以确定启动比较的方式(直接或用INI启动)及子程序号。,(3) 用指令INI可以改变计数器的当前值或停止比较。,(4) 用指令PRV可以读出计数器的当前值。,3. 注意执行各种指令时对标志位的影响。,脉冲输出控制指令,中断控制指令,步进控制指令,特 殊 指 令,脉冲输出控制指令,CPM1A系列PLC的输出点01000和01001可输出20Hz2KHz的脉冲信号。,输出的脉冲可设置成两类:独立模式和连续模式。, 同一时刻只能从一个点输出脉冲。,输出脉冲的模式和频率要用控制指令来设定。, 正在输出脉冲时,不能用指令改变输出脉冲个数。,概 述,输出脉冲控制指令,N:存放输出脉冲个数的首通道( N低4位、N+1高4位),功能:在执行条件为ON时,设定独立模式脉冲输出的脉冲个数。,1. 设置脉冲指令,PULS(65),000,000,N,PULS(65),000,000,N,PULS(65),000,000,N,PULS(65),000,000,N,功能:在执行条件为ON时,设定脉冲的输出点、输出模式及脉冲频率。,P:000由01000输出 010由01001输出,M:000独立模式 001连续模式,F:取值范围为 00020200 对应202000Hz,2. 速度输出指令,SPED(64),P,M,F,SPED(64),P,M,F,SPED(64),P,M,F,SPED(64),P,M,F,使用脉冲输出指令举例(1),连续输出模式,00000,00001,SPED(64),000,001,# 0150,INI(61),000,003,000,从01000输出,连续模式,1500Hz,当00000 OFFON时,执行SPED指令,从01000输出1500 Hz的连续脉冲信号。,当00001O FFON时,执行INI指令停止脉冲输出。,固定设置,固定设置,停止脉冲输出,程序功能,当SPED指令的F设为0000,也可以停止脉冲输出。,使用脉冲输出指令举例(2),SPED(64),000,010,# 0050,PULS(65),000,DM0000,000,00100,独立输出模式,固定设置,固定设置,存放设置脉冲个数的首通道,从01001输出脉冲,独立模式,脉冲频率500Hz,当00100 OFFON时,执行PULS指令设置输出脉冲的个数,执行SPED指令启动脉冲输出,从01001输出500Hz的脉冲信号。,程序功能,对独立模式,当输出脉冲达到设定个数时,能自动停止脉冲输出。,脉冲输出功能的应用,中断控制指令,间隔定时器中断功能,中 断 的 优 先 级,中 断 控 制 指 令,外部输入中断功能,一、外部输入中断功能,1. 外部输入中断的输入点,CPM1A系列20、30、40点的主机为0000300006。,CPM1A系列10点的主机为00003和00004。,中断输入点的编号,00003:中断输入0 00004:中断输入1,00005:中断输入2 00006:中断输入3,2. 外部输入中断的优先级,中断输入0 中断输入1 中断输入2 中断输入3,3. 外部输入中断的模式,(1)输入中断模式,在中断输入点非屏蔽时,只要中断输入点接通即产生中断响应;,在该点屏蔽时,待解除屏蔽时再响应中断。,对中断输入点进行高速计数,当达到设定次数时产生中断,且停止计数。,计数范围065535、最高1KHz。,(2)计数中断模式,计数器的设定值和(当前值,-,1)存放在指定的通道中。,中断输入点,存放计数器设定值,存放计数器(当前值1),输入点0003,SR240,SR 244,输入点0004,SR241,SR 245,输入点0005,SR242,SR 246,输入点0006,SR243,SR 247,4. 外部输入中断子程序的编号,中断输入0 (输入点00003): 子程序号为000,中断输入1 (输入点00004): 子程序号为001,中断输入2 (输入点00005): 子程序号为002,中断输入3 (输入点00006): 子程序号为003,当不使用中断时,000003可作为普通子程序号.,注意:不论哪种模式的中断,其子程序必须用SBN/RET指令定义,且必须放在主程序之后、END之前。,5. 外部输入中断的设定,输入点00003 ( 0:普通输入点 1:中断输入点 ),输入点00004 ( 0:普通输入点 1:中断输入点 ),输入点00005 ( 0:普通输入点 1:中断输入点 ),输入点00006 ( 0:普通输入点 1:中断输入点 ),DM6628,03 02 01 00,二、间隔定时器中断功能,1. 间隔定时器,当间隔定时器(递减)定时到,可以不受扫描周期影响,停止主程序而转去执行子程序。,间隔定时器可以实现,高精度的定时,和中断处理。,2. 间隔定时器的中断模式,(1) 单次中断模式,当间隔定时器定时到,停止定时并产生中断信号,但只执行一次中断。,(2) 重复中断模式,间隔定时器每隔一定时间产生一次中断,停止执行主程序而去执行中断子程序。,3. 间隔定时器的中断处理子程序,不论是何种间隔定时器中断模式,子程序号都是由指令STEM来确定的。,在执行中断子程序的同时,定时器的当前值又恢复为设定值并重新开始定时,直到定时器停止计数为止。,三、中断的优先级,外部输入中断0外部输入中断1外部输入中断2外部输入中断3间隔定时器中断 高速计数器中断.,在执行某中断子程序时,若发生了优先级更高的中断,则立即停止执行当前的中断子程序,而转去执行优先级更高的子程序。,该子程序执行完毕再返回断点处继续执行程序。,同时发生了几个中断请求信号时,先响应优先级最高的中断。,四、中断控制指令,INT(89),CC,000,D,INT(89),CC,000,D,1. 中断控制指令,功能:当执行条件为ON时,根据CC的内容执行6种功能中的一种。,D:设定输入点屏蔽/非屏蔽 CC:控制码,输入点00003 ( 0:不屏蔽 1:屏蔽 ),输入点00004 ( 0:不屏蔽 1:屏蔽 ),输入点00005 ( 0:不屏蔽 1:屏蔽 ),输入点00006 ( 0:不屏蔽 1:屏蔽 ),D,03 02 01 00,CC= 000,(屏蔽/不屏蔽输入点,),输入点00003 ( 0:不清除 1:清除 ),输入点00004 ( 0:不清除 1:清除 ),输入点00005 ( 0:不清除 1:清除 ),输入点00006 ( 0:不清除 1:清除 ),D,03 02 01 00,CC= 001,输入点00003 ( 0:不屏蔽 1:屏蔽),输入点00004 ( 0:不屏蔽 1:屏蔽),输入点00005 ( 0:不屏蔽 1:屏蔽),输入点00006 ( 0:不屏蔽 1:屏蔽),D,03 02 01 00,CC= 002,清除/不清除输入中断记忆,读出中断输入点当前状态,输入点00003 ( 0:更新 1:不更新 ),输入点00004 ( 0:更新 1:不更新 ),输入点00005 ( 0:更新 1:不更新 ),输入点00006 ( 0:更新 1:不更新 ),D,03 02 01 00,CC= 003,CC = 100,(D=000),屏蔽所有中断。若有中断信号先记忆,待解除屏蔽时立即响应.,CC = 200,(D=000),解除所有中断屏蔽,恢复到执行屏蔽所有中断之前的状态,但不解除单独中断类的中断。,更新/不更新计数设定值,屏蔽所有中断输入点,解除所有中断屏蔽,外部输入中断举例,25315,SBN(92) 000,# 000C,INT(89),000,000,RET(93),20000,25313,SBN(92) 001,20001,25313,RET(93),20000,01000,20001,子程序,000,子程序,001,C(1100),当00003 接通时产生中断,停止执行主程序、转去执行子程序000使20000 ON,返回执行主程序使01000 ON。,当00004接通产生中断时,转去执行子程序001使20001 ON,返回执行主程序使01000 OFF。,设DM6628为0011,即00003和00004为中断输入点。,中断屏蔽设定,为固定设置,00003、00004,为非屏蔽,000,01000,20000,SBN(92) 001,MOV(21),# 00FA,241,25315,# 000D,INT(89),003,TIM000,# 0050,20000,TIM000,25313,RET(93),固定,设置,子程序001,外部输入计数中断举例,计数器设定值更新,00004为更新,传送计数器设定值,D(1101),设DM6628为0010,即00004为中断输入点。,在PLC上电后的第一个扫描周期,执行一次MOV指令,将#00FA(十进制250)传送到241通道(存放00004中断输入点计数设定值)。,程序分析,执行一次INT指令,设置输入中断1为计数中断模式,设定00004输入点为非屏蔽。,当00004输入点接通250次时产生中断,停止执行主程序、并转去执行子程序001。,执行子程序001,使20000 ON。返回主程序使TIM000开始定时。经过5秒TIM000 ON、使01000 ON。,外部输入计数中断举例(续),固定,设置,子程序001,计数器设定值更新,00004为更新,传送计数器设定值,D(1101),000,01000,20000,SBN(92) 001,MOV(21),# 00FA,241,25315,# 000D,INT(89),003,TIM000,# 0050,20000,TIM000,25313,RET(93),2. 间隔定时器中断控制指令,功能:当执行条件为ON时,根据C1的内容执行4种功能中的一种。,C1,:控制码,C2,、,C3,:设定值,(,C2,、,C3,的值取决于,C1,),(1) C1=000 启动单次中断模式, C2若为常数(BCD 00009999)时,则为定时器的设定值。时间间隔固定为1ms 。,实际定时时间即为该常数值,单位为毫秒。,C3为子程序号。,STEM(69),C1,C2,C3, STEM(69),C1,C2,C3,STEM(69),C1,C2,C3,STEM(69),C1,C2,C3, C2若为通道号,则其内容(BCD 00009999)为,定时器的设定值。,时间间隔由C2+1的内容(BCD 00050320,对应0.532ms)确定,实际定时时间为:,C2的内容(C2+1)的内容0.1ms,故实际定时时间的范围是0.5319968 ms。,C3为子程序号。,STEM(69),C1,C2,C3, STEM(69),C1,C2,C3,STEM(69),C1,C2,C3,STEM(69),C1,C2,C3,(2) C1=003 启动重复中断模式,C2、C2+1、C3的意义及定时时间的计算同上.,(3) C1=006 读出定时器的当前值,可读出计数器减1的次数、时间间隔和从上一次减1到当前时刻的时间。,读出的数据分别放在C2、C2+1、C3中,由此计算出定时开始到当前时刻的时间为:,C2的内容(C2+1)的内容+C3的内容0.1ms,STEM(69),C1,C2,C3, STEM(69),C1,C2,C3,STEM(69),C1,C2,C3,STEM(69),C1,C2,C3,(4) C1=010 停止间隔定时器工作,此时C2、C3固定为000。,使用指令STEM时比较烦琐,必须认真核对指令的操作数设置是否正确。,STEM(69),C1,C2,C3, STEM(69),C1,C2,C3,STEM(69),C1,C2,C3,STEM(69),C1,C2,C3,程序分析,间隔定时器单次中断举例,间隔定时器的,定时设定值为200100.1=200ms。,子程序号为010。,设定值,传送间隔定时器设定值,子程序,010,20000,01000,00000,# 0010,STIM(69),000,DM0000,TIM 000,# 0050,RET(93),TIM000,20000,25313,MOV,# 0200,DM0000,25315,MOV(21),# 0010,DM0001,RESET 20000,SBN(92) 010,单次中断,子程序号,PLC上电即传送间隔定时器的设定值。,在00000为ON时执行指令STIM,确定中断模式(单次),并启动间隔定时器开始定时。,间隔定时器单次中断举例(续),当达到设定时间200ms时,产生中断并转去执行010号子程序,使20000 ON。,设定值,子程序号,单次中断,传送间隔定时器设定值,子程序,010,20000,01000,00000,# 0010,STIM(69),000,DM0000,TIM 000,# 0050,RET(93),TIM000,20000,25313,MOV,# 0200,DM0000,25315,MOV(21),# 0010,DM0001,RESET 20000,SBN(92) 010,返回去执行主程序使01000 ON、并使TIM000开始定时,5秒后01000 OFF。,间隔定时器单次中断举例(续),欲再次实现单次中断,需要再令触点00000OFFON一次。,设定值,子程序号,单次中断,传送间隔定时器设定值,子程序,010,20000,01000,00000,# 0010,STIM(69),000,DM0000,TIM 000,# 0050,RET(93),TIM000,20000,25313,MOV,# 0200,DM0000,25315,MOV(21),# 0010,DM0001,RESET 20000,SBN(92) 010,设定值(ms),重复中断,子程序,005,25315,# 0005,STIM(69),003,# 0050,01000,20000,01001,20001,SBN(92) 005,20000,20001,20001,RET(93),20000,间隔定时器重复中断举例,子程序号,程序分析,PLC上电后执行STIM指令,确定间隔定时器为重复中断模式,间隔定时器的定时值为50ms,子程序号为005。,间隔定时器重复中断举例(续),当间隔定时器达到设定时间50ms时,产生中断并转去执行005号子程序,同时定时器的当前值又恢复为设定值并重新开始定时。,再过50 ms时又产生一次中断。,设定值(ms),重复中断,子程序,005,25315,# 0005,STIM(69),003,# 0050,01000,20000,01001,20001,SBN(92) 005,20000,20001,20001,RET(93),20000,子程序号,间隔定时器重复中断举例(续),第一次中断执行子程序使20001 ON、20000 OFF,返回去执行主程序使01001 ON 50ms、01000 OFF 50ms 。,第二次中断执行子程序时20000 ON、20001 OFF,所以01000 ON 50ms、01001 OFF 50ms 。,设定值(ms),重复中断,子程序,005,25315,# 0005,STIM(69),003,# 0050,01000,20000,01001,20001,SBN(92) 005,20000,20001,20001,RET(93),20000,子程序号,间隔定时器重复中断举例(续),可见该段程序的功能是:,01000和01001均能产生0.1S的脉冲, 直到间隔定时器停止计数为止。,间隔定时器的定时时间最小可达0.5ms,所以用间隔定时器可实现高精度的定时控制。,设定值(ms),重复中断,子程序,005,25315,# 0005,STIM(69),003,# 0050,01000,20000,01001,20001,SBN(92) 005,20000,20001,20001,RET(93),20000,子程序号,STIM指令的各种设定举例,启动重复中断,间隔时间400ms,子程序号,读出定时器当前值,存放当前值首通道,存放当前值末通道,停止定时器的定时,RESET20000,# 0002,STIM(69),003,# 0400,CNT,000,# 0002,20000,CNT000,25500,00000,25315,CNT000,RET(93),20000,25313,00001,DM0002,STIM(69),006,DM0000,00002,000,STIM(69),010,000,SBN(92) 002,启动重复中断,间隔时间400ms,子程序号,读出定时器当前值,存放当前值首通道,存放当前值末通道,停止定时器的定时,RESET20000,# 0002,STIM(69),003,# 0400,CNT,000,# 0002,20000,CNT000,25500,00000,25315,CNT000,RET(93),20000,25313,00001,DM0002,STIM(69),006,DM0000,00002,000,STIM(69),010,000,SBN(92) 002,STIM指令的设定举例(续), 自00000OFF ON后,过400ms产生中断,转去执行子程序002,使20000 ON。,程序分析,启动重复中断,间隔时间400ms,子程序号,读出定时器当前值,存放当前值首通道,存放当前值末通道,停止定时器的定时,RESET20000,# 0002,STIM(69),003,# 0400,CNT,000,# 0002,20000,CNT000,25500,00000,25315,CNT000,RET(93),20000,25313,00001,DM0002,STIM(69),006,DM0000,00002,000,STIM(69),010,000,SBN(92) 002,STIM指令各种设定举例,(续), 20000 ON,执行主程序使CNT000开始计数(或定时)。,启动重复中断,间隔时间400ms,子程序号,读出定时器当前值,存放当前值首通道,存放当前值末通道,停止定时器的定时,RESET20000,# 0002,STIM(69),003,# 0400,CNT,000,# 0002,20000,CNT000,25500,00000,25315,CNT000,RET(93),20000,25313,00001,DM0002,STIM(69),006,DM0000,00002,000,STIM(69),010,000,SBN(92) 002,STIM指令的各种设定举例(续), 经过200 ms CNT000 ONCNT000和20000复位。自此再过200 ms产生第二次中断,计数器CNT000重复上述定时过程。,启动重复中断,间隔时间400ms,子程序号,读出定时器当前值,存放当前值首通道,存放当前值末通道,停止定时器的定时,RESET20000,# 0002,STIM(69),003,# 0400,CNT,000,# 0002,20000,CNT000,25500,00000,25315,CNT000,RET(93),20000,25313,00001,DM0002,STIM(69),006,DM0000,00002,000,STIM(69),010,000,SBN(92) 002,STIM指令的各种设定举例(续),可见从第一次响应中断之后,每过200 ms ,CNT000 ON一次。,启动重复中断,间隔时间400ms,子程序号,读出定时器当前值,存放当前值首通道,存放当前值末通道,停止定时器的定时,RESET20000,# 0002,STIM(69),003,# 0400,CNT,000,# 0002,20000,CNT000,25500,00000,25315,CNT000,RET(93),20000,25313,00001,DM0002,STIM(69),006,DM0000,00002,000,STIM(69),010,000,SBN(92) 002,STIM指令的各种设定举例(续), 当00001OFF,ON时执行第二个STIM指令。可从屏幕上看到DM0000DM0002的内容,据此可以计算定时器的当前值。,启动重复中断,间隔时间400ms,子程序号,读出定时器当前值,存放当前值首通道,存放当前值末通道,停止定时器的定时,RESET20000,# 0002,STIM(69),003,# 0400,CNT,000,# 0002,20000,CNT000,25500,00000,25315,CNT000,RET(93),20000,25313,00001,DM0002,STIM(69),006,DM0000,00002,000,STIM(69),010,000,SBN(92) 002,STIM指令的各种设定举例(续), 当00002ON时执行第三个STIM指令。这时停止间隔定时器的定时。在断开00002后,间隔定时器可恢复工作。,中断控制指令小结,(1) 两种子程序的相同点,子程序都必须由指令SBN和RET来定义。,子程序都要放在主程序之后、END之前。, 当SBS指令的执行条件不满足时、或没产生中断信号时,CPU都不扫描子程序。,1. 普通子程序调用与中断功能子程序的区别,(2) 两种子程序调用上的区别, 在子程序调用的控制方式上的区别。,普通子程序的调用是受程序的控制,即必须在主程序中安排SBS指令,当CPU扫描到SBS指令、且其执行条件满足时调用子程序。,中断处理子程序的调用不是由程序直接控制的,在中断控制指令设定之后,是否调用子程序取决于有无中断请求信号。而且,对外部输入中断,若中断被屏蔽,即使有中断请求信号也不能立即执行中断子程序。, 两种子程序执行完毕返回地址的区别。,用SBS指令调用子程序时,执行完毕返回地址只能是与指令SBS相邻的下一条指令。,中断处理子程序执行完毕也要返回断点处,但其断点地址是随机的。, 响应各子程序的优先级问题。,用指令SBS调用的各子程序没有优先级问题。按扫描顺序执行程序,满足条件的SBS即调用子程序 。,由于各种中断存在优先级,所以各中断处理子程序在执行时有优先顺序。, 外部输入中断处理子程序的编号是固定的。,2. 中断控制功能,(1) 关于外部输入中断, 使用外部输入中断时要使用指令INT,以确定中断模式、中断输入点的状态等。,(2) 关于间隔定时器中断, 使用外部输入中断时要在DM6628中进行必要的设定,否则使用无效。, 使用间隔定时器中断时不必在DM区设定。, 使用间隔定时器中断时,要用指令STEM确定间隔定时器的模式、定时器的设定值等。,3. 使用中断功能时注意的问题, 在中断处理子程序内部不可使用指令SBS,即中断处理子程序不可调用普通子程序。, 不可用SBS指令去调用中断处理子程序,即普通子程序不可调用中断处理子程序。, 中断处理子程序内部,不可以调用别的中断处理子程序。,步进控制指令,步 进 控 制 指 令,步进控制程序的结构,步进控制程序的编程,把一个较大的程序分成若干个程序段(,对应实际的某些操作,)。一个程序段称为一个步,用指令来控制各步执行的顺序步进控制程序。,当执行步进程序时,在执行完上一步、启动下一步之前,可将上一步使用的定时器、数据区等复位。这样,在以下各步程序中还可以重复使用这些资源。,步进控制概述,一、 步进控制指令,功能:当SNXT指令的执行条件为ON时,结束上一步的执行、复位上一步用过的定时器和数据区,并启动以B为控制位的、以STEP B定义的下一个步。,B:步的控制位号,功能:步结束指令。,当所有步都执行完毕时,要安排SNXT(09) B (,B是虚控制位、无实际意义,)和 STEP指令以结束步程序 。,SNXT(09) B,STEP(08) B,SNXT(09)B,STEP(08) B,STEP(08),STEP(08),二、 步进控制程序的结构,1. 步进程序的基本结构,SNXT(09) HR0000,由HR0000控制的步1,STEP(08) HR0000,SNXT(09) HR0001,STEP(08) HR0001,由HR0001控制的步2,SNXT(09) 00005,STEP(08),00000,00001,00002,每一 步都由具有执行条件的,SNXT(09),B,开始,其后紧随无,执行条件的,STEP(08),B。,STEP(08),B,之后是步,的内容,步程序结束时,,要安排一个,具有执行条件的,SNXT(09),B(,此,B,无意义,可是程序中有用过的位号,)。,最后安排一个,STEP(08),2. 步进控制程序的类型,步1,步2,步3,步结束,条件1,条件2,条件3,条件4,顺 序,执行类,条件4,条件6,选 择,分支类,步A,步B,步E,条件1,条件2,条件3,条件5,步结束,步C,步D,条件7,并 行,分支类,步A,步B,步E,条件1,条件2,步C,条件3,条件4,步结束,步D,条件5,步1,步2,步3,步结束,条件1,条件2,条件3,条件4,顺 序,执行类,(1) 顺序执行类程序中无分支,前一步结束被清除、复位,后一步即被启动并开始执行。,SNXT(09) HR0000,由HR0000控制的步1,STEP(08) HR0000,SNXT(09) HR0001,STEP(08) HR0001,由HR0001控制的步2,SNXT(09) 00005,STEP(08),00000,00001,00002,例如,条件1,条件2,条件3,步结束,条件4,条件6,选 择,分支类,步A,步B,步E,条件1,条件2,条件3,条件5,步结束,步C,步D,条件7,(2) 选择分支类程序有几个分支,每个分支可以有若干个步。每个步要有执行条件。,在同一时刻只能执行其中的一个分支。编写程序时各分支的执行条件间要互锁。如条件1和条件3。,每个分支执行完毕都要去执行同一个步,如图中步E。,并 行,分支类,步A,步B,步E,条件1,条件2,步C,条件3,条件4,步结束,步D,条件5,(3) 并行分支程序有几个分支,每个分支可能有若干个步。在满足条件时几个分支将同时被启动。,几个分支都执行完毕时,又被同一个执行条件所清除、同时进入下一步。,如步B、步D执行完毕,可被条件4复位,并同时进入步E。,三、步进控制程序的编程方法,步进控制程序的结构不同,编写出的程序结构也有区别。,要根据实际控制的要求,确定程序的结构。,编写不同结构的步进控制程序的方法是有章可循的,下面举例说明。,步进控制程序举例(1),STEP(08) HR0000,STEP(08) HR0001,SNXT(09) HR0001,00002,SNXT(09),HR0000,00000,00001,SNXT(09) HR0002,00001,00000,25313,01000,步A,25313,01001,步B,SNXT(09),HR 0004,00003,STEP(08) HR 0002,SNXT(09),HR 0003,STEP(08) HR 0003,00004,25313,01002,步C,25313,01001,步D,SNXT(09) HR0004,STEP(08) HR0004,00005,SNXT(09) 00008,STEP(08),00006,25313,01000,步E,选择分支步进程序,00004,00005,步A,步B,步E,00000,00002,00001,00003,步结束,步C,步D,00006,程序流程图,条件,HR0000 HR0004是控制位,步A开始,步B开始,步结束,步E开始,复位步E,STEP(08) HR0000,STEP(08) HR0001,SNXT(09) HR0001,00002,SNXT(09),HR0000,00000,00001,SNXT(09) HR0002,00001,00000,25313,01000,步A,25313,01001,步B,SNXT(09),HR 0004,00003,STEP(08) HR 0002,SNXT(09),HR 0003,STEP(08) HR 0003,00004,25313,01002,步C,25313,01001,步D,SNXT(09) HR0004,STEP(08) HR0004,00005,SNXT(09) 00008,STEP(08),00006,25313,01000,步E,00000ON、00001OFF,步开始,启动步A,复位步A,启动步B,复位步B,启动步E,步开始,启动步C,步C开始,复位步C,启动步D,步D开始,步结束,复位步D,启动步E,步E开始,复位步E,STEP(08) HR0000,STEP(08) HR0001,SNXT(09) HR0001,00002,SNXT(09),HR0000,00000,00001,SNXT(09) HR0002,00001,00000,25313,01000,步A,25313,01001,步B,SNXT(09),HR 0004,00003,STEP(08) HR 0002,SNXT(09),HR 0003,STEP(08) HR 0003,00004,25313,01002,步C,25313,01001,步D,SNXT(09) HR0004,STEP(08) HR0004,00005,SNXT(09) 00008,STEP(08),00006,25313,01000,步E,00000 OFF、00001ON,步进控制程序举例(2),并行分支步进程序,STEP(08),20000,SNXT(09) 20002,00003,SNXT(09) 20000,00000,步A程序,00001,SNXT(09) 20001,STEP(08),20001,步B程序,SNXT(09) 20004,STEP(08),20002,步C程序,00002,SNXT(09) 20003,STEP(08) 20003,00003,步D程序,SNXT(09) 20004,00004,STEP(08) 20004,步E程序,SNXT(09) 22000,STEP(08),00100,SET 01000,RESET 01005,00004,步A,步B,步E,00000,00002,00001,00003,步结束,步C,步D,普通程序,程序流程图,STEP(08),20000,SNXT(09) 20002,00003,SNXT(09) 20000,00000,步A程序,00001,SNXT(09) 20001,STEP(08),20001,步B程序,SNXT(09) 20004,STEP(08),20002,步C程序,复位步C,启动步D,步D开始,步结束,步E开始,复位步E,00002,SNXT(09) 20003,STEP(08) 20003,00003,步D程序,SNXT(09) 20004,00004,STEP(08) 20004,步E程序,SNXT(09) 22000,STEP(08),00100,SET 01000,RESET 01005,复位步A,启动步B,步B开始,复位步D,启动步E,启动步E,复位步B,步A开始,步C开始,步开始,启动步,A,步开始,启动步C,步进控制程序举例(2) (续),并行分支步进程序,步进控制指令小结,1. 步进程序要设置控制位, 各步的控制位必须在同一个区,前后步的控制位最好连续。,2. 步程序内不能使用以下几个指令:,END、IL/ILC、JMP/JME、SBN。,3. 当SNXT(09)B 执行时,将结束步(B-1)的执行,并复位前一步使用的定时器、数据区。,此时,前一步使用的定时器、数据区的状态为:IR、HR、AR、LR为OFF,定时器复位,移位寄存器、计数器及KEEP、SET、RESET指令的输出位保持。,5. 各步必须以前一步的结束为启动条件,即不能先启动中间的步。,6. 下一步开始执行后,若前一步的执行条件再次满足,时,前一步可再次启动。如果不希望前一步再启动,应编写程序予以禁止。,特殊指令,故障诊断指令,信息显示指令,I / O 刷新指令,位 计 数 指令,一、故障诊断指令,1. 可继续运行的故障诊断指令FAL/FAL,功能,N1: 故障代码,N1取值:0099,当执行条件为ON时,将故障代码N1传送到FAL的输出区SR2530025307中,同时使主机面板上的ALM指示灯闪烁,程序可继续执行。,当N1为00时,执行FAL(06) 00可以将前一个故障代码清除、将下一个故障代码存入FAL 的输出区,FAL(06) N1,FAL(06)
展开阅读全文