AreaOffs_ToVar

Kopiert den Inhalt einer Adresse in eine Variable mit 16-Bit-Offset

Diese Funktion kopiert die durch die Größe der Variablen Var definierte Anzahl von Worten ab der durch Speicherbereich Area und Adressenoffset Offs bestimmten Adresse auf die Variable Var.

Parameter

Eingang

iArea (INT)

Wert für den Speicherbereich1)

Falls Area eine Variable ist, muss iArea einen Wert des Speicherbereichs für DT oder FL haben. Dies sollte mit einer der Funktionen der FP Tool-Bibliothek Is_AreaDT oder Is_AreaFL geprüft werden.

Offs (INT)

Offset zur 16-Bit-Anfangsadresse des Speicherbereichs

Ausgang

Var (ANY_SIMPLE_NOT_BOOL)

Variable, auf die der Inhalt der Adresse kopiert wird

Anmerkungen

Die Werte für Area und Offs können durch die Funktion GetPointer ermittelt werden. Der Wert für Area muss im DT- oderFL-Bereich liegen.

Wert für den Speicherbereich1)

Speicherbereiche für Merker

Nur bei Typ FP7.

SYS_MEMORY_AREA_R

SYS_MEMORY_AREA_L

SYS_MEMORY_AREA_X

SYS_MEMORY_AREA_Y

Merker

SYS_MEMORY_AREA_WR

Einstellwerte für Zeitgeber/Zähler

SYS_MEMORY_AREA_SV

Istwerte für Zeitgeber/Zähler

SYS_MEMORY_AREA_EV

Datenregister

SYS_MEMORY_AREA_DT

Koppelmerker

SYS_MEMORY_AREA_WL

Koppeldatenregister

SYS_MEMORY_AREA_LD

File-Register

SYS_MEMORY_AREA_FL

Eingangsregister

SYS_MEMORY_AREA_WX

Ausgangsregister

SYS_MEMORY_AREA_WY

Beispiel

Globale Variablen

In der globalen Variablenliste können Sie Variablen festlegen, die von allen POEs des Projekts verwendet werden können.

Hier wurde die Variable g_arArrayIn1 angelegt. Genauso gut kann diese Variable im POE-Kopf des Programms Program_CalcSums deklariert werden.

POE-Kopf

Im POE-Kopf werden alle Ein- und Ausgangsvariablen deklariert, die für die Programmierung dieser Funktion verwendet werden. Für alle Programmiersprachen wird der gleiche POE-Kopf verwendet.

R_EXTERNAL
		WrongAreaArray: ARRAY [0..2] OF REAL:=[10.0,20.0,30.0];
	END_VAR
	VAR 
		start: BOOL:=FALSE;
		RealArrayIn1: ARRAY [0..5] OF REAL:=[10.0,20.0,30.0,40.0,50.0,60.0];
		RealArrayIn2: ARRAY [0..3,1..4] OF REAL:=[10.0,20.0,30.0,40.0,50.0,60.0,70.0,80.0,90.0,100.0,110.0,120.0,130.0,140.0,150.0,160.0];
		RealArrayIn3: ARRAY [0..2,1..3,2..5] OF REAL:=[10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0];
		RealSum1: REAL:=0.0;
			(*Result: 210*)
		RealSum2: REAL:=0.0;
			(*Result: 1360*)
		RealSum3: REAL:=0.0;
			(*Result: 180*)
		IsWrongArea: BOOL:=FALSE;
		WrongAreaSum: REAL:=0.0;
		CalcSum_Real1: CalcSum_REAL;
	END_VAR

POE-Rumpf

Wenn die Variable bStart auf TRUE gesetzt wird, wird der Funktionsbaustein CalcSum_REAL ausgeführt. Er berechnet die Summe aller Elemente des Datenfelds g_arArrayIn1 und schreibt das Ergebnis in die Variable rRealSum1.

KOP-Rumpf

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 3 ;
        NETWORK_BODY
B(B_COMMENT,,This program calculates the sum of all array elements of the input array In,3,1,38,2,);
L(1,0,1,3);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 10 ;
        NETWORK_BODY
B(B_VARIN,,start,6,0,8,2,);
B(B_VAROUT,,RealSum1,36,4,38,6,);
B(B_VARIN,,RealArrayIn1,8,2,10,4,);
B(B_FB,CalcSum_REAL,CalcSum_Real1,25,2,36,8,,?BEN?BIn_Area?BIn_Offset?BNrOfIdx?AENO?ASum);
B(B_F,AreaOffs_OfVar,,10,1,22,5,,?D@'Var'?CArea?COffs);
B(B_F,Elem_OfArray1D,,10,5,22,8,,?DArray1D?CNrOfElem1);
B(B_COMMENT,,10+20+30+40+50+60,26,8,35,9,);
B(B_COMMENT,,=,36,8,38,9,);
B(B_COMMENT,,210.0,39,8,43,9,);
B(B_COMMENT,,if (Enable==TRUE):,15,8,25,9,);
L(25,1,25,4);
L(8,1,25,1);
L(24,3,24,5);
L(23,4,23,6);
L(24,5,25,5);
L(10,3,10,7);
L(22,3,24,3);
L(22,4,23,4);
L(22,7,25,7);
L(23,6,25,6);
L(1,0,1,10);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 13 ;
        NETWORK_BODY
B(B_VARIN,,start,6,0,8,2,);
B(B_VAROUT,,RealSum2,36,4,38,6,);
B(B_VARIN,,RealArrayIn2,8,2,10,4,);
B(B_FB,CalcSum_REAL,CalcSum_Real1,25,2,36,8,,?BEN?BIn_Area?BIn_Offset?BNrOfIdx?AENO?ASum);
B(B_F,Elem_OfArray1D,,10,5,22,8,,?DArray1D?CNrOfElem1);
B(B_COMMENT,,10+20+30+40+ø^50+60+70+80+ø^90+100+110+120+ø^130+140+150+160,26,8,35,12,);
B(B_COMMENT,,=,36,8,38,9,);
B(B_COMMENT,,1360.0,39,8,43,9,);
B(B_COMMENT,,if (Enable==TRUE):,15,8,25,9,);
L(25,1,25,4);
L(8,1,25,1);
L(24,3,24,5);
L(23,4,23,6);
L(24,5,25,5);
L(10,3,10,7);
L(22,7,25,7);
L(23,6,25,6);
L(1,0,1,13);
L(10,3,24,3);
L(10,4,23,4);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Beispiel: Programmieren des benutzerdefinierten Funktionsbausteins CalcSum_REAL:

POE-Kopf

Im POE-Kopf werden alle Ein- und Ausgangsvariablen deklariert, die für die Programmierung dieser Funktion verwendet werden.Für alle Programmiersprachen wird der gleiche POE-Kopf verwendet.

R_EXTERNAL
		WrongAreaArray: ARRAY [0..2] OF REAL:=[10.0,20.0,30.0];
	END_VAR
	VAR 
		start: BOOL:=FALSE;
		RealArrayIn1: ARRAY [0..5] OF REAL:=[10.0,20.0,30.0,40.0,50.0,60.0];
		RealArrayIn2: ARRAY [0..3,1..4] OF REAL:=[10.0,20.0,30.0,40.0,50.0,60.0,70.0,80.0,90.0,100.0,110.0,120.0,130.0,140.0,150.0,160.0];
		RealArrayIn3: ARRAY [0..2,1..3,2..5] OF REAL:=[10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0,10.0,0.0];
		RealSum1: REAL:=0.0;
			(*Result: 210*)
		RealSum2: REAL:=0.0;
			(*Result: 1360*)
		RealSum3: REAL:=0.0;
			(*Result: 180*)
		IsWrongArea: BOOL:=FALSE;
		WrongAreaSum: REAL:=0.0;
		CalcSum_Real1: CalcSum_REAL;
	END_VAR

