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

Ergebnis 1 bis 9 von 9

Thema: Twincat checkbounds

  1. #1
    Registriert seit
    13.08.2009
    Beiträge
    8
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute,
    ich finde nicht die *.lib in der die Function CheckBounds enthalten ist.
    Kann jemand bitte einen Tip geben

    gruß mbaum
    Zitieren Zitieren Twincat checkbounds  

  2. #2
    Registriert seit
    16.01.2009
    Beiträge
    45
    Danke
    16
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Definiere eine Funktion mit Namen CHECKBOUNDS, Eingangsvariablen und Rückgabewert wie unten gezeigt. Dann implementiere, was die Funktion machen soll, dieses Beispiel von Beckhoff korrigiert Bereichüberschreitungen automatisch auf den maximal bzw. minimal möglichen Index.
    Die Funktion muß nur definiert werden, du musst sie nicht aufrufen! Sie überprüft automatisch alle Arrayzugriffe in deinem Projekt und greift ggf. ein!

    FUNCTION CHECKBOUNDS : DINT
    VAR_INPUT
    index, lower, upper : DINT;
    END_VAR
    VAR
    END_VAR

    IF index<lower THEN
    CheckBounds := lower;
    ELSIF index>upper THEN
    CheckBounds := upper;
    ELSE
    CHECKBOUNDS := index;
    END_IF

  3. #3
    Registriert seit
    27.03.2007
    Beiträge
    14
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo zusammen,

    der Thread ist zwar schon etwas älter, aus gegebenem hab ich zur checkbounds Funktion eine Frage.
    Ich habe festgestellt, dass es in unserem Projekt Bereichsverletzungen sowohl nach oben, als auch nach unten gibt. Lasse jeweils einen Zähler hochzählen. Das Problem ist, dass mit vielen Arrays gearbeitet wird und die Zähler sehr schnell ansteigen. Das Problem ist jetzt herauszufinden, an welcher Stelle der falsche Speicherzugriff erfolgt.
    Alles von Hans nachzuschauen, oder einezlen FB,FC ab- und zuzuschalten gestaltet sich doch als sehr langwierig.
    Hat also jemand eine Idee, wie ich herausfinde, von welcher Stelle der Zugriff erfolgt ist?

  4. #4
    Registriert seit
    19.11.2010
    Ort
    Dresden
    Beiträge
    45
    Danke
    0
    Erhielt 6 Danke für 6 Beiträge

    Standard

    Hallo muffensauser,

    wenn du während dessen online sein kannst setzt doch einfach Breakpoints bei "CheckBounds := lower;" und "CheckBounds := upper;" dann kannst du unter Online -> Ablaufhierarchie nachsehen wo das Prog. gestoppt wurde.

    Grüße

  5. #5
    Registriert seit
    27.03.2007
    Beiträge
    14
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hi Mario,

    Breakpoints möchte ich nach Möglichkeit vermeiden. Wir hatte vor zwei Monaten das Problem, dass ein Lieferant einen Breakpoint gesetzt hatte und sich bei erreichen dessen die ganze PLC so zerschossen hat, dass die persistenten Daten nicht korrekt geschrieben wurden und die ganze Anlage nach dem Neustart von Hand parametriert werden musste.
    Deshalb ist es mir ein bißchen zu heikel.

  6. #6
    Registriert seit
    19.11.2010
    Ort
    Dresden
    Beiträge
    45
    Danke
    0
    Erhielt 6 Danke für 6 Beiträge

    Standard

    Hi muffensauser,

    dann wirst du das Problem nicht mit dem CHECKBOUNDS erschlagen können. Der Baustein selbst weiß nicht von aus er aufgerufen wurde und daher kannst du das intern auch nicht auswerten.

    Das einzige was du tun kannst ist den Baustein um die Funktion ADSLOGSTR erweitern, dann kannst du wenigstens erfassen ob das Array zu klein oder zu groß war.

    Um dein Problem selbst einzugrenzen solltest du vielleicht deine Arrays selbst mit SIZEOF auf die Größe und Plausibilität prüfen.

    Grüße

  7. #7
    Registriert seit
    19.11.2006
    Beiträge
    1.346
    Danke
    6
    Erhielt 254 Danke für 231 Beiträge

    Standard

    Noch nen programmiertechnischen Tipp:
    Ich verwende für Arrays grundsätzlich Konstanten.
    Code:
    VAR
      myArray: ARRAY [ARRAY_BEGIN .. ARRAY_END] OF INT;
      i : INT;
    END_VAR
    VAR CONSTANT
      ARRAY_BEGIN : INT := 0;
      ARRAY_END : INT := 20;
    END_VAR
    ------------
     
    FOR i := ARRAY_BEGIN TO ARRAY_END DO
       ...
    END_FOR
    So begrenzt man das Fehlerpotenzial.

  8. #8
    Registriert seit
    03.12.2013
    Ort
    Bremen
    Beiträge
    165
    Danke
    13
    Erhielt 15 Danke für 15 Beiträge

    Standard

    Moin Community,

    wie kann ich CheckBounds bei TC3 einbinden? habe es wie bei TC2 versucht leider ohne Erfolg. Gibt es die Funktion nicht mehr bei TC3 - habe leider im Infosys nichts Verwertbares gefunden.

    MfG
    Hendrik

  9. #9
    Registriert seit
    24.02.2009
    Beiträge
    1.242
    Danke
    23
    Erhielt 276 Danke für 235 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Stichwort "POU für implizite Prüfung".
    Einfach einen neuen POU einfügen und dann aber POU für implizierte Prüfung (POU for implicit checks) anwählen. Dann bekommst du ein Auswahlmenü in dem dir alle verfügbaren Überwachungsbausteine angezeigt werden (Bereichsüberwachung, Div/0 etc. pp.)
    Hier noch der Link zum Infosys : =LINK=
    Sänd from mei Kombjudder mitse Dastadurr.

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

    Hendrik (08.11.2016)

Ähnliche Themen

  1. Checkbounds - Aufrufhierarchie loggen?
    Von dwieching im Forum CODESYS und IEC61131
    Antworten: 0
    Letzter Beitrag: 31.08.2011, 11:58
  2. TwinCAT 3 und C++
    Von mimuel im Forum CODESYS und IEC61131
    Antworten: 31
    Letzter Beitrag: 21.04.2011, 20:43
  3. TwinCAT stürzt ab sobald TwinCAT System gestartet wird
    Von HK09 im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 23.09.2010, 10:02
  4. TwinCAT <--> SQL
    Von merlin im Forum CODESYS und IEC61131
    Antworten: 3
    Letzter Beitrag: 28.06.2010, 10:44
  5. Antworten: 4
    Letzter Beitrag: 03.11.2009, 14:05

Lesezeichen

Berechtigungen

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