西门子s7-200子程序运行问题

作者:老电工时间:2015-10-21 09:44:33

西门子s7-200子程序运行问题

在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)来保存变量值。

本站仅提供信息发布平台,文章仅代表作者个人观点。

猜你喜欢

首页 > plc > 西门子plc