澳门新濠新天地3559_www.3559.com新濠新天地网址

您的位置:新天地3559 > 电工电气 > 某一设备在满足运行条件后,由于使用该函数是

某一设备在满足运行条件后,由于使用该函数是

2019-09-03 11:19

在实际应用中,我们常会用到计时时长远超过S5定时器的最大定时时长的情况。比如,我们要求某一设备在满足运行条件后,持续运行8个小时。此时,单独用S5定时器很难实现这一控制要求。实现上述控制要求的方法有多种,这里,介绍一种"利用计数器扩展定时时长"的方法,并简要引出S7中计数器的概念。一、控制任务归纳控制任务为:某一设备在满足运行条件后,持续运行8个小时做以下假设:1、假设该设备的各运行条件汇总为M10.0,且M10.0=1时,运行条件满足;2、该设备的运行命令由Q2.0给出,即Q2.0=1时,设备运行;3、为方便讨论,这里不考虑本设备故障、来自其他设备的连锁/互锁、及快/急停等各种信号的影响。二、利用计数器扩展定时时长1、计数器的相关概念S7的系列CPU为计数器保留了一片存储区域。一个计数器包括一个16位的字和一个二进制的位。计数器的字用来存储当前的计数值,而计数器的触点状态反映在它的位上。如图1所示,为计数器的字。

STEP7-Micro/WIN编程软件是专门为S7-200设计的在个人计算机Windows操作系统下运行的编程软件,它的功能强大,使用方便,简单易学。

