TIA Problem mit Zeitbaustein

Moo

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

ich bin leider noch ziemlicher Anfänger und benötige einige Hilfe. Mein Problem besteht darin, dass ich aus einem Rezept eine hinterlegte Zahl an einen Zeitbaustein mit S5Time schicken muss, aber leider keinen richtigen Plan habe, wie ich dies machen soll.

Ablauf:
Rezept wird auf Panel angewählt und an die Steuerung geschickt.
Dort wird es in einen DB geschrieben.

Der Wert (z.b. 10) für 10 Sekunden muss ich jetzt aber irgendwie meinem S_VIMP zukommen lassen, wie mache ich das?

Programmiere mit FUP.

Vielen Dank für die Hilfe!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Aber das Problem ist ja, im Rezept steht zum Beispiel 10 als Int. Wenn ich jetzt dem TW Eingang die vom Datenbaustein zuweise, weiss der ja nicht ob ich jetzt 10s, 10ms, 10 min oder was auch immer haben will?
 
Du musst im Rezept schon den richtigen Datentyp angeben.

Ein S5-Timer benötigt S5-Time als Datentyp.
Die Umwandlung von Int in S5-Time ist in der FAQ beschrieben.

Etwas einfacher funktioniert das mit den IEC-Timern.
Dort sind die Zeitvorgaben vom Format TIME, die DINTs entsprechen, die die Zeit in Millisekunden angeben.
 
Schau Dir mal in der TIA-Hilfe den Aufbau des Datentyps S5TIME an.
Zum Umwandeln der Sekunden vom Rezept in eine S5TIME für den S_VIMP kannst Du den FC40 TIM_S5TI aus Step7 classic "Standard Library/IEC Function Blocks" verwenden (ich weiß nicht, wo der jetzt in TIA ist) oder diesen AWL-Code:
Code:
L  #myTime    //(INT) 0..999 (Sekunden)
L  1000
MOD           //vorsichtshalber auf 0..999 bringen
ITB           //nach BCD wandeln
OW W#16#2000  //S5T#-Zeitbasis 1s dazu
T  #myS5Time  //(S5TIME) zum Anschalten an den S5-Timer

Für welche CPU brauchst Du das? Für S7-1500 sollte man die S5-Timer nicht mehr verwenden (kann aber).

Harald
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Erst mal vielen Dank! Die Übernahme vom Rezept funktioniert jetzt und der Zeitbaustein funktioniert auch. Das einzige Problem ist jetzt noch, dass ich Zeiten von ca. 0-30s benötige, dafür muss ich im Rezept jetzt allerdings bsp. 30000 eingeben für 30 s, was auf der Anzeige dann doch etwas bescheiden aussieht. Wie könnte ich das noch umrechnen?

TIA V13 mit WinCC V13 für S7-313 C mit TP 170A
 
Erst mal vielen Dank! Die Übernahme vom Rezept funktioniert jetzt und der Zeitbaustein funktioniert auch.
Wäre nett, wenn Du auch angegeben hättest, nach welcher Methode es funktioniert.
Jetzt müssen wir raten.
;)

Das einzige Problem ist jetzt noch, dass ich Zeiten von ca. 0-30s benötige, dafür muss ich im Rezept jetzt allerdings bsp. 30000 eingeben für 30 s, was auf der Anzeige dann doch etwas bescheiden aussieht. Wie könnte ich das noch umrechnen?
Das lässt vermuten, dass Du von den S5-Timern auf die IEC gewechselt hast.

Da musst Du eigentlich gar nichts umrechnen, sondern lediglich bei der Anzeige einstellen, dass das Dezimaltrennzeichen an der 3. Stelle angezeigt werden soll, z.B.:

WinCC flex - Dezimalpunkt verschieben.jpg

PS:
Die Nachkommastellen gibt's auch im Rezept.
Wenn die Nachkommastellen komplett stören, gibt's bei der Variablendeklaration im HMI auch die Möglichkeit der linearen Skalierung, z.B. 1 im HMI entspricht 1000 in der SPS.
 
