请教一段FC块调用的代码

在一个FB块中,调用一段FC块,其中的代码如下:
FB:
      A     L     14.3
      JNB   M00b
      Call
      BLD   1
      =     L     15.0
      L     #IN1
      T     LD    16
      UC    FC   202
            P#M 203.0
            P#L 16.0
      BLD   2
      End Call
M00b:NOP  0

FC:
   L     #IN1
      LAR1  
      L     #IN0
      T     PQB [AR1,P#1.0]

我的问题是:
1、块调用的形参表达方式,是指针的吗?为什么不直接用(注:FC202的形参IN0:BYTE;IN1:DINT):
UC   FC   202
        IN0:MB203
        IN1:#IN1
2、调用FC块的形参输送,与FC块的内容有无关系?

问题补充:
附图增加了FB、FC的参数传递的类型。
从FC的程序中很容易看出,#IN1是作为指针在用(类型为DINT),#IN0是作为整数数值在用。
在FB的程序中,#IN1的类型是DINT,装载给LD16,最后赋给FC的#IN1,也可以理解为用于指针。
但FC的#IN0是INT的类型,不可能用于指针,因此它的参数传递用P#M203.0表达,我有点理解不了
而且P#M203.0,P#L16.0在用于梯形图中,语法通过不了。

图片说明:

请教一段FC块调用的代码    请教一段FC块调用的代码    请教一段FC块调用的代码    请教一段FC块调用的代码   

最佳答案

那里的程序,FB200好像有问题。
 UC    FC   202
            P#M 203.0
            P#L 16.0
块调用不是形参表达方式,是指针,有时用指针方便。可以不用指针,看起来更容易读。
FC   202
        IN0:MB203
        IN1:#IN1
调用FC块的形参输送,与FC块的内容有关系。
P#M203.0,P#L16.0在用于梯形图中,语法通过不了是指针地址中的数据种类不对。

提问者对于答案的评价:
本来我想把问题关闭的,但觉得大家辛苦的回答,也算作为一个案例摆着这里,供大家感兴趣的人学习一下。
程序是目前设备中使用的,我上载之后发现有若干的问题,所以来咨询。
我下一步可能要做的,是详细了解一下FC块调用的参数传递,另外,想把FC的IN0和IN1的数据类型设置成POINTER试试。
如果谁有与这相关的资料或知识点,希望能共享给我,发站内邮件,期待与大家的交流。非常感谢~

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2018年12月1日 下午10:46
下一篇 2018年12月1日 下午10:46

相关推荐