1、plc的基本概念可编程控制器(Programmable Controller)是计算机家族中的一员,是为工业控制应用而设计制造的。早期的可编程控制器称作可编程逻辑控制器(Programmable Logic Controller),简称PLC,它主要用来代替继电器实现逻辑控制。随着技术的发展,这种装置的功能已经大大超过了逻辑控制的范围,因此,今天这种装置称作可编程控制器,简称PC。但是为了避免与个人计算机(Personal Computer)的简称混淆,所以将可编程控制器简称PLC。 2、PLC的基本结构 PLC实质是一种专用于工业控制的计算机,其硬件结构基本上与微型计算机相同:a. 中央处理单元中央处理单元是PLC的控制中枢。它按照PLC系统程序赋予的功能接收并存储从编程器键入的用户程序和数据;检查电源、存储器、I/O以及警戒定时器的状态,并能诊断用户程序中的语法错误。当PLC投入运行时,首先它以扫描的方式接收现场各输入装置的状态和数据,并分别存入I/O映象区,然后从用户程序存储器中逐条读取用户程序,经过命令解释后按指令的规定执行逻辑或算数运算的结果送入I/O映象区或数据寄存器内。等所有的用户程序执行完毕之后,最后将I/O映象区的各输出状态或输出寄存器内的数据传送到相应的输出装置,如此循环运行,直到停止运行。为了进一步提高PLC的可*性,近年来对大型PLC还采用双CPU构成冗余系统,或采用三CPU的表决式系统。这样,即使某个CPU出现故障,整个系统仍能正常运行。b、存储器存放系统软件的存储器称为系统程序存储器。存放应用软件的存储器称为用户程序存储器。C、电源 PLC的电源在整个系统中起着十分重要得作用。如果没有一个良好的、可*得电源系统是无法正常工作的,因此PLC的制造商对电源的设计和制造也十分重视。一般交流电压波动在 10%范围内,可以不采取其它措施而将PLC直接连接到交流电网上去。3、PLC的工作原理一. 扫描技术当PLC投入运行后,其工作过程一般分为三个阶段,即输入采样、用户程序执行和输出刷新三个阶段。完成上述三个阶段称作一个扫描周期。在整个运行期间,PLC的CPU以一定的扫描速度重复执行上述三个阶段。 输入采样阶段在输入采样阶段,PLC以扫描方式依次地读入所有输入状态和数据,并将它们存入I/O映象区中的相应得单元内。输入采样结束后,转入用户程序执行和输出刷新阶段。在这两个阶段中,即使输入状态和数据发生变化,I/O映象区中的相应单元的状态和数据也不会改变。因此,如果输入是脉冲信号,则该脉冲信号的宽度必须大于一个扫描周期,才能保证在任何情况下,该输入均能被读入。 用户程序执行阶段在用户程序执行阶段,PLC总是按由上而下的顺序依次地扫描用户程序。在扫描每一条梯形图时,又总是先扫描梯形图左边的由各触点构成的控制线路,并按先左后右、先上后下的顺序对由触点构成的控制线路进行逻辑运算,然后根据逻辑运算的结果,刷新该逻辑线圈在系统RAM存储区中对应位的状态;或者刷新该输出线圈在I/O映象区中对应位的状态;或者确定是否要执行该梯形图所规定的特殊功能指令。即,在用户程序执行过程中,只有输入点在I/O映象区内的状态和数据不会发生变化,而其他输出点和软设备在I/O映象区或系统RAM存储区内的状态和数据都有可能发生变化,而且排在上面的梯形图,其程序执行结果会对排在下面的凡是用到这些线圈或数据的梯形图起作用;相反,排在下面的梯形图,其被刷新的逻辑线圈的状态或数据只能到下一个扫描周期才能对排在其上面的程序起作用。 输出刷新阶段当扫描用户程序结束后,PLC就进入输出刷新阶段。在此期间,CPU按照I/O映象区内对应的状态和数据刷新所有的输出锁存电路,再经输出电路驱动相应的外设。这时,才是PLC的真正输出。比较下二个程序的异同:程序1:程序2:这两段程序执行的结果完全一样,但在PLC中执行的过程却不一样。※ 程序1只用一次扫描周期,就可完成对%M4的刷新;※ 程序2要用四次扫描周期,才能完成对%M4的刷新。这两个例子说明:同样的若干条梯形图,其排列次序不同,执行的结果也不同。另外,也可以看到:采用扫描用户程序的运行结果与继电器控制装置的硬逻辑并行运行的结果有所区别。当然,如果扫描周期所占用的时间对整个运行来说可以忽略,那么二者之间就没有什么区别了。一般来说,PLC的扫描周期包括自诊断、通讯等,如下图所示,即一个扫描周期等于自诊断、通讯、输入采样、用户程序执行、输出刷新等所有时间的总和。二. PLC的I/O响应时间为了增强PLC的抗干扰能力,提高其可*性,PLC的每个开关量输入端都采用光电隔离等技术。为了能实现继电器控制线路的硬逻辑并行控制,PLC采用了不同于一般微型计算机的运行方式。以上两个主要原因,使得PLC得I/O响应比一般微型计算机构成的工业控制系统满的多,其响应时间至少等于一个扫描周期,一般均大于一个扫描周期甚至更长。所谓I/O响应时间指从PLC的某一输入信号变化开始到系统有关输出端信号的改变所需的时间。其最短的I/O响应时间与最长的I/O响应时间如图所示: 第个扫描周期最短I/O响应时间:最长I/O响应时间SIEMENS PLC在中国的产品,根据规模和性能的大小,主要有 S7-200 S7-300 和S7-400三种,下面就简单介绍一下该三种产品的一些特性。S7-200针对低性能要求的摸块化小控制系统,它最多可有7个模块的扩展能力,在模块中集成背板总线,它的网络联接有RS-485通讯接口和Profibus两种,可通过编程器PG访问所有模块,带有电源、CPU和I/O的一体化单元设备。其中的扩展模块有以下几种:数字量输入模块——24VDC 和 120/230VAC;数字量输出——24VDC 和 继电器;模拟量输入模块——电压、电流、电阻和热电偶;模拟量输出模块——电压和电流。 还有一个比较特殊的模块-通讯处理器——该块的功能是可以把S7-200作为主站连接到AS-接口(传感器和执行器接口),通过AS-接口的从站可以控制多达248个设备,这样就可以显著的扩展S7-200的输入和输出点数。CPU设计 有3种手动选择操作模式:STOP——停机模式,不执行程序;TERM——运行程序,可以通过编程器进行读/写访问;RUN——运行程序,通过编程器仅能进行读操作。状态指示器:SF——系统错误或CPU内部错误;RUN——运行模式,绿灯;STOP——停机模式,黄灯;DP——分布式I/O(仅对CPU-215)。存储器卡——用来在没电的情况下不需要电池就可以保存用户程序。PPI口用来连接编程设备、文本显示器或其他CPU。S7-300相比较S7-200,S7-300针对的是中小系统,他的模块可以扩展多达32个模块,背板总线也在模块内集成,它的网络连接已比较成熟和流行,有MPI、Profibus和工业以太网,使通讯和编程变的简单和多选性,并可以借助于HWConfig工具可以进行组态和设置参数。S7-300的模块稍微多一点,除了信号模块和200的EM模块同类型之外,它还有接口模块——用来进行多层组态,把总线从一层传到另一层;占位模块——为没有设置参数的信号模块保留一个插槽或为以后安装的接口模块保留一个插槽;功能模块——执行特殊功能,如计数、定位、闭环控制相当于对CPU功能的一个扩展或补充;通讯处理器——提供点对点连接、Profibus和工业以太网。CPU设计模式选择器有:MRES=模块复位功能;STOP=停止模式,程序不执行;RUN=程序执行,编程器只读操作;RUN-P=程序执行,编程器可读写操作。状态指示器:SF,BATF=电池故障;DC5V=内部5 V DC电压指示;FRCE=表示至少有一个输入或输出被强制;RUN=当CPU启动时闪烁,在运行模式下常亮;STOP=在停止模式下常亮,有存储器复位请求时慢速闪烁,正在执行复位时快速闪烁。MPI接口用来连接到编程设备或其他设备,DP接口用来直接连接到分布式I/O。S7-400同300的区别主要?--*婺:托阅苌细看螅舳嘈陀欣淦舳–RST)和热启动之分,其他基本一样。哦,它还有一个外部的电池电源接口,当在线更换电池时可以向RAM提供后备电源。编程设备编程设备主要有PG720 PG740 PG760——可以理解成装有编程软件的手提电脑;也可以直接用安装有STEP7(SIEMENS的编程软件)的PC来完成。而实现通讯(要编程首先要和PLC的CPU通讯上)的要求主要在于接口:1.可以在PC上装CP5611卡——上面有MPI口,可用电缆直接连接。2.加个PC适配器,把MPI口转换成RS-232口后接到PC上。3.PLC加CP343卡,使它具有以太网口。一个工程的建立项目管理每个自动化过程都是由许多较小的部分和子过程组成,所以工程建立的第一个任务是分解子任务。而每个子任务定义了自动化系统要完成的硬件和软件要求。其中硬件包括输入/输出数目和类型,对应模块序号和类型,所用机架号,CPU型号和容量,hmi系统,网络系统。软件方面主要是程序结构,自动化过程中的数据管理,组态数据、通讯数据及程序和项目文档。在SIEMENS的S7中,上述工作都在项目管理(SIMATIC 管理器),包括必须的硬件,网络,所有程序和自动化解决方案的数据管理。 F1在线帮助。SIMATIC管理器管理STEP 7项目,编写 STEP 7用户程序的工具,有梯形图LAD,语句表STL,和功能块图FBD,编程语言。利用编程器或外部编程器可以把用户程序保存到EPROM卡上。SIMATIC管理器是一个在线/离线编辑S7对象的图形化用户界面,这些对象包括项目、用户程序、快、硬件站和工具。此管理器的用户界面中工具条和WINDOWS差不多,就是多了几个PLC菜单——显示访问节点、存储器卡、下载、仿真模块。注::由于目前主流系统是S7-300,所以下面的操作基本以S7-300为主,而实际过程由于配置的不同可能会有所不同。STEP 7项目结构:项目中,数据以对象形式存储,按树型结构组织。第一级:包含项目图表,每个项目代表和项目存储有关的一个数据结构。第二级:站用于存放硬件组态和模块参数等信息,站是组态硬件的起点。S7程序文件夹是编写程序的起点,所有S7系列的软件均放在S7程序文件夹下,它包含程序块文件和源文件夹。SIMATIC的网络图表(MPI、Profibus、工业以太网)第三级和其他级:和上级对象类型有关。编程器可离线/在线查看项目——OFFLINE:编程器硬盘上的内容;ONLINE:通过网线从PLC读到的内容。菜单选项: 在OPTIONS-CUSTOMIZE 设置语言、助记符、常用特性(存储位置、系统信息显示)。创建一个项目:FILE NEW NEW PROJECT插入 S7程序块:INSERT PROGRAM S7 PROGRAM插入 S7 块: INSERT S7 BLOCK 然后可选:1:组织块被操作系统调用,他们是操作系统和用户程序的接口。 2:功能FC和功能块FB是实际的用户程序利用他们可以 把复杂的程序分解成小的,易于调试的单元。3:数据块存储用户的数据。选择所需块类型后,会打开一个属性对话框,其中可输入块序号和要使用的编程语言,及其他设置。补充一下:1、内存总清——MRES=MEMORY RESET,经过MRES的模块相当于一个新模块,所以请务必谨慎。方法是:放在MRES足够时间,到STOP指示灯闪2下;弹回到STOP再迅速放到MRES,此时STOP快速闪6下——内存清空,将删除所有用户程序数据,硬件测试和初始化,如果此时装有EPROM卡,把卡内容COPY到内部RAM区。2、SIEMENS的信号模块结构设计,接线非常方便,更换摸板无需接线。固定方式有弹簧和螺钉连接两种。3、对于软件的授权:在光盘安装后以后,一定要用软盘授权,对于重装系统或软件的,一定要先”收回“权到软盘以后,才进行,以便重装以后再次授权,否则只能联系西门子了。硬件组态和存储器概念S7-300的存储器概念:装载存储器是一个可编程模块,它包括建立在编程设备上的装载对象(逻辑块、数据块和其他信息),它可以是存储器卡或内部集成的RAM。存储器卡一般有两种,其中,当采用RAM存储器卡时,系统必须配备电池,当采用Flash EPROM存储器卡时,则断电不会丢失,但内部RAM中的数据仍需电池保持。工作存储器仅包含和运行时间使用的程序和数据,RAM工作存储器集成在CPU中,通过后备电池保持。系统存储器包括过程映象输入和输出表,位存储器,定时器,计数器和局部堆践。保持存储器是非挥发的RAM,即使没有安装后备电池也可用来保持某些数据,设置CPU参数时要指定保持的区域。从上述概念可知,假如我们在线修改程序,被修改的块存放在工作存储器中,当把程序上载到编程器时,就从工作存储器传到编程器。由于断电会导致RAM数据的丢失,所以假如要安全保存被修改的程序,就必须保存在FEPROM或硬盘上。硬件组态和参数分配一些概念:组态就是指在硬件组态的站窗口中分配机架、块可分布式I/O,可从硬件目录中选择部件;参数分配就是建立可分配参数模块的特性,例如启动特性、保持区等;设定组态就是设定好的硬件组态和参数分配;实际组态指已存在的实际组态和参数分配,一般是在已装配的系统中,从PLC的CPU中读出来的。组态过程:启动硬件组态:新建一个项目,选择该项目,并插入一个站,在SIMATIC管理器中选择硬件站双击OPEN即可,我们同时可以打开硬件目录——VIEW-CATALOG,如果选择标准硬件目录库,它会提供所有的机架、模块和接口模块。产生硬件组态:主要选择机架,指定模块如何在机架摆放。具体是:1、 在硬件目录中打开一个SIMATIC300站的RACK-300,双击或拖到左边窗口。这样在左边的窗口中就出现两个机架表:上面的部分显示一个简表,下面的部分显示带有定货号、MPI地址和I/O地址的详细信息。2、 电源:双击或拖拉目录中的“PS-300”模块,放到表中的一号槽位上。3、 CPU:从CPU-300的目录中选择你所配置的CPU,列入2号槽位。4、 3号槽—一般接口模块保留,在实际配置中,如果这个位置要保留以后安装接口模块,在安装时就必须插入一个占位模块。5、 信号模块:从4号槽位开始最多可以插入八块信号模块,包括通讯处理器和功能模块。CPU——属性包括通用属性General(主要提供模块的类型,位置和MPI地址—如果要把几个PLC通过MPI接口组成网络,每个CPU分配不同的MPI地址);启动项目START.UP(主要选择三种启动方式,HOT—从断电时的语句,也就是程序断电处开始,WARM—从头,也就是程序第一步开始,COLD—冷启动;监视时间包括从模块读准备的信息时间和传递参数到模块的时间;可保存数量Retentive Memory:用来指定当出现断电或从STOP到RUN切换时需要保持的存储器区域;循环/时钟存储器;保护功能(设定钥匙权限和各种级别及口令);诊断/时钟。保存下载及上传:经过上述设置以后,我们就可以保存、编译、一致性检查后,把设定组态下载到PLC中。当然,对实际运行的PLC,我们也可以通过上传(Upload Station)把实际组态读到编程器。硬件诊断及组态中可能出现的问题:在SIMATIC管理器中可以用PLC-Diagnose Hardware来获得PLC的诊断状态。在实际组态过程中最可能出现的问题是以下几点:1、 在S7-300中,组态中有空位置,此时组态不能编译通过;2、 不正确的CPU(例如:是CPU 315-2DP,不是CPU 314)此时组态不能下载;3、 模拟量模块分配到不正确的槽位置,此时CPU会因为参数分配错误进入STOP模式;4、模拟量模块不正确的测量范围,导致模拟量模块组态错误。块的编辑STEP 7编程语言:LAD 梯形图/FBD功能块图/STL语句表,更加丰富,更加灵活,但对初学者比较难以理解,当然某些语言不能用LAD表达。块编辑的启动:选择所需编程语言,双击打开需编辑的块,如OB1或FC1等。当采用LAD或FBD编程语言时,可用工具条来插入简单的程序文件,当采用STL,则可用在线帮助得到有关语言的语法和功能——HELP-Help on STL。编程器组成:声明表:属于块,为块声明变量和参数;代码区:包含程序本身;编程元件:可选打开或关闭,内容依赖于所选择的编程语言,双击插入或拖拉插入。VIEW菜单:可切换到另一种语言,并可实现LAD/FBD/STL之间的转换,要知道,LAD/FBD转换成STL的,在语句表中可能不是最有效程序。而STL转换成其他则不一定行,转换不了的仍用语句表示,转换过程绝不会丢失程序。其他菜单由于篇幅较大,请最好结合教材及软件自己熟悉。在讨论调用块前先介绍一下OB1块——主循环块,绝对不能改名或删除,它是由操作系统循环调用,可以访问其他的S7程序块,它包括自身程序和其他块的调用。所以,当我们编辑好一个块以后,如FC1,为了让新块集成在CPU中的循环程序中,必须在OB1中调用。即在OB1中CALL F1。 子程序执行的条件有以下三个:已经下载到PLC中,必须在OB1调用,PLC处于运行状态。 下载到实际的PLC时,我们可以选择所有块或其中的一个或几个,再Download到PLC中。程序的执行过程:当PLC得电或从STOP切换到RUN模式,CPU会执行一次全启动在全启动期间,操作系统清除非保持位存储器、定时器和计数器,删除中断堆笺和块堆笺,复位所有保存的硬件中断,并启动扫描循环监视时间。CPU的循环操作包括三个主要部分:CPU检查输入信号的状态并刷新过程影象输入表;执行用户程序,也就是OB1中的程序及一些事件;把过程输出影象输出表写到输出模块。上面所提到的PII/PIQ是CPU中特定的存储器,用来保存输入模块/输出模块的信号,在用户程序中检查时,可以保证在一个扫描周期内为同样的信号状态。程序结构:上面曾经提到过,一个比较简单的程序,我们可以不用各种子程序块,而是直接把整个程序直接写在一个块上(通常是OB1主块上),CPU逐条的处理指令,我们称这种叫线形编程;而对稍微有点复杂的程序,我们可以把它分成几个块,每块包含处理一部分任务的程序,在每一个块中可以进一步分解、成几个段,可以为相同类型的段生成段模块,组织块OB1包含按顺序调用其他块的指令,我们把这种方法叫分块编程;另外,对可重复使用的功能装入单个块中,OB1调用这些块并传递相关参数,这种方法叫结构化编程。用户块包括程序代码和用户数据,在结构化程序中,一些块循环调用处理,一些块需要时才调用。程序块共有组织块、功能块、功能、系统功能块和系统功能5种,其中系统块是在CPU操作系统中预先定义好的功能和功能块,这些块不占用用户程序空间。在下节讨论位指令前先讨论一下SIEMENS的模块地址:在不带DP口的S7-300和不组态的S7-400采用固定槽位编址,使用带DP口的S7-300和S7-400,可以分配模块的起始地址。但要注意,由于CPU存储器复位后,参数和地址会丢失,这就意味着所有地址都回到和槽位有关的地址或是缺省地址。我们还是以S7-300为例,在S7-300中,机架上的插槽号简化了模块地址,模块的第一个地址由机架上的模块地址决定。一般槽1给电源,槽2是CPU,槽3为IM所用,4~11为I/O卡、CP卡和FM卡。他们的固定地址就是为每个槽位保留4个字节——就是说,槽4,地址为0.0~3.7,槽5地址为4.0~7.7,假设第一卡是DI,那么他们的地址就是I0.0、I0.1、、、I3.7,若第二卡为DO卡,地址为Q4.0、Q4.1、、、、Q7.7,请注意,当使用16通道的DI/DO模块时,每个槽位就会失去两个字节。基本逻辑指令 与 & A 或 >=1 O 异或 XOR X 注意:异或操作是指:当两个信号中仅有一个满足时,输出状态才是“1”,这个指令不能使用于多个地址的异或逻辑操作(N个中有一个1时才是1),所以三个及三个以上的异或指令,旧的RLO和另一个输入作异或运算。赋值语句 =置位 S 光是置位,一直保持到它被另一个指令复位为止。复位 R 光是复位,一直保持到它被另一个指令置位为止。触发器的置位复位:同时有置位输入和复位输入,如果两个输入端同时出现RLO=1,根据优先级。在LAD/FBD中,分别有置位优先和复位优先的不同符号,在STL中,最后编写的指令具有高优先权。注意:如果用置位命令把输出置位,当CPU全启动时它被复位,但如果声明保持,则当CPU全启动时,它就一直保持置位状态。连接器:M0.0,为中间赋值元件,它把当前RLO保存到指定地址,当它和其他元件串联时,连接器指令和触点一样插入。注意连接器不能:直接连接到电源母线直接跟一个分支;用在分支末尾。但连接器可以用“NOT”元件对它进行取反操作。影响RLO的指令:NOT=取反;CLR=复位;SET=置位;SAVE=把RLO保存到状态寄存器中的“BR”;BR=用来重新检查保存的RLO。主控继电器功能 MCR:是一个用来接通或断开电流的逻辑主开关。如果MCR条件不满足:0分配给输出线圈,置位线圈和复位线圈指令不改变当前值,MOVE指令把0传到目的地址。MCRA指令启动主控继电器功能/MCRD指令取消MCR功能,直到另一个MCRA指令起作用。无条件转移 JMP在LAD/FBD中,在线圈符号上面输入作为表示的标号或符号,如NEW1,NEW2等,标号最多有4个字符,第一个字符必须使用字母或“_”。跳转规则:可以向前或向后跳转,跳转指令和跳转目的必须在同一个块中(最大跳转长度为64K字节);在一个块中跳转目的只能出现一次;跳转指令可以用在FB、FC和OB中。条件跳转:有两个:JC——当RLO=1时,JC才执行,当RLO=0时,不跳转,继续执行下面的程序,但置RLO=1。 JCN——当RLO=0时,JCN才执行,当RLO=1时,不跳转。边沿检测:RLO-边沿检测和信号-边沿检测。RLO-边沿检测:当逻辑操作结果变化时,产生RLO边沿。检测正边沿FP——RLO从“0”变化到“1”,“FP”检查指令产生一个“扫描周期”的信号“1”;检测负边沿FN,则RLO从“1”变化到“0”,“FN”检查指令产生一个“扫描周期”的信号“1”。上述两个结果保存在“FP”位存储器中或数据位中,如M 1.0…,同时,可以输出在其他线圈。信号-边沿检测:同上面的RLO指令类似,当信号变化时,产生信号边沿,也有正/负边沿之分:POS/NEG。上述各种指令,最好请结合实际软件,掌握其方法、特性和不同之处,其他复杂指令请参考各种高级编程手册。数字指令 在讨论数字指令前先了解一下各种数据格式,关于二进制、十进制及其他数的表示方法,在其他地方都有介绍,这里就不再重复。一、数据格式:数据类型INT是整数,其中符号表示是正数或是负数(“0”=正数,“1”=负数),16位整数的数值范围是-32768~ 32767。在二进制格式中,整数的负数形式用正数的二进制补码表示。(二进制补码利用取反加1得到) 负数的位格式,对零的位置加权求和,再加1,然后在前面放一个负号。BCD码:十进制的每一位用四个二进制数表示,因为最大为9,所以需要四位二进制才能表示出来(十进制的9=1001二进制),要注意,从0~9的十进制数的BCD码表示与二进制数表示相同,但BCD码一般用作显示,并非二进制。上面的INT主要是用来运算。如BCD码W#16#296,在CPU中表现为0000,0010,1001,0110(直接为 ,2,9,6= 296);而整数 296则表示为0000,0001,0010,1000(即28 25 23=296),再例如整数-413表示为1111,1110,0110,0011(因为是负数,所以用补码,取反加1,所以上面的二进制数=-(28 27 24 23 22 1)=“-413”,而在BCD码该数(W#16#F413)则可以简单的表示为1111,0100,0001,0011。二、数据格式:DINT类型的数据——带符号位的32-位整数,定义为“双整数”或“长整数”,它的表示方法及范围是:L#澳门新濠新天地3559,-2147483648~L# 2147483647;还有一个是实数型REAL型,是1.175495*10-38~3402823*1038之间,实数的通用格式为**,其中Sign为符号位第31位,低位的0~22位为f=底数位,23~30为e=指数。STEP 7中的实数是按照IEEE标准表示的。数据的装入和传递:MOVE或L和T:如果输入EN有效,输入“IN”处的值拷贝到输出“OUT”。装载和传递指令的执行与RLO无关,数据通过累加器交换,装载指令把右边源地址的值写到累加器1(不够32位用0补齐),传递指令拷贝累加器中一些或所有内容到指定的目的地址。如先装载L 5 / L L#523312 / L B#16#EF (分别为装载一个整数 5/一个双整数523312/一个十六进制数EF)到第一累加器,然后再传输到目的地,如T MB5等。累加器是CPU中的辅助存储器,它们用于不同地址之间的数据交换、比较和数学运算操作。S7-300有两个32位的累加器,S7-400有四个32位的累加器。在装载过程中,ACCU 1中的值先移入ACCU 2,在新值写入前先清零,然后在把要装入的值写入ACCU 1,传递时则从ACCU 1中读出。装载和传递指令可以指定32位中的一个字节或是字及双字,如果仅传递一个字节,只使用右边的8位。在LAD/FBD中,我们可以使用MOVE的允许输入把装载和传递操作和RLO联系起来,在STL中,则总是执行装载和传递操作,而和RLO无关,但是,我们可以利用条件跳转指令来执行和RLO有关的装入和传递功能。定时器:STEP 7中,CPU为定时器保留了一个特殊存储器,这个区专门为每个定时器地址保留一个16位字。定时器的位0~9包含用二进制表示的时间值,12、13位为时间基准——0表示10ms,1表示100ms,2=1秒,3=10秒,时间基准定义的是一个单位代表的时间间隔。时间值可以直接用常数来表示(此时时间基准自动由系统自动分配),例如S5T#100ms,S5T#2h2m2s20ms。S5定时器格式:时间的指定可以如上述所说直接输入固定的时间常数,或由操作人员用拨轮按扭改变或和存储器字或数据字中的时间值有关的过程和配方。在使用中可以用L命令定时器BI输出端的地址(包含10位二进制数表示的时间值,不带时间基准),如 L T5;也可以用LC命令读出定时器BCD端的地址(3位BCD数表示的时间值和12、13位的时间基准)。具体介绍几种常用的定时器:下面只介绍功能,具体符号可以在元件表中找。接通延时定时器:当定时器的“S”输入端的RLO从0变到1时,定时器启动。只要输入S=1,定时器起作用,当到达指定的TV值时定时器启动,同时该定位器还有一个复位端R端,当等于1时,就清除定时值并且复位Q输出。当前时间可以在BI输出端以二进制数读出,在BCD端以BCD码形式读出,当前时间值是TV的初始值减定时器启动以来的经过时间。带保持接通延时定时器:与上面SD定时器基本一致,唯一不同的就是具有保持功能,也就是说:一旦S输入端的RLO从0变到1,定时器便启动,即使定时过程中出现输入S端=0,定时器仍继续记时。但有一点,在保持过程中,如果S输入端再次从0变1,则定时器重新开始。关断延时定时器:从某些方面说,和上面提到的SD接通延时定时器状态正好相反。当定时器的S输入端的RLO从“1”变到“0”时,定时器启动,输出信号Q=0,其他功能和输出与SD一样。个人理解,是否SD接通延时定时器,较多的用于正逻辑,而SF更多的用于事故安全型(有时也叫反逻辑,就是在正常的工况中,输入输出都为1或是带电情况)中。脉冲:这个比较好理解,当“S”输入端从0变到1时,启动定时器,输出Q=1(最多一个脉冲。输出Q复位的情况为:定时器时间到或启动信号从1变到0或复位输入R信号=1。扩展脉冲:当输入端的RLO从0变到1时,定时器启动,输出Q置1,即使当中S端输入变到0,输出Q仍保持1。当定时器正在运行,如果启动信号从0变到1,定时器被再次启动。它的复位情况是定时器时间到或复位R端有信号1。位指令定时器:所有的定时器也可以用简单的位指令启动,这种方法和前面讨论的定时器功能的相似处在于:启动条件在S端,指定时间值,复位条件在R端输入,信号响应在Q端。不同的是不能检查当前时间值(没有BI/BCD输出)。

原文链接地址:http://www.cnblogs.com/kangwang1988/archive/2010/09/16/1827872.html

澳门新濠新天地3559 1

CPU通过PC/PPI电缆或插在计算机总的CP5511、CP5611通信卡与计算机通信。

微软公司在其多媒体Windows中提供了精确定时器的底层API支持。利用多媒体定时器可以很精确地读出系统的当前时间,并且能在非常精确的时间间隔内完成一个事件、函数或过程的调用。利用多媒体定时器的基本功能,可以通过两种方法实现精确定时。

澳门新濠新天地3559 2


1)使用timeGetTime()函数,该函数定时精度为ms级,返回从Windows启动开始所经过的时间。由于使用该函数是通过查询的方式进行定时控制的,所以,应该建立定时循环来进行定时事件的控制。

