- Beiträge
- 24.658
- Reaktionspunkte
- 7.898
-> Hier kostenlos registrieren
Na, dann viel Erfolg beim Suchen!Ich schaue morgen früh mal, eigentlich sollte es die Funktion auch in SCL geben.

Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
Na, dann viel Erfolg beim Suchen!Ich schaue morgen früh mal, eigentlich sollte es die Funktion auch in SCL geben.
In der "richtigen" TIA-Hilfe steht es, daß die Werte in der DTL-Struktur nicht BCD sondern normal dezimal sind. Das kannst Du ohne TIA allerdings nur in der hunderte MB großen und zigtausende Seiten umfassenden PDF nachlesen (ich hab jetzt am Handy grad keinen Link)dort steht nicht, dass die Werte im DatenTyp DTL nicht im BCD-Format herumstehen. Aufgrund der verwendeten DatenTypen UINT, USINT und UDINT würde ich auch keine BCD-Formate erwarten.
Sogar in meiner spärlichen SCL-Doku (S7-SCL V5.3 für S7-300/400 A5E00324646-01) sind die FunktionenLaut TIA Handbuch sollte er da sein. Ich schaue morgen.
Man kennt ja Siemens. Mich würde es nicht wundern wenn das Handbuch / FAQ nur die halbe Wahrheit sagt und die Bausteine für 1x00er zu finden sind und für die 300/400'er nicht.....Morgen früh werden wir es sehen...![]()
Bis einschließlich TIA V15.1 gibt es das T_CONV zum extrahieren des Wochentags aus einem DT nur in FUP/KOP und nur für S7-300/400, aber nicht für SCL. In SCL kann als Ausgangsdatentyp INT nicht gewählt werden, nur DATE und TOD.Man kennt ja Siemens. Mich würde es nicht wundern wenn das Handbuch / FAQ nur die halbe Wahrheit sagt und die Bausteine für 1x00er zu finden sind und für die 300/400'er nicht.....
Zwischen dem schlecht dokumentierten SCL V5.x "classic" für S7-300/400 und dem noch schlechter dokumentierten TIA-SCL bestehen doch große Unterschiede. Hier im Thread reden wir (spätestens seit Beitrag #9) über SCL in TIA.Sogar in meiner spärlichen SCL-Doku (S7-SCL V5.3 für S7-300/400 A5E00324646-01)
Keine Panik, die Funktionen sind auch im TIA-SCL vorhanden und heißen auch noch so. Allerdings sind sie in der Dokumentation zu S7-300/S7-400 sehr versteckt.sind die Funktionen
DINT_TO_TIME() und TIME_TO_DINT()
aufgeführt und auch die hier eigentlich benötigten
DINT_TO_DATE() und DATE_TO_DINT().
Letztere Funktion (die ich mich zu verwenden getraut hatte) war der Grund dafür, den LösungsWeg über MOD und 2 Additionen anzuregen.
Man kann z.B. einen DATE-Wert aus einem DT holen mit DT_TO_DATE(). Oder einen Zahlenwert (Anzahl Tage seit 01.01.1990) berechnen und einer DATE-Variable mit dem Typecast DINT_TO_DATE zuweisen.Nur, wie man ein Datum in eine Variable des DatenTyps DATE hineinbekommt, das nicht vor dem Compilieren als DatumsKonstante in der Form D#2022-11-01 vorliegt, erschliesst sich mir noch nicht ...
#myDint := DATE_TO_DINT(D#2022-11-01); //ergibt 11992
#myDate := DINT_TO_DATE(#myDint + 1); //ergibt D#2022-11-02
#myDint := DATE_TO_DINT(#myDate); //ergibt 11993
#myDint := 11000;
#myDate := DINT_TO_DATE(#myDint + 992); //ergibt D#2022-11-01
Hier noch der Link zum Handbuch:In der "richtigen" TIA-Hilfe steht es, daß die Werte in der DTL-Struktur nicht BCD sondern normal dezimal sind. Das kannst Du ohne TIA allerdings nur in der hunderte MB großen und zigtausende Seiten umfassenden PDF nachlesen (ich hab jetzt am Handy grad keinen Link)
Um das gewünschte Ergebnis zu liefern, nämlich 1=Mo ... 7=So, müsste aber in SCL ...gibst es im S7 eine Funktion, die mir den Wochentag (MO-SON / 1- 7 ) durch das Datum ermitteln kann ?
Die korrekte Formel ist:
Code:iWeekDay := DINT_TO_INT((dDate + 1) MOD 7) + 1 ; // 1 (sunday) .. 7 (saturday)
iWeekDay := DINT_TO_INT((dDate + 0) MOD 7) + 1 ; // 1 (monday) .. 7 (sunday)
Hier für die 300ér in TIA V15.1Wie man in dem Bild in Beitrag #2 sehen kann, soll es eigentlich eine Konvertierfunktion mit T_CONV zu "INT (Wochentag)" geben. Die gibt es in SCL aber nicht (vielleicht nur in FUP/KOP?) (zumindest nicht bis TIA V15.1)
Ich schaue morgen früh mal, eigentlich sollte es die Funktion auch in SCL geben.Wie man in dem Bild in Beitrag #2 sehen kann, soll es eigentlich eine Konvertierfunktion mit T_CONV zu "INT (Wochentag)" geben. Die gibt es in SCL aber nicht (vielleicht nur in FUP/KOP?) (zumindest nicht bis TIA V15.1)
In der TIA Hilfe "T_CONV: Zeiten umwandeln und extrahieren (S7-300, S7-400)" wird die Extraktion des Wochentags aus dem Format DATE_AND_TIME immerhin erwähnt:
Anhang anzeigen 64624
Da gibt es aber keinen Hinweis, daß das nur in FUP/KOP geht. Zieht man die Anweisung T_CONV in einen SCL-Code, dann kann man bei Quelltyp DT für Zieltyp nur DATE und TOD wählen, aber nicht INT.
Man müsste mal prüfen, was der Baustein ausgibt, wenn man DATE_TO_INT ausführt. Aus der Hilfe kann ich das nicht so richtig raus lesen.soll es eigentlich eine Konvertierfunktion mit T_CONV zu "INT (Wochentag)" geben. Die gibt es in SCL aber nicht
Man müsste mal prüfen, was der Baustein ausgibt, wenn man DATE_TO_INT ausführt. Aus der Hilfe kann ich das nicht so richtig raus lesen.
Bitteschön:PS: Die Funktion DATE_TO_INT() ermittelt nicht den Wochentag, sondern "wandelt" einfach nur die Anzahl Tage seit 01.01.1990 (was ja der Datentyp DATE ist) in den Datentyp INT, und dürfte für heute D#2022-11-02 den Wert 11993 ergeben - also weit weg von 1..7
#myDate := DT_TO_DATE(#myDT);
#iWeekDay := DINT_TO_INT(DATE_TO_DINT(#myDate) MOD 7) + 1; // 1 (monday) .. 7 (sunday)
#myDate := DT_TO_DATE(#myDT);
#iWeekDay := DINT_TO_INT( (DATE_TO_DINT(#myDate) + 1) MOD 7) + 1; // 1 (sunday) .. 7 (saturday)
Man weiß es (noch) nicht. Na wie auch immer, ich habe wieder was dazugelernt. Und andere die das hier lesen hilft es sicher auch weiter.Ob die beiden Fragesteller mitbekommen haben, daß mittlerweile einfache Lösungen für ihre Fragen hier gepostet wurden?
Zumindest haben wir NichtFragesteller einiges dazugelernt! Danke!Ob die beiden Fragesteller mitbekommen haben, daß mittlerweile einfache Lösungen für ihre Fragen hier gepostet wurden?
Ich hoffe, dass auch Siemens zu den MitLesern gehört und dies wenigstens mittel- bis langfristig zu mehr Übersichtlichkeit und Einheitlichkeit unter den diversen Varianten (CPUs und Sprachen) und vielleicht sogar zu einer Verfügbarkeit sinnvoll nutzbarer Funktionen führt.In TIA sind die SCL-Konvertierfunktionen für Datum und Uhrzeit leider sehr schlecht bis gar nicht dokumentiert.
Code:FUNCTION "DT_Weekday" : USInt { S7_Optimized_Access := 'FALSE' } VERSION : 0.1 VAR_INPUT "DT" : Date_And_Time; DTstruct AT "DT" : Struct YEAR : Byte; MONTH : Byte; DAY : Byte; HOUR : Byte; MINUTE : Byte; SECOND : Byte; MSEC12 : Byte; MSEC3WEEKDAY : Byte; END_STRUCT; END_VAR BEGIN //Wochentag aus DATE_AND_TIME #DT_Weekday := #DTstruct.MSEC3WEEKDAY AND 16#0F; END_FUNCTION
Wir verwenden essentielle Cookies, damit diese Website funktioniert, und optionale Cookies, um den Komfort bei der Nutzung zu verbessern.
Siehe weitere Informationen und konfiguriere deine Einstellungen