FUNCTION "ATT" : VOID
TITLE =
KNOW_HOW_PROTECT
VERSION : 0.1
VAR_INPUT
LEN_DAT : REAL ;
END_VAR
VAR_TEMP
TBL_MAX : DINT ;
TBL_CNT : DINT ;
LOOP_CNT : DINT ;
TBL_TBL : DINT ;
END_VAR
BEGIN
NETWORK
TITLE =
L "CAL_DB".MAX_LEN;
T #TBL_MAX;
L "CAL_DB".CUR_LEN;
T #TBL_CNT;
L #TBL_MAX;
>=D ;
JC K001;
OPN "CAL_DB";
LAR1 P#DBX 8.0;
L #TBL_CNT;
L L#4;
*D ;
SLD 3;
+AR1 ;
L #LEN_DAT;
T D [AR1,P#0.0];
L #TBL_CNT;
L L#1;
+D ;
T "CAL_DB".CUR_LEN;
BEU ;
K001: L #TBL_MAX;
L L#1;
-D ;
T #TBL_TBL;
L L#0;
T #LOOP_CNT;
OPN "CAL_DB";
LAR1 P#DBX 8.0;
K002: L D [AR1,P#4.0];
T D [AR1,P#0.0];
L #LOOP_CNT;
L L#1;
+D ;
T #LOOP_CNT;
L #TBL_TBL;
>=D ;
JC K003;
+AR1 P#4.0;
JU K002;
K003: L #LEN_DAT;
T D [AR1,P#4.0];
END_FUNCTION
你知道这段程序是干什么的?
先考你,是否值。
FUNCTION FC 1 : VOID
TITLE =
//THE FUNCTION WORKS FOR STORE DATE ONE BY ONE INTO DB,#CUR_LEN WORKS AS POINTER,
//UNTIL GOTO THE LAST, THEN SHIFE ONE UPWARDS, STORE #LEN_DAT INTO THE LAST
//POSITION
VERSION : 0.1
VAR_INPUT
LEN_DAT : REAL ;
END_VAR
VAR_TEMP
TBL_MAX : DINT ;
TBL_CNT : DINT ;
LOOP_CNT : DINT ;
TBL_TBL : DINT ;
END_VAR
BEGIN
NETWORK
TITLE =
L "CAL_DB".MAX_LEN; //GUESS MAX_LEN AT DBD0
T #TBL_MAX;
L "CAL_DB".CUR_LEN; //CUR_LEN AT DBD4
T #TBL_CNT;
L #TBL_MAX;
>=D ;
JC K001;
//START FROM DBD8, STORE DATE
OPN "CAL_DB";
LAR1 P#DBX 8.0; //START ADDRESS AT DB.DBX8.0
L #TBL_CNT;
L L#4; //DATE 4 BYTE
*D ;
SLD 3; //TYPICAL ABS ADDRESS ACCESS
+AR1 ;
L #LEN_DAT;
T D [AR1,P#0.0];
L #TBL_CNT;
+ 1;
T "CAL_DB".CUR_LEN;
BEU ;
K001: L #TBL_MAX;
+ -1;
T #TBL_TBL;
L L#0;
T #LOOP_CNT;
OPN "CAL_DB";
LAR1 P#DBX 8.0;
K002: L D [AR1,P#4.0]; //SHIFT UP
T D [AR1,P#0.0];
L #LOOP_CNT;
+ 1;
T #LOOP_CNT;
L #TBL_TBL;
>=D ;
JC K003;
+AR1 P#4.0;
JU K002;
K003: L #LEN_DAT; //READ LEN_DAT
T D [AR1,P#4.0]; //WRITE TO THE LAST
BE ;
END_FUNCTION
using FB is better than FC for this small program, although. If there were something I not understand,and also I can not code by myself, you can say i am stupid. otherwise the program is lousy.
forgot one thing, if you want to check some DB/DX, call like this, hope can help to understand
L KY 1,100 //DX 100, 1 FOR DX, 0 FOR DB
JU FB222
BEC //WHY BEC GUESS
T FD250 //ABS ADDRESS OF DB/DX
TAK
T FW248// LENGTH OF DB/DX