澳门新濠新天地3559 3

编程语言:

1)语句表(STL)

2)梯形图(LAD)

3)功能图(FBD)


2)使用timeSetEvent()函数,该函数原型如下:

澳门新濠新天地3559 4

程序结构:

MMRESULT timeSetEvent(  UINT           uDelay,      
                      UINT           uResolution,
                      LPTIMECALLBACK lpTimeProc,  
                      DWORD_PTR      dwUser,
                      UINT           fuEvent      );

1)主程序:

1、主程序是程序的主体,每一个项目都必须且只能有一个主程序。在主程序中可以调用子程序和中断程序。

2、程序编译器窗口下的标签用来选择不同的程序。

3、每一次CPU扫描都要执行一次至程序。

uDelay:以毫秒指定事件的周期。
Uresolution:以毫秒指定延时的精度,数值越小定时器事件分辨率越高。缺省值为1ms。
LpTimeProc:指向一个回调函数。
DwUser:存放用户提供的回调数据。
FuEvent:指定定时器事件类型:
TIME_ONESHOT:uDelay毫秒后只产生一次事件
TIME_PERIODIC :每隔uDelay毫秒周期性地产生事件。

2)子程序:

子程序是一个可选的指令的集合,仅在被其他程序调用时执行

该函数的参数说明如下:参数uDelay表示延迟时间;参数uResolution表示时间精度,在Windows中缺省值为1ms;lpTimeProc表示回调函数,为用户自定义函数,定时调用; 参数dwUser表示用户提供的回调数据;参数fuEvent为定时器的事件类型,TIME_ONESHOT表示执行一次;TIME_PERIODIC:周期性执行。具体应用时,可以通过调用timeSetEvent()函数,将需要周期性执行的任务定义在lpTimeProc回调函数中(如:定时采样、控制等),从而完成所需处理的事件。需要注意的是:任务处理的时间不能大于周期间隔时间。另外,在定时器使用完毕后,应及时调用timeKillEvent()将之释放。下面这段代码的主要功能是设置两个时钟定时器,一个间隔是1ms,一个间隔是2s。每执行一次,把当前系统时钟值输入文件"cure.out"中,以比较该定时器的精确度。

