68 lines
1.9 KiB
Plaintext
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
|
|
|