Arm+fpga组成的计数器装置及其实现方法

文档序号:6427772阅读:273来源:国知局
专利名称:Arm+fpga组成的计数器装置及其实现方法
技术领域
本发明涉及一种计数器装置及其实现方法,特别涉及一种可编程控制器(PLC)的计数器装置及其实现方法。
背景技术
随着科学技术的不断发展,可编程控制器(以下简称PLC)作为一种专为工业环境应用而设计的电子系统,愈来愈广泛地被应用。在PLC的应用系统中,使用量较大的是计数周期大于PLC用户程序扫描周期的计数器,即普通计数器,这种普通计数器的分类方法常有两种,从停电是否保存计数值的角度来分类,分为保持型计数器和非保持型计数器;从计数方向的角度,分为增计数器和增/减可控计数器,增/减可控计数器是处于增计数还是处于减计数由指定的特殊寄存器状态来控制,计数器属于哪种类型则由事先设计好的计数器编号确定,每个计数器有一个软触头与该计数器编号对应,如果计数器的当前计数值与计数器设置值相等则计数器停止计数,计数器的软触头处于动合状态,直到对计数器进行复位,计数器的软触头恢复常态,计数器在其他状态下其软触头处于常态。通常,上述计数器是通过如下方法来实现PLC用户程序执行某一个计数器软元件输出指令时,首先根据输出指令给定的计数器编号判断是增计数器还是增/减可控计数器,对于增/减可控计数器需要判断是处于增计数状态还是减计数状态,依据计数器的受控情况还需进一步判断计数器是处于失电还是得电状态,如果处于得电状态,需要判断计数条件是否满足,如果计数条件不满足,PLC用户程序可以不对该计数器作任何操作,如果计数条件满足需要将该计数器的计数动态参数单元中的值进行加1或减1计算,然后与该计数器的设置值进行比较,如果计数动态值小于/大于设置值,设置已得电计数的标志,如果相等,则设置该计数器软触头单元状态为“1”,如果处于失电状态,清得电计数的标志; PLC用户程序在执行某一个计数器的复位指令时,需要进行以下操作清该计数器得电计数的标志,清该计数器的软触头单元内容为“0”,以及清该计数器动态参数单元内容。PLC执行计数器输出指令时,若计数器处于得电且计数条件满足,进行加1/减1操作之后与计数器计数的设置值相等时需要较多的操作,具体为根据输出指令给定的计数器编号判断计数器类型的步骤需要一到二次;需要判断一次得电或失电的状态;如果是得电状态还需要判断是否满足计数条件,若满足计数条件需要加1 一次/减1 一次,需要判断一次是否等于设置值,如果计数动态值等于设置值,还需设置该计数器软触头单元状态为 “1”;PLC完成执行输出命令的操作,需要判断四次/五次,加1/减1 一次,设置位单元状态一次,共计需要操作八次/九次。操作最少次数的是继电器得电不满足计数的状态,只需判断二次/三次,增/减可控计数器的加1和减1操作采用补码,其计数动态参数值与计数设置值大小的比较应用补码进行比较,或将补码转换成原码再进行比较。执行计数器复位指令时,清标志二次,清数据一次或清数据二次;计数器在各种运行状态下,其执行计数器指令操作步数不一样,在PLC用户程序中,计数器使用的数量越多,则PLC用户程序的执行周期时间变化越大,执行计数器输出指令占用时间也越长,导致影响PLC用户程序的执行速度,延长了 PLC用户程序的执行周期。

发明内容
本发明的目的在于提供一种执行速度快、能实现对数量众多的计数器进行计数控制的ARM+FPGA组成的计数器装置,以克服上述已有技术的不足之处。为实现上述目的,本发明所采用的技术方案为
一种ARM+FPGA组成的计数器装置,是以嵌入式ARM微处理器为控制核心、以FPGA进行计数处理,包括ARM控制模块I、FPGA计数器模块III、存储器模块II、SDRAM掉电保护模块 VI、电源模块V以及双口 RAM模块IV ;ARM控制模块I分别与上述存储器模块II、FPGA计数器模块III、双口 RAM模块IV、SDRAM掉电保护模块VI及电源模块V连接,以嵌入式ARM微处理器为控制核心,构建嵌入式实时操作系统,进行多任务管理和通信管理,实现对装置中各个模块信息的处理和控制;存储器模块II用于存储操作系统及系统程序的目标代码映像文件、执行用户程序的处理信息、以及为计数器装置数据的处理和通信提供空间;双口 RAM模块IV分别与FPGA计数器模块III和ARM控制模块I连接,以实现ARM控制模块I与FPGA计数器模块III之间的数据传输;FPGA计数器模块III用于判断计数器的类型,实施与计数设定值的比较及计数运算,通过对双口 RAM模块IV的读写控制,将计数器的状态传送至ARM控制模块I ;SDRAM掉电保护模块VI与FPGA计数器模块III连接,用于避免在电源切换过程中存储器内容的变化,并应用其中的电源为动态参数存储器供电;电源模块V为上述ARM控制模块I、存储器模块II、FPGA计数器模块IILSDRAM掉电保护模块VI及双口 RAM模块IV提供变压电源。由以上方案可见,本发明以嵌入式ARM微处理器为控制模块,FPGA为计数处理模块构成ARM+FPGA计数器装置,采用FPGA实现计数器的各种处理操作,无论计数器装置中的计数器数量多少与否,其占用嵌入式ARM微处理器执行用户程序的时间都非常少,因此,可以应用于开发可编程控制器以及大规模的计数器;同时,由于对计数器的操作,如计数功能控制、计数器状态设置等,均由FPGA计数器模块III完成,不占用PLC用户程序执行的时间,大大提高了计数器装置的反应速度;无论计数器处于何种运行状态,ARM控制模块I对每个同类型的计数器所执行指令的操作次数是基本相同的,减少了执行有关计数器指令时对PLC用户程序执行周期变化的影响。其进一步技术方案是该ARM+FPGA组成的计数器装置中的SDRAM掉电保护模块VI 包括相互连接的SDRAM计数器动态参数存储器和SDRAM掉电保护电路,该SDRAM掉电保护模块VI在电源切换过程中应用SDRAM掉电保护电路的电源为SDRAM计数器动态参数存储器供电,以避免SDRAM计数器动态参数存储器内容发生变化。由以上方案可见,由于计数器装置中的计数动态参数由SDRAM计数器动态参数存储器进行存储,计数操作由FPGA计数器模块III处理,该FPGA计数器模块III从双口 RAM模块 IV中接收ARM控制模块I发出的控制处理指令以进行循环操作,因此,计数器的数量只受 SDRAM计数器动态参数存储器、计数器软触头位单元和双口 RAM模块IV中容量和地址线的限制,只要增加SDRAM计数器动态参数存储器、计数器软触头位单元和双口 RAM模块IV中的存储器容量,以及增加地址线的根数,计数器的个数可以成倍数的增加,其计数器装置设置的计数器数量能够达到数百个乃至千余个,且不需要在ARM控制模块I的方法中编制计数参数的处理过程,只是将每个计数器作为普通存储单元进行读写和判断操作,本发明适合需要数量众多计数器计数与计数控制的系统需求,以及对计数精度要求很高的系统,尤其适应于PLC控制系统。其更进一步技术方案是ARM控制模块I包括嵌入式ARM微处理器、人机交互电路、控制电路、复位电路和JTAG调试接口电路;嵌入式ARM微处理器作为ARM控制模块I的控制核心,分别与上述人机交互电路、控制电路、复位电路和JTAG调试接口电路连接,进行多任务管理和通信管理,以实现对上述各电路的信息处理和控制;人机交互电路用于执行系统的控制命令、控制参数的输入以及系统各种参数的人机界面控制;控制电路用于系统数据采集及控制驱动;复位电路为系统电路提供复位信号JTAG调试接口电路提供调试接口,该接口与外接电路相连,以实现编程装置对ARM控制模块I的软硬件调试。由以上方案可见,ARM控制模块I对于PLC用户程序使用的每个计数器,当程序执行某个计数器软元件输出指令时,首先由嵌入式ARM微处理器判断该计数器的类型、所处的工作状态,然后从双口 RAM模块IV将该计数器参数存储单元中的内容读入ARM控制模块 I中并设置运行状态标志,再传输到双口 RAM模块IV的该计数器参数存储单元中,PLC用户程序执行时,相当于将每个计数器只进行读写和判断操作;当PLC用户程序执行应用某个计数器软触头信息进行处理时,只需要从双口 RAM模块IV中读取该计数器软触头的位存储单元内容,如此,大大提高了运行速度。

其更进一步技术方案是FPGA计数器模块III包括计数器控制器、计数器软触头位单元和FPGA内部总线;计数器控制器是FPGA计数器模块III的控制核心,其通过FPGA内部总线分别与计数器软触头位单元、SDRAM掉电保护模块VI以及双口 RAM模块IV连接,并通过双口 RAM模块IV与ARM控制模块I连接;计数器控制器从ARM控制模块I获取计数器的运行状态、类型、参数信息、复位信息以及计数实时参数读取命令,根据上述计数器的运行状态、各类信息及参数进行判断并进行相应处理、并将计数器处理的结果状态传输给双口 RAM 模块IV ;计数器软触头位单元模块为计数器软触头状态的存放空间,可实现字寻址和位寻址。由以上方案可见,本发明采用FPGA进行计数器功能处理,计数器控制器从ARM控制模块I获得计数器运行和计数设置参数的信息或复位信息,然后据此对计数器的运行实施计数控制,其结果再传输到双口 RAM模块该计数器参数存储单元中,PLC用户程序执行时,相当于将每个计数器只进行读、写和判断操作;另一方面,计数器的计数运行操作、计数器软触头状态的设置由FPGA计数器模块完成,不占用PLC用户程序执行的时间,提高了装置的反应速度。其更进一步技术方案是,存储器模块II包括分别与ARM控制模块I连接的Nor FLASH存储器、Nand FLASH存储器和SDRAM存储器;Nor FLASH存储器用于存储操作系统及系统程序的目标代码映像文件;Nand FLASH存储器用于存放执行用户程序;SDRAM存储器用于存放计数器装置的处理和通信信息,并为系统运行和通信数据处理提供空间。由以上方案可见,采用Nor FLASH存储器、Nand FLASH存储器和SDRAM存储器分别存储代码映像文件、存放处理信息和提供处理空间,计数器装置在运行时只需要从相应的存储器中读数据或写数据,避免由于各种操作集中在某一存储器而造成的数据冲突情况, 从而提高了计数器装置的运行速度。
本发明的另一目的是提供一种应用ARM+FPGA组成的计数器装置来实现数量众多的计数器的方法,该方法是以ARM控制模块I中的嵌入式ARM微处理器为控制核心,FPGA 计数器模块III实现计数处理,应用双口 RAM模块IV实现ARM控制模块I和FPGA计数器模块 III之间的数据传输;首先由ARM控制模块I中的嵌入式ARM微处理器进行初始化处理,然后 ARM控制模块I根据初始化处理的结果对相应的计数器进行控制操作,并通过双口 RAM模块IV实现对FPGA计数器模块III的控制,FPGA计数器模块III根据ARM控制模块I发出的控制命令对计数器进行相应的控制处理;存储器模块II存储目标代码映像文件、处理信息以及为计数器装置数据的处理和通信提供空间;电源模块V在整个处理过程中为上述ARM控制模块I、存储器模块II、FPGA计数器模块III及双口 RAM模块IV提供变压电源;具体包括初始化处理步骤、ARM控制步骤和FPGA控制步骤;初始化处理步骤是由ARM控制模块I中的嵌入式ARM微处理器对双口 RAM的每个存储单元清零,在每次启动PLC用户程序时将SDRAM 计数器动态参数存储器中非保持型计数器的动态参数存储单元清零,并将计数器的参数、 状态信息等传输到双口 RAM模块IV ;ARM控制步骤是由ARM控制模块I根据上述初 始化处理的结果对其中任一使用的计数器进行控制处理,并通过双口 RAM模块IV实现对FPGA计数器模块III的控制操作;FPGA控制步骤是由FPGA计数器模块III根据ARM控制模块I发出的控制命令进行计数器处理操作。由以上方案可见,本发明中采用ARM控制模块I根据PLC用户程序执行与计数器有关的指令来进行判断处理与数据传输,对于PLC用户程序使用的每个计数器,当程序执行某个计数器软元件输出或复位指令时,由ARM控制模块I中的嵌入式ARM微处理器首先判断该计数器的工作状态,然后从双口 RAM模块IV将该计数器参数存储单元中的内容读入 ARM控制模块I中,设置运行状态标志,再传输到双口 RAM模块IV该计数器参数存储单元中,PLC用户程序执行时,相当于将每个计数器只进行判断和读写操作;计数器的计数处理过程不占用PLC用户程序执行的时间,大大提高了装置的运行速度;计数器装置能够按照 ARM控制模块I读取计数器动态参数的命令读取计数器的动态参数;同时,计数器装置增加SDRAM动态参数存储器和计数器软触头位单元和双口 RAM模块IV的容量以及地址线的根数,还可增加计数器的数量;而且不需要在ARM的过程中编制计数运算和处理过程,只是将每个计数器作为普通存储单元进行读写和判断操作,适合需要数量众多计数器计数与计数控制的系统需求,以及对计数精度要求很高的系统,尤其适应于PLC控制系统。


