在Step7 MicroWIN当中子程序嵌套子程序时,临时变量是否会有冲突?

问题1:如题。
举例:
在子程序1当中,将网络1的计算结果存入LD4以备后用。
在网络2中嵌套了另一个子程序2,这个子程序当中也使用到了LD4。
然后在子程序1的网络3中,我使用LD4进行其他的计算。

请问,网络3当中的LD4的值是子程序1网络1当中保存的那个值,还是在子程序2的运算当中保存的值?或者根本就是一个被释放的状态?(看到有人说子程序运行完之后,LD的存储区会被完全释放,结果应该都是0)

如果子程序1网络3当中的LD4值不是子程序1网络1的计算结果,那我要怎么才能实现子程序当中的子程序嵌套,才能规避这种地址冲突?
1、把LD4设置成IN/OUT类型给外部保存?可是我的L区地址不大够用了啊。。。
2、把子程序2做成库,然后在使用这个库的时候,给他专门指定内存区域?可是即使指定了专门区域,这个库文件里面的代码还是LD4啊。。。会不会仍有冲突?

问题2:
如何在子程序中实现类似PID回路表那样的,用一个临时变量标定多个外部变量地址。
例如:在子程序中,IN值的地址是VB100,然后我需要13个B或者W或者D类的变量,但我又不想占用太多L区临时变量名额。所以用了类似PID回路表那样的方法,将VB100后面的若干空间直接定义给子程序使用?

我猜一定用到了指针,但具体怎么用我还说不上来。还请大侠详细说明。

最佳答案

楼主描述了许多,但他人对楼主的程序尚不能了解。在此只能转帖一些注意事项供参考:
1、带形式参数的子程序,定义为OUT类型的变量为何会在多次调用子程序时互相干扰?
那是因为定义为 OUT 类型的形式参数并非每次调用子程序时在其内部都有确定的赋值操作。可以将此类参数定义为 IN_OUT 类型,或者确保在每次调用子程序时都有赋值操作。
2、注意S7-200:
、子程序可以嵌套调用,即子程序中再调用子程序,一共可以嵌套8层 。
、子程序在调用时会保持当前的逻辑运算结果,但是不保存累加器(ACx)的内容 。
、子程序在执行到末尾时自动返回,不必加返回指令;在子程序中间也可以使用条件返回指令 
子程序不能使用跳转语句跳入、跳出 。
、子程序返回时,回到调用子程序的指令后面,继续执行上一级程序 。
、S7-200 CPU最多可以调用64个子程序(CPU226为128个)。 
、在中断服务程序中不能欠套调用子程序,被中断服务程序调用的子程序中不能再出现子程序调用 。
、子程序可以带参数调用,在子程序的局部变量表中设置参数的类型;一共可以带16个参数(形式参数)。 
3、使用子程序时,为何动作只能执行一次,或者某些状态不能结束?
如果发生动作不能重复执行,或者状态不能结束(像锁死了一样),而这些功能都与子程序有关时,请检查是否有条件调用子程序。调用子程序的条件在上述动作执行后,或者进入某个状态后不再有效,无法再次“激活”,而脱离上述状态或复位的指令正好在子程序内,必然造成上述的现象。

提问者对于答案的评价:
谢谢老师指点。

专家置评

已阅,最佳答案正确。

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年10月31日
下一篇 2020年10月31日

相关推荐

  • S7-200S7-200停电后可继续工作时间

    S7-200停电后可维持多长时间正常工作?我的系统需维持5秒以上,请问是否可以?加UPS不停点电源是否可以?后备型与在线型那种好,之间是否需加隔离变压器?请给予详细指导。 最佳答案…

    SIMATIC S7-200 2021年7月5日
  • 怎样选存储卡?

    我做了程序,是S7-200 224XP CPU,现在我想知道自己的程序有多大?在哪里看?选多大的存储卡?谢谢 最佳答案 在编译栏中,程序编译后在那有程序的大小。…

    SIMATIC S7-200 2021年7月5日
  • 求助:S7-200子程序中定时器问题

    现在有几组相同控制要求的泵,需要写个子程序,在主程序中这几组泵同时调用这个子程序。现在有一个问题:在子程序中需要使用到定时器计时,而每个定时器都有一个具体的地址,要是几组泵同时调用…

    SIMATIC S7-200 2021年7月5日
  • 模拟量 和 scale

    在200中,有不少模拟量的输入和输出.俺对模拟量的编不精通(主要是对数据格式不太了解). 所以就直接引用了西门子专家做的模拟量库scale.只是简单的引用:ISH:320…

    SIMATIC S7-200 2021年7月5日
  • S7 200 SMART stl lad 问题

    200 SMART 的一个项目中,有的程序块用LAD,有些程序块用STL,就像S7 300一样,可以做到吗?怎么设定? 最佳答案 可以的,不过如果你用…

    2021年7月5日
  • 各位老师,s7-200自由口通信缓冲区的首地址vb100的字节数怎么不是接收或发送的字节数?

    s7-200自由口通信缓冲区的首地址vb100的字节数为什么在监控的时候是零?校验码FF 数据区16#12 34 56 78, 异…

    SIMATIC S7-200 2021年7月5日
  • 200的计算问题?

    有条皮带,带动皮带的电机上装了一个编码器,首先启动皮带,然后在皮带上放块板压住一个开关也就是I0.3通,由编码器此时算出板走的距离,当到达设定的距离时候Q0.0为1,当第一块板还没…

    SIMATIC S7-200 2021年7月5日
  • 中断程序请教

    中断程序始终理解不透彻。请师傅们帮忙。最好能用筒单的例子来说明。多谢了!!! 问题补充:能不能举一个简单例子加以说明呀!!!比如I\O中断.怎样中断的?中断后又怎样执行中断程序的?…

    SIMATIC S7-200 2021年7月5日
  • s7200用位置控制向导控制步进或伺服电机问题

    小弟刚接触步进电机,求位置控制向导的简单程序,最好能有正反转的。c—pos表示的是输出脉冲么?请大神指点 钻石用户推荐最佳答案 c—pos表示发送的脉冲数量 提问者对于答案的评价:

    SIMATIC S7-200 2021年7月5日
  • s7200 plc断电后无法保存hitech触摸屏设定的参数。

    系统的s7200的plc和hitech触摸屏连接,之前已经正常使用了5年,最近一次,因为系统中一24VDC的高速计数器短路,造成整个系统的24VDC保险丝烧毁,解决好短路问题,换好…

    SIMATIC S7-200 2020年11月1日