在一个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在用于梯形图中,语法通过不了。
图片说明:
最佳答案
那里的程序,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