Variablenproblem im FB

Chris48

Level-1
Beiträge
30
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

also ich bin jetzt hier neu im Forum und möchte mich hier schonmal entschuldigen, wenn ich mein Thema falsch gepostet habe oder dieses Thema schon 1000-mal behandelt wurde (habe die Suchfunktion benutzt ;) )

Auch arbeite ich erst seit zirka 3 Monaten neben der Schule mit der S7 bzw dem Pedant von Vipa und deren Programm WinPLC.

so nun zu meinem Problem,

im Ganzen versuche ich eine Funktionsblock für einen Taktbetrieb zu erstellen.
Zum üben habe ich jetzt erst mal versucht quasi eine "Anlaufverzögerung" zu erstellen, also dass ein Wert der Eingegeben wird heruntergezählt wird, jeweils beim Betätigen eines Eingangs (zur besseren Veranschauung) später durch den Taktmerker 255.0 der ja einen 1Sekundentakt ausgibt.
Ich glaube das meine Funktion an sich auch richtig ist, da beim Betätigen des Eingangs auch von 10 auf 9 gezählt wird, nur wenn ich jetzt den Eingang zurücksetz und den "Runterzählteil" überspring, setzt sich meine Variable wieder auf 10, diese müsste doch ihren Wert, wenn er nicht verändert wird (dieser Teil wird ja übersprungen) beibehalten für den nächsten Zyklus, oder nicht???

Wo liegt hier mein Denkfehler oder vielleicht Definitionsfehler im Kopf des FB.
Würde mich über Antworten freuen :) sehr recht wäre mir wenn diese vom Konzept gleich sind mit meiner idee mit den Sprüngen, da ich hier immer einwenig von einem Beispielprogramm abschaue ;)

Kopf des FB
inSekunden_SollINT
inS_PulsBOOL
outStartanforderungBOOL
in_out
varSekunden_IstINT
temp


AWL-Zeilen des FB


L #Sekunden_Soll
T #Sekunden_Ist

UN #S_Puls
SPB END

L #Sekunden_Ist
L 1
-I
T #Sekunden_Ist
END: NOP 0

L #Sekunden_Ist
L 0
<=I
= #Startanforderung

AWL-Zeilen des OB

CALL FB 1,DB1
Sekunden_Soll:=10
S_Puls:=E0.0
Startanforderung:=A0.0
 
Du setzt Deinen Zähler bei jedem Zyklus wieder auf den Anfangswert. Dir fehlt noch ein FB-Eingang welcher den Start der Zählung einleitet.

Z.B.

Code:
      UN #Start
      SPB M001
      L #Sekunden_Soll
      T #Sekunden_Ist
M001: UN #S_Puls

Edit: Außerdem solltest Du den S_Puls flankenauswerten, sonst ist Dein Zähler wohl vor dem Ablauf einer 1 Sekunde auf 0 ;).
 
Zuletzt bearbeitet:
Also gut, das problem wäre jetzt gelöst :)

