首页 理论教育 使用子程序优化处理程序

使用子程序优化处理程序

时间:2023-06-16 理论教育 版权反馈
【摘要】:是,则过半数,表决成功;不足的是,本程序只能处理1个字。图2-36 Q型机子程序及带参数调用图2-36a调子程序P0,有3个参数。那样,即可用一个子程序,处理多个逻辑关系雷同,但地址不同问题。其目的是把实际参数赋值给形式参数,使调子程序时,将按实际值处理。在子程序中,怎样增加数据传送处理,在此略。

使用子程序优化处理程序

逻辑关系是相同的,还可用子程序处理,而不必对每一个位都做雷同的编程。有两种子程序:可带参数与无法带参数。

1.带参数调用的子程序

就是子程序有形式参数,调用时对参数要先赋值

(1)西门子S7-200带参数子程序

如类似上述BCNT指令,西门子S7-200没有,但可自编子程序。实现上述BCNT指令类似功能。图2-35即为西门子PLC对应的表决程序。

978-7-111-56641-0-Chapter03-79.jpg

图2-35 西门子PLC表决程序

图2-35b为所用形式参数,也即局部变量表。其中LAA(LW0)、NUM(LW2)作输入(IN)变量,BCNT(LW2)作为输出变量,TMP(LW4)、IND(LW6)作为临时(TEMP)变量。

图2-35a为在指定字中,统计ON个数的子程序(SBR-1,在图中未标注)。子程序开始,先初始化,把要统计ON位,所在字的地址传给临时工作字#TMP(子程序局部变量,见图2-35b,下同),并把存储统计结果字#BCNT清零。然后进入FOX-NEXT循环执行,而循环次数由#NUM决定。在循环中,先看L6.7(局部变量LW的最左位)ON否?ON,则#BCNT加1,否则不加。然后,把LW6左移位(即局部变量#TMP),原L6.6的状态移给L6.7,L6.5的状态移给L6.6,L7.7的状态移给L6.0,L7.6的状态移给L7.7等。显然,这里如执行16次,则LW6的值即为在#TM中ON的所统计的,ON的位数。

图2-35c为主程序,它用常ON特殊继电器SM0.0调。调时变量AA、16分别输入给局部变量#LAA、#NUM,调后局部变量#BCNT得到的值,输出传给AAJ。进而判断AAJ是否大或等于9?是,则过半数,表决成功;不足的是,本程序只能处理1个字。

(2)三菱Q系列等中、大型机的带参数子程序

但它的形式参数数量有限制。因为它的形式参数必须用专用的内部器件,即功能软元件FX(位输入)、FY(位输出)、FD(4字寄存器)等,而这些器件数量不多。图2-36所示为Q型机子程序及带参数调用。图中SM400是Q型机的常ON特殊继电器。

978-7-111-56641-0-Chapter03-80.jpg

图2-36 Q型机子程序及带参数调用

图2-36a调子程序P0,有3个参数。都是位(开关量)。这里,X0(位置排列在参数的首位)对应FX0(编号0),Y2(位置排列在参数的第2位)对应FX1(编号1)先作为输入参数;Y2(位置排列在参数的第3位)对应FY2(编号3)后作为输出参数。由于没有既用作输入,又用作输出的参数,所以,只好这么做。只有这样,才能实现用X0单按钮起、停Y2作用。

图2-36b调子程序P1,有5个参数。4个字,1个位。当X0(位置排列在参数的第5位,对应FX4,编号4)ON时,可实现D0(位置排列在参数的第1位,对应FD0,编号0)与D1(位置排列在参数的第2位,对应FD1,编号1)相加,并把结果存于D1中。同时,D3(位置排列在参数的第2位,对应FD3,编号3)被D2(位置排列在参数的第3位,对应FD2,编号2)减,结果存于D3中。(www.xing528.com)

2.无法带参数调用的子程序处理

欧姆龙PLC及三菱的FX机的子程序无法带参数调用。但可作适当处理,达到带参数调用的目的。实际上也只有带参数调用子程序,才能在逻辑关系相同问题的处理时,简化编程。所以,这样的处理是常要用到的。

图2-37所示为子程序体,其使用的地址有AA、YY、BB三个。AA为输入信号,在程序中不产生输出。YY与YY产生输出,而且,其触点还作为输入的一部分,起到反馈作用。

该子程序的功能是,AAON、OFF一次,YYON,再ON、OFF一次,YYOFF。当然,这只是一个例子。其实,子程序的内容不同,可实现的功能也将不同。

显然,如不是带参数调用子程序,那只是对YY的处理,对别的地址就不起作用。如要想对雷同的逻辑都用它处理,就要带参数调用它。

这里用的参数就是AA、YY、BB。AA为输入参数,YY、BB既有输入,又有输出,为输入、输出参数。因为AA、YY、BB地址只是在子程序中引用,不是实际要处理的地址,故又称之为形式参数(地址)。

978-7-111-56641-0-Chapter03-81.jpg

图2-37 带参数调用子程序

要带参数调用,就要在调用子程序前,先对形式参数赋值,把要处理的地址,即实际参数值赋给形式参数。在调子程序之后,则要做相反的赋值,把形式参数赋给实际参数。那样,即可用一个子程序,处理多个逻辑关系雷同,但地址不同问题。

图2-37所示主程序就是一个带参数调用例子。

图2-37a中,p_On及图2-37b中M8000为常为ON的触点,说明在它之后的所有指令,在每扫描周期都将执行。在这些指令中,先是3组简单的赋值逻辑,图2-37a把0.00、“工作”、201.00的值(图2-37b把X000、“工作”、M0)分别赋值给AA、YY、BB;图2-37b把X000、“工作”、M201的值分别赋值给AA、YY、BB。其目的是把实际参数赋值给形式参数,使调子程序时,将按实际值处理。

接着为调子程序。子程序执行之后,又有两组简单的赋值逻辑,图2-37a把YY赋值给“工作”、BB赋值给201.00;图2-37b把YY赋值给“工作”、BB赋值给M201)。其目的是把形式参数赋值给实际参数,完成调子程序,完成用0.00或X000控制“工作”的目的。

为了简化调用时赋值的处理,也可用字传送指令,在实际参数与形式参数之间进行成批的数据交换。而在子程序中,当然要做数据转换的处理。

这样,如图2-38所示主程序,它调两次子程序,第1次调前,先把实际参数1赋值给形式参数,调子程序后再把形式参数赋值给实际参数1。第2次调制前,先把实际参数2赋值给形式参数,调子程序后再把形式参数赋值给实际参数2。由于在这两次调之前,对实际参数不同,其结果也将是不同的。在子程序中,怎样增加数据传送处理,在此略。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