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

Results 1 to 4 of 4

Thread: Fehler in SCL-Code

  1. #1
    Join Date
    31.05.2016
    Posts
    5
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi Leute,

    ich brauche Hilfe bei diesem SCL-Code. Ich konnte mittlerweile fast alle, ausser zwei Fehlern, ausmerzen. Könnt ihr mal drüberschauen, ich übersehe mit Sicherheit irgendwas und das macht mich kirre.
    Ich habe Screenshoots von den Fehlern gemacht und die fehlerhaften Zeilen sind markiert. Den Code habe ich von einem fertigen Baustein aus TIA übernommen und in Step 7 neu geschrieben und für mich an manchen Stellen angepasst.

    Ich konnte über die Suchfunktion im Forum keinen ähnlichen Fall finden der mir geholfen hat, daher habe ich diesen Thread aufgemacht.


    FUNCTION_BLOCK FB13


    VAR_INPUT
    Wert : INT; //Eingabewert als Int
    Modus : INT; //Default Modus =1(getriggert); Modus =2(Zyklisch)
    Wertebereich : INT; //Anzahl der zu erfassenden Werte
    Trigger : BOOL; //Auslösetrigger
    Reset : BOOL; //Reset für Baustein
    END_VAR

    VAR_OUTPUT
    Mittelwert : INT; //Mittelwertausgabe als Integer
    WertefensterErreicht: BOOL; //--
    Error : BOOL; //"0" = kein Fehler; "1" = Fehler
    Status : WORD; //Status und Fehlercodes
    END_VAR


    VAR
    statCounter : INT;
    statTrigger: BOOL;
    statValues : ARRAY[0..100] OF INT;
    statValuesSum : INT;
    statWindowSizeOld: INT;
    END_VAR

    VAR_TEMP
    tempTrigger: BOOL;
    tempArithmeticAverage : INT;
    tempCounter : INT;
    tempIndex : INT;
    END_VAR

    CONST
    // Konstanten
    vMAX := 100;
    vMIN := 0;
    MODE_1 := 1; //Trigger
    MODE_2 := 2; //Zyklisch
    NO_ERROR := 16#0000;
    NO_MODE := 16#8201;
    WRONG_WINDOW_SIZE := 16#8202;
    END_CONST

    Begin
    //Fehler auf "0" setzen//
    Error := False;//////////
    Status := NO_ERROR;//////
    /////////////////////////

    //Berechnung Zurücksetzen///////////////
    IF Reset THEN///////////////////////////
    Mittelwert := 0;/////////////////////
    statCounter := 0;////////////////////
    statValuesSum := 0;//////////////////
    WertefensterErreicht := false;///////
    statWindowSizeOld := Wertebereich;///
    RETURN;//////////////////////////////
    END_IF;/////////////////////////////////
    ////////////////////////////////////////

    //Prüfen ob Wertebereich sich geändert hat//
    IF Wertebereich <> statWindowSizeOld THEN///
    Mittelwert := 0;/////////////////////////
    statCounter := 0;////////////////////////
    statValuesSum := 0;//////////////////////
    WertefensterErreicht := false;///////////
    statWindowSizeOld := Wertebereich;///////
    END_IF//////////////////////////////////////
    ////////////////////////////////////////////

    //Wertebereich prüfen
    IF ((Wertebereich > vMIN) AND (Wertebereich <= vMAX)) THEN

    CASE Modus OF //Prüfen des gewählten Modus 1 oder 2
    MODE_1:
    //Dieser Programm-Code prüft ob der Trigger eine steigende Flanke aufweist,
    //wenn TRUE, dann steigende Flanke vorhanden.
    tempTrigger := Trigger AND NOT statTrigger;
    statTrigger := Trigger;

    //Schreibt den Wert in das Array #statValues
    IF tempTrigger THEN //Wenn steigende Flanke am Eingang "Trigger", berechne Array-Zähler
    tempCounter := statCounter MOD Wertebereich;
    //Schritt 1 Array mit Werten füllen
    IF (statCounter < Wertebereich) THEN
    tempIndex := tempCounter;
    statValues[tempIndex] := Wert;
    //Werte zusammenrechnen
    statValuesSum := statValuesSum + Wert;
    //Inkrement Zähler
    statCounter := statCounter + 1;
    //Berechne Mittelwert
    tempArithmeticAverage := statValuesSum / statCounter;
    ELSE
    WertefensterErreicht := True;
    //Ersten Werte schieben
    IF (tempCounter = 0) THEN
    //Werte zur Summe Addieren
    statValuesSum := statValuesSum + Wert - statValues[0];
    //Wert Addieren
    tempIndex := 0;
    statValues[tempIndex] := Wert;
    //Inkrement Zähler
    statCounter := Wertebereich + 1;
    //Berechne Mittelwert
    tempArithmeticAverage := statValuesSum / Wertebereich;
    ELSE
    //Definiere Index
    tempIndex := tempCounter;
    //Wert addieren
    statValuesSum := statValuesSum + Wert - statValues[tempIndex];
    //Wert einfügen
    statValues[tempIndex] := Wert;
    //Inkrement Zähler
    statCounter := statCounter +1;
    //Mittelwert berechnen
    tempArithmeticAverage := statValuesSum / Wertebereich;
    END_IF;
    END_IF;
    //Ausgang schreiben
    Mittelwert := tempArithmeticAverage;
    END_IF;

    //------------------------------------------------------------------------------------

    MODE_2:
    //Berechne Array Zähler
    tempCounter := statCounter MOD Wertebereich;
    //Schritt 1 Array mit Werten füllen
    IF (statCounter < Wertebereich) THEN
    //Werte addieren
    tempIndex := tempCounter;
    statValues[tempIndex] := Wert;
    //Wert zur Summe addieren
    statValuesSum := statValuesSum + Wert;
    //Inkrement Zähler
    statCounter := statCounter + 1;
    //Mittelwert berechnen
    tempArithmeticAverage := statValuesSum / statCounter;
    ELSE
    WertefensterErreicht := True;
    //Ersten Wert schieben
    IF (tempCounter = 0) THEN
    //Wert addieren
    statValuesSum := statValuesSum + Wert - statValues[0];
    //Wert addieren
    tempIndex := 0;
    statValues[tempIndex] := Wert;
    //Inkrement Zähler
    statCounter := Wertebereich +1;
    //Mittelwert berechnen
    tempArithmeticAverage := statValuesSum / Wertebereich;
    ELSE
    //Index definieren
    tempIndex := tempCounter;
    //Wert addieren
    statValuesSum := statValuesSum + Wert - statValues[tempIndex];
    //Wert schieben
    statValues[tempIndex] := Wert;
    //Inkrement Zähler
    statCounter := statCounter + 1;
    //Mittelwert berechnen
    tempArithmeticAverage := statValuesSum / Wertebereich;
    END_IF;

    END_IF;
    //Ausgang beschreiben
    Mittelwert := tempArithmeticAverage;

    //---------------------------------------------------------------------------------

    //Falls kein Modus gewählt wurde, Fehler erzeugen
    ELSE
    Error := True;
    Status := NO_MODE;
    Mittelwert := 0;
    Return

    END_CASE;
    ELSE
    //Falls ein falscher Wertebereich gewählt wurde
    Error := True;
    Status := WRONG_WINDOW_SIZE;
    Mittelwert := 0;
    END_IF;

    END_FUNCTION_BLOCK
    Attached Images Attached Images
    Reply With Quote Reply With Quote Fehler in SCL-Code  

  2. #2
    Join Date
    06.08.2010
    Posts
    199
    Danke
    0
    Erhielt 62 Danke für 47 Beiträge

    Default

    An dem END_IF vor dieser Anweisung fehlt ein Strickpunkt.

  3. Folgender Benutzer sagt Danke zu Glasesba für den nützlichen Beitrag:

    Satanios (03.08.2018)

  4. #3
    Join Date
    25.02.2016
    Posts
    499
    Danke
    33
    Erhielt 107 Danke für 92 Beiträge

    Default

    Hallo

    Beim Return im Foto fehlt auch ein Strichpunkt

    Gruß Tia

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

    Satanios (03.08.2018)

  6. #4
    Satanios is offline Neuer Benutzer
    Themenstarter
    Join Date
    31.05.2016
    Posts
    5
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Vielen vielen Dank ihr beiden. Ich hab den Wald vor lauter Bäumen nicht mehr gesehen. Ich habe jetzt keine Fehler mehr.

Similar Threads

  1. Fehler Code 17744(0x4550)
    By Amal in forum CODESYS und IEC61131
    Replies: 17
    Last Post: 02.05.2019, 14:43
  2. Step 7 SCL Code
    By Casio in forum Simatic
    Replies: 1
    Last Post: 12.03.2014, 10:33
  3. Step 7 Zeitmessung - Fehler in meinem Code???
    By Minico89 in forum Simatic
    Replies: 6
    Last Post: 23.09.2013, 06:46
  4. Fehler im SCL Code
    By Felse in forum Simatic
    Replies: 15
    Last Post: 18.06.2009, 12:33
  5. SCL code
    By awl-scl in forum Simatic
    Replies: 21
    Last Post: 14.01.2008, 17:02

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •