Lokierte Variablen (Überlappung)

MerlinBerlin

Level-1
Beiträge
35
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen.
Ich habe in meiner Steuerung diverse Arrays, bzw. deren Indizes, mit In- und Outputs verknüpft. Hin und wieder kommt es jedoch zu Problemen. Wenn ich die Variablen setze werden manchmal andere oder mehrere Variablen gesetzt. Ich vermute mal, dass das damit zu tun hat, dass sich die Adressbereiche überlappen. Ich habe aber auch ausreichend "Platz" zwischen den Arrays gelassen. Bei mir sieht das dann so aus:
Code:
xxx01            AT%QD200 : ARRAY[0..39] OF DINT;
xxx02            AT%QD400 : ARRAY[0..39] OF DINT;
xxx03            AT%QW800 : ARRAY[0..39] OF WORD;
xxx04            AT%QB1000 : ARRAY[0..39] OF BOOL;
xxx05            AT%QB1100 : ARRAY[0..39] OF BOOL;
xxx06            AT%QD1200 : ARRAY[0..39] OF UDINT;
xxx07            AT%QD1600 : ARRAY[0..39] OF DINT; 
xxx08            AT%QD2000 : ARRAY[0..39] OF DINT; 
xxx09            AT%QD2400 : ARRAY[0..39] OF UINT; 
xxx10            AT%QD2800 : ARRAY[0..39] OF UINT;
xxx11            AT%QD3200 : ARRAY[0..39] OF UINT;
xxx12           AT%QD3600 : ARRAY[0..39] OF UINT;
xxx13            AT%QW4000 : ARRAY[0..39] OF WORD; 
xxx14           AT%ID5200 : ARRAY[0..39] OF DINT;
xxx15           AT%ID5600 : ARRAY[0..39] OF DINT;
xxx16            AT%ID6000 : ARRAY[0..39] OF DINT;
xxx17            AT%IW6400 : ARRAY[0..39] OF WORD;
xxx18            AT%IW6800 : ARRAY[0..39] OF WORD;

Kann mir jemand sagen, was ich falsch mache?
 
Hin und wieder kommt es jedoch zu Problemen. Wenn ich die Variablen setze werden manchmal andere oder mehrere Variablen gesetzt.


Flüchtig durchgesehen würde ich sagen, die Abstände sind großzügig bemessen. Bei Überlappungen hättest Du aber immer den Fehler und nicht hin und wieder.

Kann es sein, das da schon VKE's mit reinspielen? Also wenn Du bestimmte Bits/Bytes setzt, das andere vom Programm gesetzt werden?
 
Der Fehler lag tatsächlich im Code. Sollte alles hinhauen jetzt. Vielen Dank für die Mühe!

Nur so am Rande, für was steht VKE?:)
 
Code:
xxx04            AT%QB1000 : ARRAY[0..39] OF BOOL;
xxx05            AT%QB1100 : ARRAY[0..39] OF BOOL;
Wieviel Platz belegt ein BOOL in einem Array in Deinem unbekannten Programmiersystem?
Adressiert das BOOL-Array tatsächlich Ausgänge %Q1000.0, %Q1000.1, %Q1000.2 ...?

Warum legst Du Arrays über die Hardware-Ein-/Ausgänge?
Kann man in Deinem Programmiersystem Ein-/Ausgangsadressen mit Adresslücken projektieren?
Hast Du mit Deiner Array-Lösung etwa Probleme bei der Fehler-Diagnose? ;)

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das BOOL-Array adressiert %Q1000 bis %Q1039.

Weil ich mehrere Achsen steuere, die die selben Variablen haben.
Die Frage verstehe ich nicht. Was bedeutet Adresslücken projektieren?
 
@PN/DP
Wenn ich alle Info's richtig zusammenführe, reden wir von einer Beckhoff CX9020.
Bei Beckhoff ist ein Bool adresstechnisch ein Byte.

@MerlinBerlin
VKE = Verknüpfungsergebnis, also das Ergebnis einer logischen Operation oder Berechnung
 
Du programmierst "mehrere Achsen" und weißt nicht was ein VKE ist und was eine Adresslücke ist???
( Edit: OK, das Wort VKE ist bei IEC61131 tatsächlich nicht so geläufig. )


Ich habe aber auch ausreichend "Platz" zwischen den Arrays gelassen. Bei mir sieht das dann so aus:
Code:
xxx02            AT%QD400 : ARRAY[0..39] OF DINT;
xxx03            AT%QW800 : ARRAY[0..39] OF WORD;
Kann Dein Programmiersystem E/A-Modulen Adressen mit Lücken dazwischen zuweisen?:
QB400...QB559
- Adresslücke -
QB800...QB879

Kann es vielleicht sein, daß z.B. %QD400 und %QW800 auf den selben Adressen liegen?

Das BOOL-Array adressiert %Q1000 bis %Q1039.
Warum ist Deine Schreibweise der Ausgänge so komisch? Warum nicht %Q1000.0 oder %QB1000?

Was für eine SPS programmierst Du mit welchem Programmiersystem?
Hat Dein Programmiersystem vielleicht eine Prüffunktion, welche überlappende Speicherbereiche findet?

Harald
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Korrekt:) Daher auch die Anfängerfragen.

Ich gehe davon aus, dass es möglich ist. Den Fall habe bereits geprüft und den Code angepasst. Es scheint jetzt zu laufen. Ich bin nur verwundert, dass ich solche Probleme nur hin und wieder hatte.

Ich nutze TwinCAT3 in Visual Studio 12, weiß nicht ob es da solche Funktionen gibt.

Habe bei der Schreibweise nur das B vergessen, sorry.

Wie gesagt, es läuft jetzt. Es schien ein Fehler im Code gewesen zu sein und zusätzlich einer in der Adressierung, der sich aber noch nicht bemerkbar gemacht hat.

Vielen Dank.
 
Hallo!

Seit der letzten Version (Tc3.1.4018) gibt es eine Überprüfungsfunktion für überlappende Speicherbereiche.

Aber in den meisten Fällen ist nicht Deklaration das Problem sondern die Nutzung im Code.
Hierfür gibt es "POU for implicit check", d.h. Funktionen, die z.B. eine dynamisch auftretende Bereichsüberschreitung (und somit Überlappung beim Zugriff) detektieren und Verhindern.

Gruß,
mac203
 
Zurück
Oben