回复:在子程序调用时,如果突然停止调用,out类型的接口变量的值怎么变化?

芳季

西门子1847工业学习平台

  • 帖子

    15774
  • 精华

    102
  • 被关注

    984

论坛等级:至圣

注册时间:2007-08-03

钻石 钻石 如何晋级?

发布于 2019-08-20 15:17:19

7楼

展开查看
以下是引用Z雨生在2019-08-20 11:06:47的发言 >5楼

这个概念以后还真得好好去理解下,如果不想在停止调用子程序时出现输出保持、数据危险这样一种情况,有什么好办法可以避免,芳季大师能否指点一二。

以下是引用芳季在2019-08-20 07:17:00的发言 >4楼:好像也不是这个意思...

引用4楼详细内容:

好像也不是这个意思。out变量是没有初始值的,就等同一个没有执行的mov指令的输出端一样。你分析这个问题完全可以用mov来等价一个子程序。我又想说那句话了。

而你那Q线圈,子程序里面是由线圈驱动,有确定的值的。mov则无。这是区别。而不是布尔量的区别。

OUT变量是在运行过程中产生结果然后输出,在没有运行的时候,我是指子程序有调用,但是子程序里面的某

movw vw0 lw0-------假设lw0是一个out变量

指令没有执行。那么子程序结束的时候还是要给一个值给out变量交差的。这个时候哪来的值了。这个lw0较早前谁使用过,就留着了那个时候的值了。

如果当前唯有这个子程序使用过lw0,那么就会遗留着子程序上次调用时候的值。感觉好像是值被保留下来了。这就是很多人调用一次子程序可以用,调用两次,第二个就不能用了,的原因。

如果当前有多个其他子程序也使用了这个lw0,那么谁用过它,那就天知道了。所以这个时候感觉这个out变量就乱了。

用in/out变量解决。把保存的责任传到端口外的参数负责。如果这个参数也是一个外层子程序的in/out参数,那么外层就再传到更外层的父级程序负责。就像你这两级调用的情况。直至到外围遇到有全局(或者独享的变量)变量愿意装载这个变量,而不会受到别的影响。

这样,变量才得以保存下来。

评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200 SMART

共有9336条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。