图1是本发明之ARM+FPGA组成的计数器装置第一实施例的系统结构框图; 图2是本发明之ARM+FPGA组成的计数器装置第一实施例的电路结构框图3是本发明之ARM+FPGA组成的计数器装置第一实施例的FPGA计数器模块的结构框
图4是本发明之ARM+FPGA组成的计数器装置第一实施例的计数器参数32位字长单元结构示意图5是本发明之ARM+FPGA组成的计数器装置的双口 RAM模块的存储区分配示意图; 图6是本发明之实现计数器装置的方法中ARM编译PLC用户程序对某一个计数器处理操作流程图;图 是本发明之实现计数器装置的方法中ARM对某一个计数器处理操作流程图; 图8是本发明之实现计数器装置的方法中计数器控制器对计数器控制的流程图; 图9是本发明之实现计数器装置的方法中计数器控制器对增/减可控计数器控制的流程图10是本发明之ARM+FPGA组成的计数器装置第二实施例的系统结构框图; 图11是本发明之ARM+FPGA组成的计数器装置第二实施例的电路结构框图; 图12是本发明之ARM+FPGA组成的计数器装置第二实施例的FPGA计数器结构示意图。图中
I一ARM控制模块,II一存储器模块,III一FPGA计数器模块,IV—双口 RAM模块,V—电源模块,VI—SDRAM掉电保护模块;
II一嵌入式ARM微处理器,12—人机交互电路,13—控制电路,14一复位电路,15— JTAG调试接口电路;
21—Nor FLASH 存储器,22 — Nand FLASH 存储器,23 — SDRAM 存储器; 31—计数器控制器,32—计数器软触头位单元; 51—电压转换电路,52—外部电源;
61—SDRAM计数器动态参数存储器,62— SDRAM掉电保护电路; 其余编号意义参见说明书实施例。下面结合实施例及其附图对本发明作进一步说明。
具体实施例方式组成的计数器装置实施例一
参见图1,该计数器装置是以嵌入式ARM微处理器为控制核心、以FPGA进行计数处理, 包括ARM控制模块I、FPGA计数器模块III、存储器模块II、电源模块V、双口 RAM模块IV及 SDRAM掉电保护模块VI ;ARM控制模块I分别与上述存储器模块II、FPGA计数器模块III、双口 RAM模块IV及电源模块V连接,以嵌入式ARM微处理器为控制核心,构建嵌入式实时操作系统,进行多任务管理和通信管理,实现对装置中各个模块信息的处理和控制;存储器模块 II用于存储操作系统及系统程序的目标代码映像文件、执行用户程序的处理信息、以及为计数器装置数据的处理和通信提供空间;双口 RAM模块IV分别与FPGA计数器模块III和ARM 控制模块I连接,以实现ARM控制模块I与FPGA计数器模块III之间的数据传输;FPGA计数器模块III用于判断计数器的类型,实施与计数设定值的 比较及计数运算,通过对所述双口 RAM模块IV的读写控制,将计数器的状态传送至ARM,该模块以计数器控制器31为核心,实现计数器的类型判断、增计数器的加1运算、增/减可控计数器的加1或减1、计数动态参数值与计数设置值的大小比较,增/减可控计数器的计数参数处理为补码运算,计数功能控制、计数器软触头位单元32的字寻址和位寻址读、写功能、SDRAM计数器动态参数存储器61 的读、写功能,双口 RAM模块IV的读、写功能;电源模块V为上述ARM控制模块I、存储器模块II、FPGA计数器模块III及双口 RAM模块IV提供变压电源;SDRAM掉电保护模块VI与FPGA 计数器模块III连接,该SDRAM掉电保护模块VI包括相互连接的SDRAM计数器动态参数存储器和SDRAM掉电保护电路,SDRAM掉电保护模块VI应用SDRAM掉电保护电路的电源为SDRAM 计数器动态参数存储器供电,以避免在电源切换过程中SDRAM计数器动态参数存储器内容发生变化。
其中,该计数器装置的具体结构为
ARM控制模块I包括嵌入式ARM微处理器11、人机交互电路12、控制电路13、复位电路 14和JTAG调试接口电路15,参见图2,嵌入式ARM微处理器11作为控制核心,分别与人机交互电路12、控制电路13、复位电路14和JTAG调试接口电路15连接,进行多任务管理和通信管理,以实现对各组成电路的信息处理和控制;人机交互电路12完成系统的控制命令和控制参数的输入和系统各种参数的人机界面控制;控制电路13完成ARM控制模块I的数据采集与控制驱动;复位电路14为系统电路提供复位信号;JTAG调试接口电路15提供调试接口与外接电路相连实现编程装置对ARM控制模块I的硬件和软件的调试。嵌入式ARM 微处理器11在对PLC用户程序的编译阶段,将每个增计数器的1个计数设置值和每个增/ 减可控计数器的2个补码计数设置值传送给双口 RAM模块IV,检测计数器实时计数值读取指令,按照编译出现这类指令出现的先后顺序将该计数器的编号传输给双口 RAM模块IV, 计数器顺序编号包含在编译后的计数器实时计数值读取指令中;在PLC用户程序的执行过程中,执行计数器软元件处理指令时,ARM控制模块I将该计数器的得电或失电、增/减可控计数器是增计数还是减计数的控制信息传输给双口 RAM模块IV,执行计数器软元件复位指令时,ARM控制模块I将该计数器的复位或不复位信息传输给双口 RAM模块IV,执行读取计数器触头信息时,ARM控制模块I直接从双口 RAM模块IV中读取该计数器的触头状态信息,执行实时计数值读取指令时,ARM控制模块I直接从双口 RAM模块IV中读取该计数器的动态计数参数。存储器模块II包括分别与ARM控制模块I连接的Nor FLASH存储器21、Nand FLASH22存储器和SDRAM存储器23,其结构示意图见图2 ;Nor FLASH存储器21、Nand FLASH 存储器22和SDRAM存储器23分别通过系统数据总线、地址总线和控制总线与ARM控制模块I的嵌入式ARM微处理器11连接,实现ARM微处理器11对各个存储器的操作控制,Nor FLASH存储器21用于存储操作系统及系统程序的目标代码映像文件,Nand FLASH存储器 22用于存放执行用户程序,SDRAM存储器23用于存放计数器装置的处理和通信信息,并为系统运行和通信数据处理提供空间。双口 RAM模块IV通过ARM控制模块I的一组数据总线XI、地址总线Zl和控制总线 Yl与ARM控制模块I的嵌入式ARM微处理器11连接,通过FPGA内部总线的数据总线X2、 地址总线Z2和控制总线Y2与FPGA计数器模块III连接;双口 RAM模块IV是ARM控制模块I 与FPGA计数器模块III之间数据传输的桥梁,用户能够实现ARM控制模块I和FPGA计数器模块III同时对双口 RAM模块IV进行读写操作;图5是双口 RAM模块IV中的存储器结构示意图。SDRAM掉电保护模块VI包括SDRAM计数器动态参数存储器61和SDRAM掉电保护电路62,SDRAM计数器动态参数存储器61通过FPGA内部总线与FPGA计数器模块III连接, SDRAM掉电保护电路62在系统电源失电瞬间使SDRAM计数器动态参数存储器61的片选端为高电平,避免在电源切换过程中SDRAM计数器动态参数存储器61的内容发生变化,并将 SDRAM掉电保护电路62的电源为SDRAM计数器动态参数存储器61供电;在计数器装置复位和PLC用户程序重新启动运行时,ARM控制模块I将对非保持型计数器的FPGA的SDRAM 计数器动态参数存储器61中的存储单元清零。
FPGA计数器模块III包括计数器控制器31、计数器软触头位单元32和FPGA内部总线,其具体电路结构参见图3,计数器控制器31是FPGA计数器模块III的控制核心,计数器控制器31通过FPGA内部总线与计数器软触头位单元32、SDRAM掉电保护模块VI以及双口 RAM模块IV连接,并通过双口 RAM模块IV与ARM控制模块I连接。
其中
FPGA内部总线由32位数据总线X2,地址总线Z2及控制总线Y2组成,控制总线Y2包括计数器的读、写、模块片选控制,双口 RAM模块IV与FPGA内部总线相连接,双口 RAM模块 IV的模块片选独立设置与FPGA计数器控制模块III连接,计数器软触头位单元32和SDRAM 掉电保护模块VI都是10根地址线与计数器控制器31连接,控制总线的读、写和模块片选线与计数器控制器31、计数器软触头位单元32、SDRAM掉电保护模块VI和双口 RAM模块IV连接。计数器软触头位单元32是32位字长存储单元组成的计数器软触头存储器,参见图4,该单元占用2个模块地址,1个是32位字单元寻址的模块地址,另1个是软触头位单元的位模块寻址,计数器软触头位单元模块32可以实现字寻址和位寻址的功能。计数器控制器31通过双口 RAM模块IV从ARM控制模块I获得计数器运行状态、类型及参数信息、复位信息、以及计数实时参数读取命令;计数器控制器31处理计数器的结果状态也传输给双口 RAM模块IV,计数器控制器31在工作时钟脉冲的作用下,计数器控制器31依据计数器这些状态进行判断,依据判断结果进行处理,如果某个增计数器处于未被使用或已完成一次计数操作并继续处于得电状态,计数器控制器31对该增计数器不作任何处理;如果处于失电状态,设置该增计数器D27的位值为“0”,为增计数器软线圈由失电转化为得电时作好计数的准备;如果处于复位状态,复位该增计数器在计数器软触头位单元32中的位单元为“0”,清SDRAM计数器动态参数存储器61中该增计数器的D30、D27和 D26^D0单元内容;如果处于计数状态,计数器控制器31对SDRAM计数器动态参数存储器61 的该增计数器存储单元内容与双口 RAM模块IV中的该增计数器的计数设置参数进行比较判断,如果SDRAM计数器动态参数存储器61中该计数器的计数参数等于或大于双口 RAM模块IV中的该增计数器的计数设置参数时,置位该增计数器在计数器软触头位单元32中的位单元为“1”,设置计数工作标志D27为“1” ;如果小于,SDRAM计数器动态参数存储器61 中该增计数器的计数参数进行加1操作,设置计数工作标志D27为“1”;如果该计数器为失电状态,且非复位状态,设置计数工作标志D27为“0”;如果判断计数器为增/减计数器型, 其判断处理过程与增计数器的判断处理过程基本相同,不同之处在于每个增/减计数器有两个计数设置值,一个是增计数设置值,一个是减计数设置值,对应有增计数动态参数和减计数动态参数,这些值都是用补码表示,其判断比较和计数也都是补码运算;对2种类型计数器的读取判断处理操作是一个一个计数器循环进行,每循环操作一次,将计数器软触头位单元32的状态传输到双口 RAM模块IV中,根据双口 RAM模块IV需要传输计数器实时计数值的计数器编号的顺序将SDRAM计数器动态参数存储器61的实时计数参数传输给双口 RAM 模块IV的计数器实时计数值存储区;
计数器控制器处理计数器的结果状态也传输给双口 RAM模块IV ;
计数器控制器在工作时钟脉冲的作用下,依据计数器的状态进行判断,依据判断结果进行处理如果某个增计数器处于未被使用或已完成一次计数操作并继续处于得电状态,计数器控制器对该增计数器不作任何处理;如果处于失电状态,设置该增计数器D27的位值为“0”,为增计数器软线圈由失电转化为得电时作好计数的准备;如果处于复位状态,复位该增计数器在计数器软触头位单元中的位单元为“0”,清SDRAM计数器动态参数存储器中该增计数器的D30、D27和D26 D0单元内容;如果处于计数状态,计数器控制器对SDRAM 计数器动态参数存储器的该增计数器存储单元内容与双口 RAM模块IV中的该增计数器的计数设置参数进行比较判断,如果SDRAM计数器动态参数存储器中该增计数器的计数参数等于或大于双口 RAM模块IV中的该增计数器的计数设置参数时,置位该增计数器在计数器软触头位单元中的位单元为“1”,设置计数工作标志D27为“1”;如果小于,SDRAM计数器动态参数存储器中该增计数器的计数参数进行加1操作,设置计数工作标志D27为“1”;如果该增计数器为失电状态,且非复位状态,设置计数工作标志D27为“0” ;如果判断计数器为增/减计数器型,其判断处理过程与增计数器的判断处理过程基本相同,不同之处在于每个增/减计数器有两个计数设置值,一个是增计数设置值,一个是减计数设置值,对应有增计数动态参数和减计数动态参数,这些值都是用补码表示,其判断比较和计数也都是补码运算;
对2种类型计数器的读取判断处理操作是一个一个计数器循环进行,每循环操作一次,将计数器软触头位单元的状态传输到双口 RAM模块IV中,根据双口 RAM模块IV需要传输计数器实时计数值的计数器编号的顺序将SDRAM计数器动态参数存储器的实时计数参数传输给双口 RAM模块IV的计数器实时计数值存储区;根据双口 RAM模块IV需要传输计数器实时计数值的计数器编号的顺序将SDRAM计数器动态参数存储器61的实时计数参数传输给双口 RAM模块IV的计数器实时计数值存储区;
由上可见,由于计数器装置中的计数动态参数由SDRAM计数器动态参数存储器进行存储,计数操作由FPGA计数器模块III处理,该FPGA计数器模块III从双口 RAM模块IV中接收 ARM控制模块I发出的控制处理指令进行循环操作,(处理计数器输出指令、复位指令的结果及FPGA计数器控制器处理计数的结果状态进行读取、判断,依据判断结果进行处理,或设置计数器软触头状态,或读出SDRAM计数器动态参数存储器中的该计数器动态参数进行加1/减1计数,判断和处理,其中增/减可控计数器对计数参数的处理为补码运算,或不需要作任何处理,这是循环操作处理过程;)因此,计数器的数量只受SDRAM计数器动态参数存储器、计数器软触头位单元和双口 RAM容量和地址线的限制,只要增加SDRAM计数器动态参数存储器、计数器软触头位单元和双口 MM的容量,以及地址线的根数,计数器的个数可以成倍数的增加,其计数器装置设置的计数器数量能够达到数百个,乃至千余个,而且不需要在ARM控制模块的程序中编制计数参数的处理程序,只是将每个计数器作为普通存储单元进行读写和判断操作,适合需要数量众多计数器计数与计数控制的系统需求,以及对计数精度要求很高的系统,尤其适应于PLC控制系统。而且,ARM控制模块执行计数器输出指令时,只需要判断计数器是处于得电还是失电状态,并将其状态传输给双口 RAM ;执行计数器复位指令时,只需要判断计数器是复位还是不复位,并将其状态传输给双口 RAM ;执行应用计数器软触头指令时,从双口 MM中读取该计数器的软触头状态;增计数器的加1运算、 增/减可控计数器的加1或减1、计数动态参数值与计数设置值的大小比较,增/减可控计数器的计数参数处理为补码运算,计数功能控制、计数器软触头位单元状态的设置均由 FPGA计数器模块完成,不占用PLC用户程序执行的时间;大大提高了计数器装置的反应速度;无论计数器处于何种运行状态,本计数器装置中ARM控制模块执行每个增计数器输出指令的操作次数相同,执行每个增/减可控计数器输出指令的操作次数相同,减少了执行有关计数器指令时对PLC用户程序执行周期变化的影响。组成的计数器装置实施例二
参见图10、图11、图12,本实施例的计数器装置结构与实施例一中的基本类似,不同之处在于实施例一中的双口 RAM模块IV与FPGA计数器模块III分别独立设置,而本实施例中的双口 RAM模块IV是嵌入FPGA计数器模块III中,以构成带双口 RAM模块的FPGA计数器模块III’,参见图12,本实施例之ARM+FPGA组成的计数器装置,以嵌入式ARM微处理器为控制核心、以FPGA进行计数处理,包括ARM控制模块I、SDRAM掉电保护模块VI,存储器模块II、 FPGA计数器模块III,、电源模块V,ARM控制模块I以嵌入式ARM微处理器为控制核心,构建嵌入式实时操作系统,进行多任务管理和通信管理,实现对装置中各模块及其信息的处理和控制;存储器模块II用于存储操作系统及系统程序的目标代码映像文件、执行用户程序的处理信息、以及为计数器装置数据的处理和通信提供空间;FPGA计数器模块III’包括嵌入的双口 RAM模块IV和FPGA计数器模块III,FPGA计数器模块III以计数器控制器31为核心, 实现计数器的类型判断、增计数器的加1运算、增/减可控计数器的加1和减1、计数动态参数值与计数设置值的大小比较,增/减可控计数器的计数参数处理为补码运算,计数功能控制、计数器软触头位单元32的字寻址和位寻址读、写功能、SDRAM计数器动态参数存储器 61的读、写功能,双口 RAM模块IV的读、写功能;双口 RAM模块IV分别与FPGA计数器模块III 和ARM控制模块I连接,以实现ARM控制模块I与FPGA计数器模块III之间的数据传输;电源模块V为ARM控制模块I、存储器模块II、FPGA计数器模块III,、双口 RAM模块IV及SDRAM 掉电保护模块VI提供变压后的电源;SDRAM掉电保护模块VI与FPGA计数器模块III’连接, SDRAM掉电保护模块VI包括相互连接的SDRAM计数器动态参数存储器61和SDRAM掉电保护电路62,该SDRAM掉电保护模块VI可避免在电源切换过程中SDRAM计数器动态参数存储器 61的内容发生变化,并将SDRAM掉电保护电62的电源为SDRAM计数器动态参数存储器61 {共 ο本实施例的工作原理与实施例一相同,此处不再赘述。ARM+FPGA组成的计数器装置实施例一是本发明的最佳实施例之一,作为本发明之 ARM+FPGA组成的计数器装置实施例一和实施例二的一种变换,也可以在该计数器装置中不设置SDRAM掉电保护电路62,同样也可实现本发明的目的。作为本发明之ARM+FPGA组成的计数器装置实施例一和实施例二的另一种变换, 该计数器装置中还可以不设置SDRAM掉电保护电路62,SDRAM计数器动态参数存储器61的功能由FPGA计数器模块III来实现,该变换同样也可实现本发明的目的。
实现计数器的方法实施例
应用上述ARM+FPGA组成的计数器装置来实现计数器的方法,该方法是以ARM控制模块I中的嵌入式ARM微处理器11为控制核心,FPGA计数器模块III实现计数处理,应用双口 RAM模块IV实现ARM控制模块I和FPGA计数器模块III之间的数据传输;首先由ARM控制模块I中的嵌入式ARM微处理器11进行初始化处理,然后ARM控制模块I根据初始化处理的结果对相应的计数器进行控制操作,并通过双口 RAM模块IV实现对FPGA计数器模块III的控制,FPGA计数器模块III根据ARM控制模块I发出的控制命令对计数器进行相应的控制处理;存储器模块II存储目标代码映像文件、处理信息以及为计数器装置数据的处理和通信提供空间;电源模块V在整个处理过程中为上述ARM控制模块I、存储器模块II、FPGA计数器模块III及双口 RAM模块IV提供变压电源;具体包括如下步骤
初始化处理步骤ARM控制模块I中的嵌入式ARM微处理器11对双口 RAM模块IV的每个存储单元清零,在每次启动PLC用户程序时将SDRAM计数器动态参数存储器61中非保持型计数器的动态参数存储单元清零,并将计数器的参数、状态信息等传输到双口 RAM模块 IV;
ARM控制步骤ARM控制模块I根据上述初始化处理的结果对其中任一计数器进行控制处理,并通过双口 RAM模块IV实现对FPGA计数器模块III的控制操作;
FPGA控制步骤 FPGA计数器模块III根据ARM控制模块I从双口 RAM模块IV发出的控制命令,进行计数器处理操作。其中,初始化处理的具体过程为
在ARM控制模块I中的嵌入式ARM微处理器11初始化处理过程中,对双口 RAM模块IV 中的每个存储单元清零;在每次启动PLC用户程序时将SDRAM计数器61动态参数存储器中非保持型计数器的动态参数存储单元清零;嵌入式ARM微处理器11在编译过程中,将所使用每个计数器设置的计数参数及使用状态信息传输到双口 RAM模块IV中,嵌入式ARM微处理器11执行用户过程中某一个计数器的输出、复位指令时,将该计数器的运行状态信息传输到双口 RAM模块IV中,执行检测计数器实时计数值读取指令时,按照该指令出现顺序将对应的计数器编号传输给双口 RAM模块IV,顺序编号包含在编译后的计数器实时计数值读取指令中;嵌入式ARM微处理器11在执行计数器指令时,将该计数器的运行状态信息传输到双口 RAM模块IV中,状态信息和参数包括D31、D29、D28,D26 D0,逻辑结构示意图参见图 4、图5,其设置值参见如下描述
D31 使用标志位,计数器在用户程序中被使用,设置为“ 1 ”,否则为“0” ; D30 计数器软元件得电失电标志位,得电设置为“1”,失电设置为“0”; D29 增/减可控计数器的增/减控制位,增操作设置为“ 1 ”,减操作设置为“0” ; D28 计数器复位位,非复位状态设置为“ 1 ”,复位状态设置为“0” ; D26^D0 计数器的计数参数设置值。FPGA计数器模块III在初始化过程中,对FPGA的SDRAM动态参数存储器中的非保持型计数器的所有存储单元清0,ARM控制模块I在初始化过程中对双口 RAM模块IV的所有存储单元清0。参见图6,ARM控制模块I对计数器处理操作的具体步骤如下 SlOl 某一个计数器软元件输出指令;
sl02 判断是否增计数器?如果是,则进入步骤sl04,否则进入步骤sl03 ; sl03 根据该计数器软元件的编号将2个计数设置值传输给双口 RAM模块IV中存储该计数器参数相邻的2个存储单元,进入步骤sl05 ;
sl04 根据该计数器软元件的编号将计数设置值传输给双口 RAM模块IV中存储该计数器参数的存储单元;
sl05 :ARM控制模块I继续按顺序编译其他指令;
sl06 该计数器实时计数值读取指令,按照编译该指令出现的先后顺序将该计数器的编号传输给双口 RAM模块IV ;
sl07 =ARM控制模块I继续按顺序编译其他指令。ARM控制模块I对FPGA计数器模块III控制的流程框图参见图7,图7是ARM控制模块I对某一个计数器处理操作流程图,对于其他计数器的处理流程也与此相同,图7中执行计数器软元件输出指令、计数器复位指令、计数器实时计数值读取指令和应用计数器触头的指令在程序中出现的位置是根据用户的编制确定,用户可以根据需求编制不同顺序的处理流程,不需要受到图7中顺序的制约,本实施例中的具体步骤如下
s201 执行某一个计数器软元件输出指令;
s202 判断是否属于增计数器?如果是,进入步骤s205,否则,进入步骤s203 ; s203 判断该计数器是否处于增计数操作状态?如果不是处于增计数操作状态,则进入步骤s204,否则进入步骤s205 ;
s204 设置标志位D29为“0”,进入步骤s206 ; s205 设置标志位D29为“1”;
s206 判断计数器软元件是否得电?如果软元件得电,则进入步骤s207,否则进入步骤 s208 ;
s207 设置标志位D31 D30为“11”,进入步骤s209 ; s208 设置标志位D31 D30为“10” ;
s209 将D31、D30、D29和D28的信息发送到所述双口 RAM模块IV ; s210 =ARM控制模块I继续按顺序编译其他指令;
s211 判断计数器是否满足复位条件?如果满足,进入步骤s212,否则,进入步骤 s213 ;
s212 复位计数器,设置标志位D28为“0”,进入步骤s214 ;
s213 设置标志位D28为“1”;
s214 将D28的信息发送到所述双口 RAM模块IV ;
s215 =ARM控制模块I继续按顺序编译其他指令;
s216 从双口 RAM模块IV的触头存储区读入上述过程中所需的该计数器触头信息; s217 =ARM控制模块I继续按顺序编译其他指令;
s218 判断是否需要读取计数器实时计数值?如果需要,则进入步骤s219,否则,进入步骤s220 ;
s219 从双口 RAM模块IV中的计数器实时计数值存储区读入该计数器的实时计数值; s220 =ARM控制模块I继续按顺序编译其他指令。参见图8,FPGA计数器模块III控制的具体步骤为 s301 清计数器单元地址计数器和溢出位标志TF ;
s302 从双口 RAM模块IV读取计数器32位字长存储单元的内容,即读出32位字长的计
数器信息;
s303 根据计数器单元地址计数器的值判断是否是增计数器,如果是,则进入步骤 s304,否则进入图9中所描述的增/减可控计数器的计数处理过程;
s304 获得并判断 D31、D30、D29、D28 和 D27 的位值,若 D31、D30、D29、D28 和 D27 的位值为“OX X X X ”或“11 X 11”,则进入步骤s313,若D31、D30、D29、D28和D27的位值为“10X1 X ”,则进入步骤S305,若D31、D30、D29、D28和D27的位值为“IX XOX ”,则进入步骤 s306,若 D31、D30、D29、D28 和 D27 的位值为 “ 11 X 10” 则进入步骤 s307 ;D31、D30、 D29、D28和D27的位值为"OX X XX",则说明计数器处于未使用状态,D31、D30、D29、D28 和D27的位值为“11 X 11”,则说明计数器此次不计数;D31、D30、D29、D28和D27的位值为 “ 10 X 1 X ”说明计数器失电不计数,D31、D30、D29、D28和D27的位值为“ 1 X X 0 X ”说明计数器处于复位状态,D31、D30、D29、D28和D27的位值为“ 11 X 10”说明计数器得电计一次数;
s305:设置该计数器D27的位值为“0”,进入步骤s313,此步骤是为计数器软线圈由失电转化为得电时作好计数的准备;
s306 设置该计数器的触头位单元为“0”并进入步骤s308 ;
s307 判断SDRAM计数器动态参数存储器中,该计数器的D26 D0是否等于或大于双口 RAM模块IV中该计数器的D26 D0的内容,如果是,则进入步骤s311,否则,进入步骤s310 ; s308 将该计数器的D30和D27的位值设置为“00” ;
s309 将SDRAM计数器动态参数存储器中该计数器的D26 D0设置为“0”,进入步骤 s313 ;
s310 将SDRAM计数器动态参数存储器中该计数器的D26 D0分别+1后,将结果返回到 SDRAM计数器动态参数存储器中该计数器的D26 D0,进入步骤s312 ; s311 该计数器的触头位单元设置为“1”;
s312 将该计数器D27的位值设置为“1”,因为该计数器软线圈继续得电期间不需要再计数;
s313 计数器单元地址计数器+1 ;
s314 判断TF是否为1 ?如果是,则进入步骤s315,否则,进入步骤s302 ;TF为计数器单元地址计数器溢出标志位;
s315 循环将每个计数器的触头位单元内容传输给双口 RAM触头存储单元; s316 循环将SDRAM计数器动态参数存储器中各计数器D27的位值设置值传输给双口 RAM模块IV中各个计数器的D27位单元;
s317 按照需传输计数器实时计数值的计数器编号顺序将SDRAM计数器动态参数存储器中的实时计数参数传输给双口 RAM模块IV中的计数器实时计数值存储区,然后返回步骤 s301。 FPGA计数器模块III控制处理中,所述增/减可控计数器的计数处理的具体步骤为
s401 判断该增/减可控计数器的D31、D30、D29、D28和D27的位值,若D31、D30、D29、 D28 和 D27 的位值为“0 X XXX,,或“ 11X11”,则进入步骤 s413,若D31、D30、D29、D28 和 D27 的位值为“ 10 X 1 X,,则进入步骤s402,若D31、D30、D29、D28和D27的位值为"IX Χ0Χ", 则进入步骤s403,若D31、D30、D29、D28和D27的位值为“11110”,则进入步骤s404 ;若D31、 D30、D29、D28 和 D27 的位值为 “ 11010” 则进入步骤 s405 ;D31、D30、D29、D28 和 D27 的位值为“OX X X X ”则说明该增/减可控计数器处于未使用状态,D31、D30、D29、D28和D27 的位值为“11乂11”则说明该增/减可控计数器处于此次不计数状态;复位状态,031、030、 D29、D28和D27的位值为“10X 1 X ”则说明该增/减可控计数器处于失电不计数,D31、D30、D29、D28和D27的位值为“IX XOX ”说明该增/减可控计数器处于复位状态;D31、D30、 D29、D28和D27的位值为“ 11110”说明该增/减可控计数器为增计数操作状态,得电计一次数;D31、D30、D29、D28和D27的位值为“ 11010”说明该增/减可控计数器为减计数操作状态,得电计一次数;
s402 设置该增/减可控计数器的2个计数存储单元D27的位值为“0”,为该增/减可控计数器软线圈由失电转化为得电时作好计数的准备,并进入步骤s413 ; s403 该增/减可控计数器的触头位单元设置为“0”,并进入步骤s406 ; s404:判断SDRAM计数器动态参数存储器中,该增/减可控计数器参数单元中的 D26^D0是否等于或大于双口 RAM模块IV中该增/减可控计数器的第一个参数单元中的 D26 DO的内容,如果是,则进入步骤s409,否则,进入步骤s408 ;
s405 判断SDRAM计数器动态参数存储器中,该增/减可控计数器参数单元中的 D26^D0的位值是否等于或小于双口 RAM模块IV中该增/减可控计数器的第二个参数单元中的D26 D0的内容,如果是,则进入步骤s411,否则,进入步骤s410 ;
s406 设置SDRAM计数器动态参数存储器中 该增/减可控计数器参数单元中的D30、 D27的位值为“00”;
s407 =SDRAM计数器动态参数存储器中该增/减可控计数器参数单元中的D26 D0清零,并进入步骤s413 ;
s408 =SDRAM计数器动态参数存储器中该增/减可控计数器参数单元中的D26 D0补+1 操作后,将结果返回到SDRAM计数器动态参数存储器中该增/减可控计数器参数单元中的 D26 D0,并进入步骤s412 ;
s409 将该增/减可控计数器的触头位单元设置为“1”,并进入步骤s412 ; s410 =SDRAM计数器动态参数存储器中该增/减可控计数器参数单元中的D26 D0补 + (-1)补操作后,将结果返回到SDRAM计数器动态参数存储器中该增/减可控计数器的第二个参数单元中的D26 D0,并进入步骤s412 ;
s411 将该增/减可控计数器的触头位单元设置为“1” ;
s412 设置SDRAM计数器动态参数存储器中该增/减可控计数器参数单元中D27的位值为“1”,此步骤是使得该增/减可控计数器软线圈继续得电时不再计数; s413 计数器单元地址计数器+2 ; s414 进入FPGA计数器模块III控制的s314步骤。
增/减可控计数器的2个计数设置的参数用补码的方式存储,可以理解为在编辑该过程时,已将计数器设置的2个参数化成了补码表示。
权利要求
1.一种ARM+FPGA组成的计数器装置,其特征在于该计数器装置是以嵌入式ARM微处理器为控制核心、以FPGA进行计数处理,包括ARM 控制模块(I )、存储器模块(II)、FPGA计数器模块(III)、SDRAM掉电保护模块(VI)、电源模块 (V)以及双口 RAM模块(IV);所述ARM控制模块(I )分别与上述存储器模块(II)、FPGA计数器模块(III)、双口 RAM 模块(IV)、SDRAM掉电保护模块(VI)及电源模块(V )连接,以嵌入式ARM微处理器为控制核心,构建嵌入式实时操作系统,进行多任务管理和通信管理,实现对装置中各个模块信息的处理和控制;所述存储器模块(II)用于存储操作系统及系统程序的目标代码映像文件、用户程序的处理信息、以及为计数器装置数据的处理和通信提供空间;所述双口 RAM模块(IV)分别与所述FPGA计数器模块(III)和所述ARM控制模块(I )连接,以实现所述ARM控制模块(I )与所述FPGA计数器模块(III)之间的数据传输;所述FPGA计数器模块(III)用于判断计数器的类型,实施与计数设定值的比较及计数运算,通过对所述双口 RAM模块(IV)的读写控制,将计数器的状态传送至所述ARM控制模块 (I);所述SDRAM掉电保护模块(VI)与所述FPGA计数器模块(III)连接,用于避免在电源切换过程中存储器内容的变化,并应用其中的电源为动态参数存储器供电;所述电源模块(V)为上述ARM控制模块(I )、存储器模块(II)、FPGA计数器模块(III)、 SDRAM掉电保护模块(VI)及双口 RAM模块(IV)提供变压电源。
2.如权利要求1所述一种ARM+FPGA组成的计数器装置,其特征在于所述SDRAM掉电保护模块(VI)包括相互连接的SDRAM计数器动态参数存储器和SDRAM 掉电保护电路,该SDRAM掉电保护模块(VI)在电源切换过程中应用所述SDRAM掉电保护电路的电源为所述SDRAM计数器动态参数存储器供电,以避免所述SDRAM计数器动态参数存储器内容发生变化。
3.如权利要求2所述一种ARM+FPGA组成的计数器装置,其特征在于所述ARM控制模块(I )包括嵌入式ARM微处理器、人机交互电路、控制电路、复位电路和JTAG调试接口电路;所述嵌入式ARM微处理器作为ARM控制模块(I )的控制核心,分别与上述人机交互电路、控制电路、复位电路和JTAG调试接口电路连接,进行多任务管理和通信管理,以实现对上述各电路的信息处理和控制;人机交互电路用于执行系统的控制命令、控制参数的输入以及系统各种参数的人机界面控制;控制电路用于系统数据采集及控制驱动; 复位电路为系统电路提供复位信号;JTAG调试接口电路提供调试接口,该接口与外接电路相连,以实现编程装置对所述 ARM控制模块(I )的软硬件调试。
4.如权利要求2所述一种ARM+FPGA组成的计数器装置,其特征在于所述FPGA计数器模块(III)包括计数器控制器、计数器软触头位单元和FPGA内部总线; 所述计数器控制器是所述FPGA计数器模块(III)的控制核心,其通过所述FPGA内部总线分别与所述计数器软触头位单元、所述SDRAM掉电保护模块(VI)以及所述双口 RAM模块连接 IV连接,并通过所述双口 RAM模块(IV)与所述ARM控制模块(I )连接;所述计数器控制器从所述ARM控制模块(I )获取计数器的运行状态、类型、参数信息、 复位信息以及计数实时参数读取命令,根据上述计数器的运行状态、各类信息及参数进行判断并进行相应处理、并将计数器处理的结果状态传输给所述双口 RAM模块(IV);所述计数器软触头位单元模块为计数器软触头状态的存放空间,可实现字寻址和位寻址。
5.如权利要求2所述一种ARM+FPGA组成的计数器装置,其特征在于所述存储器模块(II)包括分别与所述ARM控制模块(I )连接的Nor FLASH存储器、 Nand FLASH存储器和SDRAM存储器;所述Nor FLASH存储器用于存储操作系统及系统程序的目标代码映像文件; 所述Nand FLASH存储器用于存放执行用户程序;所述SDRAM存储器用于存放计数器装置的处理和通信信息,并为系统运行和通信数据处理提供空间。
6.如权利要求广5中任意一项所述一种ARM+FPGA组成的计数器装置,其特征在于 所述FPGA计数器模块(III)与所述双口 RAM模块(IV)分别独立设置。
7.如权利要求广5中任意一项所述一种ARM+FPGA组成的计数器装置,其特征在于 所述双口 RAM模块(IV)嵌入所述FPGA计数器模块(III)中,构成带双口 RAM模块(IV)的FPGA计数器模块(III,)。
8.应用如权利要求广5中任意一项所述ARM+FPGA组成的计数器装置实现计数器的方法,其特征在于该方法是以所述ARM控制模块(I )中的嵌入式ARM微处理器为控制核心,所述FPGA计数器模块(III)实现计数处理,应用所述双口 RAM模块(IV)实现所述ARM控制模块(I )和所述FPGA计数器模块(III)之间的数据传输;首先由所述ARM控制模块(I )中的嵌入式ARM 微处理器进行初始化处理,然后所述ARM控制模块(I )根据所述初始化处理的结果对相应的计数器进行控制操作,并通过所述双口 RAM模块(IV)实现对所述FPGA计数器模块(III)的控制,所述FPGA计数器模块(III)根据所述ARM控制模块(I )发出的控制命令对计数器进行相应的控制处理;所述存储器模块(II)存储目标代码映像文件、处理信息以及为计数器装置数据的处理和通信提供空间;所述SDRAM掉电保护模块(VI)在电源切换过程中应用其中的电源为动态参数存储器供电;所述电源模块(V )在整个处理过程中为上述ARM控制模块(I )、存储器模块(II)、FPGA计数器模块(III)、SDRAM掉电保护模块(VI)及双口 RAM模块 (IV)提供变压电源;具体包括如下步骤初始化处理步骤所述嵌入式ARM微处理器对双口 RAM的每个存储单元清零,在每次启动PLC用户程序时将SDRAM计数器动态参数存储器中非保持型计数器的动态参数存储单元清零,并将计数器的参数、状态信息等传输到所述双口 RAM模块(IV);ARM控制步骤所述ARM控制模块(I )根据上述初始化处理的结果对其中任一计数器进行控制处理,并通过所述双口 RAM模块(IV)实现对所述FPGA计数器模块(III)的控制操作;FPGA控制步骤所述FPGA计数器模块(III)根据所述ARM控制模块(I )发出的控制命令,进行计数器处理操作。
9.如权利要求8所述实现计数器的方法,其特征在于 所述初始化处理的具体过程为所述ARM控制模块(I )在编译过程中,将所使用每个计数器设置的计数参数及使用状态信息传输到所述双口 RAM模块(IV)中,并检测计数器实时计数值读取指令,按照该指令出现顺序将对应的计数器编号传输给所述双口 RAM模块(IV);所述ARM控制模块(I )在执行计数器指令时,将该计数器的运行状态信息传输到所述双口 RAM模块(IV)中。
10.如权利要求8所述实现计数器的方法,其特征在于 所述ARM控制模块(I )对计数器处理操作的具体步骤为 SlOl 某一个计数器软元件输出指令;sl02 判断是否增计数器?如果是,则进入步骤sl04,否则进入步骤sl03 ; sl03 根据该计数器软元件的编号将2个计数设置值传输给所述双口 RAM模块(IV)中存储该计数器参数相邻的2个存储单元,进入步骤sl05 ;sl04 根据该计数器软元件的编号将计数设置值传输给所述双口 RAM模块(IV)中存储该计数器参数的存储单元;sl05 =ARM控制模块(I )继续按顺序编译其他指令;sl06 该计数器实时计数值读取指令,按照编译该指令出现的先后顺序将该计数器的编号传输给所述双口 RAM模块(IV);sl07 :ARM控制模块(I )继续按顺序编译其他指令。
11.如权利要求8所述实现计数器的方法,其特征在于所述ARM控制模块(I )对FPGA计数器模块(III)控制的具体步骤为 s201 执行某一个计数器软元件输出指令;s202 判断是否属于增计数器?如果是,进入步骤s205,否则,进入步骤s203 ; s203 判断该计数器是否处于增计数操作状态?如果不是处于增计数操作状态,则进入步骤s204,否则进入步骤s205 ;s204 设置标志位D29为“0”,进入步骤s206 ; s205 设置标志位D29为“1”;s206 判断计数器软元件是否得电?如果软元件得电,则进入步骤s207,否则进入步骤 s208 ;s207 设置标志位D31和D30的值为“11”,进入步骤s209 ; s208 设置标志位D31和D30的值为“10” ;s209 将标志位D31、D30、D29和D28的信息发送到所述双口 RAM模块(IV); s210 =ARM控制模块(I )继续按顺序编译其他指令;s211 判断计数器是否满足复位条件?如果满足,进入步骤s212,否则,进入步骤 s213 ;s212 复位计数器,设置标志位D28为“0”,进入步骤s214 ; s213 设置标志位D28为“1”;s214 将标志位D28的信息发送到所述双口 RAM模块(IV);s215 =ARM控制模块(I )继续按顺序编译其他指令;s216 从双口 RAM模块(IV)的触头存储区读入上述过程中所需的该计数器触头信息; s217 =ARM控制模块(I )继续按顺序编译其他指令;s218 判断是否需要读取计数器实时计数值?如果需要,则进入步骤s219,否则,进入步骤s220 ;s219 从双口 RAM模块(IV)中的计数器实时计数值存储区读入该计数器的实时计数值;s220 ARM控制模块(I )继续按顺序编译其他指令。
12.如权利要求8所述实现计数器的方法,其特征在于 所述FPGA计数器模块(III)控制的具体步骤为s301 清计数器单元地址计数器和溢出位标志TF ; s302 从所述双口 RAM模块(IV)读取计数器32位字长存储单元的内容; s303 根据计数器单元地址计数器的值判断是否是增计数器,如果是,则进入步骤 s304,否则进入增/减可控计数器的计数处理过程;s304 获得并判断标志位D31、D30、D29、D28和D27的位值,若D31、D30、D29、D28和D27 的位值为“ O X X X X ”或“ 11 X 11”,则进入步骤s313,若D31、D30、D29、D28和D27的位值为“ 10 X 1 X ”,则进入步骤s305,若D31、D30、D29、D28和D27的位值为"IX Χ0Χ",则进入步骤8306,若031、030、029、028和027的位值为“11 X 10”则进入步骤s307 ; s305 设置该计数器D27的位值为“0”,进入步骤s313 ; s306 设置该计数器的触头位单元为“0”并进入步骤s308 ;s307 判断所述SDRAM计数器动态参数存储器中,该计数器的D26 D0是否等于或大于所述双口 RAM模块(IV)中该计数器的D26 D0的内容,如果是,则进入步骤s311,否则,进入步骤s310 ;s308 将该计数器的D30、D27的位值设置为“00”;s309 将所述SDRAM计数器动态参数存储器中该计数器的D26 D0设置为“0”,进入步骤 s313 ;s310 将所述SDRAM计数器动态参数存储器中该计数器的D26 D0分别+1后,将结果返回到所述SDRAM计数器动态参数存储器中该计数器的D26 D0,进入步骤s312 ; s311 该计数器的触头位单元设置为“1”; s312 将该计数器D27的位值设置为“1”; s313 计数器单元地址计数器+1 ;s314 判断TF是否为1 ?如果是,则进入步骤s315,否则,进入步骤s302 ; s315 循环将每个计数器的触头位单元内容传输给双口 RAM触头存储单元; s316 循环将所述SDRAM计数器动态参数存储器中各计数器D27的位值设置值传输给所述双口 RAM模块(IV)中各个计数器的D27位单元;s317 按照需传输计数器实时计数值的计数器编号顺序将SDRAM计数器动态参数存储器中的实时计数参数传输给所述双口 RAM模块(IV)中的计数器实时计数值存储区,然后返回步骤s301。
13.如权利要求12所述实现计数器的方法,其特征在于所述FPGA计数器模块(III)控制处理中,所述增/减可控计数器的计数处理的具体步骤为s401 判断该增/减可控计数器的D31、D30、D29、D28和D27的位值,若D31、D30、D29、 D28 和 D27 的位值为“O X XXX,,或“ 11X11”,则进入步骤 s413,若D31、D30、D29、D28 和 D27 的位值为“ 10 X 1 X,,则进入步骤s402,若D31、D30、D29、D28和D27的位值为"IX Χ0Χ", 则进入步骤s403,若D31、D30、D29、D28和D27的位值为“ 11110”,则进入步骤s404 ;若D31、 D30、D29、D28和D27的位值为“ 11010”则进入步骤s405 ; s402 设置该增/减可控计数器的2个计数存储单元的D27的位值为“0”,为该增/减可控计数器软线圈由失电转化为得电时作好计数的准备,并进入步骤s413; s403 该增/减可控计数器的触头位单元设置为“0”,并进入步骤s406 ; s404 判断所述SDRAM计数器动态参数存储器中,该增/减可控计数器参数单元中的 D26^D0的位值是否等于或大于所述双口 RAM模块(IV)中该增/减可控计数器的第一个参数单元中的D26 DO的内容,如果是,则进入步骤s409,否则,进入步骤s408 ;s405 判断所述SDRAM计数器动态参数存储器中,该增/减可控计数器参数单元中的 D26^D0是否等于或小于所述双口 RAM模块(IV)中该增/减可控计数器的第二个参数单元中的D26 D0的内容,如果是,则进入步骤s411,否则,进入步骤s410 ;s406 设置所述SDRAM计数器动态参数存储器中该增/减可控计数器参数单元中的 D30、D27的位值为“0”;s407 所述SDRAM计数器动态参数存储器中该增/减可控计数器参数单元中的D26 D0 清零,并进入步骤s413;s408 所述SDRAM计数器动态参数存储器中该增/减可控计数器参数单元中的D26 D0 补+1操作后,将结果返回到所述SDRAM计数器动态参数存储器中该增/减可控计数器参数单元中的D26 D0,并进入步骤s412 ;s409 将该增/减可控计数器的触头位单元设置为“1”,并进入步骤s412 ; s410 所述SDRAM计数器动态参数存储器中该增/减可控计数器参数单元中的D26 D0 补+(-1)补操作后,将结果返回到所述SDRAM计数器动态参数存储器中该增/减可控计数器的第二个参数单元中的D26 D0,并进入步骤s412 ;s411 将该增/减可控计数器的触头位单元设置为“1” ;s412 设置所述SDRAM计数器动态参数存储器中该增/减可控计数器参数单元中的 D27的位值为“1”;s413 计数器单元地址计数器+2 ;s414 进入所述FPGA计数器模块(III)控制的s314步骤。
全文摘要
本发明提供一种以ARM微处理器为控制核心、FPGA为计数处理的计数器装置,包括ARM控制模块、存储器模块、FPGA计数器模块、双口RAM模块、SDRAM掉电保护模块、电源模块。ARM控制模块以ARM微处理器为控制核心,对各模块处理和控制;双口RAM模块分别与FPGA计数器模块和ARM控制模块连接,实现两模块的数据传输;FPGA计数器模块以计数器控制器为核心,完成增计数器和增/减计数器判断、计数处理及实时计数参数传输;电源模块提供工作电源,SDRAM掉电保护模块对计数动态参数掉电保护;本发明还提供一种实现计数器的方法;本发明计数操作不占用PLC用户程序执行时间,可实现不同类型和数量的计数器。
文档编号G06M1/00GK102254218SQ20111018455
公开日2011年11月23日 申请日期2011年7月2日 优先权日2011年7月2日
发明者丁秋笛, 付杰, 吴笔迅, 李克俭, 罗功坤, 蔡启仲 申请人:广西工学院
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1