Zuletzt bearbeitet:
Nein ich habe alles mit S5 Timern gelassen, im Rezept steht jetzt bsw. 30000 und ich übermittle den Wert als S5Time an die Steuerung und schreibe dort in einen Datenbaustein, woraus sich die Funktion dann wieder für den jeweiligen Zeitbaustein die Zeit holt. Das funktioniert soweit auch alles, habe es auch im Beobachten- Modus verfolgt, passt. Einzigst die Anzeige war mir noch nicht klar, ich versuche das nachher gleich noch nach dem obigen Vorschlag. IEC Timer wollte ich nicht verweden, da ich teilweise noch nicht fertig abgelaufene Zeiten resetten muss und dies bei den IEC Timern keinen Reset Eingang gibt.
 
Gut zu wissen mit dem Reset! Aber um nochmals auf das Zeitproblem zurück zukommen, gibt es keine Möglichkeit im Rezept "die richtigen Sekunden" statt die ms (daher die 30000) einzutragen und dann in der Steuerung daraus die passende S5Time zu machen, Hintergrund ist das auch neue Rezepte eingegeben werden können und so Riesenzahlen nur Probleme machen. Ich stell mir das so vor: Im Rezept steht 30 Datentyp beliebig, wird an die Steuerung gesendet, Multipliziert mit 1000 wegen der Umrechnung s/ ms und dann dem Zeitbaustein zur Verfügung gestellt, schlussendlich als S5Time.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Noch mal die Frage, warum Du z.B. 30.000 eingeben musst?
Haralds Code arbeitet mit Sekundenangaben, nicht mit ms.



Ansonsten, wie bereits erwähnt, die lineare Skalierung bei der Variablendeklaration im HMI:

Lineare Skalierung.jpg
 
Zuletzt bearbeitet:
Ich stell mir das so vor: Im Rezept steht 30 Datentyp beliebig, wird an die Steuerung gesendet, Multipliziert mit 1000 wegen der Umrechnung s/ ms und dann dem Zeitbaustein zur Verfügung gestellt, schlussendlich als S5Time.
Wenn Du mit S5TIME arbeiten willst macht die Multiplikation mit 1000 sehr wenig Sinn, weil die S5-Timer mit Millisekunden eh' nichts anfangen können.

Du mußt Dich schon entscheiden:
- entweder gibst Du im Rezept die Zeit in ganzen Sekunden ein (z.B. 30) und konvertierst entsprechend Beitrag #5 in S5TIME und benutzt Deinen S5-Timer
- oder Du gibst im Rezept die Zeit in ganzen Sekunden ein (z.B. 30) und multiplizierst im SPS-Programm (oder per linearer Skalierung) mit 1000 und gibst die Millisekunden an einen Zeitbaustein der Millisekunden versteht
- oder Du gibst im Rezept die Zeit in Millisekunden ein (z.B. 30000) und gibst die Millisekunden an einen Zeitbaustein der Millisekunden versteht
- oder Du gibst im Rezept die Zeit in Millisekunden ein (z.B. 30000) und entfernst im SPS-Programm (oder per linearer Skalierung) die 2 oder 3 letzten Ziffern (per Division durch 100 oder 1000) und konvertierst entsprechend Beitrag #5 in S5TIME (die S5T#-Zeitbasis für 0,1s ist W#16#1000 - bis 99,9s nutzbar) und benutzt Deinen S5-Timer

PS:
- oder Du orientierst Dich an dieser Anleitung
Wie kann die Laufzeit eines Timers über ein Bediengerät vorgegeben bzw. die Restlaufzeit ausgegeben werden?

Harald
 
Zuletzt bearbeitet:
Ok, ich versuche nochmal ein bisschen genauer zu erklären: Ich habe im Rezept 30000 geschrieben und als S5Time gespeichert, weil ich den Wert schlussendlich an ein S_VIMP weitergeben will. Die 30000 werden ja vom Programm ja irgendwo in Form von S5T#30s so gespeichert. Würde ich nur 30 eingeben würde mir ja daraus 30ms gemacht werden.

Deshalb hatte ich das mir so gedacht:
oder Du gibst im Rezept die Zeit in ganzen Sekunden ein (z.B. 30) und multiplizierst im SPS-Programm (oder per linearer Skalierung) mit 1000 und gibst die Millisekunden an einen Zeitbaustein der Millisekunden versteht

Wobei ich finde die Skalierung über die HMI ist leicht "murks", oder?

Eigentlich will ich nur erreichen, das die im Rezept hinterlegten 30 (Datentyp egal) schlussendlich am TW Eingang meines S_VIMP als S5T#30s dastehen, nur ist mir nicht so ganz klar wie ich das bewerkstelligen soll. Ich glaub das ist die eigentliche Frage :D

s7.jpgs7_3.pngs7_2.png
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
S5Time kann keinen Wert von 30.000 enthalten! [Edit: Ja ok, in dez. ist bis 32.767 möglich, aber die Bedeutung ist in BCD eine andere [/edit]
S5Time ist eine BCD-Zahl mit 4 Stellen. Die höchste Stelle enthält codiert den Zeitbereich und die anderen 3 Stellen enthalten einen Wert von 0 bis 999.

Lineare Skalierung ist kein "Murks"!



Also noch einmal eine Anleitung, die Dir auch Harald so schon vorgegeben hat:

1. Benutze in Deinem Rezept INT (z.B. mit Wert 30)
2. Übergib diesen INT z.B. an Haralds Code aus Beitrag #5 (oder einen ähnlichen Baustein). Dieser wandelt den INT in S5Time um.
3. Übergib den umgewandelten Wert an Deinen Timer.

Und bitte, mach' doch einfach mal ein paar Screenshots, damit man mal sehen kann, was Du wirklich gemacht hast. Deine Erklärungen sind nun mal nicht in sich stimmig.
;)


PS:
Wenn 30.000 in Deinem Wert steht, könntest Du TIME (ohne S5) verwendet haben. Das sind 2 verschiedene Formate.
 
Zuletzt bearbeitet:
Ich bin erst mal etwas überrascht. :oops:
Als ich persönlich das letzte Mal mit S5Timern gearbeitet habe, war die Angabe in dieser Form (noch) nicht möglich (bisherige Siemens-Anleitung zu dem Thema).
Daher kursieren auch soviele solcher Anleitungen zur Umwandlung im Netz.

Das Format S5Time im HMI unter TIA enthält offensichtlich eine integrierte Umwandlung von ms (Time), in der die Eingabe erfolgt, zu S5Time, was an die SPS übergeben wird.
Leider kann ich dazu keine nähere Erläuterung bei Siemens finden.
Aber S5Time kann, wie schon erwähnt, definitiv keine Zahlen größer 999 (im BCD-Format plus eine 4. BCD Stelle für den Zeitbereich) enthalten.


Ich kann das momentan auch nicht selbst austesten.
Ich denke aber mal, dass die Verwendung der linearen Skalierung der richtige Weg sein wird, um die Nachkommastellen im HMI zu unterdrücken.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@hucki
Das ist schon absolut Uralt, und war schon zu Protool Zeiten so gewesen, da war TIA oder Flex noch nicht mal eine gspinnerte Idee:
https://support.industry.siemens.com/cs/de/de/view/31676209

Es gab hier lediglich mal einen Bruch im Sinne von der Basis "Sek" -> "mSek", als die sog. Windowsbasierten OPs dann irgendwann auftauchten.

P.S. Das ganze mag bei WinCC (also ohne Anhang TIA/Flexible) durachaus anders sein.
 
Zuletzt bearbeitet:
@hucki
Das ist schon absolut Uralt, und war schon zu Protool Zeiten so gewesen
Da konnte man in ein Feld einen Wert von 9990000 (ms) eingeben und das HMI hat für die SPS den S5Time-Wert 3999hex daraus gemacht? Also auch selbständig den Wertebereich in der 1. BCD-Stelle ermittelt?

Warum gab's und gibt's dann eigentlich soviele Anleitungen für die Umwandlung?


PS:
Hab' ja vorher auch gesucht und da unter anderem diese Angabe bei Siemens im oben verlinkten Beitrag gefunden:
Detaillierte Informationen zum Datentyp S5TIME finden Sie unter der Beitrags-ID 56243.

Ein Zugriff auf diesen Datentyp ist in WinCC nur über ein Skript möglich. Für das Lesen und Schreiben der S5TIME-Variable kommen dabei jeweils unterschiedliche VB-Skripte zum Einsatz.
Daher meine Aussage.
Da hab ich dann wohl das fehlende flex/TIA nicht bemerkt.
:oops:
 
Zuletzt bearbeitet:
Zurück
Oben