大家好!
对一个老外编写的FC块有疑问,疑问如下:
在该FC的TEMP区域定义了两个临时变量 BufferAR1, BufferAR1 这两个变量在程序开始的地方NW1
进行了如下红色字体的操作 TAR1/2 在程序段4进行了LAR1/2的操作 ,那么这里有一个疑问,TEMP数据地址没有先赋值就使用这样是什么情况? 完整的程序代码如下 请各位看一看 这个BufferAR1 BufferAR2在程序中的使用目的是什么?
备注:我在该FC对 BufferAR1 BufferAR2 进行了//注释掉,也就是不使用这两条指令,进行了仿真,好像也可以达到同样的效果,请大家说说吧!!
VAR_INPUT
Data_DB : BLOCK_DB ; //Area_Selection_DB
Number_Of_Buttons : INT ; //Number of buttons on screen - Loop counter
Job : INT ; //1=FeedP,2=MixP,3=MixD,4=RecastP,5=RecastD,6=StackP,7=StackD
Check_Prohibited_areas : BOOL ; //"1" means check prohibited areas
END_VAR
VAR_IN_OUT
Set_Button : BOOL ; //Set-button from panel
END_VAR
VAR_TEMP
Loop_counter1 : INT ;
Loop_counter2 : INT ;
Loop_counter3 : INT ;
Loop_counter4 : INT ;
Job_area_temp : INT ;
Prohibited_area_temp : INT ;
BufferAR1 : DWORD ; //在这里定义了临时数据区
BufferAR2 : DWORD ; //在这里定义了临时数据区
END_VAR
BEGIN
NETWORK 1
TITLE =Reset old selection
AN #Set_Button;
JC end;
TAR1 #BufferAR1; //第一次在这里使用了TAR1
TAR2 #BufferAR2; //第一次在这里使用了TAR2
L #Job;
L 1;
-I ;
T #Job_area_temp;
L #Job;
L 1;
-I ;
T #Prohibited_area_temp;
NETWORK 2
TITLE =Set new selection to DB
L P#0.0;
LAR1 ;
L #Job_area_temp;
+D ;
LAR1 ;
L P#0.0;
LAR2 ;
L 7;
+D ;
LAR2 ;
//Search 1 from button pointer and if 1 then transfer to job pointer
L #Number_Of_Buttons;
loo2: T #Loop_counter2;
OPN #Data_DB;
A DBX [AR2,P#0.0];
JCN job;
S DBX [AR1,P#0.0];
job: NOP 0;
L P#2.0;
+AR1 ;
L P#2.0;
+AR2 ;
L #Loop_counter2;
LOOP loo2;
NOP 0;
NETWORK 3
TITLE =Check prohibited area
AN #Check_Prohibited_areas;
JC bln; //jump End of the network
L P#0.0; //introduce a pointer 1
LAR1 ;
L #Job_area_temp;
+D ;
LAR1 ;
L P#DBX 1.0; //introduce a pointer 2
LAR2 ;
L #Prohibited_area_temp;
+D ;
LAR2 ;
//Search 1 from button pointer and if 1 then transfer to job pointer
L #Number_Of_Buttons;
loo4: T #Loop_counter4;
A DBX [AR2,P#0.0];
JCN job1;
R DBX [AR1,P#0.0];
job1: NOP 0;
L P#2.0;
+AR1 ;
L P#2.0;
+AR2 ;
L #Loop_counter4;
LOOP loo4;
NOP 0;
bln: NOP 0;
NETWORK 4
TITLE =Clear buttons
OPN #Data_DB;
L P#0.0; //introduce a pointer 1
LAR1 ;
L 7;
+D ;
LAR1 ;
L #Number_Of_Buttons;
loo3: T #Loop_counter3;
R DBX [AR1,P#0.0]; //reset pointer 1
L P#2.0;
+AR1 ;
L #Loop_counter3;
LOOP loo3;
LAR1 #BufferAR1; //第二次在这里使用了LAR1
LAR2 #BufferAR2;//第二次在这里使用了LAR2
end: NOP 0;
R #Set_Button;
END_FUNCTION