Funktionsbausteine

Zuviel Werbung?
-> Hier kostenlos registrieren
Ich wollte mir einen Impuls zum stoppen eines Prozesses generieren, leider funktioniert es nicht.

Die Variable "Abbruchbedingung_Füll" werte ich auf eine negative Flanke aus, wenn diese Abbruchbedingung_Füll von 1 auf 0 wechselt, bekomm ich eine 1 an meinem Timer aber die Zeit läuft nicht ab. Es sollte doch eigentlich funktionieren oder?

Eine andere Frage noch, ich hab mir ja einen DB für den Timer erzeugt, in dem sollte ich doch dann über PT die Zeitdauer des Impulses eintragen bzw wenn ich das dort habe, wieso muss ich es nochmal bei Value am Timer schreiben. (oder brauch ich das eine nicht...??)

Ich hoffe ich kann am Freitag Nachmittag nochmal auf eure Hilfe zählen ;) schon mal danke
Schreib doch einfach mal an deinen Timer einen normalen Eingang oder einen freien Merker hin, den du beliebig setzen/rücksetzen kannst.
Dann siehst du doch, ob es am Timer oder an deiner Flanke liegt.
Flanken scheinen ja so wie so deine besonderen Freunde zu sein.
 
@Paul,
ich muss Dir Recht geben. Schon nach nur diesem kleinen Ausschnitt, schlägt man die Hände über dem Kopf zusammen.

@Schmidtchen,
warum deklarierst Du denn 2 verschiedene boolsche Variablen, wenn sie dann gleich programmiert sind?
Das kann man doch auch mit einer machen!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,

Bei der Variable "Ansteuerung_Ventil" handelt es sich um eine Output-Variable, sodass sich diese nicht im nächsten Netzwerk verarbeiten lässt (Flankenauswertung). Aus diesem Grund hab ich noch eine Variable "Abbruchbedingung_Füll" im STATIC-Bereich deklariert.

Hab jetzt die Flanke erst mal herausgenommen und wieder probiert aber der timer läuft nicht ab.

Ich hab den Timer als Systembaustein (siehe Foto) muss ich dort denn überhaut eine Zeit an PT deklarieren oder reicht es wenn ich es lokal an der Verwendungsstelle mache??

LG
 

Anhänge

  • Füll_time_neu.png
    Füll_time_neu.png
    20,4 KB · Aufrufe: 14
  • Füll_timer_Systembaustein.jpg
    Füll_timer_Systembaustein.jpg
    22,7 KB · Aufrufe: 11
Hab mir eben mal ein weiteres Netzwerk eingefügt und mir einen weiteren TP aber diesmal als Multiinstance deklariert, nun funktioniert das schon mal.
Áber warum funktioniert die Einzelinstance nicht? (bzw für was würde ich eine Einzelinstance nehmen?)
Jetzt muss ich nur noch die Flankenauswertung dazu bauen.

LG
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Für timer nimmst du nie einzelinstanzen. Und in Bausteinen die du womöglich kopieren willst sowieso nicht. Wenn du deinen baustein nun zweimal aufgerufen hast ist auch die tp instanz zweimal in verwendung dann tut der timer nicht. Das gilt auch für flanken und alles andere mit instanz.
 
Moin,

Ich bin grad dabei ein paar kleinere Probleme zu beheben.
Da ich vergeblich hier nach einer Lösung gesucht hab frag ich einfach mal, ich lasse mir das Datum und die Uhrzeit in zwei sepperaten Feldern anzeigen. Aber das Datum stimmt nicht, kann ich das irgendwie einstellen das die Zeit und das Datum aktualisiert wird? Denke mal das KTP 600 (BASIC PANEL) wird einen Wert aus der SPS benötigen, macht man das mit einem speziellen OB oder ....??

Ist das überhaupt möglich, wenn ich das Gerät "autark" verwende bzw. das Gerät mal komplett ausgeschaltet werden kann (Spannungsversorgung unterbrochen). Wäre es da sinnvoller eine Aktualisierungsabfrage beim starten des Gerätes (wenn die CPU in RUN geht) zu machen??
 
Zuletzt bearbeitet:
Uhrzeitfunktionen
tooltip-icon-variant.gif
chapter.png



Glossar


RD_SYS_T: Uhrzeit lesen (S7-1200, S7-1500)


Dieses Kapitel enthält Informationen zu folgenden Themen:
  • WR_SYS_T: Uhrzeit stellen (S7-1200, S7-1500)
  • RD_SYS_T: Uhrzeit lesen (S7-1200, S7-1500)
  • RD_LOC_T: Lokalzeit lesen (S7-1200, S7-1500)
  • WR_LOC_T: Lokalzeit schreiben (S7-1200, S7-1500)
  • SET_TIMEZONE: Zeitzone setzen (S7-1200, S7-1500)
  • TimeTransformationRule (S7-1200, S7-1500)
  • SNC_RTCB: Uhrzeitslaves synchronisieren (S7-1500)
  • TIME_TCK: Systemzeit lesen (S7-1500)
  • RTM: Betriebsstundenzähler (S7-1200, S7-1500)
 
Zuletzt bearbeitet von einem Moderator:
das ist der Auszug aus der Online-Hilfe, einfach mal rauskopiert. Die Links hat's automatisch gemacht, weil die Hilfe ja HTML macht, sorry.
mk:mad:MSITStore:C:\Program%20Files%20(x86)\Siemens\Automation\Portal%20V12\Help\de-DE\ProgExtInstr2MdeDE.chm::/15889165323/17022067723.htm#
Mit "suchen" > Uhrzeitfunktionen landet man genau dort.

Und die Bausteinbezeichnungen hast Du ja auch drin, findest du unter "Erweiterte Anweisung, Datum+Uhrzeit".

Gerry
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Für timer nimmst du nie einzelinstanzen. Und in Bausteinen die du womöglich kopieren willst sowieso nicht. Wenn du deinen baustein nun zweimal aufgerufen hast ist auch die tp instanz zweimal in verwendung dann tut der timer nicht. Das gilt auch für flanken und alles andere mit instanz.

Hi vollmi,

da bin ich aber anderer Meinung.

Wenn ich einen Timer in einer Ablaufebene starten aber in einer anderen aber dessen Ablauf benötige, dann nehme ich eine einzelne Instanz.
Wenn ich einen Timer in einer Funktion benötige, dann bleibt dir auch nix anderes übrig als eine einzelne Instanz zu verwenden, da gibt es keinen static Bereich.
Wenn ich einen Timer nur innerhalb eines FB benötige, dann nehme ich eine Mulit-Instanz.

Damit ein Timer nicht einen ganzen DB verschwendet, kann man mehrere innerhalb eines globalen DB anlegen. Das fühlt sich an wie in Step7 V5 mit den Timernummern. Nachteile hab ich noch keine besonderen entdeckt. Nur die üblichen wegen des konsistenten Ladens.

'n schön' Tach auch
HB
 
Moin, hätte mal ein Frage zur Datentypumwandlung....

Ich möchte eine Messzeit eingeben (im Format: 00:00 hh:mm) und diese auf den gültigen Bereich testen (00:00 < Time < 24:00).

Da ein Größer Gleich nur mit Werten vom Datentyp "Time" arbeiten kann, wollte ich die Variable "Sollwert_Messzeit" von "Time_OF_Day" in Time wandeln, dass schein auch zu funktionieren. Wenn ich aber die untere Grenze (00:00) bzw die obere Grenze (24:00) konvertieren will geht das nicht.

In welchen Datentyp müsste ich konvertieren um die Zeit weiterverarbeiten zu können? (Bei Time muss ich ja meine Stunden noch in Sekunden umrechnen oder? )



Was ich eigentlich vorhab ist, nach dem prüfen des Gültigkeitsbereiches möchte ich die Zeit die eingegeben wurde ablaufen lassen und mir das in einem anderem Feld anzeigen lassen.

Oder wäre es ratsam eine Getrennte Eingabe von Stunden und Minuten zu machen und diese zu überprüfen?

Wie würdet ihr das angehen?
 

Anhänge

  • Grenzen_konvertierung.png
    Grenzen_konvertierung.png
    18,1 KB · Aufrufe: 14
Zuletzt bearbeitet:
Moin, hätte mal ein Frage zur Datentypumwandlung....

Ich möchte eine Messzeit eingeben (im Format: 00:00 hh:mm) und diese auf den gültigen Bereich testen (00:00 < Time < 24:00).

Da ein Größer Gleich nur mit Werten vom Datentyp "Time" arbeiten kann, wollte ich die Variable "Sollwert_Messzeit" von "Time_OF_Day" in Time wandeln, dass schein auch zu funktionieren. Wenn ich aber die untere Grenze (00:00) bzw die obere Grenze (24:00) konvertieren will geht das nicht.

In welchen Datentyp müsste ich konvertieren um die Zeit weiterverarbeiten zu können? (Bei Time muss ich ja meine Stunden noch in Sekunden umrechnen oder? )



Was ich eigentlich vorhab ist, nach dem prüfen des Gültigkeitsbereiches möchte ich die Zeit die eingegeben wurde ablaufen lassen und mir das in einem anderem Feld anzeigen lassen.

Oder wäre es ratsam eine Getrennte Eingabe von Stunden und Minuten zu machen und diese zu überprüfen?

Wie würdet ihr das angehen?

Hab jetzt schon was gefummelt, hab es über eine getrennte Eingabe gemacht und Addiere die Systemzeit mit einem normierten und skalierten Wert. (als Eingabe habe ich einen Integerwert (für Stunden: 00<Stunden< 24 und für Minuten: 00<Minuten<59)

Ich habe 24h auf 86400 Sekunden (24 x 3600 Sekunden) und 59 Min auf 3540 Sekunden skaliert. Kann es sein das ich auf Millisekunden skalieren muss?? also alles noch mit 1000 multiplizieren??
 
Ich versuche gerade einen Fehler zu beseitigen, leider klappt es nicht.

Bei der Druckmessung (maximal 400 bar = 4 bis 20 mA) tritt eine gewisse Abweichung von dem erwarteten Wert auf. Ich hatte zu erst den Druck über eine Geradengleichung berechnet, hatte zunächst auch funktioniert war bloß nicht so genau.

Da ich bei 20 mA einen Druck von ca. 380 bar hatte an statt 400 bar. (Über Geradengleichung berechnet)

Nun wollte ich mit Norm_X und SCALE_X diese Messungenauigkeit beseitigen, klappt aber nicht.
Ich habe mir für die Signalvorgabe (4 bis 20 mA) einen Kalibrator genommen und den anstatt des Sensors angeklemmt.
Wenn ich 4 mA einstelle habe ich 25 bar, bzw die AI karte gibt 6950 aus....sollten doch aber eigentlich 5530 sein oder?? :confused:

Was mach ich falsch? Wo liegt der Fehler?

LG
 

Anhänge

  • Druckmessung_baustein.png
    Druckmessung_baustein.png
    23,2 KB · Aufrufe: 10
  • Druckmessung_neu.png
    Druckmessung_neu.png
    24,1 KB · Aufrufe: 14
Zuviel Werbung?
-> Hier kostenlos registrieren
stimmt schon, eigentlich müsstest Du weniger sehen.

Mache doch einfach mit dem Kalibrator 4 mA und stelle den Min an deinem Baustein so ein, das der Ausgang 0 bar bringt, und dann das gleiche für den 20mA Wert, bis du 400 bar siehst. Wenn Du das in einen DB legst und auf' Panel bringst, hast du ein Justiermenü ;-)
 
Danke für den Hinweis, hab eben nochmal geschaut aber die Karte ist richtig eingestellt....

Kanal 1 ist IW96 4...20mA

Ich wird mal schauen was ich bei 4 mA und bei 20 mA bekomme und die Werte dann bei der Normierung verwenden.

LG
 

Anhänge

  • AI_HW_konfig.png
    AI_HW_konfig.png
    38,1 KB · Aufrufe: 8
Wenn du bei 4mA nicht die Werte aus den baugruppendaten (4mA = 0) bekommst. Dann kannst du davon ausgehen dass da noch ein verdrahtungsproblem besteht.
 
Zurück
Oben