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

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 25

Thema: Rechnen mit BYTE in SCL geht nicht ?

  1. #11
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Siehe Larry.
    BCD_TO_INT will ja ein WORD, also sollte das in etwa so aussehen:

    iJahr := BCD_TO_INT(BYTE_TO_WORD(bcdJahr));


    wobei bcdJahr das Byte 0 aus dem Datentyp DATE_AND_TIME ist.
    Geändert von Ralle (29.01.2008 um 09:53 Uhr)
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  2. #12
    Registriert seit
    03.05.2007
    Beiträge
    11
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    ... anbei hab ich mal den Code angehängt. Wie gesagt das Problem liegt beim auslesen und umwandeln der Jahreszahl.


    [/CODE]TITLE = 'Tageszahl'

    VERSION : '1.0'
    AUTHOR :
    NAME : name
    FAMILY : family
    FUNCTION Tageszahl_SCL: VOID

    // Variablendeklartion
    VAR_OUTPUT
    Tageszahl: INT; // Aktuelle Tageszahl
    TageImJahr:INT; // 365 oder 366 Tage???
    Jahreszahl:INT;
    END_VAR
    VAR_TEMP
    Tag:INT;
    Monat:INT;
    Date_Time:INT;
    IstEinSchaltjahr:BOOL;
    Jahr:INT;
    Zaehler:INT;
    END_VAR
    VAR
    TageImMonat: ARRAY[1..12] OF INT;
    SPS_Datum_Uhrzeit : DATE_AND_TIME ;
    a_Datum_Uhrzeit AT SPS_Datum_Uhrzeit : ARRAY [0..7] OF BYTE;
    END_VAR

    BEGIN

    // Auslesen der der SPS Zeit und der Datumsangaben
    Date_Time := READ_CLK (CDT:= SPS_Datum_Uhrzeit);

    // Datum mit vierstelliger Jahreszahl aus Systemdatum ermitteln
    Jahr:= WORD_TO_INT(BYTE_TO_WORD(a_Datum_Uhrzeit[0]));//
    // Beim auslesen von BYTE 0 ist vor der konvertierung die reichtige Jahreszahl angezeigt,
    // bei Jahreszahlen ab 2010 wird nach der Konverterung eine größere Zahl angezeigtnach.


    Monat:= WORD_TO_INT(BYTE_TO_WORD(a_Datum_Uhrzeit[1]));
    Tag:= WORD_TO_INT(BYTE_TO_WORD(a_Datum_Uhrzeit[2]));
    IF Date_Time >= 90
    THEN Jahreszahl := Jahr + 1900;
    ELSE Jahreszahl := Jahr + 2000;
    END_IF;

    // Ist ein Schaltjahr???
    // Die Regel lautet: Alles, was durch 4 teilbar ist, ist ein Schaltjahr.
    // Es sei denn, das Jahr ist durch 100 teilbar, dann ist es keins.
    // Aber wenn es durch 400 teilbar ist, ist es doch wieder eins.
    IF (Jahreszahl MOD 400 = 0) OR
    (Jahreszahl MOD 4 = 0) AND
    (Jahreszahl MOD 100 <> 0)
    THEN IstEinSchaltjahr := true;
    ELSE IstEinSchaltjahr := false;
    END_IF;

    // Bestimmung der Anzahl Tage im Jahr in Abhängigkeit vom Schaltjahr
    IF IstEinSchaltjahr = true
    THEN TageImJahr:=366;
    ELSE TageImJahr:=365;
    END_IF;

    // Berchnung der Tageszahl
    //
    // Wertezuweisung Array TageImMonat
    TageImMonat [1]:= 31; // Januar
    TageImMonat [2]:= 28; // Februar
    TageImMonat [3]:= 31; // März
    TageImMonat [4]:= 30; // April
    TageImMonat [5]:= 31; // Mai
    TageImMonat [6]:= 30; // Juni
    TageImMonat [7]:= 31; // Juli
    TageImMonat [8]:= 31; // August
    TageImMonat [9]:= 30; // September
    TageImMonat [10]:= 31; // Oktober
    TageImMonat [11]:= 30; // November
    TageImMonat [12]:= 31; // Dezember
    // Anfangswerte setzen
    Tageszahl := 0; // Tageszahl auf Anfangswert 0
    Zaehler:=1; // Zähler auf Anfangswert 1

    IF Monat > 1 AND Monat <=18 THEN // IST Monat größer 1(Jan.) und kleiner-gleich 12 (Dez.) DANN
    FOR Zaehler := 1 TO Monat-1 BY 1 DO // SOLL über FOR-Schleife von 1 bis Monat-1
    Tageszahl := Tageszahl+TageImMonat[Zaehler]; // die Tageszahlen aufsummiert werden
    Zaehler:= Zaehler +1; // Zähler wird pro Durchlauf um 1 erhöht
    END_FOR;
    Tageszahl:= Tageszahl+Tag;
    ELSE Tageszahl := Tag;

    END_IF;

    END_FUNCTION
    Zitieren Zitieren Konvertierungsfunktionen  

  3. #13
    Registriert seit
    03.05.2007
    Beiträge
    11
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Ralle,

    wenn ich den Code,

    Jahr := BCD_TO_INT(BYTE_TO_WORD(a_Datum_Uhrzeit[0]));

    wie beschrieben einfüge wird BCD_TO_INT nicht als Funktion angezeigt und als Fehlermeldung bekomme ich angezeigt, dass der Baustein nicht gefunden oder kopiert werden konnte. Muss ich vielleicht noch eine Einstellung vornehmen?

    Gruß

    Mario
    Zitieren Zitieren Konvertierungsfunktion  

  4. #14
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.710
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Zitat Zitat von frodob10 Beitrag anzeigen
    Jahr := BCD_TO_INT(BYTE_TO_WORD(a_Datum_Uhrzeit[0]));
    Hallo Mario,
    bei mir geht das folgende :
    Code:
    Jahr := BCD_TO_INT(a_Datum_Uhrzeit[0]) ;
    ... ohne Probleme ...
    Gruß
    LL

  5. #15
    Registriert seit
    03.05.2007
    Beiträge
    11
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich hab den Code in meinen SCL-Editor kopiert und es hat leider nicht funktioniert. Normalerweise müsste doch auch die Anweisung BCD_TO_INT in BLAU erscheinen oder? Beim compilieren werden mir dann noch 2 Fehlermeldungen (siehe Anhang) ausgegeben. Muss ich vielleicht noch eine Einstellung ändern oder kann es an der Prog.version liegen?

    Gruß

    Mario
    Angehängte Dateien Angehängte Dateien

  6. #16
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.710
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    ? welche SCL-Version benutzt du ?

  7. #17
    Registriert seit
    03.05.2007
    Beiträge
    11
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Version: V5.3 Ausgabestand:5.3.0.0

  8. #18
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.710
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    ... kann ich leider nicht nachstellen. Ich habe gleiche Version mit SP4 (also 5.3.4.0) installiert. Bei mir gibt es die Abweisung und so wie du es geschrieben hast in deinem Code (PDF) ist es auch korrekt. Vielleicht lädst du dir mal das aktuelle SP bei Siemens herunter ...
    Leider habe ich den Link nicht mehr ...

    Gruß
    LL

  9. #19
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard


    Was ist neu in Version V5.3 SP1?

    Spracherweiterungen
    S7-SCL V5.3 SP1 wurde um Sprachmittel erweitert, die die IEC 61131-3 definiert:
    • Funktionen zur Verarbeitung von Zahlenwerten als interne SCL-Funktionen (SEL, MAX, MIN, LIMIT, MUX)
    • Unterstützung der BCD-Darstellung von Ganzzahlen durch Konvertierungsfunktionen (BCD_TO_INT, INT_TO_BCD, etc.)
    • Zuweisungsoperator => für Ausgangsparameter von Funktionen
    • Feld-Initialisierung mit Klammerung
    • Neue Konvertierungsfunktionen (BYTE_TO_INT, INT_TO_BYTE, etc.)
    Du brauchst also mind. V5.3. SP1
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  10. #20
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    BCD müßte man dich auch wandeln können, mit Schieben und Ausmaskieren, oder?
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

Ähnliche Themen

  1. Ethernetkommunikation geht nicht
    Von holgermaik im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 26.03.2010, 12:45
  2. Byte/Anfangswert nicht größer 99 möglich
    Von Kodan im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 24.05.2008, 12:21
  3. Antworten: 7
    Letzter Beitrag: 19.02.2008, 20:04
  4. CPU 313 alt mit MMC geht nicht
    Von HDD im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 13.03.2006, 08:40
  5. FB alleine geht, FB 2x geht nicht?
    Von MSP im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 18.08.2005, 15:00

Lesezeichen

Berechtigungen

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