Bei Simulation ***INVALID: 16#xx***

der dude

Level-1
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich bekomme bei meiner Visualisierung eines Aufzuges in der Simulation immer die Anzeige das die Werte invalid sind, je mehr Variablen ich reinschreibe desto mehr werden Invalid... im Bild unten ändern sich die Werte gleichzeitig mit dem hochzählen des positionx obwohl es nur boolsche Variablen sind. Werden evtl. irgendwo die Speicherbereiche intern überschrieben ?

fehler.jpg
 
Hi,

alles bereinigen schon probiert?
Ich hatte dies auch mal,kann mich aber nicht mehr erinnern wie ich es gelöst habe. Hatte ewig herumprobiert und ich glaube am Ende hab ich einfach eine neue Variable angelegt und diese genommen und das ganze als TWINCAT FEATURE :)p) mir erklärt.....

Gruß,

S.
 
wasn affiger bug, vielen Dank !das bereinigen hat geholfen, hat mich echt n paar Stunden Zeit gekostet ...

Der Bug ist vermutlich in deinem Programm! Arbeitest Du mit Arrays? Wenn ja solltest Du mal die Funktion checkbounds einfügen, da Du vermutlich über die Arraygrenzen hinweg läufst.
 
Der Bug ist vermutlich in deinem Programm! Arbeitest Du mit Arrays? Wenn ja solltest Du mal die Funktion checkbounds einfügen, da Du vermutlich über die Arraygrenzen hinweg läufst.
Da sich in den Globalen Variablen aber keine Arrays befinden ist das wohl auszuschließen.

Das Problem dürfte hier vermutlich wohl eher ein Online-Change mit verschiebung von Variablen sein.
Technischer Hintergrund:
Ein Bool, wenn es nicht mit AT auf eine feste Adresse gelegt ist, belegt bei Codesys ein komplettes Byte im Speicher,
wenn nun also in den 7 anderen Bits irgendwas steht, dürfte es höchstwahrscheinlich zu eben jenen Phänomen kommen.

Mfg
Manuel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das ein Bool im Speicher ein Byte belegt ist mir bekannt.
Die Frage ist doch wie in den Speicher ein ungültiger Wert kommt!
Aus meiner Erfahrung sind es fast immer Fehler im Anwender-Programm.
Dabei ist es auch irrelevant, ob ein Array im selben Variablen-Kontainer angelegt ist.

Das Bereinigen des Programms sorgt für eine Neuorganisation des Speichers.
Sollte mein Verdacht mit der Arraygrenzenüberschreitung stimmen, tritt der Fehler eben an einer anderen Stelle auf.
Das ist dann ein schöner Fehler der im Programm vor sich hinschlummert.

Also checkbounds benutzen und Arraygrenzenüberschreitung ausschließen!

Gruß

dummy
 
Ich habe ein ähnliches Problem, jedoch habe ich ein Array aus Struct und im ersten Element sind zwei der Variablen nach Start des Programm INVALID.
Dieser Fehler tritt aber nur solange auf, wie das Array eine Modbusadresse zugewiesen bekommt (%MW3000 z.b.).
 
Zurück
Oben