sfc20,blkmov是否可以使用指针地址

想写一段程序,根据选择品种的不同,需要调用DB块中的不同地址区,赋值到一个特定的地址区。调用这部分使用指针写的,如下:
L #HMI_DB_NO
T #I_HMI_DB_NO
OPN DB[#I_HMI_DB_NO]

L #PLC_DB_NO
T #I_PLC_DB_NO
OPN DB[#I_PLC_DB_NO]

L #VARIETY_SERIES
L 1
-I
L 40
*I
SLD 3
LAR1
LAR2 P#DIX0.0
接下来我想把符合条件的数据块(40 byte)赋值到制定位置,是否可以调用SFC20,如果可以,变量该如何赋值?试着写了几种形式,都提示错误。现在用的LOOP循环一个字一个字赋值的,想问还有没有更好的办法。

问题补充:
@艾星落尘:你程序中的ANY格式中间变量S1,S2在哪一部里被赋值的呢?我没有看出来。望指教。另外IN变量中指针的赋值是否需要赋值具体的地址(比如p#db1.dbx0.0)?

另外,我需要根据Vareity_series变量中赋予的不同的数值,在DB1中寻找对应的数组(数组长度为40 byte),然后赋值到DB2中的地址区。这部分程序已经使用AR1和AR2指针了,如果定义ANY变量进行块赋值的话,是否不能再使用指针了?想让这些功能在一个FC内完成,不再嵌套FC,可以实现么?具体程序怎么写呢?初学指针,很多不清楚的地方。望大侠们不吝赐教。

最佳答案

可以,比如 你可以在 FC/FB的 临时变量 里 新建2个 ANY 类型变量,自己 对 ANY 进行分析和赋值就可以。
下面是STEP7的一个例子 满足你要求
FUNCTION FC10: VOID
VAR_TEMP
Source : ANY;
Target : ANY;
END_VAR
BEGIN
LAR1 P#Source;
 L  B#16#10;
T LB[AR1,P#0.0]; 
 
L B#16#02;
T LB[AR1,P#1.0]; 
 
L 10;
T LW[AR1,P#2.0]; 
 
L 22;
T LW[AR1,P#4.0]; 
L P#DBX11.0;
T LD[AR1,P#6.0]; 
 
LAR1 P#Target;
 
L  B#16#10;
T LB[AR1,P#0.0]; 
 
L B#16#02;
T LB[AR1,P#1.0]; 
 
L 10;
T LW[AR1,P#2.0]; 
 
L 33;
T LW[AR1,P#4.0];
L P#DBX202.0;
T LD[AR1,P#6.0]; 
 
CALL SFC 20 (
SRCBLK := Source,
RET_VAL := MW 12,
DSTBLK := Target
);

END_FUNCTION
打开STEP7 帮助 文件搜索 POINTER ,,找到相关章节 ,见图1

提问者对于答案的评价:
两位都用了ANY,是一个启发,谢谢

专家置评

已阅,最佳答案正确。

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

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

相关推荐