habe jetzt auch meinen Zeittakt FB fertig, nur geht er mal wieder leider net :( ... habe ihn heute schon den ganzen mittag durchprobiert und auch ein paar sachen gefunden, aber es will einfach nicht.
Ich glaube, dass das problem darin liegt, dass #Arbeit_Ende gleich zu beginn auf True steht, was ja nicht sein darf, da ja noch Zeiten in #Arbeit_Ist gespeichert sind.

danke für Antworten

inS_PulsBOOL
inTakt_aktivierenBOOL
inArbeit_Soll_sekINT
inArbeit_Soll_minINT
inArbeit_Soll_hINT
inPause_Soll_sekINT
inPause_Soll_minINT
inPause_Soll_hINT
outBetriebsanforderungBOOL
in_outArbeit_Ist_sekINT
in_outArbeit_Ist_minINT
in_outArbeit_Ist_hINT
in_outPause_Ist_sekINT
in_outPause_Ist_minINT
in_outPause_Ist_hINT
varFlanke_Zeittakt_StartBOOL
varFlanke_S_PulsBOOL
varArbeit_EndeBOOL
varPause_EndeBOOL
varTakt_Befehl_StartBOOL
temp



UN #Takt_aktivieren //Arbeitszeit Null setzen
SPBN M001
L 0
T #Arbeit_Ist_sek
T #Arbeit_Ist_min
T #Arbeit_Ist_h
T #Pause_Ist_sek
T #Pause_Ist_min
T #Pause_Ist_h
SPA END

M001: U #Takt_aktivieren //Arbeitszeit laden
FP #Flanke_Zeittakt_Start
SPBN M002
L #Arbeit_Soll_sek
T #Arbeit_Ist_sek
L #Arbeit_Soll_min
T #Arbeit_Ist_min
L #Arbeit_Soll_h
T #Arbeit_Ist_h

M002: L #Arbeit_Ist_sek //Auswertung Arbeitszeit
L #Arbeit_Ist_min
+I
L #Arbeit_Ist_h
+I
L 0
<=I
U #Takt_aktivieren
= #Arbeit_Ende

L #Pause_Ist_sek //Auswertung Pausenzeit
L #Pause_Ist_min
+I
L #Pause_Ist_h
+I
L 0
<=I
U #Takt_aktivieren
= #Pause_Ende

U #Arbeit_Ende
U #Takt_Befehl_Start
SPBN M003
L #Pause_Soll_sek
T #Pause_Ist_sek
L #Pause_Soll_min
T #Pause_Ist_min
L #Pause_Soll_h
T #Pause_Ist_h
SPA M004

M003: U #Pause_Ende
UN #Takt_Befehl_Start
SPBN M004
L #Arbeit_Soll_sek
T #Arbeit_Ist_sek
L #Arbeit_Soll_min
T #Arbeit_Ist_min
L #Arbeit_Soll_h
T #Arbeit_Ist_h

M004: UN #Arbeit_Ende
U #Pause_Ende
= #Takt_Befehl_Start

U #Arbeit_Ende
SPB Paus

U #Pause_Ende
SPB END

U #S_Puls
FP #Flanke_S_Puls
SPBN END

L #Arbeit_Ist_sek
L 1
-I
T #Arbeit_Ist_sek
L 0
<=I
SPB Amin

SPA END

Amin: L #Arbeit_Ist_min
L 1
-I
T #Arbeit_Ist_min
L 0
<=I
SPB Ah
L 59
T #Arbeit_Ist_sek

SPA END

Ah: L #Arbeit_Ist_h
L 1
-I
T #Arbeit_Ist_h
<=I
SPB A000
L 59
T #Arbeit_Ist_sek
T #Arbeit_Ist_min

SPA END

A000: L 0
T #Arbeit_Ist_sek
T #Arbeit_Ist_min
T #Arbeit_Ist_h

SPA END

Paus: L #Pause_Ist_sek
L 1
-I
T #Pause_Ist_sek
L 0
<=I
SPB Pmin

SPA END

Pmin: L #Pause_Ist_min
L 1
-I
T #Pause_Ist_min
L 0
<=I
SPB Ph
L 59
T #Pause_Ist_sek

SPA END

Ph: L #Pause_Ist_h
L 1
-I
T #Pause_Ist_h
L 0
<=I
SPB P000
L 59
T #Pause_Ist_sek
T #Pause_Ist_min

SPA END

P000: L 0
T #Pause_Ist_sek
T #Pause_Ist_min
T #Pause_Ist_h

SPA END

END: NOP 0

U #Takt_aktivieren
U #Takt_Befehl_Start
= #Betriebsanforderung
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Also er soll halt einen Zeittakt ausführen, bei dem jeweils die Pausenzeit und die Arbeitszeit heruntergezählt wird und so ein Motor gestartet bzw. gestoppt wird, das Laden der Soll Zeiten in die Ist zeiten funktioniert auch, auch wird Null in die Ist Zeiten geladen wenn der Zeittakt mit #Zeittakt_Aktivieren nicht gesetzt ist.
nur kann mit betätigen von S_Puls die zeit nicht sekundenweise heruntergezählt werden (wird später durch einen Taktmerker mit Sekundenimpuls ersetzt) ich glaube das es daher kommt, dass der #Arbeit_Ende schon zu Beginn auf True steht obwohl dass ja erst der fall sein dürfte, wenn die #Arbeits_Ist heruntergelaufen ist und gleich Null ist.

war das so verständlich :)??? finde es schwer mich hier richtig auszudrücken.

danke für antworten
 
Zurück
Oben