BaseSystemLib hinzugefügt

This commit is contained in:
2026-06-29 16:28:48 +02:00
parent a51a0c6fd1
commit 14a1c5172d
168 changed files with 6797 additions and 0 deletions
@@ -0,0 +1,14 @@
LibraryType:
Guid: ff362ef5-3706-4678-9b8f-9b5edec9d6cc
Comment:
de-DE: Encoder TR
LibraryVersion:
VersionNumber: 2.0.0
Author: e.yueksel
IsDefault: true
Comment:
de-DE: |-
CHANGED: Angleich an ILS Testversion (Stand: 03.02.2025)
CHANGED: Globale Konstante "cEncoderScaling" gegen lokale Konstante getauscht
Freigegeben für IBN (EY, 22.04.2025)
@@ -0,0 +1,9 @@
DocumentHash:
- FileName: FB_EncoderTR.scl
Hash: lAU38Ds+TsapS+ZQ4p5ClovY85o6+dj/r4TM8y2vS/4=
LibraryMetaFileHash: QwiMrqRTP+HgutRyzKwkQFevBlA6qZIO3E9CXAnzj0g=
LibraryVersion:
Guid: 46ef14f8-3462-4511-aec5-4139a799256f
DependsOn:
- TypeName: UDT_Sensor
VersionNumber: 2.0.0
@@ -0,0 +1,197 @@
FUNCTION_BLOCK "FB_EncoderTR"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
nInPosAct : DInt;
xInPresetAdjQuit : Bool;
xInPresetAdjSet : Bool;
nInPresetAdjSetValue : DInt; // Abweichung in mm
nInPitch : DInt := 254;
nInEncoderMax : DInt;
nInHooksSorterMax : DInt;
stInSensorReference { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : "UDT_Sensor";
END_VAR
VAR_OUTPUT
xOutPresetAdjSet : Bool;
nOutPresetAdjSetValue : DInt;
nOutPosAct : DInt;
nOutPosActDif : DInt;
bOutReferenced : Bool;
nOutPosPitch : DInt;
nOutPosPitchDif : DInt;
nOutPosPitchPart : DInt; // Skaliert [0-100]%
END_VAR
VAR
arIncremente : Array[0..40] of DInt;
nPos : Int;
xSensorFlag : Bool;
nStateAdjustment : Int;
nPosActDif { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : DInt;
nPosPitchDif : DInt;
nPosAct : DInt;
nPosPitchAct : DInt;
nTest : Array[0..40] of DInt;
nPosPitchPart : DInt;
END_VAR
VAR CONSTANT
cReferenceValue : DInt;
cEncoderScaling : DInt := 100; // Scalierung des Encoders pro Teilung
END_VAR
BEGIN
REGION GeberParameter
(*
Einstellungen für Pinband ILS Testanlage
Anzahl Taschen: 54 Stück (länge des Bandes)
Durchmesser: 278mm
Kettenteilung (pro Tasche): 250mm
Eingabe im Geber:
Gesamtmesslänge = 13500 (Bandteilung * Anzahl Taschen)
Umdrehungen Zähler = 154575
Umdrehungen Nenner = 10000
-> PosAct = Position in mm
Einstellungen für Fingerband ILS Testanlage
Anzahl Taschen: 26 Stück (länge der Kette)
Kettenrad: 17 Zähne
Kettenteilung (pro Tasche): 254mm
Kettenglieder pro Tasche: 32 Stück
Eingabe im Geber:
Gesamtmesslänge = 6604 (Kettenteilung * Anzahl Taschen)
Umdrehungen Zähler = 244706 (Anzahl Taschen * Kettenglieder pro Tasche)
Umdrehungen Nenner = 10000 (Kettenrad)
-> PosAct = Position in mm
*)
END_REGION
REGION Adjustment
CASE #nStateAdjustment OF
0: // Undefined
#bOutReferenced := 0;
#nStateAdjustment := 10;
10: // Wait for Reference Sensor 1st Time
IF #stInSensorReference.xDirectEdgePos THEN
#nStateAdjustment := 15;
END_IF;
15: // Wait for Reference Sensor 2nd Time
IF #stInSensorReference.xDirectEdgePos THEN
#nStateAdjustment := 20;
#xOutPresetAdjSet := 1;
IF #xInPresetAdjSet THEN
#nOutPresetAdjSetValue := #nInPresetAdjSetValue;
ELSE
#nOutPresetAdjSetValue := #cReferenceValue;
END_IF;
END_IF;
20: // Wait for Quit
#xOutPresetAdjSet := 1;
IF #xInPresetAdjSet THEN
#nOutPresetAdjSetValue := #nInPresetAdjSetValue;
ELSE
#nOutPresetAdjSetValue := #cReferenceValue;
END_IF;
IF #xInPresetAdjQuit THEN
#xOutPresetAdjSet := 0;
#nStateAdjustment := 30;
END_IF;
30: // Wait for Reset the #xInPresetAdjSet Input
IF NOT #xInPresetAdjSet THEN
#nStateAdjustment := 100;
#nTest[1] := 0;
END_IF;
100: // First Refernce Set
#bOutReferenced := 1;
IF #xInPresetAdjSet THEN
#nStateAdjustment := 0;
END_IF;
END_CASE;
END_REGION
REGION Positionsänderung ermitteln
#nPosActDif := #nInPosAct - #nPosAct;
IF (#nInPosAct < #nPosAct) AND // Wenn die neue Position kleiner ist als der alte Wert
ABS(#nPosActDif) > (#nInEncoderMax / 2) THEN // Und die differenz Größer als die Hälfte des Encoderendwertes
#nPosActDif := #nInEncoderMax - #nPosAct;
#nPosActDif += #nInPosAct;
#nPosAct := #nInPosAct;
ELSIF #nPosActDif > 0 THEN
#nPosAct := #nInPosAct;
ELSE
#nPosActDif := 0;
#nPosAct := #nInPosAct;
END_IF;
(*
IF #nPosActDif > 0 THEN
#nPosAct := #nInPosAct;
ELSIF ABS(#nPosActDif) > ("cEncoderMax" / 2) THEN
#nPosActDif := "cEncoderMax" - #nPosAct;
#nPosActDif += #nInPosAct;
#nPosAct := #nInPosAct;
ELSE
#nPosActDif := 0;
#nPosAct := #nInPosAct;
END_IF;
*)
END_REGION
REGION Pitch
#nOutPosPitch := #nInPosAct / #nInPitch; // Taschennummer nach Encoder
//#nOutPosPitchPart := REAL_TO_DINT(((#nInPosAct MOD #nInPitch)));
//TEST MOLINA ANFANG
#nOutPosPitchPart := (#"cEncoderScaling" * (#nInPosAct MOD #nInPitch)) / #nInPitch; // Skalierter Restwert Taschenzwischenschritt
//TEST MOLINA ENDE
#nPosPitchDif := #nOutPosPitch - #nPosPitchAct;
IF ABS(#nPosPitchDif) > (#nInHooksSorterMax / 2) THEN
#nPosPitchDif := #nInHooksSorterMax - #nPosPitchAct;
#nPosPitchDif += #nOutPosPitch;
#nPosPitchAct := #nOutPosPitch;
ELSIF #nPosPitchDif > 0 THEN
#nPosPitchAct := #nOutPosPitch;
ELSE
#nPosPitchDif := 0;
#nPosPitchAct := #nOutPosPitch;
END_IF;
END_REGION
REGION Outputs
IF #nStateAdjustment = 100 THEN
#nOutPosAct := #nInPosAct;
END_IF;
#nOutPosActDif := #nPosActDif;
#nOutPosPitchDif := #nPosPitchDif;
#nTest[0] += #nPosPitchDif;
IF #stInSensorReference.xDirectEdgePos THEN
#nTest[1] += 1;
END_IF;
END_REGION
REGION Statistic
#arIncremente[#nPos] += #nPosActDif;
IF #stInSensorReference.xDirectEdgePos THEN
(*
#nPosActDif := #nInPosAct - #nPosAct;
IF #nPosActDif > 0 THEN
#nPosAct := #nInPosAct;
ELSIF ABS(#nPosActDif) > ("cEncoderMax" / 2) THEN
#nPosActDif := "cEncoderMax" - #nPosAct;
#nPosActDif += #nInPosAct;
#nPosAct := #nInPosAct;
ELSE
#nPosActDif := 0;
#nPosAct := #nInPosAct;
END_IF;
*)
#nPos += 1;
IF #nPos > 40 THEN
#nPos := 0;
END_IF;
END_IF;
END_REGION
END_FUNCTION_BLOCK