Step 7 AWL: Probleme mit indirekte Adressierung

Lenny94

Level-1
Beiträge
5
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Abend zusammen,

ich bin neu hier und freue mich für jede Hilfe.

Meine Aufgabe ist es in AWL eine Artikelverwaltung zu programmieren. Dabei bin ich auf ein Problem gestoßen.
Ich habe einen UDT mit Rezeptdaten und in DBxx einen ARRAY[0..10] von UDT angelegt.

  • Array[0] soll zum Beobachten des angewählten Rezept dienen. Also Array[0] = HMI-Projektierfeld. Hier sollen die angewählten Rezepte angezeigt werden
  • In Array[1] - [10] sollen Rezepte gespeichert werden



Ich bin jetzt soweit gekommen, dass ich in Array[1] - [8] Rezepte speichern kann. Meine Probleme treten beim Speichern von Rezepte in Array[9] und Array[10] auf.

1.Problem

Das Speichern von Daten in Array[9] ist möglich, jedoch wird die Artikelnummer von Array[10] gelöscht. Alle anderen Daten von Array[10] bleiben erhalten. Die anderen zuvor gespeicherten Rezepte Array[1] - [8] bleiben weiterhin erhalten

2.Problem

Das Speichern von Daten in Array[10] ist ebenso möglich, jedoch werden dann in Array[9] alle zuvor gespeicherten Daten gelöscht. Die anderen zuvor gespeicherten Rezepte Array[1]8] bleiben weiterhin erhalten

Kann es sein, dass beim Speichern in Array[9] und [10] Überlappungen im Speicherbereich entstehen??

Vielen Dank im Voraus und schönen Abend noch

Lenny
 
Wie soll man das sagen, ohne ein Stück Code zu sehen?
Klar, kann sein! ;-)
 
Hallo miteinander,

habe es endlich geschafft nach Hause zu kommen. :) Wie gewünscht habe ich den Codeabschnitt in den Anhang beigefügt.

Viele Grüße

Lenny
 

Anhänge

  • Rezeptverwaltung.pdf
    78,9 KB · Aufrufe: 44
Ich kann keine Abbruchbedingung der Schleife bei >10 finden.
Vielleicht gibt es auch in einer Variablen einen Überlauf, leider fehlen die Typen.
Wenn ich es richtig sehe, wird AR1 beim Schreiben auch nicht belegt sondern hat zufällige Werte (wenn Temp-Variable), ansonsten den vom letzten Durchlauf.
 
Moin

Wieso berechnest du den Pointer nicht direkt? Wenn Rezept X geladen werden soll dann: SFC20 Quelle => X * "Länge UDT"; Ziel => 0; beides mit Länge des UDT.
Zum Speichern kannst du Quelle und Ziel tauschen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Lenny94
Also in der Zeigerei kann ich jetzt nicht auf Anhieb einen Fehler finden.
Was ganz sicher falsch ist, Typwechsel darf keine Temp sein, da diese Variable ja mehr al einen Zyklus lang benötigt wird.
Außerdem sihet das so aus, also ob du den Code ständig durchackerst. Falls nicht wäre zu klären, ob die Teit auch wirklich immer aufgerufen ist und funktioniert.

Wenn ich das so ansehe, dann sollte zumindest kein Unterschied zwischen zwischen den einzelenen Artikeln bestehen, d.h. es ist nicht plausibel, warum gerade bei 9 und 10 etwas schiefläuft.
Du hast nicht den gesamten Baustein gezeigt und auch nicht den Aufruf, da kann auch noch etwas schief gegen. Des weiteren ist nicht gesagt, ob andere Porgrammteile bzw. Fehler darin hier eine Rolle spielen.


@LNY
Sicher geht es mit BLK_Mov (SGC20), es gib immer eine Möglichkeit weiter zu optimieren.
 
Hallo,

@LNy werde auf jeden Fall deinen Vorschlag (BLK_MOV) im Hinterkopf behalten.


@Ralle
@Lenny94

Wenn ich das so ansehe, dann sollte zumindest kein Unterschied zwischen zwischen den einzelenen Artikeln bestehen, d.h. es ist nicht plausibel, warum gerade bei 9 und 10 etwas schiefläuft.

Deshalb werde ich die Artikelverwaltung in einem separaten Testprojekt, in dem nur die Artikelverwaltung ist, testen. So könnte ich dann auch sehen, ob die Artikelverwaltung an sich funktioniert.

Viele Grüße und ein schönes Wochenende

Lenny
 
Zuletzt bearbeitet:
Zurück
Oben