你现在位置:首页>技术论文>经验技巧>AB_PLC>正文
AB PLC自学笔记(4)
日期:2008-12-30 9:11:11 来源:本站整理  
点击: 作者:
点击【】放大字体.
关于定时器参数的用法,从工控网论坛上找到一篇帖子,写的很详细: 
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

WWcW_PLCJS_COM-PLC-技.术_网

――――――――――――――――――――――――――――――― 
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

WW.W_PLC※JS_C,OM-PL,C-技.术_网

RSLgix5000中子程序的内部使用的输入、返回参数称之为“形参”,子程序的调用者提供“实参”,以通过子程序完成某种控制要求。子程序是由“形参”代替“实参”来执行的,对于一般的如BOOL,DINT等的数据类型,可以很容易地实现“实参”对“形参”的赋值。但是,计时器等由于利用了CPU系统的资源,例如“时钟中断”等,因而不能像上述类型数据那样可以用赋值的方式实现。要想使用计时器就必须得声明一个,以便系统能对此计时器进行操作。如果子程序的“形参”可以是普通的计时器,那么对于N个子程序的调用,这个“形参”计时器就必须实现N个计时器的功能,显然对于只能完成一次计时的普通计时器是无法完成的,所以子程序中是不可能有普通计时器作为“形参”的。这样就可以理解为什么RSLgix5000子程序中,不能使用计时器作为“形参”。 
WWW_P※LCJS_CO※M-PLC-技-.术_网

    但是,众所周知,西门子S7系列plc的Step 7编程软件中的FB,FC功能块,也就是子程序,可以实现计时器作为子程序的“形参”,这如何解释呢?其实,在STEP 7功能块,或者说是子程序中出现的计时器,虽然外形和普通计时器一样,但是根据上面的论述,我们可以确定其并非是普通计时器,而是一个“伪计时器”,真正的计时器应该是声明的那一个,也就是作为“实参”的那一个。由此可见,每当子程序被调用执行的时候,“伪计时器”将作为“实参”的那一个真正的计时器的参数,诸如,计时当前时间,计时时间到等参数读入,然后进行和普通计时器一样的操作。当然也包括将“伪计时器”的启动条件赋值给“实参”计时器,以便使“实参”计时器启动工作。这样就可以实现子程序中的计时器作为“形参”的功能。也是说,它的“形参”计时器是经过特殊设计的,并非普通的计时器。 
WW.W_PLC※JS_C,OM-PL,C-技.术_网

      因此,西门子Step 7中的子程序中的计时器,本质上依然使用了声明过的,子程序外部的普通计时器。对于RSLgix5000来说,要实现子程序中的计时器功能也是一样,使用子程序外部的计时器。 
W1WW_P4LCJS_COM-PLC-技.术_网

     
WWW_PL※CJS_COM-PLC-技.术_网

WWW_PLCJS_COM-PLC-技.术_网

          RSLgix5000子程序使用计时器的方法 
WWW_PL※CJS_COM-PLC-技.术_网

      由于在RSLgix5000梯形图子程序中,没有实现“形参”功能的“伪计时器”,所以只能在全局变量中声明的计时器。为了便于在子程序中使用这些计时器,我们将这些计时器放在数组里,这样子程序只需一个数组下标变量,就可以使用这些计时器。但是,很遗憾,在RSLgix5000梯形图中是无法使用数组下标变量的,因此,我们就只能使用ST即结构化文本,一种类似于PASCAL语言的编程工具,它提供完整的数组支持。 
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

      举一个例子,如果要实现3个计时器的时间设置工作,对于梯形图来说,即使是使用数组,由于它不能使用数组下标变量,也只能是采用一个一个的赋值方式,即,T[1].PRE = 1000,T[2].PRE = 1000,T[3].PRE = 1000等等。如果子程序也采用一个一个赋值的方式,就没有任何优势,还不如不使用子程序来实现,这样的子程序是毫无意义的(不带“形参”的子程序除外)。如果采用ST结构化文本,由于其数组下标可使用变量,就可以用子程序实现,子程序如下所示。 
