求助:西门子PLC S7 在OB1调用FC时的参数传递问题 点击:686 | 回复:1



北欧维京海盗

    
  • 精华:0帖
  • 求助:9帖
  • 帖子:13帖 | 94回
  • 年度积分:306
  • 历史总积分:516
  • 注册:2014年12月20日
发表于:2014-12-23 20:37:04
楼主

我在看一个视频得时候,他讲到了用主程序调用功能时候的一个问题。
他在写一个功能FC的时候,定义了两个定时器的形式参数 timer1和 timer2 ,这两个形式参数 timer1和 timer2的数据接口类型都为 IN 形 ,如下图所示

在这两形参 timer1和 timer2 中都定义了时间。然后他在写主程序 OB1 的时候,为这两个形参 timer1和 timer2 分配了两个实参 T20 和T21。如下图所示

但是在OB1里面定义了这两个实参后,他并没有对 OB1 中的这两个实参 T20 和 T21 赋值,或通过程序赋值(比如说利用 MOV 指令来赋值)。然后,当他把程序下载到仿真器里面去的时候,定时器的运行是正常的的。如果 OB1 里面的实参 T20 和 T21 在没有初始值的时候是不是应该为0?如果是这样的话,那么在向 FC 传递参数的时候不是把0传递给了形参 timer1 和 timer2 了吗?但是他在仿真器里面运行的时候定时器的时间值却是正常的。请问这个该怎么理解?
我的理解是在OB1调用FC时,只能先从OB1里面的实参向FC里面的形参传递数据,而他这个例子是现在FC里面先定义了形参 timer1 和 timer2 的时间值(接口参数均为输入 IN 形),然后再在OB1里面的给它对应的管脚分配一个实参T20和T21地址。实参 T20 和 T21 没有被赋初值(初值为0),而形参 timer1 和 timer2 的数据不为0(定时数据是他在编写FC 的时候设定的)这不是与 实参向形参传递参数相矛盾了吗? 
请说明这个问题该怎么理解,如果有图最好附上图来讲解,谢谢!!




非凡2013

  • 精华:0帖
  • 求助:54帖
  • 帖子:64帖 | 350回
  • 年度积分:3
  • 历史总积分:1036
  • 注册:2013年6月17日
发表于:2014-12-24 09:24:17
1楼

定时器运行了,那么t20 t21就会有值  也就会把值传递给形参了。

你可以试试程序运行时禁止定时器运行,看看形参还会有值吗?


热门招聘
相关主题

官方公众号

智造工程师