网站标志
导航菜单
当前日期时间
当前时间:
购物车
购物车中有 0 件商品 去结算 我的订单
商品搜索
商品搜索:
文章正文
西门子S7-200子程序出现问题的原因
作者:管理员    发布于:2015-05-31 14:25:21    文字:【】【】【
 在OB1中两次调用上一个日志中的子程序SBR_0,在运行程序时发现,接通I0.0外接的小开关,Q0.0和Q0.1同时变为ON。这是因为分配给SBR_0的输出参数“电动机”的地址为L0.2,第一次调用SBR_0之后,L0.2的值为ON。第二次调用SBR_0时,虽然起动按钮I0.2为OFF,但是因为两次调用SBR_0时局部变量区是公用的,此时输出参数“电动机”(L0.2)仍然为ON,所以第二次调用SBR_0之后,由于执行图4-40中的程序,输出参数“电动机”使Q0.1为ON。子程序的局部变量一定要遵循“先赋值后使用”的原则。
 S7-200的子程序使用临时变量来传递参数,OUT类型的参数不会把实参读入形参,所以这里使用OUT形参的触点就出现了临时变量未赋值先使用的情况。将输出参数“电动机”的变量类型改为IN_OUT就可以解决上述问题。这是因为两次调用子程序,参数“电动机”返回的运算结果分别用Q0.0和Q0.1保存,在第二次调用子程序SBR_0,执行“O  #电动机”指令时,因为“电动机”是IN_OUT参数,使用的是前一个扫描周期保存到Q0.1的值,与本扫描周期第一次调用子程序后参数“电动机”的值无关。
 简单地说,对于有记忆功能的电路,需要用存储单元来保存要记忆的变量值。S7-300的FB可以用静态变量来保存,而S7-200的子程序没有静态变量,只有用IN_OUT变量的实参(本例中的Q0.1)来保存变量值。
浏览 (71) | 评论 (0) | 评分(0) | 支持(0) | 反对(0) | 发布人:管理员
将本文加入收藏夹
新闻详情
脚注栏目
|
脚注信息
机电工程网(C) 2015-2020 All Rights Reserved.    联系我们