Rezepturnamen mit Datum und Uhrzeit

Neesen

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

ich arbeite mit einer 314 er CPU und einem MP370, auf welchem zur Protokollierung von Verbrauchsdaten eine Rezeptur gespeichert wird. Dieser Rezepturname kann doppelt vorkommen, daher möchte ich den
Rezepturnamen gerne mit Datum und Uhrzeit versehen (in der S7), damit
er eben nicht mehr gleich ist. Mein Problem ist nun das Datum und die Uhrzeit in der SPS in einen String zu wandeln und zusammen mit dem Rezepturnamen zu speichern (in einem DB).

Hat hier vielleicht jemand eine Idee wie das gehen könnte?
 
Nun im OB1 kannst du über die LB12 - LB17 das Datum und die Uhrzeit auslesen.

Das Jahr steht im LB12, das Monat im LB13, der Tag im LB14, die Stunde im LB15, die Minute im LB16 und die Sekunde in LB17.

Diese Werte kannst du in INT - Variablen speichern und anschließend mit I_STRNG in einen String konvertieren.

Das Vorzeichen eliminierst du in dem du die Strings von rechts ausliest (Länge des Strings um 1 reduzieren!)

Anschließend fügst du die Daten mit ConCat zusammen und fügst noch Punkte und Doppelpunkte für die Trennung ein.

Das Datum sollte jetzt in einem zusammenhängenden String stehen.

Achtung: INT - Werte müssen ggf. mit BTI von HEX auf DEZIMAL umgewandelt werden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Crazy Cat

vielen Dank für die Info, werd ich gleich mal ausprobieren. Kannst du mir bitte noch erklären wie man Strings von rechts ausliest, um das Vorzeichen zu eliminieren, bzw. wie ich die Doppelpunkte zwischen die Zahlen kriege?

Eine weitere Frage noch: Mein Rezepturname ist in einem String40 gespeichert, ich weiss aber nicht genau wie lang er ist. Wie kriege ich die Länge heraus, damit ich das Datum und die Uhrzeit direkt hinten dran hängen kann z.B. so : "Orangensaft 2006-06-13 09:53"
 
Direkt hinten dran hängen geht mit dem Befehl ConCat, die Länge kann auch über die Funktion Len bestimmt werden.

Bei den Zeiten gehe ich immer wie folgt vor:

in Dezimalzahlen umwandeln
hundert addieren (somit wird 9 zu 09)
und von rechts 2 Zeichen lesen (mit der Funktion Right)

Erstelle einfach in einem FB 2 statische Variablen des Typs STRING[1] und weise denen den Startwert ':' bzw. '.' zu.

Mit ConCat können die Trennzeichen dann einfach angehängt werden.

Die Funktionen sind in der Standardbibliothek unter den IEC - Funktionen zu finden, eine Beschreibung der Eingabeparameter wird dort auch angeboten.

Solltest du Probleme mit dem Programm oder mit den Parameterbeschreibungen haben, dann meld' dich einfach nochmal.
 
Hallo,

ich habe noch Probleme mit dem Aufruf des FB16. Ich habe meine Stunden und Minuten ... einmal in einem DB als INT angelegt und einmal im gleichen DB als STRING[2] z.B. für Stunden. Wie muss man denn jetzt den FC16 beschalten ?

Noch eine Frage: Ist es richtig dass aus dem LB12 nur eine 6 herauskommt für das Jahr 2006?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja, leider hat das Jahr aus dem LB12 maximal 2 Stellen.
Für eine 4 - stellige Zahl musst du 2000 addieren, bis zum Jahr 2100 läuft die Steuerung sowieso nicht, da die Steuerung nur Datumseinträge von 1970 bis 2050 (laut Siemens Handbuch) akzeptiert.

Im Jahr 2050 werden die Siemens - Jungs also ein verspätetes "Jahr 2000 - Problem" bekommen.

Wenn du bereits die Einträge als Zahl und als String hast, hat der FC16 die Konvertierung bereits abgeschlossen und seine Schuldigkeit getan.
Oder werden die Daten nicht konvertiert?

In diesem Fall sollte der FC16 aus einem FB aufgerufen werden, da irgendwelche Daten zwischengespeichert werden mit dem eine FC nicht umgehen kann.

Welchen FB16 meinst du?

Die Schnittstelle des FC16 sieht jedenfall so aus:

CALL FC16
I: <Zahl als INTWERT die umgewandelt werden soll>
RETVAL: <Ergebnisstring>

zu beachten ist das der String um mindestens 1-2 Zeichen länger sein muss als die umzuwandelnde Zahl, da die Zahlen immer mit Vorzeichen konvertiert werden und bei älteren Steuerungen z.T. noch ein Stringabschlusszeichen angefügt wird (die Steuerungen wären dann aber schon ziemlich alt)

Die Umwandlung z.B. der Zahl 12 liefert dann dieses Ergebnis

CALL FC16
I:12
RETVAL:+12
 
Hallo,
ich habe meine Daten wie folgt im DB abgelegt:
DB50.DBW0 Jahr INT
DB50.DBW2 Monat INT
DB50.DBW4 Stunde INT
DB50.DBW6 sJahr STRING[6]
DB50.DBW12 sMonat STRING[4]
usw....
Wie muss ich diese denn jetzt an den FC anlegen? Beim INT Wert geht es ja noch aber der String Wert soll irgendwie symbolisch angelegt werden, aber wie??????
 
Das ganze geht relativ einfach:

Call I_STRNG
I: DB50.Jahr
RET_VAL: DB50.sJahr

CALL I_STRNG
I: DB50.Monat
RET_VAL: DB50.sMonat


usw.

Anschließend liest du von rechts immer 2 Zeichen (außer beim Jahr 4) und legst diese in einer neuen Variable ab. Z.B.

Call Right
IN: DB50.sJahr
L: 4
RET_VAL: DB60.sJahr_s

Call Right
IN: DB50.sMonat
L: 2
RET_VAL: DB60.sMonat_s


Mit

Call Concat
S1: DB60.sJahr_s
S2: sPunkt
RET_VAL: Hilfsstring

Call Concat
S1:Hilfsstring
S2:DB60.sMonat_s
RET_VAL: Hilfsstring

usw.

können die Strings anschließend zusammengefügt werden.

Ist die Frage hiermit beantwortet?

Der Hilfsstring und die Variable sPunkt müssen statische Strings in einem FB sein, oder in einem DB angelegt werden.
 
Zurück
Oben