kiestumpe
Level-1
- Beiträge
- 726
- Reaktionspunkte
- 84
-> Hier kostenlos registrieren
Letzteres- den Vergleich auf Eingabeänderung.
Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
ja es geht ja auch darum das es ich es net nur wort weiße auf ungleich untersuchen will. Bekomme echt noch die Krise solange halt das zeug nicht angeschlossen ist von denen ich die Arrays bekomme kann ich es nur über umwege testen und das kostet voll viel zeit...
......
iz: [B]ARRAY [1..5][/B] OF INT;
iu : INT;
END_VAR
VAR_INPUT
start: BOOL;
END_VAR
VAR_OUTPUT
ergebnis: BOOL;
END_VAR
BEGIN
IF start then
FOR ix := [B]0[/B] TO 5 DO
iz[B][ix][/B]:= Wert1[1]; // hier wird iz[[B]0[/B]] angesprochen..gibt es aber nicht!
BEGIN
IF neuwert <> altwert THEN
zeiger := zeiger MOD Anzahl;
messwert[zeiger] := messwert_ein;
zeiger .= zeiger + 1;
END_IF;
altwert := neuwert;
FUNCTION_BLOCK FB25
VAR_TEMP
zeiger: STRUCT
ANY_Wert: BYTE;
quelle_Typ: BYTE;
quelle_Laenge: WORD;
quelle_DB_Nr: WORD;
quelle_byte_Zeiger: DWORD;
END_STRUCT;
pAny_quelle AT zeiger: ANY;
erg: INT;
END_VAR
zeiger.ANY_Wert := 16#10;
zeiger.quelle_Typ := 16#02;
zeiger.quelle_Laenge :=16#04;
zeiger.quelle_DB_NR := 16#06;
zeiger.quelle_byte_zeiger :=16#84;
END_FUNCTION_BLOCK
FUNCTION FC399 : VOID
Title = 'UP Any-Pointer zerlegen' // UP Any-Pointer zerlegen
// Bausteinparameter
VAR_INPUT
// Eingangsparameter
DatenQuelle : ANY ;
END_VAR
VAR_OUTPUT
// Ausgangsparameter
Daten_Mem : STRING [4] ;
Daten_Typ : STRING [4] ;
Daten_DB : WORD ;
Daten_Ptr : DWORD ;
Daten_1W : INT ;
Daten_Len : INT ;
// Inhalt : INT ;
END_VAR
VAR_TEMP
// temporäre Variablen
hDatenQuelle : ANY ;
xDatenQuelle AT hDatenQuelle : STRUCT
ID_Code : BYTE ; // 10h für S7
DataTyp : BYTE ;
Anzahl : WORD ;
DB_Nr : WORD ;
SpeicherPtr : DWORD ;
END_STRUCT ;
yDatenQuelle AT hDatenQuelle : STRUCT
ID_Code : BYTE ; // 10h für S7
DataTyp : BYTE ;
Anzahl : WORD ;
DB_Nr : WORD ;
Speicherbereich : ARRAY [0..3] OF BYTE ;
END_STRUCT ;
END_VAR
// Anweisungsteil
BEGIN
hDatenQuelle := DatenQuelle ;
IF xDatenQuelle.DataTyp = w#16#00 THEN Daten_Typ := 'Nil' ; // Nil
ELSIF xDatenQuelle.DataTyp = w#16#01 THEN Daten_Typ := 'X' ; // Bool
ELSIF xDatenQuelle.DataTyp = w#16#02 THEN Daten_Typ := 'B' ; // Byte
ELSIF xDatenQuelle.DataTyp = w#16#03 THEN Daten_Typ := 'Char' ; // Char
ELSIF xDatenQuelle.DataTyp = w#16#04 THEN Daten_Typ := 'W' ; // Word
ELSIF xDatenQuelle.DataTyp = w#16#05 THEN Daten_Typ := 'Int' ; // Integer
ELSIF xDatenQuelle.DataTyp = w#16#06 THEN Daten_Typ := 'DW' ; // Double-Word
ELSIF xDatenQuelle.DataTyp = w#16#07 THEN Daten_Typ := 'DInt' ; // Double-Integer
ELSIF xDatenQuelle.DataTyp = w#16#08 THEN Daten_Typ := 'Real' ; // Real
ELSIF xDatenQuelle.DataTyp = w#16#09 THEN Daten_Typ := 'Date' ; // Date
ELSIF xDatenQuelle.DataTyp = w#16#0A THEN Daten_Typ := 'TOD' ; // Time-of-Day
ELSIF xDatenQuelle.DataTyp = w#16#0B THEN Daten_Typ := 'Time' ; // Time
ELSIF xDatenQuelle.DataTyp = w#16#0C THEN Daten_Typ := 'S5T' ; // S5Time
ELSIF xDatenQuelle.DataTyp = w#16#0E THEN Daten_Typ := 'DT' ; // Date-and-Time
ELSIF xDatenQuelle.DataTyp = w#16#13 THEN Daten_Typ := 'Str' ; // String
END_IF ;
IF yDatenQuelle.Speicherbereich[0] = w#16#81 THEN Daten_Mem := 'E' ; //Eingänge
ELSIF yDatenQuelle.Speicherbereich[0] = w#16#82 THEN Daten_Mem := 'A' ; // Ausgänge
ELSIF yDatenQuelle.Speicherbereich[0] = w#16#83 THEN Daten_Mem := 'M' ; // Merker
ELSIF yDatenQuelle.Speicherbereich[0] = w#16#84 THEN Daten_Mem := 'DB' ; // DB
ELSIF yDatenQuelle.Speicherbereich[0] = w#16#85 THEN Daten_Mem := 'DI' ; // Instanz-DB
ELSIF yDatenQuelle.Speicherbereich[0] = w#16#86 THEN Daten_Mem := 'L' ; // Lokaldaten
ELSIF yDatenQuelle.Speicherbereich[0] = w#16#87 THEN Daten_Mem := 'LV' ; // vorherige Lokaldaten
END_IF ;
Daten_DB := xDatenQuelle.DB_Nr ;
Daten_Len := WORD_TO_INT (xDatenQuelle.Anzahl) ;
Daten_Ptr := xDatenQuelle.SpeicherPtr AND dw#16#00FF_FFFF ;
Daten_1W := DWORD_TO_INT(SHR (IN:=Daten_Ptr , n:=3)) ;
END_FUNCTION
Quelle_1 : p#DB1.DBX0.0 REAL 32
Quelle_2 : p#DB2.DBX0.0 REAL 32
Ja jetzt abue ich nichts mehr mache jetzt feierabend aber morgen früh geht es weiter.
FUNCTION FC10:INT
VAR_INPUT
pVariablename: ANY;
END_VAR
VAR_TEMP
pZeiger: ANY;
MyZeiger AT pzeiger:STRUCT
ID: BYTE;
TYP: BYTE;
NUM: WORD;
DBN: WORD;
PTR: DWORD;
END_STRUCT;
dwOffset:DWORD;
END_VAR
BEGIN
pZeiger:= pVariablename;
dwOffset := MyZeiger.PTR;
(*zeiger.ANY_Wert := 16#10;
zeiger.quelle_Typ := 16#02;
zeiger.quelle_Laenge :=16#04;
zeiger.quelle_DB_NR := 16#06;
zeiger.quelle_byte_zeiger :=16#84;*)
FC10 := WORD_TO_INT(DWORD_TO_WORD(dwOffset));
END_FUNCTION
FUNCTION_BLOCK Fb50
VAR
Wert : ARRAY [1..32] OF INT;
isizeofWert: INT;
ibyteOffset: INT;
END_VAR
VAR_TEMP
ibyteoffsetFromStratOfDB:INT;
END_VAR
BEGIN
isizeofWert:= FC10(pArrayName:=Wert);
ibyteOffset:= FC11(pArrayName:= Wert ,pArrayElement:= Wert[13]);
ibyteoffsetFromStratOfDB:= FC12(pVariablename:= DB10.idata13);
END_FUNCTION_block
CALL FC 10
pVariablename:=DB10.DBW2
RET_VAL :=MW100
CALL FC 11
CALL FC 12
BE
Wir verwenden essentielle Cookies, damit diese Website funktioniert, und optionale Cookies, um den Komfort bei der Nutzung zu verbessern.
Siehe weitere Informationen und konfiguriere deine Einstellungen