Befehl Speicher für aktive Applikation prüfen
Funktion: Der Befehl startet eine Prüfung des Speicherbereichs der aktiven Applikation. Der Speicher wird dabei diversen Prüfungen unterzogen. Die Ergebnisse werden im Meldungsfenster ausgegeben.
Aufruf: Menü PLC > Fenster
Voraussetzung: Mindestens eine Applikation ist geladen und im Onlinebetrieb.
Der Speicherbereich der aktiven Applikation wird auf Folgendes überprüft:
- BOOL-Variablen haben definierte Werte.
- STRING- und WSTRING-Variablen sind terminiert.
- Enumerationsvariablen haben gültige Werte.
- Variablen eines Unterbereichstyps haben gültige Werte.
- Variablen eines konstanten Blocktyps (STRUCT, ARRAY etc.) sind gegenüber ihren Initialisierungswerten unverändert.
- Funktionspointeradressen sind intern konsistent.
- Funktionspointer im Projekt zeigen in einen von TwinCAT 3 PLC verwalteten Speicher. Funktionspointer auf Bibliotheksbausteine oder auf externe Bausteine sind ausgenommen, diese können in externem Speicher liegen.
- Pointer auf einen Typ zeigen auf Speicherstellen dieses Typs.
- Pointer zeigen auf Speicherstellen, deren Adresse auf die Typgranularität ausgerichtet ist, oder 0 oder -1 ist.
- Schnittstellenvariablen und Funktionstabellenpointer sind intern konsistent.
- Der Code von kompilierten Bausteinen ist unverändert.
Hinweis: Kompilierte Bausteine mit Breakpoints werden von der Prüfung ausgenommen, weil für diese der Code zur Laufzeit manipuliert wird.
Die Ergebnisse der Prüfung werden im Meldungsfenster ausgegeben. Verstöße gegen die Prüfungskriterien erscheinen als Warnungen (siehe Tabelle unten).
Bei einem Doppelklick auf eine Warnung erscheint die Ansicht Speicher, in der die betreffende Stelle orange markiert ist. Die Ansicht Speicher kann auch mit dem Befehl Speicheransicht anzeigen geöffnet werden.
Mit Hilfe des Attributs 'memory_check' kann die Prüfung eingeschränkt werden.
ID der Warnung, wenn das Prüfkriterium nicht erfüllt wird. | Prüfkriterium |
|---|---|
MC0001 |
|
MC0002 | Enumerationsvariablen dürfen nur Werte annehmen, die in der Enumeration definiert sind. |
MC0003 | Variablen eines Unterbereichstyps dürfen nur Werte innerhalb des Unterbereich annehmen. |
MC0004 | Alle Strings müssen 0-terminiert sein. |
MC0005 | Pointer müssen immer auf Adressen zeigen, die das korrekte Alignment haben. Pointer müssen auf Speicherstellen zeigen, deren Adresse auf die Typgranularität ausgerichtet ist, oder |
MC0006 | Pointer müssen auf Speicher innerhalb der Applikation zeigen. |
MC0007 | Pointer müssen auf Variablen des korrekten Typs verweisen. Nicht korrekt wäre es z. B., wenn ein |
MC0008 | Interne Konsistenz von Compilerstrukturen Funktionspointeradressen müssen intern konsistent sein. |
MC0009 | Interne Konsistenz von Compilerstrukturen Schnittstellenvariablen und Funktionstabellenpointer müssen intern konsistent sein. |
MC0010 | Interne Konsistenz von Compilerstrukturen |
MC0011 | Der heruntergeladene Code darf sich seit dem Download nicht geändert haben. Der Code von kompilierten Bausteinen muss unverändert sein. Information: Kompilierte Bausteine mit Haltepunkten werden von der Prüfung ausgenommen, weil für diese der Code zur Laufzeit manipuliert wird. |
MC0012 | Der Wert einer Konstanten darf sich seit dem Download nicht geändert haben. Variablen eines konstanten Blocktyps ( |
MC0013 | Interne Konsistenz von Compilerstrukturen |
MC0014 | Interne Konsistenz von Compilerstrukturen |