西门子伺服电机广州授权代理商
- 供应商
- 浔之漫智控技术(上海)有限公司
- 认证
- 品牌
- 西门子
- 型号
- 全系列
- 产地
- 德国
- 联系电话
- 13564949816
- 全国服务热线
- 13564949816
- 销售经理
- 王华
- 所在地
- 上海市松江区广富林路4855弄大业领地88号3楼
- 更新时间
- 2025-04-17 08:20
西门子伺服电机广州授权代理商
西门子伺服电机广州授权代理商
plc子程序与子程序指令
子程序
在编程时经常会遇到相同的程序段需要多次执行的情况,如图6-39所示,程序段a要执行两次,编程时要写两段相同的程序段,这样比较麻烦。解决这个问题的方法是将需要多次执行的程序段从主程序中分离出来,单独写成一个程序,这个程序称为子程序,然后在主程序相应的位置进行子程序调用即可。
两种程序结构
在编写复杂的plc程序时,可以将全部的控制功能划分为几个功能块,每个功能块的控制功能可用子程序来实现,这样会使整个程序的结构清晰简单,易于调试、查找错误和维护。
子程序指令
子程序指令有两条:子程序调用指令(call)和子程序条件返回指令(cret)。
1.指令说明
子程序指令使用要点:cret指令多用于子程序内部,该指令是否执行取决于它前面的条件,该指令执行的结果是结束当前的子程序返回调用程序。子程序允许嵌套使用,即在一个子程序内部可以调用另一个子程序,但子程序的嵌套深度*多为9级。当子程序在一个扫描周期内被多次调用时,在子程序中不能使用上升沿、下降沿、定时器和计数器指令。在子程序中不能使用end(结束)指令。
2.子程序的建立
编写子程序要在编程软件中进行,打开step7-micro/winsmart编程软件,在程序编辑器上方有“main(主程序)”“sbr_0(子程序)”“int_0(中断程序)”三个标签,默认打开主程序编辑器。单击“sbr_0”标签即可切换到子程序编辑器,在下面的编缉器中可以编写名称为“sbr_0”的子程序。另外,在项目指令树区域双击“程序块”内的“sbr_0”,也可以在右边切换到子程序编辑器。
1.参数的输入
子程序调用指令默认是不带参数的,也无法在指令梯形图符号上直接输入参数,使用子程序编辑器下方的变量表可给子程序调用指令设置参数。
子程序调用指令参数的设置方法是:打打开step 7-micro/winsmart编程软件,单击程序编辑器上方的“sbr_0”标签,切换到sbr_0子程序编辑器,在编辑器下方有一个空变量表;如果变量表被关闭,可执行菜单命令“视图”→“组件”→“变量表”打开变量表,在变量表内填写输入、输出参数的符号并选择数据类型。输入型参数要填写在变量类型为in的行内,输入/输出型参数要填写在变量类型为in_out类型的行内,输出型参数要填写在变量类型为out的行内,表中参数的地址lb0、lb1等是自动生成的。在变量表的左上角有“插入行”和“删除行”两个工具,可以对变量表进行插入行和删除行操作。变量表填写后,切换到主程序编辑器,在主程序中输入子程序调用指令,该子程序调用指令自动按变量表生成输入/输出参数。
子程序调用指令参数的设置
2.指令参数说明
子程序调用指令*多可以设置16个参数,每个参数包括变量名(又称符号)、变量类型、数据类型和注释四部分,注释部分不是必需的。
1)变量名
变量名在局部变量表中称作符号,它需要直接输入,变量名*多可用23个字符表示,并且第一个字符不能为数字。
2)变量类型
变量类型是根据参数传递方向来划分的,它可分为四种类型:in(传入子程序)、in_out(传入和传出子程序)、out(传出子程序)和temp(暂变量)。参数的四种变量类型详细说明。
参数的四种变量类型详细说明
3)数据类型
参数的数据类型有布尔型(bool)、字节型(byte)、字型(word)、双字型(dword)、整数型(int)、双整数型(dint)、实数型(real)和字符型(string)。
3.指令使用注意事项
在使用带参数子程序调用指令时,要注意以下事项。常数参数必须指明数据类型。例如,输入一个无符号双字常数12345时,该常数必须指定为dw#12345,如果遗漏常数的数据类型,该常数可能会当作不同的类型使用。输入或输出参数没有自动数据类型转换功能。例如,局部变量表明一个参数为实数型,而在调用时使用一个双字,子程序中的值就是双字。在带参数调用的子程序指令中,参数必须按照一定顺序排列,参数排列顺序依次是:输入、输入/输出、输出和暂变量。如果用语句表编程,call指令的格式是:
call 子程序号,参数1,参数2,…,参数n
4.指令使用举例
程序执行过程为:在主程序中,常on触点sm0.0处于闭合状态,首先执行第一个带参数子程序调用指令,转入执行子程序,同时将vw0单元中的数据作为x值传入子程序的lw0单元(局部变量存储器)。在子程序中,add_i指令先将lw0中的值+20,结果存入lw10中;然后mul_i指令将lw10中的值×3,结果存入lw12中;div_i指令再将lw12中的值÷8,结果存入lw2中;*后子程序结束返回主程序,同时子程序lw2中的数据作为y值被传入主程序的vw10单元中。子程序返回主程序后,接着执行主程序中的第二个带参数子程序调用指令,又将vw2中的数据作为x值传入子程序进行(x+20)×3÷8运算,运算结果作为y值返回到vw20单元中。