3)中断程序:

中断程序是一个可选的指令的集合,不能被主程序调用,它是在中断事件发生时有可CPU的操作系统调用。


# define ONE_MILLI_SECOND 1 //定义1ms和2s时钟间隔,以ms为单位 ;
# define TWO_SECOND 2000 
# define TIMER_ACCURACY 1 //定义时钟分辨率,以ms为单位 
UINT wTimerRes_1ms,wTimerRes_2s; //定义时间间隔 
UINT wAccuracy; //定义分辨率 
UINT TimerID_1ms,TimerID_2s; //定义定时器句柄
///////////////////////////////
CCureApp::CCureApp():fout("cure.out", ios::out) //打开输出文件"cure.out";
{ 
     // 给时间间隔变量赋值 
     wTimerRes_1ms = ONE_MILLI_SECOND; 
      wTimerRes_2s = TWO_SECOND; 
       TIMECAPS tc; 
        //利用函数timeGetDeVCaps取出系统分辨率的取值范围,如果无错则继续; 
        if(timeGetDevCaps(&tc,sizeof(TIMECAPS))==TIMERR_NOERROR) 
         { 
                wAccuracy=min(max(tc.wPeriodMin, //分辨率的值不能超出系统的取值范围
                        TIMER_ACCURACY),tc.wPeriodMax); 
                  //调用timeBeginPeriod函数设置定时器的分辨率 
                  timeBeginPeriod(wAccuracy); 
                    //设置定时器 
                    InitializeTimer(); 
         } 
} 
CCureApp:: ~CCureApp() 
{ 
     fout <<"结束时钟"<< endl; //结束时钟 
      timeKillEvent(TimerID_1ms); // 删除两个定时器 
       timeKillEvent(TimerID_2s); // 删除设置的分辨率 
        timeEndPeriod(wAccuracy); 
} 
void CCureApp::InitializeTimer() 
{ 
     StartOneMilliSecondTimer(); 
      StartTwoSecondTimer(); 
} 
//1ms定时器的回调函数,类似于中断处理程序,一定要声明为全局PASCAL函数,
//否则编译会有问题 
void PASCAL OneMilliSecondProc(UINT wTimerID, UINT msg,DWORD dwUser,
                               DWORD dwl,DWORD dw2) 
{ 
     // 定义计数器 
     static int ms = 0; 
      CCureApp *app = (CCureApp *)dwUser; 
       // 取得系统时间,以ms为单位 
       DWORD osBinaryTime = GetTickCount(); 
        //输出计数器值和当前系统时间 
        app->fout<<++ms<<":1ms:" 
} 
// 加装1ms定时器 
void CCureApp::StartOneMilliSecondTimer() 
{ 
     if((TimerID_1ms = timeSetEvent(wTimerRes_1ms, wAccuracy, 
           (LPTIMECALBACK) OneMil liSecondProc, // 回调函数; 
             (DWORD)this, // 用户传送到回调函数的数据;
               TIME_PERIODIC)) == 0)//周期调用定时处理函数;
      { 
            AfxMessageBox("不能进行定时!", MB_OK | MB_ICONASTERISK); 
      } 
      else 
            fout << "16ms 计 时:" << endl; //不等于0表明加装成功,返回此定时器的句柄; 
}

存储器的数据类型与寻址方式:

在精度要求较高的情况下,如要求定时误差不大于1ms时,还可以利用GetTickCount()函数返回自计算机启动后的时间,该函数的返回值是DWORD型,表示以ms为单位的计算机启动后经历的时间间隔。通过两次调用GetTickCount()函数,然后控制它们的差值来取得定时效果.下列的代码可以实现50ms的精确定时,其误差是毫秒级的。

数据在存储器中存取的发方式:

// 起始值和中止值
DWORD dwStart, dwStop ; 
dwStop = GetTickCount(); 
while(TRUE) { 
 // 上一次的中止值变成新的起始值 
 dwStart = dwStop ; // 此处添加相应控制语句 
 do 
 {
  dwStop = GetTickCount() ; 
 }while(dwStop - 50 < dwStart) ; 
}

1)位、字节和双字:

1、位的数据类型为BOOL(布尔)型。

2、8位组成一个字节,其中第0位为最低位:LSB,第7位为最高位:MSB。

3、两个字组成一个双字。

一般用二进制的补码表示有符号数,最高位为符号位(0:正数;1:负数)。

用上述两种方式取得的定时效果虽然在许多场合已经满足实际的要求,但由于它们的精度只有毫秒级的,而且在要求定时时间间隔小时,实际定时误差大。对于精确度要求更高的定时操作,则应该使用QueryPerformanceFrequency()和QueryPerformanceCounter()函数。这两个函数是Visual C 提供并且仅供Windows 95及其后续版本使用,其精度与CPU的时钟频率有关,它们要求计算机从硬件上支持精确定时器。QueryPerformanceFrequency()函数和QueryPerformanceCounter()函数的原型如下:
BOOL QueryPerformanceFrequency (LARGE_INTEGER *lpFrequency);
BOOL QueryPerformanceCounter (LARGE_INTEGER *lpCount);
上述两个函数的参数的数据类型LARGE_INTEGER既可以是一个8字节长的整型数,也可以是两个4字节长的整型数的联合结构,其具体用法根据编译器是否支持64位而定。该类型的定义如下:
typedef union _LARGE_INTEGER
{
struct{
DWORD LowPart ; // 4字节整型数
LONG HighPart ; // 4字节整型数
};
LONG QuadPart ; // 8字节整型数
} LARGE_INTEGER ;
使用QueryPerformanceFrequency()和QueryPerformanceCounter()函数进行精确定时的步骤如下:
1、首先调用QueryPerformanceFrequency()函数取得高精度运行计数器的频率f,单位是每秒多少次(n/s),此数一般很大;
2、在需要定时的代码的两端分别调用QueryPerformanceCounter()以取得高精度运行计数器的数值n1、n2,两次数值的差值通过f换算成时间间隔,t=(n2-n1)/f,当t大于或等于定时时间长度时,启动定时器;

