Files
FSI.Tia.V13.Prj/src/FSI Funktionen/IBA/IbaSimDatFrmWrkSt.scl
2021-03-29 10:23:01 +02:00

68 lines
1.9 KiB
Plaintext

FUNCTION_BLOCK "IbaSimDatFrmWrkSt"
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
VAR_INPUT
I_Data : Any; // Eingangsdaten
END_VAR
VAR_IN_OUT
IO_Cmd : "IbaSimDatFrmWrkSt.T_Cmd"; // Triggersignal
IO_Data { S7_HMI_Visible := 'False'} : Any; // Datenausgabe
END_VAR
VAR
adr : Int; // Adresszähler
END_VAR
VAR_TEMP
pTmpData : Any; // Pointer Tmp-Daten
pTmpDataAny AT pTmpData : "Any.T_AnyPoint"; // Pointer Tmp-Daten Detail
noElements : Int; // Anzahl der Elemente
flt : Int; // Fehler von Blkmov
adrOffSet : Int; // Adress-Offset
END_VAR
BEGIN
(*#################################################################################################
Copyright (c) Fondium Singen GmbH
### Änderungshistorie ###
Datum: Version: Bearbeiter: Beschreibung:
10.03.2021 0.0 St. Maier Neuerstellung
#################################################################################################*)
IF NOT #IO_Cmd.Frg OR NOT #IO_Cmd.PcSnd THEN
RETURN;
END_IF;
// Pointer initizialisieren
#pTmpData := #I_Data;
// Anzahl der Einzelelemente/Typen bestimmen
#noElements := "Any.NoOfBytes"(#I_Data) / "Any.NoOfBytes"(#IO_Data) - 1;
// // Adressgrenzen überwachen
// IF #adr >= #adrOffSet + #noElements * "Any.NoOfBytes"(#IO_Data) THEN
// #adr := #adrOffSet;
// END_IF;
// Byte-Offset berechnen
#adrOffSet := "Any.GetOffset"(#I_Data);
// Daten zum Kopieren zusammenstellen
#pTmpDataAny.BytePointer := #pTmpDataAny.BytePointer OR SHL(IN := WORD_TO_DWORD(INT_TO_WORD(#adrOffSet)), N := 3); // Byte-Adresse in Pointer laden
#pTmpDataAny.DataCount := "Any.NoOfBytes"(#IO_Data); // Länge
// Daten kopieren und am Ausgang bereitstellen
#flt := BLKMOV(SRCBLK := #pTmpData, DSTBLK => #IO_Data); // Eingangs-Daten kopieren
#IO_Cmd.NewDat := false;
END_FUNCTION_BLOCK