西门子带参数的子程序中的几个问题

1.是不是子程序变量表里的temp数据类型才是临时变量?而输入接口IN,输出接口out,输入输出接口IN_out是局部变量。只有temp临时变量才遵循先赋值再使用的原则?而接口区的局部变量不用赋值外使用。
2.先赋值在使用的方法是怎么样操作?我在主程序调用这个带参的子程序3次。想程序不乱的话,是不是我在子程序的IN接口区必须要输入一个初始化脉冲,把子程序里temp临时变量中的word和int的数据类型的用mov指令赋零。temp临时变量中的booL数据用R指令复位。。还有IN接口区的L0.0 ,L0.1这些booL量,也需要先赋值再使用吗?还是不用管它。
3.在带参数程序的子程序里,可以用SM0.5做一个定时器,建成库再子程序里调用吗?定时器用的是INC指令,然后比较设定时间。到了就输出。就是不知道,这种自制的定时器在子程序里,定时器设定时间和当前时间可以用temp数据类型吗?还是要做到接口区用in_out?
还是只要先赋值了再使用,用temp临时变量里的INT数据类型也可以。
问题很多,劳驾。

问题补充:
200smart的PLC,带参数的子程序咋这么难。感觉一点都不好用。10个工位啊,不然要写一堆程序。

最佳答案

1.是不是子程序变量表里的temp数据类型才是临时变量?而输入接口IN,输出接口out,输入输出接口IN_out是局部变量。只有temp临时变量才遵循先赋值再使用的原则?而接口区的局部变量不用赋值外使用。
答:所有L都是局部变量。in out都是使用局部变量的。in是进入子程序前系统帮你把这个L写成in进来的值。out是离开子程序之后系统帮你把结果写去out这个参数。这是系统仅仅帮你做的一点事情,没有多余的事情。

2.先赋值在使用的方法是怎么样操作?我在主程序调用这个带参的子程序3次。想程序不乱的话,是不是我在子程序的IN接口区必须要输入一个初始化脉冲,把子程序里temp临时变量中的word和int的数据类型的用mov指令赋零。temp临时变量中的booL数据用R指令复位。。还有IN接口区的L0.0 ,L0.1这些booL量,也需要先赋值再使用吗?还是不用管它。
答:L须先有确定的值,才开始使用。in参数系统帮你确定了值,这是一种方法,用户程序写入值是另外一种方法。初始化的意图不是就是写0,而是写入希望的值。例如计数,写入的当然是希望是上次计数计到的那个值,然后现在在这个值上增加,而不是每次都从0开始增加。你要知道R指令在off的时候值不变,不变就是不确定结果是什么,仅仅说不变,原来是0就是0原来是1就是1,那就是说没有确定,所以R指令经常是行不通的。输入参数系统帮你定了。

3.在带参数程序的子程序里,可以用SM0.5做一个定时器,建成库再子程序里调用吗?定时器用的是INC指令,然后比较设定时间。到了就输出。就是不知道,这种自制的定时器在子程序里,定时器设定时间和当前时间可以用temp数据类型吗?还是要做到接口区用in_out?
还是只要先赋值了再使用,用temp临时变量里的INT数据类型也可以。
答:计时器当然要从确定的值往上加,用什么都可以,关键是用第一那里的两种方法之一确定下来。
子程序计时器我建议使用IBtime和ICtime两个指令读取系统公共时间轴来计算时间。因为用0.5你一定涉及到边缘。可多次调用的子程序是不可以使用边缘的。那么又寄生出另一个问题了。

提问者对于答案的评价:

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc288535.html

(1)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年10月30日 下午11:59
下一篇 2020年10月30日 下午11:59

相关推荐