想写一段程序,根据选择品种的不同,需要调用DB块中的不同地址区,赋值到一个特定的地址区。调用这部分使用指针写的,如下:
L#HMI_DB_NO
T#I_HMI_DB_NO
OPNDB[#I_HMI_DB_NO]
L#PLC_DB_NO
T#I_PLC_DB_NO
OPNDB[#I_PLC_DB_NO]
L#VARIETY_SERIES
L1
-I
L40
*I
SLD3
LAR1
LAR2P#DIX0.0
接下来我想把符合条件的数据块(40byte)赋值到制定位置,是否可以调用SFC20,如果可以,变量该如何赋值?试着写了几种形式,都提示错误。现在用的LOOP循环一个字一个字赋值的,想问还有没有更好的办法。
问题补充:
@艾星落尘:你程序中的ANY格式中间变量S1,S2在哪一部里被赋值的呢?我没有看出来。望指教。另外IN变量中指针的赋值是否需要赋值具体的地址(比如p#db1.dbx0.0)?
另外,我需要根据Vareity_series变量中赋予的不同的数值,在DB1中寻找对应的数组(数组长度为40byte),然后赋值到DB2中的地址区。这部分程序已经使用AR1和AR2指针了,如果定义ANY变量进行块赋值的话,是否不能再使用指针了?想让这些功能在一个FC内完成,不再嵌套FC,可以实现么?具体程序怎么写呢?初学指针,很多不清楚的地方。望大侠们不吝赐教。
最佳答案
可以,比如你可以在FC/fb的临时变量里新建2个ANY类型变量,自己对ANY进行分析和赋值就可以。
下面是STEP7的一个例子满足你要求
FUNCTioNFC10:VOID
VAR_TEMP
SourCE:ANY;
Target:ANY;
END_VAR
BEGIN
LAR1P#Source;
LB#16#10;
TLB[AR1,P#0.0];
LB#16#02;
TLB[AR1,P#1.0];
L10;
TLW[AR1,P#2.0];
L22;
TLW[AR1,P#4.0];
LP#DBX11.0;
TLD[AR1,P#6.0];
LAR1P#Target;
LB#16#10;
TLB[AR1,P#0.0];
LB#16#02;
TLB[AR1,P#1.0];
L10;
TLW[AR1,P#2.0];
L33;
TLW[AR1,P#4.0];
LP#DBX202.0;
TLD[AR1,P#6.0];
CALLSFC20(
SRCBLK:=Source,
RET_VAL:=MW12,
DSTBLK:=Target
);
END_FUNCTION
打开STEP7帮助文件搜索POINTER,,找到相关章节,见图1
提问者对于答案的评价:
两位都用了ANY,是一个启发,谢谢
专家置评
已阅,最佳答案正确。