15527635009
当前位置:西门子plc模块代理商>>西门子MM变频器>>西门子G120变频器>> G120变频器6SL3210-1KE31-1UB1现场服务
变频器6SL3210-1KE31-1UB1现场服务
以下产品,子程序调用指令(CALL)将程序控制权交给子程序SBR_N。调用子程序时可以带参数也可以不带参数。子程序执行完成后, 控制权返回到调用子程序的指令的下一条指令。
子程序条件返回指令(CRET)根据它前面的逻辑决定是否终止子 程序。
要添加一个子程序可以在命令菜单中选择:编辑 > > 子程序。
使ENO=0的错误条件:
■ 0008 (超过子程序嵌套)
■ 0006 (间接寻址)
在主程序中,可以嵌套调用子程序(在子程序中调用子程序), 多嵌套8层。在中断程序中,不能嵌套调用子程序。
在被中断程序调用的子程序中不能再出现子程序调用。不禁止递归调用(子程序调用自己),但是当使 用带子程序的递归调用时应慎重。
表6--78 子程序指令的有效操作数
输入/输出 | 数据类型 | 操作数 |
SBR_N | WORD | 常数 对于CPU 221、CPU 222、CPU 224: 0到63 对于CPU 224XP和CPU 226 0到127 |
IN | BOOL | V、I、Q、M、SM、S、T、C、L、功率流 VB、IB、QB、MB、SMB、SB、LB、AC、*VD、*LD、*AC1、常数 VW、T、C、IW、QW、MW、SMW、SW、LW、AC、AIW、*VD、 *LD、*AC1、常数 VD、ID、QD、MD、SMD、SD、LD、AC、HC、*VD、*LD、*AC1、 &VB、&IB、&QB、&MB、&T、&C、&SB、&AI、&AQ、&SMB、常数 *VD、*LD、*AC、常数 |
BYTE | ||
WORD、INT | ||
DWORD、 | ||
DINT | ||
STRING | ||
输入/输出 | BOOL | V、I、Q、M、SM2、S、T、C、L VB、IB、QB、MB、SMB2、SB、LB、AC、*VD、*LD、*AC1 VW、T、C、IW、QW、MW、SMW2、SW、LW、AC、*VD、*LD、 *AC1 VD、ID、QD、MD、SMD2、SD、LD、AC、*VD、*LD,*AC1 |
BYTE | ||
WORD、INT | ||
DWORD、 | ||
DINT | ||
OUT | BOOL | V、I、Q、M、SM2、S、T、C、L VB、IB、QB、MB、SMB2、SB、LB、AC、*VD、*LD、*AC1 VW、T、C、IW、QW、MW、SMW2、SW、LW、AC、AQW、*VD、 *LD、*AC1 VD、ID、QD、MD、SMD2、SD、LD、AC、*VD、*LD,*AC1 |
BYTE | ||
WORD、INT | ||
DWORD、 | ||
DINT |
1 必须偏移1个或1个以上的单位
2 必须偏移30个或30个以上的单位
当有一个子程序被调用时,会保存当前的逻辑堆栈,置栈顶值为1,堆栈的其他值为零,把控制 交给被调用的子程序。当子程序完成之后,恢复逻辑堆栈,把控制权交还给调用程序。
因为累加器可在主程序和子程序之间传递, 所以在子程序调用时,累加器的值既不保存也不恢复。
当子程序在同一个周期内被多次调用时,不能使用上升沿、下降沿、定时器和计数器指令。
子程序可以包含要传递的参数。参数在子程序的局部变量表中定义。参数必须有变量名(多23个字 符)、变量类型和数据类型。一个子程序多可以传递16个参数。
局部变量表中的变量类型区定义变量是传入子程序(IN)、传入和传出子程序(IN_OUT)或者传出子程序
(OUT)。表6--79中描述了一个子程序中的参数类型。要加入一个参数,把光标放到要加入的变量类型 区(IN、IN_OUT、OUT)。鼠标右键可以一个菜单选择。选择选项,然后选择下一行选项。这样就出现了另一个所选类型的参数项。
表6--79 子程序的参数类型
参数 | 描述 |
IN | 参数传入子程序。如果参数是直接寻址(如:VB10),位置的值被传递到子程序。如果参数 是间接寻址(如:*AC1),指针位置的值被传入子程序;如果参数是常数(如:16#1234), 或者一个地址(如:&VB100),常数或地址的值被传入子程序。 |
IN_OUT | 参数位置的值被传到子程序,从子程序的结果值被返回到同样地址。常数(如:16#1234) 和地址(如:&VB100)不允许作为输入/输出参数。 |
OUT | 从子程序来的结果值被返回到参数位置。常数(如:16#1234)和地址(如:&VB100)不允许 作为输出参数。由于输出参数并不保留子程序后一次执行时分配给它的数值,所以必须在每 次调用子程序时将数值分配给输出参数。注意:在电源上电时,SET和RESET指令只影响布尔 量操作数的值。 |
TEMP | 任何不用于传递数据的局部存储器都可以在子程序中作为临时存储器使用。 |
如图6--37中所示,局部变量表中的数据类型区定义了参数的大小和格式。参数类型如下所示:
q BOOL:此数据类型用于单个位输入和输出。下例中的IN3是布尔输入。
q BYTE、WORD、DWORD:这些数据类型分别识别1、2或4个字节的无符号输入或输出参数。
q INT、DINT:这些数据类型分别识别
2或4个字节的有符号输入或输出参数。
图6--37 局部变量表q REAL:此数据类型识别单精度型(4字节)IEEE浮点数值。q STRING:此数据类型用作一个指向字符串的四字节指针。
q 功率流:布尔型功率流只允许位(布尔型)输入。该变量声明告诉STEP 7- Micro/WIN 32此输入参数是位逻辑指令组合的功率流结果。在局部变量表中布尔功率流输入必须出现在其他类型的 前面。只有输入参数可以这样使用。下例中的使能输入(EN)和IN1输入使用布尔逻辑。
实例:子程序调用 | |
以下有两个STL程序。个程序只能在STL编辑器中以STL的形式显示,因为用作功率流输入的BOOL参数没 有存储在L存储区中。 第二个程序能够在LAD和FBD编辑器中显示,因为使用了L存储器来存储用作功率流输入的BOOL输入参数。 | |
只能显示STL: Network 1 LD I0.0 CALL SBR_0,I0.1,VB10,I1.0,&VB100,*AC1, VD200 可以在LAD和FBD中正确显示: Network 1 LD I0.0 = L60.0 LD I0.1 = L63.7 LD L60.0 CALL SBR_0,L63.7,VB10,I1.0,&VB100,*AC1, VD200 |
地址参数(如IN4处的&VB100)以一个双字(无符号)的值传送到子程序。在带常数调用程序时必须指明 常数类型。例如,为了将一个数值为12,345的无符号双字常量作为参数传递,常量参数必须为
DW#12345。如果参数遗漏常量描述符,则该常量被视为一种不同的类型。
输入或输出参数上没有自动数据类型转换功能。例如,如果局部变量表明一个参数具有实型,而在调 用时使用一个双字,子程序中的值就是双字。
当给子程序传递值时,它们子程序的局部存储器中。局部变量表的左列是每个被传递参数的局 部存储器地址。当子程序调用时,输入参数值被拷贝到子程序的局部存储器。当子程序完成时,从局 部存储器区拷贝输出参数值到的输出参数地址。
数据单元的大小和类型用参数的代码表示。在子程序中局部存储器的参数值的分配如下所示:
q 按照子程序指令的调用顺序,参数值分别给局部存储器,起始地址是L0。
q 1到8连续位参数值分配一个字节,从Lx.0到Lx.7。
q 字节、字和双字值按照所需字节分配在局部存储器中(LBx、LWx或LDx)。
在带参数调用子程序指令中,参数必须按照一定顺序排列,输入参数在前面,其次是输入/输出参 数,然后是输出参数。
如果用语句表编程,CALL指令的格式是:
CALL子程序号,参数1,参数2,…,参数
M A I N | Network 1 //在首次扫描,调用初始化子程序0。LD SM0.1 CALL SBR_0 | |
S B R 0 | Network 1 //你可以使用条件返回指令在子程序 //结束之前返回。 LD M14.3 CRET Network 2 //如果M14.3接通,本段程序会被跳过。LD SM0.0 MOVB 10,VB0 |
实例:带字符串的子程序调用 | ||
该实例依据给定的输入,不同的字符串文字到单独的地址。字符串的单独地址被保存。然后通过使用间接 寻址,将字符串地址传递给子程序。子程序输入参数的数据类型是字符串。然后子程序字符串到不同 位置。 字符串文字也可以被传递给子程序。子程序内的字符串引用一直是相同的。 | ||
M A I N | Network 1 // LD I0.0 SSCPY “string1",VB100 AENO MOVD &VB100,VD0 Network2 // LD I0.1 SSCPY “string2",VB200 AENO MOVD &VB200,VD0 Network3 // LD I0.2 CALL SBR_0,*VD0 | |
S B R 0 | Network 1 // LD SM0.0 SSCPY *LD0,VB300 |
请输入账号
请输入密码
请输验证码
以上信息由企业自行提供,信息内容的真实性、准确性和合法性由相关企业负责,化工仪器网对此不承担任何保证责任。
温馨提示:为规避购买风险,建议您在购买产品前务必确认供应商资质及产品质量。