Sie sind auf Seite 1von 7

SIMATIC

FB15 - <offline>
"motor adjustment drive" motor adjustment drives
Name: FB_15 Family:
Author: Delatour Version: 0.1
Block version: 2
Time stamp Code: 08/08/2017 11:48:43 AM
Interface: 04/24/2010 08:26:27 AM
Lengths (block/logic/data): 01412 01112 00000

Name Data Type Address Initial Value Comment


IN 0.0
Release_Adjustment Bool 0.0 FALSE
Reference_Point Bool 0.1 FALSE
End_Range_Adjustment Bool 0.2 FALSE
Count_Pulse Bool 0.3 FALSE
Reference_Drive Bool 0.4 FALSE
Ackn_Fault Bool 0.5 FALSE
Cycle_10Hz Bool 0.6 FALSE
Man_Plus Bool 0.7 FALSE
Man_Minus Bool 1.0 FALSE
Man_Mode Bool 1.1 FALSE
Target_Positon Word 2.0 W#16#0
Length_RefPos_A Int 4.0 0
Length_Endpos_B Int 6.0 0
Pulse_Monitoring Int 8.0 20
OUT 0.0
Motor_Plus Bool 10.0 FALSE
Motor_Minus Bool 10.1 FALSE
Fault_Limits Bool 10.2 FALSE
Fault_Pulse_sequence Bool 10.3 FALSE
Fault_Move_direction Bool 10.4 FALSE
Position_reached Bool 10.5 FALSE
IN_OUT 0.0
STAT 0.0
HM_FN_Ref Bool 12.0 FALSE
HM_FN_Ende Bool 12.1 FALSE
HM_FP_Impuls Bool 12.2 FALSE
HM_FP_10Hz Bool 12.3 FALSE
HM_FN_Ref_Fahrt Bool 12.4 FALSE
FN_Ref Bool 12.5 FALSE
FN_Ende Bool 12.6 FALSE
FP_Impuls Bool 12.7 FALSE
FP_10Hz Bool 13.0 FALSE
FN_Ref_Fahrt Bool 13.1 FALSE
Bewegung_Plus Bool 13.2 FALSE
Bewegung_Minus Bool 13.3 FALSE
Referenzfahrt_merken Bool 13.4 FALSE
Sammelstoerung Bool 13.5 FALSE
Nachlauf_Mot_Plus Byte 14.0 B#16#0
Nachlauf_Mot_Minus Byte 15.0 B#16#0
Impulszaehler Word 16.0 W#16#0
Gesamtimpulszahl Word 18.0 W#16#0
mm_pro_1000Impulse DWord 20.0 DW#16#0
Ziel_mm_Alt Word 24.0 W#16#0

Seite von
SIMATIC

Name Data Type Address Initial Value Comment


Ziel_in_Impulse Word 26.0 W#16#0
Obere_Grenze_Ziel Word 28.0 W#16#0
Untere_Grenze_Ziel Word 30.0 W#16#0
Zeitz_Impulsfolge Word 32.0 W#16#0
Nachlauf_Plus Byte 34.0 B#16#0
Nachlauf_Minus Byte 35.0 B#16#0
Original_Ziel Word 36.0 W#16#0
TEMP 0.0

Block: FB15 motorische Verstellung

A = Sacklänge am Referenzpunkt
B = Sacklänge am Endposition

*******************************
ÄNDERUNGEN REMFERT/POHLKAMP APRIL 2010:
Da der Radimat Sacktransportkopf für den breitesten Sack 550mm die Verstellung
auf den Referenzpunkt fährt, sind folgende Netzwerke geändert:
-Meldung "Pos. erreicht" - Endlagen rausgenommen NW21
-Meldung "Stoer. Endlagen" NW15, eine Bedingung auskommentiert
-Original Ziel als neue STAT Variable: Damit kommmt die Meldung "nicht in
Position" auch wenn man durch falsche Werteingabe auf die Endlage fährt.

