Tagessicherung
This commit is contained in:
10
src/FSI Funktionen/IBA/IbaSimDatFrmWrkSt.T_Cmd.udt
Normal file
10
src/FSI Funktionen/IBA/IbaSimDatFrmWrkSt.T_Cmd.udt
Normal 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
|
||||
|
||||
9
src/FSI Funktionen/IBA/IbaSimDatFrmWrkSt.T_Data.udt
Normal file
9
src/FSI Funktionen/IBA/IbaSimDatFrmWrkSt.T_Data.udt
Normal 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
|
||||
|
||||
67
src/FSI Funktionen/IBA/IbaSimDatFrmWrkSt.scl
Normal file
67
src/FSI Funktionen/IBA/IbaSimDatFrmWrkSt.scl
Normal 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
|
||||
|
||||
21
src/FSI Funktionen/IBA/IbaSimDatFrmWrkSt_.db
Normal file
21
src/FSI Funktionen/IBA/IbaSimDatFrmWrkSt_.db
Normal 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
|
||||
|
||||
10
src/FSI Funktionen/IBA/IbaSimDatMgt.E_IbaSimDatMgt.udt
Normal file
10
src/FSI Funktionen/IBA/IbaSimDatMgt.E_IbaSimDatMgt.udt
Normal 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
|
||||
|
||||
118
src/FSI Funktionen/IBA/IbaSimDatMgt.Main.scl
Normal file
118
src/FSI Funktionen/IBA/IbaSimDatMgt.Main.scl
Normal 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
|
||||
|
||||
86
src/FSI Funktionen/IBA/IbaSimDatMgt.scl
Normal file
86
src/FSI Funktionen/IBA/IbaSimDatMgt.scl
Normal 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
|
||||
|
||||
Reference in New Issue
Block a user