数据类型定义:
UDT1
数据块定义:
DB1:
...
DEV1: UDT1;
DEV2: UDT1;
...
DEVn:UDT1;
...
程序如下:
FUNCTION FC1
VAR_INPUT
Number : INT ; //要处理的记录数量
LEN :INT; //每个记录的字节长度
END_VAR
VAR_IN_OUT
FirstRec: UDT1;
//自己加的视窗
Ptr AT FirstRec : STRUCT
DBNum : WORD;
Addr : DWORD;
END_STRUCT;
END_VAR
VAR_TEMP
TempRec : UDT1;
i : INT ; //index for 'FOR' loop
END_VAR
//程序功能:逐个读入并写回
FOR i:=0 TO Number-1 DO
TempRec := FirstRec; //如何写才正确?使 Ptr.Addr 偏移一个记录,即 i*LEN*8
//逻辑处理部分
FirstRec :=TempRec;//问题同读入
END_FOR;
END_FUNCTION;
此程序读入记录部分编译后的代码如下,如何还原到SCL?
L #i
ITD
L L#960 //每个记录的偏移量LEN*8
*D
L P##FirstRec
LAR1
TAK
T LD 252
TAK
L W [AR1,P#0.0]
T LW 256
OPN DB [LW 256]
L D [AR1,P#2.0]
L LD 252
+D
LAR1
L D [AR1,P#0.0]
T #TempRec.Vrs //第一个DW
L P##FirstRec
LAR1
L W [AR1,P#0.0]
T LW 256
OPN DB [LW 256]
L D [AR1,P#2.0]
L LD 252
+D
LAR1
L D [AR1,P#4.0]
T LD 4 //第二个DW
L P##FirstRec
LAR1
L W [AR1,P#0.0]
T LW 256
OPN DB [LW 256]
L D [AR1,P#2.0]
L LD 252
+D
LAR1
L D [AR1,P#8.0]
T LD 8 //第三个DW,直到复制完成
期待你的指教,多谢!