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

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

Thema: Abfrage ob Arrayelement vorhanden ist

  1. #1
    Registriert seit
    04.02.2011
    Beiträge
    84
    Danke
    33
    Erhielt 4 Danke für 4 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    Ich habe ein Array "Wert" (Array[5..50] of Real) in einem FB das indirekt abgefragt wird. (SCL)
    Jetzt kann es bei falscher Parametrierung dazu führen, dass das Programm das Element "Wert[0]" abfragen will. Da dieses aber nicht existiert geht die CPU in Störung.
    Kann ich ein Element in einem Array abfragen ob dieses überhaupt existiert bevor ich darauf zugreife?
    Das ganze soll flexibel sein, da das Array nicht bei jeder Anwendung die gleiche Länge hat, deshalb wäre eine Abfrage auf '>5' und '<50' nicht der optimale Weg.

    DANKE!
    Zitieren Zitieren Abfrage ob Arrayelement vorhanden ist  

  2. #2
    Registriert seit
    19.06.2015
    Beiträge
    459
    Danke
    26
    Erhielt 40 Danke für 35 Beiträge

    Standard

    Du machst in dem Baustein die Arraygrenzen mit Variablen.Wenn die Untergrenze kleiner wie 5 ist weisst du der variablen 5 zu.
    Wenn es über die Schnitsstelle geht musst du INOut nehmen und im programm die Anwendereingabe überschreiben.Geht das nicht?

  3. #3
    Registriert seit
    04.02.2011
    Beiträge
    84
    Danke
    33
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Ideal wäre, wenn ich die Länge vom Array schon variabel anlegen könnte ...

    Zitat Zitat von silverfreaky Beitrag anzeigen
    Wenn die Untergrenze kleiner wie 5 ist weisst du der variablen 5 zu.
    Das geht sicherlich schon. Ich möchte aber das man so wenig wie möglich einstellen muss um Fehler zu vermeiden ...

    Im VB-Script gibt es so 'ne "FileExists"-Abfrage, so was wäre halt für's Array-Element genial ...

  4. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.192
    Danke
    925
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    In VBS gibt es die LBound- und die UBound-Funktion.

    Für welche CPU soll es denn sein?

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. #5
    Registriert seit
    04.02.2011
    Beiträge
    84
    Danke
    33
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Moin,
    ist eine 1511

  6. #6
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.626
    Danke
    377
    Erhielt 801 Danke für 642 Beiträge

    Standard

    Mein erfahrung von STEP7 v5.5:

    Obwohl es nicht das Problem mit falschen Array limits komplett löst, dann kan man es sauberer hantieren als bloss OB121 zu triggern.
    In die SCL Options wählt man das Array Limts gecheckt werden muss, und das OK bit abgefragt werden kann.

    Dann fügt man am ende von den 'verdächtigen' Code etwas in diesen Stil ein:

    IF NOT OK THEN
    // z.B. ein HMI Alarm triggern
    // eventuell den Baustein enden
    END IF ;

    Und der Zustand von OK wird auch in ENO übertragen.
    Damit kann das aufrufende Program eventuell das ENO abfragen.

    mMn. soll man immer mit OK arbeiten. Nur wenn den SCL code sehr einfach ist, oder es ist sehr gut getestet kann man ohne OK arbeiten.
    Ein nachteil ist das wenn man OK in die Options aktiviert, wird den erzeugte STL code viel aufwendiger.
    Jesper M. Pedersen

  7. #7
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.192
    Danke
    925
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Zitat Zitat von Berger Beitrag anzeigen
    Ich habe ein Array "Wert" (Array[5..50] of Real) in einem FB das indirekt abgefragt wird. (SCL)
    [...]
    Das ganze soll flexibel sein, da das Array nicht bei jeder Anwendung die gleiche Länge hat, deshalb wäre eine Abfrage auf '>5' und '<50' nicht der optimale Weg.
    Code:
    CONST
      Min_Index := 5 ;
      Max_Index := 50 ;
    END_CONST
    VAR
      Wert : ARRAY[Min_Index..Max_Index] OF REAL;
    END_VAR
    
      IF Abfrage_Index < Min_Index OR Abfrage_Index > Max_Index THEN
      ... //Fehlerbehandlung
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  8. #8
    Registriert seit
    04.02.2011
    Beiträge
    84
    Danke
    33
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Wert : ARRAY[Min_Index..Max_Index] OF REAL;
    hab das gerade mal versucht, funktioniert im TIA leider nicht ...
    Angehängte Grafiken Angehängte Grafiken

  9. #9
    Registriert seit
    19.06.2015
    Beiträge
    459
    Danke
    26
    Erhielt 40 Danke für 35 Beiträge

    Standard

    Probier mal mit static Variablen.

  10. Folgender Benutzer sagt Danke zu silverfreaky für den nützlichen Beitrag:

    Berger (27.08.2015)

  11. #10
    Registriert seit
    04.02.2011
    Beiträge
    84
    Danke
    33
    Erhielt 4 Danke für 4 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Interface,Die Obergrenze der Arraydimension ist kleiner als die Untergrenze,,,15:46:28
    min und max vertauscht!

    DAT GEHHHHT!!! Is ja geil!

Ähnliche Themen

  1. Sichere Abfrage, ob ein Verbraucher vorhanden ist
    Von Andreas Koenig im Forum Maschinensicherheit - Normen und Richtlinien
    Antworten: 3
    Letzter Beitrag: 10.06.2015, 20:17
  2. Prüfe, ob Datei auf FTP Server vorhanden ist (Wago 750-849)
    Von Tenobaal im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 16.04.2012, 18:34
  3. Antworten: 33
    Letzter Beitrag: 27.02.2012, 10:50
  4. Antworten: 6
    Letzter Beitrag: 13.12.2010, 14:14
  5. Antworten: 2
    Letzter Beitrag: 13.10.2005, 11:46

Lesezeichen

Berechtigungen

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