DATA_BLOCK DB 210
TITLE =
VERSION : 0.1
STRUCT
String_1 : STRING [10 ];
END_STRUCT ;
BEGIN
String_1 := '';
END_DATA_BLOCK
FUNCTION FC 210 : VOID
TITLE =
VERSION : 0.1
VAR_INPUT
ZahlINT : INT ;
ZahlDINT : DINT ;
AdrString : ANY ;
END_VAR
VAR_OUTPUT
ASCIIDWORD : DWORD ;
END_VAR
VAR_TEMP
Integer : INT ;
Dekade1 : BYTE ;
Dekade2 : BYTE ;
Dekade3 : BYTE ;
Dekade4 : BYTE ;
TempString : STRING [10 ];
RetVal : INT ;
OutStringAny : ANY ;
SAVE_VKE : BOOL ;
RETTAR1 : DWORD ;
RETTAR2 : DWORD ;
END_VAR
BEGIN
NETWORK
TITLE =Sichere VKE im BIE
SET ;
SAVE ;
= #SAVE_VKE;
NETWORK
TITLE =Adtressregister retten
TAR1 #RETTAR1;
TAR2 #RETTAR2;
NETWORK
TITLE =ich würde das in etwa so machen
L P##TempString;
LAR1 ;
//Stringkopf vorbelegen
L 10;
T B [AR1,P#0.0];
L 0;
T B [AR1,P#1.0];
//mit Leerzeichen vorbelegen
L W#16#20;
T B [AR1,P#2.0];
T B [AR1,P#3.0];
T B [AR1,P#4.0];
T B [AR1,P#5.0];
T B [AR1,P#6.0];
T B [AR1,P#7.0];
T B [AR1,P#8.0];
T B [AR1,P#9.0];
T B [AR1,P#10.0];
T B [AR1,P#11.0];
T B [AR1,P#12.0];
//String wandeln mit FC5 aus den IEC Functions der Standard-Library (DI_STRNG)
CALL FC 5 (
I := #ZahlDINT,
RET_VAL := #TempString);
//Adressen laden
L P##AdrString;
LAR1 ;
L P##OutStringAny;
LAR2 ;
//Zeiger umkopierenm da ma Blockmove DSTBLK keinen String (OUT) zuweisen kann, aber einen Any (OUT)
L W [AR1,P#0.0];
T W [AR2,P#0.0];
L W [AR1,P#2.0];
T W [AR2,P#2.0];
L W [AR1,P#4.0];
T W [AR2,P#4.0];
L W [AR1,P#6.0];
T W [AR2,P#6.0];
CALL SFC 20 (
SRCBLK := #TempString,
RET_VAL := #RetVal,
DSTBLK := #OutStringAny);
NETWORK
TITLE =Dein Code, aber die Lokaldaten nicht direkt adressiert
//Int darf nur 3-stellig sein, sonst funktioniert BTI nicht
//man kann das auch mit DINT und DTB
L P##Integer;
LAR1 ;
L #ZahlINT;
ITB ;
T W [AR1,P#0.0];
L B [AR1,P#0.0];
L W#16#F;
UW ;
L W#16#30;
+I ;
T #Dekade2;
L B [AR1,P#0.0];
SRW 4;
L W#16#30;
+I ;
T #Dekade1;
L B [AR1,P#1.0];
L W#16#F;
UW ;
L W#16#30;
+I ;
T #Dekade4;
L B [AR1,P#1.0];
SRW 4;
L W#16#30;
+I ;
T #Dekade3;
L P##Dekade1;
LAR1 ;
L D [AR1,P#0.0];
T #ASCIIDWORD;
SPA ENDE;
NETWORK
TITLE =Dein Code für Integer und korrigiert
L #ZahlINT;
ITB ;
T #Integer;
L LB 0;
L W#16#F;
UW ;
L W#16#30;
+I ;
T #Dekade2;
L LB 0;
SRW 4;
L W#16#30;
+I ;
T #Dekade1;
L LB 1;
L W#16#F;
UW ;
L W#16#30;
+I ;
T #Dekade4;
L LB 1;
SRW 4;
L W#16#30;
+I ;
T #Dekade3;
L LD 2;
T #ASCIIDWORD;
NETWORK
TITLE =Zurückübertragen der geretteten Adressregister
ENDE: NOP 0;
LAR1 #RETTAR1;
LAR2 #RETTAR2;
NETWORK
TITLE =
U #SAVE_VKE;
SAVE ;
BE ;
END_FUNCTION
FUNCTION FC 211 : VOID
TITLE =
VERSION : 0.1
BEGIN
NETWORK
TITLE =
CALL FC 210 (
ZahlINT := MW 100,
ZahlDINT := MD 104,
AdrString := DB210.String_1,
ASCIIDWORD := MD 110);
END_FUNCTION