TIA Takt selbst programmieren

SimUser

Level-2
Beiträge
52
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebes Forum,

ich versuche gerade einen Takt selber zu programmieren, da die Taktzeit sehr variabel gestaltet werden soll. Aus diesem Grund kommen die internen von Siemens leider nicht in Frage.

Ich verwende:

TIA V19 Upd 3
CPU S7 1518
WinCC Panel Comfort TP900

wenn ich etwas vergessen haben sollte, bitte fragen.

Ich bin so vorgegangen:

  • Als Vorgabe verwende ich eine Zahl welche sich ändern kann
  • Das Ergebnis ist bspw 0.085 (REAL)
  • Im nächsten Schritt habe ich 1 Timer programmiert, einen TON Timer und eine IF Bedingung
  • Resultat : ein Takt
Mein Frage dazu wäre: Wie muss ich den Datentyp REAL konvertieren, wenn ich die Zahl oben, die 0.085 als ms haben möchte?

Gruß
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie muss ich den Datentyp REAL konvertieren
konvertiere den REAL-Wert in TIME (DINT in ms) und den dann in S5TIME
REAL# ---> TIME# ---> S5TIME (S5T#)

EDIT: :oops: ich hatte TON/TOF mit S7-Timern verwechselt. Also nicht S5TIME sondern TIME ist das Zeitformat
 
Zuletzt bearbeitet:
Wenn ich sagen wir mal ich wandel den REAL in DINT um (oder was anderes) woher weiss ich dann wie der TON Timer den Zahlenwert interpretiert? Ist das für den Timer eine Zahl in Sekunden oder in Millisekunden?
Siehe F1-Hilfe des TIA Portals.
Timer erwarten TIME als Zeitformat, was prinzipiell ein DINT mit Zeit in Millisekunden ist.

Welche Zeit sollte ich bei dem nachgeschalteten TOF Timer angeben? Es soll ja sofort reagiert werden und nicht gewartet werden. Ich will das Signal setzen und gleich wieder zurücksetzen. Also im Sinne eines Taktes 0-1-0-1-0-1 usw.
Kommt drauf an ob du gleichlange 0/1 Phasen haben willst oder nicht.
Ich denke du kommst drauf ;)

Wobei ich bei einem selbst programmierten Takt keine Timer nehmen würde, da Timer mitten im Zyklus enden können, aber erst beim nächsten Aufruf des Codes darauf reagiert wird.
Damit "driftet" der Takt immer um ein paar MS, je nachdem wann genau der Timer im Zyklus endet.
Falls dich das stören sollte, wäre z.B. die TIME_TCK Funktion einen Blick wert.

Was ist der Unterschied zwischen

REAL# ---> TIME# ---> S5TIME (S5T#)

Und


REAL# ---> DINT# ---> TIME?
Sind unterschiedliche Formate für die Angabe von Werten bzw. wer in was konvertiert wird.
Google und F1-Hilfe des TIAs sind deine Freunde.
Angabe des Formats wird hier Explizit angegeben, also: Format#Wert
Nicht alle Datentypen müssen explizit angegeben werden, "2.0" wird von TIA beispielsweise automatisch als REAL interpretiert.
 
Wobei ich bei einem selbst programmierten Takt keine Timer nehmen würde, da Timer mitten im Zyklus enden können, aber erst beim nächsten Aufruf des Codes darauf reagiert wird.
Damit "driftet" der Takt immer um ein paar MS, je nachdem wann genau der Timer im Zyklus endet.
Falls dich das stören sollte, wäre z.B. die TIME_TCK Funktion einen Blick wert.
Das gleiche Problem hat man genauso bei der Verwendung von TIME_TCK, wenn man Jetztzeitpunkt >= Startzeitpunkt + Solldauer vergleicht. Um das zu umgehen, müsste man zur Berechnung des nächsten Schaltzeitpunktes nicht den aktuellen Zeitpunkt, sondern den vorher berechneten Sollzeitpunkt nehmen, d.h. die Zeitdauer, die man aktuell über den Sollzeitpunkt drüber ist, von der nächsten Sollzeitdauer abziehen.

Bei der Verwendung von TON-Timern kommt noch zusätzlich dazu, dass man den Timer im selben Zyklus neu starten muss, wenn der Timer abläuft. Bei normaler Programmierung verlängert sich sonst wegen der nötigen Startflanke die tatsächliche Zeitdauer um zusätzlich 1 OB1-Zykluszeit.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Das gleiche Problem hat man genauso bei der Verwendung von TIME_TCK, wenn man Jetztzeitpunkt >= Startzeitpunkt + Solldauer vergleicht. Um das zu umgehen, müsste man zur Berechnung des nächsten Schaltzeitpunktes nicht den aktuellen Zeitpunkt, sondern den vorher berechneten Sollzeitpunkt nehmen. Oder zum Sollzeitpunkt eine halbe OB1-Zykluszeit abziehen.
Oder einfach was zum selbst drüber nachdenken übrig lassen ;)

@SimUser , du kannst per Trace detailliert analysieren ob dein Code so funktioniert wie gewünscht & ob du den Takt einhällst oder nicht.
Und immer dran denken: F1 ist dein Freund;)
 
Zurück
Oben