Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: String to TOD

  1. #1
    Registriert seit
    02.06.2014
    Beiträge
    6
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich habe ein kleines Problem.
    Ich habe eine Zenon Visu die das TOD (Time of Day) Format von S7300 er nicht kennt.
    Mein Problem ist: ich habe in der S7 CPU eine Zeit Schaltuhr die einen Motor von...... bis....... Uhrzeit einschaltet.
    Das Funktioniert ja wunderbar aber in der Visu würde die Uhrzeit der Schaltuhr gerne im String Format z.B. von 10:30:00 bis 11:25:30 eingeben.
    Kennt jemand einen Weg wie das am einfachsten zu lösen ist.
    PS: Ich denke das wird wohl am besten in SCL gehen oder?

    Bin für jede Hilfe Dankbar.

    SG
    Mathias
    Zitieren Zitieren String to TOD  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard

    Hallo,
    die TOD ist die Zeit in Millisekunden der S7, die seit 0:00 Uhr abgelaufen sind.
    Du brauchst also nur die einzelnen Komponenten deines Strings ausschneiden und entsprechend zu multiplizieren und schließlich in eine als TOD typisierte Variable hineinschreiben. Zum Berechnen kannst du aber einen DINT hernehmen.
    Ich würde das Ganze sehr wahrscheinlich in SCL programmieren, da es dort m.E. übersichtlicher wird - es geht aber auch sicherlich in AWL.

    Gruß
    Larry

  3. #3
    MTH ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    02.06.2014
    Beiträge
    6
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Larry,
    Check ich nicht ganz hast du ein Beispiel SCL Code für mich?

    Danke
    Gruß
    Mathias

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard

    Hallo,
    nein ... habe ich nicht.
    Aber ein paar Tipps :
    Es gibt Funktionen zur String-Manipulation - in SCL heißen die z.B. MID. Hiermit könnte man sich einen Teil des Quellstrings ausschneiden und mit einer Umwandlungs-Funktion wie z.B. String_to_DINT daraus eine Zahl machen.
    Diese Zahl dann entsprechend multiplizieren um daraus Millisekunden zu machen (Sekunden mit 1000 multiplizieren, Minuten mit 60000 und Stunden mit 3600000) - die Teil-Ergebnisse aufaddieren und schon hast du den Wert, den du mit DINT_to_TOD in deine TOD hineinschreiben kannst.

    Möchtest du dich daran mal versuchen ?

    Gruß
    Larry

  5. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    MTH (23.07.2014)

  6. #5
    MTH ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    02.06.2014
    Beiträge
    6
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Larry,

    Danke hat mir geholfen
    Habs in TIA V13 geschrieben. Funktioniert.
    Jetzt würde ich das ganze gern auch in Step7 V5.5 verwenden und hab ne Quelle erstellt aber so wie es aussieht mag das Step7 das so nicht wie ich mit der MID Funktion arbeite (siehe unten).
    FUNCTION FC1 : VOID
    TITLE = 'STR_TO_TOD'
    //
    //
    //
    //
    VERSION : '1.2'
    AUTHOR : MTH
    NAME : STR_TO_TOD
    FAMILY : Umwandeln


    VAR_IN_OUT
    String_Time_von_Pc : STRING [10];
    END_VAR

    VAR_OUTPUT
    TOD_DINT : TIME_OF_DAY;
    END_VAR

    VAR_Temp
    String_Std : STRING [2];
    String_Min : STRING [2];
    String_Sek : STRING [2];
    Std_DINT : DINT;
    Min_DINT : DINT;
    Sek_DINT : DINT;
    Gesammt_DINT : DINT;

    END_VAR

    BEGIN
    //Strind to TOD wandeln
    //-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    //Das TOD Format geht nur von 00:00:00 bis 23:59:59
    //
    //Wenn Std > 24 dann wird der Kommplette String mit 00:00:00 überschrieben
    IF String_Std >= '24' THEN
    String_Time_von_Pc:= MID(IN:='00', L:=2,P:=1);
    END_IF;

    IF String_Min > '59' THEN
    String_Time_von_Pc := MID(IN := '00', L := 2, P := 4);
    END_IF;

    IF String_Sek > '59' THEN
    String_Time_von_Pc := MID(IN := '00', L := 2, P := 7);
    END_IF;



    //Aus Time_String Std/Min/Sek ausschneiden
    String_Std := MID(IN := String_Time_von_Pc, L := 2, P := 1);

    String_Min := MID(IN := String_Time_von_Pc, L := 2, P := 4);

    tring_Sek := MID(IN := String_Time_von_Pc, L := 2, P := 7);

    //Stringwert in DINT umwandeln
    Std_DINT := STRING_TO_DINT(IN := String_Std);

    Min_DINT := STRING_TO_DINT(IN := String_Min);

    Sek_DINT := STRING_TO_DINT(IN := String_Sek);

    //Tages Millisekunden Addieren
    Gesammt_DINT := (Std_DINT * 3600000) + (Min_DINT * 60000) + (Sek_DINT * 1000);

    //Tages Millisekunden in Time of Day wandeln
    TOD_DINT := DINT_TO_TOD(IN := Gesammt_DINT);



    END_FUNCTION



    Wenn ich das Übersetzen wil kommt immer der Fehler: Parameterübertragung nicht korrekt.

    Hast du da noch ne ahnung?

    Gruß
    Mathias

  7. #6
    Registriert seit
    19.07.2010
    Beiträge
    1.289
    Danke
    213
    Erhielt 267 Danke für 233 Beiträge

    Standard

    Gibts vielleicht eine Zeilenangabe?
    mfG Aventinus

  8. #7
    MTH ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    02.06.2014
    Beiträge
    6
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Überall dort wo der MID verwendet wird.

  9. #8
    Registriert seit
    19.07.2010
    Beiträge
    1.289
    Danke
    213
    Erhielt 267 Danke für 233 Beiträge

    Standard

    Du scheibst:
    Code:
    IF String_Std >= '24' THEN
           String_Time_von_Pc:=  MID(IN:='00', L:=2,P:=1);
        END_IF;
    Das heist, hol aus der String-Konstante '00' zwei Zeichen ab dem 1. Zeichen...

    Das Ergebnis sollte immer '00' sein und ist somit sinnfrei. Wieso der Fehler ausgegeben wird kann ich spontan nicht sagen.
    mfG Aventinus

  10. #9
    Registriert seit
    19.07.2010
    Beiträge
    1.289
    Danke
    213
    Erhielt 267 Danke für 233 Beiträge

    Standard

    Ich würde erstmal den String in seine Einzelteile zerlegen und diese dann Prüfen ob sie syntaktisch korrekt sind.

    Dann String in DINT wandeln und die ms berechnen.
    mfG Aventinus

  11. #10
    MTH ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    02.06.2014
    Beiträge
    6
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ja das mach ich jetzt auch so:
    IF String_Std >= '24' THEN
    String_Time_von_Pc:= INSERT(IN1:=String_Time_von_Pc ,IN2 := '00', P := 1);
    END_IF;

Ähnliche Themen

  1. Konvertierung zu #TOD
    Von maccap im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 21.07.2014, 14:01
  2. FbSchaltuhr TOD to Byte?
    Von Michael68 im Forum Programmierstrategien
    Antworten: 8
    Letzter Beitrag: 21.01.2013, 20:45
  3. Der Tod am Geländer
    Von IBFS im Forum Stammtisch
    Antworten: 40
    Letzter Beitrag: 05.08.2012, 20:24
  4. TOD#00:00 auf Visu
    Von j_poool im Forum HMI
    Antworten: 3
    Letzter Beitrag: 16.10.2011, 14:42
  5. Uhzeit zusammensetzten in TOD
    Von Sony15ab im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 23.08.2011, 13:33

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •