GE PAC CALL指令说明及应用举例.docx
《GE PAC CALL指令说明及应用举例.docx》由会员分享,可在线阅读,更多相关《GE PAC CALL指令说明及应用举例.docx(17页珍藏版)》请在冰豆网上搜索。
![GE PAC CALL指令说明及应用举例.docx](https://file1.bdocx.com/fileroot1/2023-7/4/15348dd1-7ff6-4eb1-a9e5-6e6944662c69/15348dd1-7ff6-4eb1-a9e5-6e6944662c691.gif)
GEPACCALL指令说明及应用举例
南阳理工学院
可编程控制器GE(期末作业)
题目:
班级:
学号:
姓名:
完成日期2015年5月
RX3iCALL指令说明[1]
一CALL指令格式
通过调用子程序(CALL)指令可以实现模块化程的功能。
CALL指令可以使程序转入特定的子程序块。
如图1所示。
图1CALL指令
二指令功能
2.1梯形图
2.1.1无参数的调用
打开ProficyMachineEdiion的开发软件环境,建立一个新的工程,点开编辑程序的Logic,选用CALL指令,注意红色标记的CALL指令。
图2无参数的调用
2.1.2带参数调用
可以调用一个带参数的外部子程序或者一个参数子程序,可以有7个输入和8个输出参数。
打开ProficyMachineEdiion的开发软件环境,建立一个新的工程,点开编辑程序的Logic,进行编写带参数的程序,选用CALL指令。
图3带参数调用设置
2.1.3带参数调用子程序的参数设置
对带有参数调用子程序的使用,PAC软件中程序编写应该注意设置参数,结合自己编写的程序来设置Inputs中的DataType(数据类型),PassBy(经过)如图4所示和Outputs中的DataType(数据类型)进行选定(注意图片中红色标记的为选择设置内容)。
如图5所示:
图4Intputs参数的设置
图5Outputs参数的设置
2.1.4总结
当CALL功能块接收能流,它将使逻辑执行立即跳转到目的程序块,外部子程序(带参数或无参数),或参数子程序并执行。
该子程序执行结束后,控制立即返回在CALL指令之后的原调用点。
注意:
一个CALL功能块能在任何程序块中使用,包括_MAIN块或一个带参数块。
但不能在一个外部块中使用。
不能调用一个_MAIN块。
执行调用之前,被调用的块必须存在。
一个已知块的调用和被调用的次数没有限制。
通过调用块本身可以形成递归子程序。
当堆栈容量配置为默认值(64K),保证在“应用堆栈
溢出”错误发生之前8个嵌套调用中最小一个调用。
当一个程序块、带参模块或外部C块的Y0参数返回ON时,CALL向右传递能流,当返回为OFF时,CALL不向右传递能流。
2.2Call操作数
2.2.1块名称:
图6CALL块名称
解释:
块名称,要跳转到的块名称不能调用_MAIN。
一个程序块或者一个带参数能调用本身。
2.2.2用于带参数块调用[输入参数(0-7);输出参数(1-8)]
2.2.2.1关于外部(C)块的注意:
必须定义每个外部C块参数的TYPE,LENGTH,和NAME。
有效数据类型,数据范围和每个参数的存储区域都在外部块的写文本中有规定。
对任何参数数据流都是允许的。
更多的信息见第6章的外部块部分。
2.2.2.2关于带参块的注意
必须定义每个参数的TYPE,LENGTH和NAME。
CALL指令中的有效操作数包括变量、流和间接参考。
输入操作数也可以是常量。
如果一个形式参数是一个BOOL数组,且其长度是16的倍数,那么残留在字组存储器中的变量或数组可以作为一个操作数传递到带参数块中。
例如,一个带参数块有一个数据类型为BIT,长度为48的形式参数Y1,可以给Y1送一个长度为3的字组。
对所有带参数块,BOOL参数Y0是自动定义的,可以用于带参数块的逻辑中。
当带参数块暂停且Y0是ON,CALL向右传递能流。
如果Y0是OFF,CALL断开能流。
带参数块不需要输入和输出的数量相同。
2.3如何调用程序子程序
在程序逻辑中_MAIN块和其他块中调用后,程序块执行。
在本例中,LD_BLK1一直被调用。
可以设定程序块的调用条件,在输入量%I00500和输出量%Q00100为ON时,调用LD_BLK2。
如图7所示。
图7调用子程序的设置
2.4嵌套调用
只要有足够的执行站空间,CPU就允许进行嵌套调用。
如果没有足够的站空间支持程序块调用,会产生一个”堆栈溢出”故障。
这种情况下,CPU不能执行这个程序块。
CPU会将这个模块的所有二进制输出设为FALSE,并且继续执行程序块调用指令之后的程序。
注意:
由两种方式可以在没有足够堆栈空间时停掉CPU。
最好的方法是增加程序逻辑来测试自诊断位%SA38,以检测用户程序是否发生故障。
检测到故障后,可以用SVC_REQ13停掉CPU。
另一个方式是增加逻辑检测模块没有正确执行的信号,然后调用SVC_REQ13停掉CPU。
除了调用的模块有特别多参数的情况,一般能支持8层以上的调用。
能进行多少层调用受几个因素的影响,包括程序块数据流量(非布尔型),程序块调用的特殊功能以及这个块中所定义的参数的类型和数量。
如果程序块没有最大限度的使用堆栈资源,就有可能支持多于8层的嵌套调用。
嵌套调用以_MAIN块为第1层,如图8所示:
图8嵌套调用的方式
2.5程序块
PAC系统支持的四种程序块(如图9所示):
程序块类型
本地数型
编程语言
程序块大小
参数
程序块
有自己的本地数据
LD
ST
128KB
0输入
1输出
参数化程序块
从调用者那继承本地数据
LD
ST
128KB
63输入
64输出
函数块
有自己的本地数据
LD
ST
128KB
63输入
64输出
内部成员变量无限制
外部块
从调用者那继承本地数据
C
用户内存容量极限(10MB)
63输入
64输出
图9程序块
PAC系统程序块类型自动提供1个OK输出参数.用来显示模块中的OK参数的名称为Y0。
程序块内的逻辑可以读写Y0参数。
程序块调用时,Y0参数自动的初始化为TRUE。
除非在程序块内将Y0设为FALSE,否则调用的程序执行完以后会有正电流从调用指令行输出,对于所有的程序块类型,输入参数的最大数量都比输出参数的最大数量少1个。
因为程序块的使能输入不算做一个参数。
这个输入被LD语言用来确定是否调用这个程序块,但是即使这个块被调用,使能也不作为一个参数进入这个模块。
模块结构的程序执行时,_MAIN块自动执行。
其他块由_MAIN块,其他块或者自身的程序调用执行。
下面例子中,%M00001为ON时,执行ProcessEGD程序块(图10):
图10ProcessEGD程序块
2.6CALL指令执行如下功能(图11):
图11CALL指令执行功能
RX3iCALL指令应用举例
三指令举例
例一:
利用子程序的调用实现如下功能(不带参数的子程序调用):
(1)4个输出(Q00001~Q00004),初态为四个输出均闭合
(2)当I00001闭合,Q00001接通;
(3)当I00002闭合,Q00002接通;
(4)当I00003闭合,Q00003接通;
(5)当I00004闭合,Q00004接通;
1.1在PME软件中引入子程序的方法:
在鼠标点击Logic之后右击ProgramBlock,接着把鼠标移动到New上选择LDBlock,子程序的模块即会出现。
如下图:
图1-1PME软件中子程序的引入方法
1.2以1.1的方法分别引入子程序G1,G2,G3,G4.并链接梯形图:
当主函数调用子程序G1时,Q00001接通,Q00002、QQ00003、Q00004复位。
图1-2子程序G1的梯形图
当主函数调用子程序G2,Q00002接通,Q00001、QQ00003、Q00004复位。
图1-3子程序G2的梯形图
当主函数调用子程序G3,Q00003接通,Q00001、QQ00002、Q00004复位。
图1-4子程序G3的梯形图
当主函数调用子程序G4,Q00004接通,Q00001、QQ00002、Q00003复位。
图1-5子程序G4的梯形图
当接通I00001,调用子程序G1;
当接通I00002,调用子程序G2;
当接通I00003,调用子程序G3;
当接通I00004,调用子程序G4。
图1-6主程序
1.3以调用子程序G3为例,以下是主程序和子程序的运行结果:
主程序:
注释:
当I00003接通时,调用子程序G3
子程序G1:
注释:
当I00003接通时,子程序G1中Q00001,Q00002,Q00004复位(如上图)。
子程序G2:
注释:
当I00003接通时,子程序G2中Q00001,Q00002,Q00004复位(如上图)。
子程序G3:
注释:
当I00003接通时,子程序G3中Q00001,Q00002,Q00004复位,Q00003置位(如上图)。
子程序G4:
注释:
当I00003接通时,子程序G4中Q00001,Q00002,Q00004复位(如上图)。
例二:
彩灯控制程序实现如下功能(不带参数的子程序调用):
(1)前64s,16个输出(Q00001~Q00016),初态为Q00001闭合,其他打开,依次从最低位到最高位移位闭合,循环4次;
(2)后64s,16个输出(Q00001~Q00016),初态为Q00016和Q00015闭合,其它打开,依次从最高位到最低位两两移位闭合,循环8次。
2.1子程序梯形图的建立:
在子程序init中,把数据1通过MOVE指令给R00100,把16#c000通过MOVE指令给R00102.
在子程序youflash中,实现R00100的右移移动长度为1。
建立子程序zuoflash,实现R00102的左移,移动长度为2。
主程序中,程序运行开始首先调用此程序init,I00001接通,定时器定时,I00002接通,开始调用子程序。
2.2运行结果如下
子程序init:
子程序youflash:
子程序zuoflash:
主程序:
例三:
实现数学运算等式:
6+8+12+10)/2=18(带参数的子程序调用):
3.1程序分析:
在带参数的子程序调用中,对梯形图编辑时,先在子程序中建立参数,再对子程序参数进行编辑,最后再在主程序中引入程序块。
注释:
数据传递,并实现数学运算
3.2参数子程序调用,参数的设置: