高速计数器详细解说
s7-200高速计数器详细解说
1、高速计数器指令
普通计数器受CPU扫描速度得影响,就是按照顺序扫描得方式进行工作。在没个扫描周期中,对计数脉冲只能进行一次累加;对于脉冲信号得频率比PLC得扫描频率高时,如果仍采用普通计数器进行累加,必然会丢失很对输入脉冲信号。在PLC中,对比扫描频率高得输入信号得计数可也使用高速计数器指令来实现。
1.高速计数器指令
(1)定义高速计数器指令HDEF
HDE指令功能就是为某个要使用得高速计数器选定一种工作模式。每个高速计数器在使用前,都要用HDEF指令来定义工作模式,并且只能用一次。它有两个输入端:HSC为要使用得高速计数器编号,数据类型为字节型,数据范围为0~5得常数,分别对应HC0~
HC5;MOCE为高速计数得工作模式,数据类型为字节型,数据范围为0~11得常数,分别对应12种工作模式。当准许输入使能EN有效时,为指定得高速计数器HSC定义工作模式MODE。
(2)执行高速计数指令HSC
HSC指令功能功能就是根据与高速计数器相关得特殊继电器确定在控制方式与工作状态,使高速计数器得设置生效,按照指令得工作模式得工作模式执行计数操作。它有一个数据输入端N:N为高速计数器得编号,数据类型得字型,数据范围为0~5得常数,分别对应高速计数器HC0~HC5、当准许输入EN使能有效时,启动N号高速计数器工作。
2.高速计数器得输入端
高速计数器得输入端不像普通输入端那样有用户定义,而就是由系统指定得输入点输入信号,每个高速计数器对它所支持得脉冲输入端,方向控制,复位与启动都有专用得输入点,通过比较或中断完成预定得操作。每个高速计数器专用得输入点如表
3.高速计数器得状态字节
系统为每个高速计数器都在特殊寄存器区SMB提供了一个状态字节,为了监视高速计数器得工作状态,执行由高速计数器引用得中断事件,其格式如表。
只有执行高速计数器得中断程序时,状态字节得状态位才有效。
4、高速计数器得工作模式
高速计数器有12种不同得工作模式(0`~11),分为4类。每个高速计数器都有多种工作模式,可以通过编程得方法,使用定义高速计数器指令HDEF来选定工作模式。
(1)各个高速计数器得工作模式
1.高速计数器HC0就是一个通用得增减计数器,工有8种模式,可也通过编程来选择不同得工作模式,HC0得工作模式如表
2高速计数器HC1共有12种操作模式如表
3、高速计数器HC2共有12种操作模式,如表
5、高速计数器HC4有8操作模式,如表
6、高速计数器HC5只有一种操作模式如表
4、高速计数器得控制字节
系统为每个高速计数器都安排了一个特殊寄存器SMB作为控制字,可也通过对控制字节指定为得设置,确定高速计数器得工作模式。S7-200在执行HSC指令前,首先要检查与每个高速计数器相关得控制字节,在控制字节中设置了启动输入信号与复位输入信号得有效电平,正交计数器得计数倍率,计数方向采用内部控制得有效电平,就是否允许改变计数方向,就是否允许更新设定值,就是否允许更新当前值,以及就是否允许执行高速计数指令。
(1)在高速计数器得12种工作模式中,模式0、模式3、模式6与模式9,就是既无启动输入,又无复位输入得计数器,在模式1、模式4、模式7与模式10中,就是只
有复位输入,而没有启动输入得计数器;在模式2、模式5、模式8与模式11中,
就是既有启动输入,又有复位输入得计数器。
(2)当启动输入有效时,允许计数器计数;当启动输入无效时,计数器得当前值保持不
变;当复位输入有效时,将计数器得当前值寄存器清零;当启动输入无效,而复位输
入有效时,则忽略复位得影响,计数器得当前值保持不变;当复位输入保持有效,启
动输入变为有效时,则将计数器得当前值寄存器清零。
(3)在S7-200中,系统默认得复位输入与启动输入均为高电平有效,正交计数器为4倍频,如果想改变系统得默认设置,需要设置如上表中得特殊继电器得第0,1,2
位。
各个高速计数器得计数方向得控制,设定值与当前值得控制与执行高速计数得控制,就是由表4-22中各个相关控制字节得第3位至第7位决定得。
6、高速计数器得当前值寄存器与设定值寄存器
每个高速计数器都有1个32位得经过值寄存器HC0-HC5,同时每个高速计数器还有1个32位得当前值寄存器与1个32位得设定值寄存器,当前值与设定值都就是有符号得整数。为了向高速计数器装入新得当前值与设定值,必须先将当前值与设定值以双字得数据类型装入如表所列得特殊寄存器中。然后执行HSC指令,才能将新得值传送给高速计数器。
7、高速计数器得初始化
由于高速计数器得HDEF指令在进入RUN模式后只能执行1次,为了减少程序运行时间优化程序结构,一般以子程序得形式进行初始化。下面以HC2为例,介绍高速计数器得各个工作模式得初始化步骤。
1.利用SM0、1来调用一个初始化子程序。
2.在初始化子程序中,根据需要向SMB47装入控制字。例如,SMB47=16#F8,其意义就是:准许写入新得当前值,准许写入新得设定值,计数方向为曾计数,启动与
复位信号为高电平有效。
3.执行HDEF指令,其输入参数为:HSC端为2(选择2号高速计数器),MODE端为0/1/2(对应工作模式0,模式1,模式2)
4.将希望得当前技术值装入SMD58(装入0可进行计数器得清零操作)
5.将希望得设定值装入SMD62
6.如果希望捕获当前值等于设定值得中断事件,编写与中断事件号16相关联得中断服务程序
7.如果希望捕获外部复位中断事件,编写与中断事件号18相关联得中断服务程序。
8.执行ENI指令
9.执行HSC指令
10.退出初始化子程序
8高速计数器应用举例
某产品包装生产线用高速计数器对产品进行累计与包装,每检测1000个产品时,自动启动包装机进行包装,计数方向可由外部信号控制,。
设计步骤:
1.选择高速计数器,确定工作模式
在本例中,选择得高速计数器为HC0,由于要求技术方向可由外部信号控制,而其不要复位信号输入,确定工作模式为模式3,采用当前值等于设定值得中断事件,中断事件号为12,启动包装机工作子程序,高速计数器得初始化采用子程序。
2.用SM0、1调用高速计数器初始化子程序,子程序号为SBR_0
3.向SMB37写入控制字SMB37=16#F8
4.执行HDEF指令,输入参数:HSC为0,MODE为3
5.向SMD38写入当前值,SMD38=0
6.向SMD42写入设定值。SMD42=1000
7、,执行建立中断连接指令A TCH,输入参数:INT为INT-0,EVNT为12
8.编写中断服务程序INT0,在本例中为调用包装机控制子程序,子程序号为SBR
-1
9、执行全局开中断指令ENI
10、执行HSC指令,对高速计数器编程并投入运行。
MAIN
SBR_0
SBR_1包装机控制程序不写了INT_0
西门子PLCS高速计数器指令用法
高速计数器计数器 输入/输出操作数数据类型 N常数(0,1,2,3,4或5)字 内存范围错误S7-200 CPU指令支持SIMATIC/国际助记符 数据范围CPU内存中的指令大小编址内存 高速计数器(HSC)指令根据HSC特殊内存位的状态配置和控制高速计数 器。参数N指定高速计数器的号码。 高速计数器最多可配置为十二种不同的操作模式。 每台计数器在功能受支持的位置有专用时钟、方向控制、复原和起始输入。 对于双相计数器,两个时钟均可按最高速度运行。在正交模式中,您可以 选择一倍\(1x)或四倍(4x)的最高计数速率。所有的计数器按最高速率 运行,而不会相互干扰。 注释: CPU 221和CPU 222支持4台高速计数器 (HSC0、HSC3、HSC4、HSC5) CPU 221和CPU 222不支持HSC1和HSC2 CPU 224、CPU224XP、CPU 226支持6台高速计数器 (HSC0至HSC5) 您可以为每台高速计数器使用一条"高速计数器定义"指令。文档光盘中"提 示与技巧"中的第4条提示和第29条提示提供使用高速计数器的程序。 设置ENO = 0的错误条件: 0001 HSC在HDEF之前 0005 HSC/PLS同步 程序举例 LAD FBD
STL NETWORK 1 // 主程序 // 首次扫描时,调用SBR_0 LD SM0.1 CALL SBR_0 NETWORK 1 // 子程序0开始 // 配置HSC1 LD SM0.1 // 首次扫描时 MOVB 16#F8 SMB47 // 配置HSC1:// - 启用计数器 // - 写入新当前值
0-99手动计数器的设计要点
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊ 第1章绪论 1.1 计数器介绍 本设计是根据我们所学习的单片机课程,按照课程要求进行的课程设计。单片机技术是一个不可或缺的技术,尤其是对于我们电气专业来说它是我们必须要掌握的技能之一,使我们未来工作和生活的根本。现在的社会是一个信息科技高速发展的社会,也是一个电子技术和微机计算机迅速发展的时代,单片机的档次和水平在不断的提高,其应用的领域和范围也越来越广,成为现代电子系统中最重要的智能化核心部分。 随着计数器技术的不断发展与进步,计数器的种类越来越多,应用的范围越来越广,随之而来的竞争也越来越激烈。过硬的技术也成为众多生产厂商竞争的焦点之一。厂商为了在竞争中处于不败之地,从而不断地改进技术,增加产品的种类。 现计数器的种类以增加到:电磁计数器、电子计数器、机械计数器(拉动机械计数器、转动机械计数器、按动机械计数器、测长机械计数器)、液晶计数器等。计数器的应用范围也遍布印刷、纺织、印染、针织、电缆、电讯、军工、轻工、机械、开关、断路器、矿山、实行多班制的纺织行业的织布机、织带机、制线、制带、造纸、制革、薄膜、高压开关电器产品、试验设备,印刷设备、短路器、医疗、纺织、机械、仓库和码头的货运、行人及车辆过往的数量计数、冶金、食品、国防、包装、配料、石油、化工、发电、机床、仪表、自动化控制等行业。 1.2 本次设计的要求 1) 上电时,数码管显示为00。 2) 利用单片机来制作一个手动计数器,在单片机的管脚上接一个轻触开关,作为手动计数的按钮,用单片机的I/O口接数码管,作为计数器,进行加计数显示。 3) 计数器计数到99后,再按计数按钮,则数码管从00重新开始计数。 1.3 本次设计的目的 1) 学习基本理论在实践中综合运用的初步经验,掌握电路设计的基本方法、设计步骤,培养综合设计与调试能力。 2) 掌握汇编语言程序设计方法。 3) 培养实践技能,提高分析和解决实际问题的能力。
实验三单片机定时计数器实验
实验三单片机定时/计数器实验 1、实验目的 1、学习计数器的使用方法。 2、学习计数器程序的编写。 3、学习定时器的使用方法。 4、学习定时器程序的编写。 5、熟悉汇编语言 2、实验说明 1、8051内部定时计数器T0,按计数器模式和方式1工作,对P3.4(T0)引脚进行计数。将其数值按二进制数在P1口驱动LED灯上显示出来。 2、用CPU内部定时器中断方式计时,实现每一秒钟输出状态发生一次反转 3、实验仪器和条件 计算机 伟福实验箱(lab2000P) 4、实验内容 1、8051内部定时计数器T0,按计数器模式和方式1工作,对P3.4(T0)引脚进行计数。将其数值按二进制数在P1口驱动LED灯上显示出来。 2、外部事件计数脉冲由P3.4引入定时器T0。单片机在每个机器周期采样一次输入波形,因此单片机至少需要两个机器周期才能检测到一次跳变。这就要求被采样电平至少维持一个完整的机器周期,以保证电平在变化之前即被采样。同时这就决定了输入波形的频率不能超过机器周期频率。 3、用CPU内部定时器中断方式计时,实现每一秒钟输出状态发生一次反转 4、定时器有关的寄存器有工作方式寄存器TMOD和控制寄存器TCON。TMOD
用于设置定时器/计数器的工作方式0-3,并确定用于定时还是用于计数。TCON 主要功能是为定时器在溢出时设定标志位,并控制定时器的运行或停止等。 5、在例程的中断服务程序中,因为中断定时常数的设置对中断程序的运行起到关键作用,所以在置数前要先关对应的中断,置数完之后再打开相应的中断。 五、思考题 1、使用其他方式实现本实验功能; 2、改为门控方式外部启动计数; 3、如果改为定时间隔为200us,如何改动程序; 4、使用其他方式实现本实验功能,例如使用方式1,定时间隔为10ms,如何改动程序。 六、源程序修改原理及其仿真结果 思考题一:使用其他方式实现本实验功能 方法一: movTMOD, #00000100b;方式0,记数器 movTH0, #0 movTL0, #0 setbTR0;开始记数;由于方式0的特点是计数时使用TL0的低五位和八位 TH0,故用加法器a用“与”(ANL)取TL0的低五位,再用yiwei子程序实现TH0的低三位变为高三位与TL0相加,这样赋给P1时就是八位计数的结果。 Loop: mova,TL0 anla,#1fh
计数器工作原理及应用
计数器工作原理及应用 除了计数功能外,计数器产品还有一些附加功能,如异步复位、预置数(注意,有同步预置数和异步预置数两种。前者受时钟脉冲控制,后者不受时钟脉冲控制)、保持(注意,有保持进位和不保持进位两种)。虽然计数器产品一般只有二进制和十进制两种,有了这些附加功能,我们就可以方便地用我们可以得到的计数器来构成任意进制的计数器。下面我们举两个例子。在这两个例子中,我们分别用同步十进制加法计数器74LS160构成一个六进制计数器和一个一百进制计数器。 因为六进制计数器的有效状态有六个,而十进制计数器的有效状态有十个,所以用十进制计数器构成六进制计数器时,我们只需保留十进制计数器的六个状态即可。74LS160的十个有效状态是BCD编码的,即0000、0001、0010、0011、0100、0101、0110、0111、1000、1001[图5-1]。 图5-1 我们保留哪六个状态呢?理论上,我们保留哪六个状态都行。然而,为了使电路最简单,保留哪六个状态还是有一点讲究的。一般情况下,我们总是保留0000和1001两个状态。因为74LS160从100 1变化到0000时,将在进位输出端产生一个进位脉冲,所以我们保留了0000和1001这两个状态后,我们就可以利用74LS160的进位输出端作为六进制计数器的进位输出端了。于是,六进制计数器的状态循环可以是0000、0001、0010、0011、0100和1001,也可以是0000、0101、0110、0111、1000和1001。我们不妨采用0000、0001、0010、0011、0100和1001这六个状态。 如何让74LS160从0100状态跳到1001状态呢?我们用一个混合逻辑与非门构成一个译码器[图5. 3.37b],当74LS160的状态为0100时,与非门输出低电平,这个低电平使74LS160工作在预置数状态,当下一个时钟脉冲到来时,由于等于1001,74LS160就会预置成1001,从而我们实现了状态跳跃。
三菱高速计数器应用
三菱FX系列PLC计数器(C)内部计数器高速计数器 2016-02-03 来源:网络或本站原创 FX2N系列计数器分为内部计数器和高速计数器两类。 1.内部计数器 内部计数器是在执行扫描操作时对内部信号(如X、Y、M、S、T等)进行计数。内部输入信号的接通和断开时间应比PLC的扫描周期稍长。 (1)16位增计数器(C0~C199)??共200点,其中C0~C99为通用型,C100~C199共100点为断电保持型(断电保持型即断电后能保持当前值待通电后继续计数)。这类计数器为递加计数,应用前先对其设置一设定值,当输入信号(上升沿)个数累加到设定值时,计数器动作,其常开触点闭合、常闭触点断开。计数器的设定值为1~32767(16位二进制),设定值除了用常数K设定外,还可间接通过指定数据寄存器设定。 下面举例说明通用型16位增计数器的工作原理。如图1所示,X10为复位信号,当X10为ON时C0复位。X11是计数输入,每当X11接通一次计数器当前值增加1(注意X10断开,计数器不会复位)。当计数器计数当前值为设定值10时,计数器C0的输出触点动作,Y0被接通。此后既使输入X11再接通,计数器的当前值也保持不变。当复位输入X10接通时,执行RST复位指令,计数器复位,输出触点也复位,Y0被断开。 图1??通用型16位增计数器 (2)32位增/减计数器(C200~C234)??共有35点32位加/减计数器,其中C200~C219(共20点)为通用型,C220~C234(共15点)为断电保持型。这类计数器与16位增计数器除位数不同外,还在于它能通过控制实现加/减双向计数。设定值范围均为~(32位)。 C200~C234是增计数还是减计数,分别由特殊辅助继电器M8200~M8234设定。对应的特殊辅助继电器被置为ON时为减计数,置为OFF时为增计数。 计数器的设定值与16位计数器一样,可直接用常数K或间接用数据寄存器D的内容作为设定值。在间接设定时,要用编号紧连在一起的两个数据计数器。 如图2所示,X10用来控制M8200,X10闭合时为减计数方式。X12为计数输入,C200的设定值为5(可正、可负)。设C200置为增计数方式(M8200为OFF),当X12计数输入累加由4→5时,计数器的输出触点动作。当前值大于5时计数器仍为ON状态。只有当前值由5→4时,计数器才变为OFF。只要当前值小于4,则输出则保持为OFF状态。复位输入X11接通时,计数器的当前值为0,输出触点也随之复位。 图2? 32位增/减计数器 2.高速计数器(C235~C255) 高速计数器与内部计数器相比除允许输入频率高之外,应用也更为灵活,高速计数器均有断电保持功能,通过参数设定也可变成非断电保持。FX2N有C235~C255共21点高速计数器。适合用来做为高速计数器输入的PLC输入端口有X0~X7。X0~X7不能重复使用,即某一个输入端已被某个高速计数器占用,它就不能再用于
倒计数计数器程序
#include
计数器原理分析及应用实例
计数器原理分析及应用实例 除了计数功能外,计数器产品还有一些附加功能,如异步复位、预置数(注意,有同步预置数和异步预置数两种。前者受时钟脉冲控制,后者不受时钟脉冲控制)、保持(注意,有保持进位和不保持进位两种)。虽然计数器产品一般只有二进制和十进制两种,有了这些附加功能,我们就可以方便地用我们可以得到的计数器来构成任意进制的计数器。下面我们举两个例子。在这两个例子中,我们分别用同步十进制加法计数器74LS160构成一个六进制计数器和一个一百进制计数器。 因为六进制计数器的有效状态有六个,而十进制计数器的有效状态有十个,所以用十进制计数器构成六进制计数器时,我们只需保留十进制计数器的六个状态即可。74LS160的十个有效状态是BCD编码的,即0000、0001、0010、0011、0100、0101、0110、0111、1000、1001[图5-1]。 图5-1 我们保留哪六个状态呢?理论上,我们保留哪六个状态都行。然而,为了使电路最简单,保留哪六个状态还是有一点讲究的。一般情况下,我们总是保留0000和1001两个状态。因为74LS160从1001变化到0000时,将在进位输出端产生一个进位脉冲,所以我们保留了0000和1001这两个状态后,我们就可以利用74LS160的进位输出端作为六进制计数器的进位输出端了。于是,六进制计数器的状态循环可以是0000、0001、0010、0011、0100和1001,也可以是0000、0101、0110、0111、1000和1001。我们不妨采用0000、0001、0010、0011、0100
和1001这六个状态。 如何让74LS160从0100状态跳到1001状态呢?我们用一个混合逻辑与非门构成一个译码器[图5.3.37b],当74LS160的状态为0100时,与非门输出低电平,这个低电平使74LS160工作在预置数状态,当下一个时钟脉冲到来时,由于等于1001,74LS160就会预置成1001,从而我们实现了状态跳跃。 图5.3.37b用置数法将74160接成六进制计数器(置入1001) 比这个方案稍微繁琐一点的是利用74LS160的异步复位端。下面这个电路中[图5.3.34],也有一个由混合逻辑与非门构成的译码器。 图5.3.34用置零法将74LS160接成六进制计数器
c++计数器的使用方法
C++计数器的使用方法 在可视化编程时,常常会用到计数器,大部分人都会为所在的类添加一个成员变量,这个成员变量在程序中将会是全局变量,所以每次对他的操作,下次还会有记录,所以用它来当计数器。为什么不能在类中的函数里写一个变量来计数呢?因为在函数中的变量生存周期只在当前函数中存活,一旦这个函数运行完,这个变量会释放,下次再用的时候没有保留上次的值,所以当然不能做计数器啦。那么有人会问了,还有别的方法吗,答案是肯定的。请看下面两个简单的实例,观察运行结果 实例一 #include "stdafx.h" #include