TIA Pointerüberlauf im AR1

Eisborner

Level-2
Beiträge
21
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen.

Ich greife über einen Pointer im AR1 auf Ausgänge in verschiedenen Takten zu. Hier sollen Ventile an 21 Steckern geschaltet werden.

als Adressbereich habe ich

LAR1 P#3584.0
+AR1

Leider Überschreibe ich mir die Ausgänge in den Steckern 1-5, wenn ich die Stecker 17-21 ansteuere.
Kann mir jemand sagen woher die 3584.0 kommen? Sobald ich die Zahl erhöhe funktionieren nur noch Stecker 1-8 :-(

Irgendwie habe ich einen Überlauf, kann mir aber noch nicht genau erklären woher dieser kommt.

Vielen Dank schonmal
 

Anhänge

  • Pointer.jpg
    Pointer.jpg
    3,4 MB · Aufrufe: 105
Moin Eisborner,

warum programmierst Du auf einer 1518 AWL?

Woher die 3584.0 kommen? Sie sind hart im Code programmiert...

Könnte es sein, dass der Wert für das AR1 einfach zu hoch ist?
 
Ich finde auch , dass das strafbar ist. Wir müssen doch sparen!
Eisborner, arbeite mal mit +D, um die Adresse zu ändern. +AR kann nur mit 16Bit rechnen, wenn ich nicht irre.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Kann mir jemand sagen woher die 3584.0 kommen?
Aus deiner Zeile 39 :cool:
Da sollte die Anfangsadresse (Offset) des Arrays im DB stehen.
Die Anfangsadresse des Arrays darf bei deiner Berechnung höchstens bei P#3760.0 liegen.

Grund: +AR1 kann nur max 32767 zu AR1 addieren (entspricht P#4095.7) siehe die Hilfe zur Anweisung +AR1 Größere 16 Bit Zahlen werden als negativ interpretiert und ergeben eine Subtraktion.
Generell ist deine Berechnung mit +AR1 ungeeignet. Du müsstest mit +D rechnen oder besser gar nicht mit Adressen, Pointern und AWL, sondern direkt mit den Array-Indizes.

PS: Deine Zeilen 35 + 36 sind irgendwie sinnfrei. Ein einfaches LAR1 tut es auch.
 
Guten Morgen zusammen.

Ich habe das Programm leider nicht selber geschrieben, sonst wüsste ich ja auch was da genau passiert ;-)

Mein Ziel war eigentlich, die vorhandene Steuerung um ein paar Ausgänge zu erweitern. Da das Programm so in der Vergangenheit immer einwandfrei funktioniert hat, wollte ich es eigentlich nicht komplett ändern und mit wenig Aufwand erweitern.

Vielen Dank schonmal für die Antworten
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe das Programm leider nicht selber geschrieben, sonst wüsste ich ja auch was da genau passiert ;-)

Mein Ziel war eigentlich, die vorhandene Steuerung um ein paar Ausgänge zu erweitern. Da das Programm so in der Vergangenheit immer einwandfrei funktioniert hat, wollte ich es eigentlich nicht komplett ändern und mit wenig Aufwand erweitern.
naja, wenigstens ist der Code etwas kommentiert.
Also entweder mal in Pointer einarbeiten, was ja auch nicht Schaden kann, oder gleich den Originalprogrammierer holen, was so gut wie immer die beste Idee ist.
 
Zuletzt bearbeitet:
Zurück
Oben