2)数据的存取方式:

1)位存储单元的地址由字节地址和位地址组成

I3.2:I表示输入,字节地址为3,位地址为2.

IB3:有I3.0到I3.7组成,其中B表示字节。

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

自己的一个try

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#pragma comment(lib,"Winmm.lib")


# define ONE_MILLI_SECOND 1 //定义1ms和2s时钟间隔,以ms为单位 ;
# define TWO_SECOND 2000 
# define TIMER_ACCURACY 1 //定义时钟分辨率,以ms为单位 
void PASCAL OneMilliSecondProc(UINT wTimerID, UINT msg,DWORD dwUser,DWORD dwl,DWORD dw2) 
{ 
    printf("11111111111n");
    exit(0);
} 

void main()

{
    HANDLE hHandle;

    UINT wTimerRes_1ms,wTimerRes_2s;//定义时间间隔 
    UINT wAccuracy; //定义分辨率 
    UINT TimerID_1ms,TimerID_2s; //定义定时器句柄
    wTimerRes_1ms = 5000;
    if((TimerID_1ms = timeSetEvent(wTimerRes_1ms, wAccuracy,(LPTIMECALLBACK)OneMilliSecondProc, // 回调函数
        (DWORD)(1), // 用户传送到回调函数的数据;
        TIME_PERIODIC)) == 0)//周期调用定时处理函数
    {
        printf("start!!!!!!!!!!!n");
    } 
    else
    {
        printf("end!!!!!!!!!!!n");
    }

    while (1)
    {
        printf("hello!n");
        Sleep(1000);
    }
}

