Tagessicherung

This commit is contained in:
maier_s
2021-03-29 10:23:01 +02:00
parent 5fe9b1ff76
commit 9b9c5cf7a7
172 changed files with 31945 additions and 0 deletions

View File

@@ -0,0 +1,10 @@
TYPE "IbaSimDatFrmWrkSt.T_Cmd"
VERSION : 0.1
STRUCT
Frg : Bool; // Freigabe an PC zum Senden/Empfangen
PcSnd : Bool; // PC verbunden
NewDat : Bool; // neue Daten vorhanden
END_STRUCT;
END_TYPE

View File

@@ -0,0 +1,9 @@
TYPE "IbaSimDatFrmWrkSt.T_Data"
VERSION : 0.1
STRUCT
Cmd : "IbaSimDatFrmWrkSt.T_Cmd"; // Befehle
Data : Array[0..254] of Byte; // Daten
END_STRUCT;
END_TYPE

View File

@@ -0,0 +1,67 @@
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

View File

@@ -0,0 +1,21 @@
DATA_BLOCK "IbaSimDatFrmWrkSt_"
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
STRUCT
GenCpuLst : "Dbg.T_GenCpuLst";
rcv : "IbaSimDatFrmWrkSt.T_Data"; // Daten von PC
abc_1 : Struct // Daten an PC
Cmd : Struct
Strt : Bool;
NewDat : Bool;
NewDatQuit : Bool;
END_STRUCT;
Data : Array[0..254] of Byte;
END_STRUCT;
END_STRUCT;
BEGIN
END_DATA_BLOCK

View File

@@ -0,0 +1,10 @@
TYPE "IbaSimDatMgt.E_IbaSimDatMgt"
VERSION : 0.1
STRUCT
Mod : Struct // Modus
EnzlStep : Int := 1; // Einzelschritt-Betrieb
END_STRUCT;
END_STRUCT;
END_TYPE

View File

@@ -0,0 +1,118 @@
FUNCTION_BLOCK "IbaSimDatMgt.Main"
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
VAR_INPUT
I_Trig : Bool := false; // Triggersignal
I_Data : Any; // Eingangsdaten
I_Mod : Int; // Modus
END_VAR
VAR_OUTPUT
O_Finished : Bool := false; // Durchlauf beendet
END_VAR
VAR_IN_OUT
IO_Data { S7_HMI_Visible := 'False'} : Any; // Datenausgabe
END_VAR
VAR
ibaSimDatMgt : "IbaSimDatMgt";
enzlStepFlnk : "Flnk";
END_VAR
VAR CONSTANT
MOD_ENZL_STEP : Int := 1; // Einzelschritt-Betrieb
MOD_ZYL_STEP : Int := 2; // Zyklusschritt-Betrieb
MOD_ONE_LOOP : Int := 3; // Schleifen-Betrieb
END_VAR
BEGIN
(*#################################################################################################
Copyright (c) Fondium Singen GmbH
### Änderungshistorie ###
Datum: Version: Bearbeiter: Beschreibung:
17.02.2021 0.0 St. Maier Neuerstellung
#################################################################################################*)
(*#################################################################################################
#### Modus/Funktionsaufrufe
#################################################################################################*)
CASE #I_Mod OF
#MOD_ENZL_STEP: // Einzelschritt-Betrieb
GOTO Func_EnzlStep;
#MOD_ZYL_STEP: // Zyklusschritt-Betrieb
GOTO Func_ZylStep;
#MOD_ONE_LOOP: // Schleifen-Betrieb
GOTO Func_OneLoop;
ELSE // Statement section ELSE
GOTO END;
END_CASE;
(*#################################################################################################
#### publilc Funktionen
#################################################################################################*)
// ### Funktion Einzelschritt-Betrieb
Func_EnzlStep:
// Flankenauswertung
#enzlStepFlnk(I_Val:=#I_Trig);
#ibaSimDatMgt(I_Trig:=#enzlStepFlnk.O_FlnkPos,
I_Data:=#I_Data,
O_Finished=>#O_Finished,
IO_Data:=#IO_Data
);
GOTO END;
// ### Funktion Zyklusschritt-Betrieb
Func_ZylStep:
#ibaSimDatMgt(I_Trig := #I_Trig,
I_Data := #I_Data,
IO_Data := #IO_Data
);
#O_Finished := #ibaSimDatMgt.O_AktAdr = #ibaSimDatMgt.O_MaxAdr;
GOTO END;
// ### Funktion Schleifen-Betrieb
Func_OneLoop:
#O_Finished := false;
REPEAT
#ibaSimDatMgt(I_Trig := true,
I_Data := #I_Data,
IO_Data := #IO_Data
);
UNTIL #ibaSimDatMgt.O_AktAdr <= #ibaSimDatMgt.O_MaxAdr END_REPEAT;
#O_Finished := true;
GOTO END;
// ### Funktion Ende
END:
;
END_FUNCTION_BLOCK

View File

@@ -0,0 +1,86 @@
FUNCTION_BLOCK "IbaSimDatMgt"
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
VAR_INPUT
I_Trig : Bool; // Triggersignal
I_Data : Any; // Eingangsdaten
END_VAR
VAR_OUTPUT
O_Finished : Bool; // Durchlauf beendet
O_AktAdr : Int; // aktuelle Adresse
O_MaxAdr : Int; // max. Adresse
END_VAR
VAR_IN_OUT
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:
17.02.2021 0.0 St. Maier Neuerstellung
06.03.2021 1.0 St. Maier Optimierung Funktion
- Adress-Offset-Brechnung mit Funktion Any.GetOffset
- Anzahl Bytes bestimmen mit Funktion Any.NoOfBytes
- Tmp-Var opitimiert
#################################################################################################*)
#O_Finished := false;
IF NOT #I_Trig 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"(#IO_Data);
// Daten zum Kopieren zusammenstellen
#pTmpDataAny.BytePointer := #pTmpDataAny.BytePointer OR SHL(IN := WORD_TO_DWORD(INT_TO_WORD(#adr)), 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
// Adresse inkrementieren
IF #adr < #adrOffSet + (#noElements * "Any.NoOfBytes"(#IO_Data) - 1) THEN
#adr := #adr + "Any.NoOfBytes"(#IO_Data);
END_IF;
// Ausgänge schreiben
#O_Finished := true;
#O_AktAdr := #adr;
#O_MaxAdr := #adrOffSet + #noElements * "Any.NoOfBytes"(#IO_Data);
END_FUNCTION_BLOCK