WWW_PLCJS@_COM%-PLC-技.术_网

      FOR I := 1 TO 3 BY 1 DO 
WWW_PLCJS_COM-PLC-技.术_网

      T[I] := 1000; 
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

      END_FOR; 
WWW_P※LCJS_CO※M-PLC-技-.术_网

      这样就很适合子程序使用,不管是有100个还是1000个计时器,也都只是使用这一个子程序,就可以完成所有计时器的计时时间设置工作。由于梯形图无法完成这样的工作,因此子程序中的计时器数组的使用,只能用ST结构化文本实现。 
P.L.C.技.术.网——可编程控制器技术门户

      例如有2个相同控制要求的设备,用子程序来实现,如果每个设备需要使用3个计时器,那么需要声明含有2×3=6个计时器的计时器数组。设备1使用前3个计时器,设备2使用后3个计时器。在子程序中,设置一个DINT型的“形参”作为起始计时器号,例如设备1使用1,即从下标为1的计时器数组开始;设备2使用4,即从下标为4的计时器数组开始。 
WWW_PLC※JS_COM-PmLC-技.术_网

      需要说明的是,在RSLgix5000中,ST结构化文本所用的计时器同梯形图所用计时器不一样,在ST结构化文本中是FBD_TIMER类型,使用时用TONR指令声明。 
WWW_P※LCJS_COM-PLC-)技.术_网

          一个实例 
WWW_PLCJS_COM-PLC-技.术_网

      我们以两个水泵的控制为例子进行说明。水泵A的启动输出信号为START_A;出水阀门A的打开输出信号为OPEN_A;水泵A启动反馈为STARTED_A;出水阀门A开到位反馈为OPENED_A;水泵A的启动运行输入信号PUMP_START_A;水泵A启动完成标志PUMP_A_STARTED。水泵B的启动信号为START_B,出水阀门B的打开输出信号为OPEN_B;水泵B启动反馈为STARTED_B;出水阀门B开到位反馈为OPENED_B;水泵B的启动运行输入信号PUMP_START_B;水泵B启动完成标志PUMP_B_STARTED。 
WWW_P※LCJS_CO※M-PLC-技-.术_网

      控制要求为水泵启动5秒后打开出水阀门,水泵使用3秒的输出脉冲启动,出水阀门使用6秒的输出脉冲打开。这样每个水泵的控制,需要3个计时器。 
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

      为节省篇幅,这里省略了水泵停止部分的子程序,有兴趣的读者不妨自己实现。需要注意的是,水泵停止子程序要复位启动子程序中使用的计时器以及启动完成标志,启动子程序要复位停止子程序使用的计时器以及停止完成标志。梯形图主程序如图所示。 
WWcW_PLCJS_COM-PLC-技.术_网

      其中,TONR_TIMER为含有7个FBD_TIMER类型的计时器数组。计时器TONR_TIMER[0]没有使用。TONR_TIMER[1],TONR_TIMER[2],TONR_TIMER[3]用于水泵A的启动。计时器TONR_TIMER[4],TONR_TIMER[5],TONR_TIMER[6]用于水泵B的启动。JSR为子程序的调用指令。对于水泵A子程序,最后的Input Par为1,表示使用计时器数组中的前3个;水泵B子程序,最后的Input Par为4,是输入“实参”,表示使用计时器数组中的后3个。Return Par是输出的返回“实参”。MOV是赋值指令,Source为数据源。TONR_TIMER[].PRE是相应计时器的时间设定值。上面梯形图中的MOV指令实现的是对这6个计  

本新闻共3页,当前在第11 2  3  
WWW_PLC※JS_COM-PmLC-技.术_网

评论内容
载入中...
载入中...
P
L
C



|










|


P
L
C









·最新招聘信息
·最新求职信息
·推荐产品
·推荐厂商
·栏目热门排行
·站内热门排行