不同存储区的寻址:

1)输入映像寄存器(I:I0.0到I15.7)寻址:

1)输入映像区是CPU接受外部开关量信号的窗口,通过光耦合器,将外部信号的开关量读入并存储在输入映像寄存器中。

2)在每个扫描周期的开始,CPU对输入点进行采样,并将采样值存于输入映像寄存器中。

2)输出映像寄存器(Q:Q0.0到Q15.7)寻址:

在扫描周期的末尾,CPU将输出映像寄存器的数据传送给输出模块,再由后者驱动外部负载。

3)变量存储器(V)寻址:

在程序执行的过程中存放中间结果,或用来保存与工序或任务有关的其他数据。

4)位存储器(M:M0.0到M31.7)寻址:

内部存储器标志位用来保存控制继电器的中间操作状态或其他控制信息。

5)特殊存储器(SM)标志位寻址:

特殊存储器用于CPU与用户之间进行信息交换。

6)局部存储器(L)寻址:

S7-200给主程序和中断程序各分配64字节局部存储器,给每一级子程序嵌套分配64字节局部存储器,各程序不能访问别的程序的局部存储器。

7)定时寄存器(T)寻址:

S7-200有三种定时器,它们的时基增量分别为:1ms、10ms、100ms。

定时器的当前值大于或等于设定值时,定时器被置1,常开出点闭合,常闭触点断开。