Network: 1 Flanken bilden

A #Reference_Point
FN #HM_FN_Ref
= #FN_Ref

A #End_Range_Adjustment
FN #HM_FN_Ende
= #FN_Ende

A #Count_Pulse
FP #HM_FP_Impuls
= #FP_Impuls

A #Cycle_10Hz
FP #HM_FP_10Hz
= #FP_10Hz

A #Referenzfahrt_merken
FN #HM_FN_Ref_Fahrt
= #FN_Ref_Fahrt

Network: 2 Original Ziel

L #Target_Positon
T #Original_Ziel

Network: 3 Ziel mit Grenzen vergleichen

L #Length_RefPos_A // A = Sacklaenge am Referenzpunkt


L #Length_Endpos_B // B = Sacklaenge am Endposition
>I
JC M001 // A > B dann springen
L #Target_Positon // Wenn ziel groesser als B
L #Length_Endpos_B
>I
JC M002 // dann springen
L #Target_Positon // sonnst Wenn ziel kleiner als A
L #Length_RefPos_A
<I
JC M002 // dann springen
JU M003 // sonnst Netzwerk Ende
M001: NOP 0
L #Target_Positon // Wenn ziel groesser als A
L #Length_RefPos_A

Seite von
SIMATIC

>I
JC M002 // dann springen
L #Target_Positon // sonnst Wenn ziel kleiner als B
L #Length_Endpos_B
<I
JC M002 // dann springen
JU M003 // sonnst Netzwerk Ende
M002: T #Target_Positon // Grenzwerte uebernehmen
M003: NOP 0

Network: 4 Bewegung Richtung Plus

AN #Motor_Plus // wenn Motor nicht laueft


JC M004 // dann springen
L 20 // sonnst Zeitzaehler auf 20 setzen
T #Nachlauf_Mot_Plus
JU M005 // und springen
M004: NOP 0
ON #FP_10Hz // Wenn nicht impuls
ON #Bewegung_Plus // oder keine Bewegung
JC M005 // Dann springen
L #Nachlauf_Mot_Plus // Sonnst Zeitzaehler um 1/10 Sek. reduzieren
L 1
-I
T #Nachlauf_Mot_Plus
M005: NOP 0
L #Nachlauf_Mot_Plus // Wenn Zeitzaehler Groeßer 0 dann Bewegung laueft
L 0
>I
= #Bewegung_Plus

Network: 5 Bewegung Richtung Minus

AN #Motor_Minus // wenn Motor nicht laueft


JC M006 // dann springen
L 20 // sonnst Zeitzaehler auf 20 setzen
T #Nachlauf_Mot_Minus
JU M007 // und springen
M006: NOP 0
ON #FP_10Hz // Wenn nicht impuls
ON #Bewegung_Minus // oder keine Bewegung
JC M007 // Dann springen
L #Nachlauf_Mot_Minus // Sonnst Zeitzaehler um 1/10 Sek. reduzieren
L 1
-I
T #Nachlauf_Mot_Minus
M007: NOP 0
L #Nachlauf_Mot_Minus // Wenn Zeitzaehler Groeßer 0 dann Bewegung laueft
L 0
>I
= #Bewegung_Minus

Network: 6 Impulszähler + 1

ON #Bewegung_Plus // Wenn nicht Bewegung nach Plus


ON #FP_Impuls // oder nicht impuls
JC M008 // dann springen
L #Impulszaehler // sonnst Zaehler um 1 erhöhen
L 1
+I
T #Impulszaehler
M008: NOP 0

Network: 7 Impulszähler - 1

ON #Bewegung_Minus // Wenn nicht Bewegung nach Minus


ON #FP_Impuls // oder nicht impuls
JC M009 // dann springen
L #Impulszaehler // sonnst Zaehler um 1 reduzieren
L 1
-I
T #Impulszaehler
M009: NOP 0

Seite von
SIMATIC

Network: 8 Impulszähler rücksetzen

O #Reference_Point // Wenn nicht Ref.Punkt


ON #Bewegung_Minus
JC M00a // dann springen
L 0 // sonnst Zaehler auf 0 setzen
T #Impulszaehler
M00a: NOP 0

Network: 9 Gesamt Impulszahl

ON #FN_Ende // Wenn nicht FP Endposition


ON #Bewegung_Plus
JC M00b // dann springen
L #Impulszaehler // sonnst gesamt Impulszahl speichern
T #Gesamtimpulszahl
M00b: NOP 0

Network: 10 MM pro 1000 Impuls rechnen

ON #FN_Ende // und nicht FN Endposition


ON #Bewegung_Plus
JC M00c // dann springen
L #Length_Endpos_B // mm pro 1000 Impuls ausrechnen
L #Length_RefPos_A
>I
JC M00d
L #Length_RefPos_A
L #Length_Endpos_B
JU M00e
M00d: L #Length_Endpos_B // mm pro 1000 Impuls ausrechnen
L #Length_RefPos_A
M00e: -I
L 1000
*D
L #Gesamtimpulszahl
/D
T #mm_pro_1000Impulse
JU M00f
M00c: NOP 0

Network: 11 Ziel im Impuls ausrechnen und Zielfenster ausrechnen

L #Ziel_mm_Alt // Wenn Ziel in mm unverändert


L #Target_Positon
==I
AN #FN_Ref_Fahrt // und nicht Referenz fahrt beendet
AN #FN_Ref
AN(
A #Bewegung_Plus
AN #Motor_Plus
O
A #Bewegung_Minus
AN #Motor_Minus
)
JC M010
T #Ziel_mm_Alt // sonnst neuen Ziel merken
//
M00f: L #Target_Positon
L #Length_RefPos_A
>I
JC M011
L #Length_RefPos_A
L #Target_Positon
JU M012
M011: L #Target_Positon // Ziel in mm umrechnen
L #Length_RefPos_A
M012: -I
L 1000
*D
L #mm_pro_1000Impulse
/D
L 0
-I
T #Ziel_in_Impulse
//
L #Nachlauf_Minus // obere Grenze in Impuls ermitteln

Seite von
SIMATIC

+I
T #Obere_Grenze_Ziel
//
L #Ziel_in_Impulse // Untere Grenze in Impuls ermitteln
L #Nachlauf_Plus
-I
T #Untere_Grenze_Ziel
L 0
>=I
JC M010
T #Untere_Grenze_Ziel
M010: NOP 0

Network: 12 Fahren nach +

A(
AN #Man_Mode
A(
L #Impulszaehler // Wenn Positionszaehler
L #Untere_Grenze_Ziel // Kleiner Untere Grenze
<I
)
O
A #Man_Plus
A #Man_Mode
)
AN #Bewegung_Minus // und nicht gegen Richtung nachlauf
AN #Motor_Minus // und nicht gegen Richtung fahrt
AN #Sammelstoerung // und nicht Samelstoerung
AN #Referenzfahrt_merken
A #End_Range_Adjustment // und nicht Endlage
A #Release_Adjustment
= #Motor_Plus // Dann nach + fahren

Network: 13 Fahren nach -

A(
AN #Man_Mode
A(
L #Impulszaehler // Wenn Positionszaehler
L #Obere_Grenze_Ziel // Groesser Obere Grenze
>I
O #Referenzfahrt_merken
)
O
A #Man_Minus
A #Man_Mode
)
AN #Bewegung_Plus // und nicht gegen Richtung nachlauf
AN #Motor_Plus // und nicht gegen Richtung fahrt
AN #Sammelstoerung // und nicht Samelstoerung
A #Reference_Point // und nicht Endlage
A #Release_Adjustment
= #Motor_Minus // Dann nach - fahren

Network: 14 Referenzfahrt

A #Sammelstoerung // oder Sammelstoerung


AN #Man_Mode
O #Reference_Drive // Ref.Fahrt extern
S #Referenzfahrt_merken
//
ON #Reference_Point // Ref.punkt erreicht
O #Man_Mode // oder Handbetrieb
R #Referenzfahrt_merken

Network: 15 Sammelstörung + Störung quittieren

O #Fault_Limits
O #Fault_Pulse_sequence
O #Fault_Move_direction
= #Sammelstoerung
//
A #Ackn_Fault
R #Fault_Limits
R #Fault_Pulse_sequence
R #Fault_Move_direction

Seite von
SIMATIC

Network: 16 Störung Endlagen

// UN #Refer_Punkt ??
// ON #Ende_Verstellber ??
// U #Pos_erreicht ??
O(
AN #Reference_Point
AN #End_Range_Adjustment
)
A #Release_Adjustment
S #Fault_Limits
A #Ackn_Fault
R #Fault_Limits

Network: 17 Störung Impulsfolge

O #Motor_Plus // Wenn Motor laueft


O #Motor_Minus
AN #FP_Impuls // und kein Impuls
JC M013 // dann springen
L 0 // sonnst Zeitzaehler auf 0 setzen
T #Zeitz_Impulsfolge
JU M014
M013: NOP 0
AN #FP_10Hz // Wenn nicht 10 Hz Impuzls
JC M014 // dann springen
L #Zeitz_Impulsfolge // sonnst Zeitzaehler um 1 erhoehen
L 1
+I
T #Zeitz_Impulsfolge
M014: NOP 0
L #Zeitz_Impulsfolge // Wenn Zeit überschritten
L #Pulse_Monitoring
>I
A #Release_Adjustment
S #Fault_Pulse_sequence // dann Stoerung setzen
//
A #Ackn_Fault
R #Fault_Pulse_sequence

Network: 18 Störung Fahrrichtung

A #Motor_Plus
A #FN_Ref
S #Fault_Move_direction

A #Motor_Minus
A #FN_Ende
A #Release_Adjustment
S #Fault_Move_direction
//
A #Ackn_Fault
R #Fault_Move_direction

Network: 19 Nachlauf +

A #Motor_Plus // Wenn Motor laueft


JC M015
A #Bewegung_Plus // Wenn Motor nicht angesteuert
A #FP_Impuls // und Bewegung laueft nach und Impuls
JC M016 // Dann springen
JU M017
M015: NOP 0 // Nachlaufzaehler auf 0 setzen
L 0
T #Nachlauf_Plus
JU M017
M016: NOP 0
L #Nachlauf_Plus // Nachlauf
L 1 // um 1 erhoehen
+I
T #Nachlauf_Plus
M017: NOP 0

Seite von
SIMATIC

Network: 20 Nachlauf -

A #Motor_Minus // Wenn Motor laueft


JC M018
A #Bewegung_Minus // Wenn Motor nicht angesteuert
A #FP_Impuls // und Bewegung laueft nach und Impuls
JC M019 // Dann springen
JU M01a
M018: NOP 0 // Nachlaufzaehler auf 0 setzen
L 0
T #Nachlauf_Minus
JU M01a
M019: NOP 0
L #Nachlauf_Minus // Nachlauf
L 1 // um 1 erhoehen
+I
T #Nachlauf_Minus
M01a: NOP 0

Network: 21 Pos.erreicht

AN #Sammelstoerung
AN #Bewegung_Plus
AN #Bewegung_Minus
AN #Referenzfahrt_merken
A(
L #Impulszaehler
L #Obere_Grenze_Ziel
<=I
)
A(
L #Impulszaehler
L #Untere_Grenze_Ziel
>=I
)
A(

L #Original_Ziel
L #Length_RefPos_A
<=I
)
A(
L #Original_Ziel
L #Length_Endpos_B
>=I
)
= #Position_reached

Seite von