KOP-Rumpf

  • Netzwerk 1:

    Wenn das übergebene Datenfeld nicht im DT-Bereich oder FL-Bereich liegt, wird der ENO des Funktionsbausteins auf den Wert FALSE gesetzt und die Abarbeitung beendet.

  • Netzwerk 2: 4:

    Hier werden Initialisierungen für die anschließende Berechnung der Summe vorgenommen. Da Variablen der Klasse VAR_INPUT nicht direkt verändert werden können, muss die Eingangsvariable In_Offset auf die interne Variable In_Offs_intern kopiert werden.

    Siehe auch: Var_ToAreaOffs

  • Netzwerk 5: 8:

    Schleife über die Summenberechnung.

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 3 ;
        NETWORK_BODY
B(B_COMMENT,,This program calculates the sum of all array elements of the input array In,3,1,38,2,);
L(1,0,1,3);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 10 ;
        NETWORK_BODY
B(B_VARIN,,start,6,0,8,2,);
B(B_VAROUT,,RealSum1,36,4,38,6,);
B(B_VARIN,,RealArrayIn1,8,2,10,4,);
B(B_FB,CalcSum_REAL,CalcSum_Real1,25,2,36,8,,?BEN?BIn_Area?BIn_Offset?BNrOfIdx?AENO?ASum);
B(B_F,AreaOffs_OfVar,,10,1,22,5,,?D@'Var'?CArea?COffs);
B(B_F,Elem_OfArray1D,,10,5,22,8,,?DArray1D?CNrOfElem1);
B(B_COMMENT,,10+20+30+40+50+60,26,8,35,9,);
B(B_COMMENT,,=,36,8,38,9,);
B(B_COMMENT,,210.0,39,8,43,9,);
B(B_COMMENT,,if (Enable==TRUE):,15,8,25,9,);
L(25,1,25,4);
L(8,1,25,1);
L(24,3,24,5);
L(23,4,23,6);
L(24,5,25,5);
L(10,3,10,7);
L(22,3,24,3);
L(22,4,23,4);
L(22,7,25,7);
L(23,6,25,6);
L(1,0,1,10);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 13 ;
        NETWORK_BODY
B(B_VARIN,,start,6,0,8,2,);
B(B_VAROUT,,RealSum2,36,4,38,6,);
B(B_VARIN,,RealArrayIn2,8,2,10,4,);
B(B_FB,CalcSum_REAL,CalcSum_Real1,25,2,36,8,,?BEN?BIn_Area?BIn_Offset?BNrOfIdx?AENO?ASum);
B(B_F,Elem_OfArray1D,,10,5,22,8,,?DArray1D?CNrOfElem1);
B(B_COMMENT,,10+20+30+40+ø^50+60+70+80+ø^90+100+110+120+ø^130+140+150+160,26,8,35,12,);
B(B_COMMENT,,=,36,8,38,9,);
B(B_COMMENT,,1360.0,39,8,43,9,);
B(B_COMMENT,,if (Enable==TRUE):,15,8,25,9,);
L(25,1,25,4);
L(8,1,25,1);
L(24,3,24,5);
L(23,4,23,6);
L(24,5,25,5);
L(10,3,10,7);
L(22,7,25,7);
L(23,6,25,6);
L(1,0,1,13);
L(10,3,24,3);
L(10,4,23,4);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY
Verwandte Themen

Weitere Beispiel-Projekte befinden sich im Installationsverzeichnis von Control FPWIN Pro unter "Samples":

Var_ToAreaOffs

Calculates the product of two-dimensional arrays

Calculate the sum of all array elements

Calculates the trace of a three-dimensional array

Letzte Änderung am: 2021-07-28Feedback zu dieser SeitePanasonic Hotline