8)计数器寄存器(C)寻址:

计数器是用来累计其计数输入端脉冲电平由低到高的次数。

1)加计数器

2)减计数器

3)加减计数器

当计数器的当前值大于等于设定值时,计数器位被置为1。

9)顺序控制继电器(SCR)寻址:

用于组织机器的顺序操作。

10)模拟量输入(AI)寻址:

因为模拟量输入是1个字长,应从偶数字节地址开始存放,模拟量输入值为只读数据。

11)模拟量输出(AQ)寻址:

因为模拟量输出是1个字长,应从偶数字节地址开始存放,用户不能呢个读取模拟量输出值。

12)累加器(AC)寻址:

CPU提供了4个32位累加器(AC0到AC3),可以按字节、字和双字来存取累加器中的数据。

13)高速计数器(HC)寻址:

高速计数器用来累计比CPU的扫描速率更快的事件,其当前值和设定值为32位有符号整数,当前值为只读数据。


直接寻址与间接寻址:

1)直接寻址

直接给出存储器的区域、长度、位置。例如:VW790指V存储区中的字,地址为790。

取代继电器控制的数字量(开关量)控制系统一般只用直接寻址。

2)建立简介寻址的指针

可间接寻址的存储区:I、Q、V、M、S、T(仅当前值)和C(仅当前值)。

不能对独立的模拟量进行间接寻址。

本文由新天地3559发布于电工电气,转载请注明出处:某一设备在满足运行条件后,由于使用该函数是

关键词: