DATA_BLOCK DB 21
TITLE =
VERSION : 0.1
STRUCT
Leeg : STRING [20 ]; //Geen tekst
Text : ARRAY [1 .. 25 ] OF //Meldingen (25 stuks)
STRING [20 ];
TextOP : STRING [20 ]; //Tekst voop op OP7
END_STRUCT ;
BEGIN
Leeg := '';
Text[1] := 'Storing 1 xxxx';
Text[2] := 'Storing 2 aaaaa';
Text[3] := 'Storing 3';
Text[4] := 'Melding1';
Text[5] := 'Melding 2';
Text[6] := '12345678901234567890';
Text[7] := 'reserve';
Text[8] := 'reserve';
Text[9] := 'reserve';
Text[10] := 'reserve';
Text[11] := 'reserve';
Text[12] := 'reserve';
Text[13] := 'reserve';
Text[14] := 'reserve';
Text[15] := 'reserve';
Text[16] := 'reserve';
Text[17] := 'reserve';
Text[18] := 'reserve';
Text[19] := 'reserve';
Text[20] := 'reserve';
Text[21] := 'reserve';
Text[22] := 'reserve';
Text[23] := 'reserve';
Text[24] := 'reserve';
Text[25] := 'reserve';
TextOP := '';
END_DATA_BLOCK
FUNCTION FC 110 : INT
TITLE =Block copy met var. bron en var. doel.
//Kopieren van variable met een variable bron en een variabel doel.
//Bron en doel mogen elkaar niet overlappen
//Onderliggend bouwsteen SFC 20.
AUTHOR : JB
FAMILY : Kopie
NAME : Blk_mov
VERSION : 0.0
VAR_INPUT
DB_NR_BRON : INT ; //0 =MERKER BEREIK ANDERS DB NR VAN BRON
BYTE_1_BRON : INT ; //NR VAN EERSTE BYTE VAN BRON
BYTE_WORD : BOOL ; //BYTE=0 WORD=1
LENGTE : INT ; //AANTAL TE COPIEREN BYTES OF WOORDEN
DB_NR_DOEL : INT ; //0 =MERKER BEREIK ANDERS DB NR VAN DOEL
BYTE_1_DOEL : INT ; //NR VAN EERSTE BYTE VAN DOEL
END_VAR
VAR_TEMP
T_AR1 : DWORD ;
T_ANY_BRON : ANY ;
T_ANY_DOEL : ANY ;
END_VAR
BEGIN
NETWORK
TITLE =Opslaan inhoud van het Adresregister AR1
TAR1 #T_AR1;
NETWORK
TITLE =Samenstellen van DOEL adres in ANY formaat
LAR1 P##T_ANY_BRON; //Beginadres ANY pointer in AR1 laden
L B#16#10; //Syntax-ID in de Any pointer zetten
T LB [AR1,P#0.0];
L B#16#2; //Bereichstyp BYTE laden
UN #BYTE_WORD;
SPB Tran;
L B#16#4; //Bereichstyp WORD laden
Tran: T LB [AR1,P#1.0]; //BYTE of WORD in ANY pointer zetten
L #LENGTE; //Aantal BYTE'S of WORD'S
T LW [AR1,P#2.0]; //In ANY pointer zetten
L #DB_NR_BRON; //DB nr
T LW [AR1,P#4.0]; //In ANY pointer zetten
L 0;
==I ;
SPB Merk; //Als DB nr = 0 dan naar merkers
L P#DBX 0.0; //Adres voor DBX 0.0
SPA Offs;
Merk: L P#M 0.0; //Adres voor M 0.0
Offs: L #BYTE_1_BRON; //Nummer van eerste BYTE
SLD 3; //Nummer op juiste plaats zetten
+D ; //Adres van 1ste BYTE of WORD
T LD [AR1,P#6.0]; //In ANY pointer zetten
NETWORK
TITLE =Samenstellen van BRON adres in ANY formaat
LAR1 P##T_ANY_DOEL; //Beginadres ANY pointer in AR1 laden
L B#16#10; //Syntax-ID in de Any pointer zetten
T LB [AR1,P#0.0];
L B#16#2; //Bereichstyp BYTE laden
UN #BYTE_WORD;
SPB Tra1;
L B#16#4;
Tra1: T LB [AR1,P#1.0];
L #LENGTE;
T LW [AR1,P#2.0];
L #DB_NR_DOEL;
T LW [AR1,P#4.0];
L 0;
==I ;
SPB Mer1;
L P#DBX 0.0;
SPA Off1;
Mer1: L P#M 0.0;
Off1: L #BYTE_1_DOEL;
SLD 3;
+D ;
T LD [AR1,P#6.0];
NETWORK
TITLE =Oproep van SFC 20 (BLKMOV)
CALL SFC 20 (
SRCBLK := #T_ANY_BRON,//Adres waar data vandaan moet komen
RET_VAL := #RET_VAL,//Foutmelding
DSTBLK := #T_ANY_DOEL);//Adres waar data naartoe moet
NETWORK
TITLE =Inhoud adresregister AR1 terugzetten
LAR1 #T_AR1;
END_FUNCTION
FUNCTION FC 21 : VOID
TITLE =
VERSION : 0.1
VAR_TEMP
Null : BOOL ;
Textnr : INT ;
RetVal : INT ;
Melding : ARRAY [1 .. 20 ] OF BOOL ;
END_VAR
BEGIN
NETWORK
TITLE =
U #Null;
R #Null;
NETWORK
TITLE =
//Melding{x] vervangen door merkers e.d.
U #Melding[1];
SPBN m2;
L 1;
SPA copy;
m2: U #Melding[2];
SPBN m3;
L 2;
SPA copy;
m3: U #Melding[3];
SPBN m4;
L 3;
SPA copy;
m4: U #Melding[4];
SPBN m5;
L 4;
SPA copy;
m5: U #Melding[5];
SPBN m6;
L 5;
SPA copy;
m6: U #Melding[6];
SPBN m7;
L 6;
SPA copy;
m7: U #Melding[7];
SPBN m8;
L 7;
SPA copy;
m8: U #Melding[8];
SPBN m9;
L 8;
SPA copy;
// uzw
m9: NOP 0;
U #Melding[20];
SPBN m0;
L 20;
SPA copy;
m0: L 0;
//geen meling lege string copieren
SPA copy;
copy: L 22;
*I ;
T #Textnr;
NETWORK
TITLE =Copy meldings string naar OP string
CALL FC 110 (
DB_NR_BRON := 21,
BYTE_1_BRON := #Textnr,
BYTE_WORD := #Null,
LENGTE := 22,
DB_NR_DOEL := 21,
BYTE_1_DOEL := 572,
RET_VAL := #RetVal);
END_FUNCTION