Step 7 Array über HMI beschreiben

Mathye

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

ich sitze gerade an einer Aufgabe und ich stecke fest. Bin neu in der Welt von AWL und die Vorgabe ist auch dass ich kein SCL verwenden kann. Die CPU ist eine S7-300 und ich programmiere es in AWL in Step 7. Das HMI ist ein MP 177 PN. Wie ich ein Array erreiche bzw. etwas reinschreibe habe ich den ettlichen Posts hier im Forum geschafft, danke mal. ^^

Das Array ist in einem DB das mit einem UDT erstellt wurde. Für Testzwecke sind nur 10 INT Elemente drinnen, es wird weiter ausgebaut wenn es dann ganz funktioniert. Wenn ich richtig gelesn habe sollte die Index Variable ein DINT sein.

Jetzt habe ich zwei kleinere Probleme:

Am Panel habe ich zwei Eingabefelder wo ich den Index und den Wert an das Programm übergebe. Will ich jetzt das Array von 0-9 nach einander füllen will, wird die vorherige Stelle mit 0 überschrieben. Springe ich aber von 0 auf 5 z.B bleibt der Wert erhalten, aber der Nachbarwert vom Sprungziel wird auf 0 gesetzt (Array[3]).
EDIT:
Habe das Problem jetzt in den Griff bekommen. Siehe Edit im Code. Das zweite ist weiterhin bestehend.

Das andere ist, dass der Wert erst in das Array geschrieben werden soll wenn ich einen "Übernehmen" Button am Panel gedrückt habe. Die Werte werden mit einem EA Feld in WinCC am Panel eingegeben. Jetzt werden die Werte sofort in die Variable geschrieben wenn ich die Eingabe daster von dem dem EA Feld drücke. Kann ich die Funktion ausschalten bzw. die Werte auf einem anderem Weg vom HMI übertragen?

Unten ist der Code den ich verwende.

Danke im Voraus

Code:
      L     "HMI_Stelle"
      SLD   3
      L     2
      *I    
      T     #Adresse

      L     "HMI_Wert"

      AUF   "Array_Werte"
      T     DBW [#Adresse]  //Edit: DBD auf DBW geändert
 
Zuletzt bearbeitet:
Sieht nciht so schlecht aus, bis auf das *I.

Ich gruppiere das mal etwas um, nur zur Deutlichkeit

Code:
L "HMI_Stelle"     
L 2  // die Stelle ist 0,1,2,3,... da Word angesprochen werden soll, wird jedes 2. Byte der Start eines Array-Elementes, Array-Element 0 startet bei 0, 1 fbei 2, 2 bei 4, 3 bei 6, ...
*D  //Adressen sind immer DWORD 
SLD 3
T #Adresse

L "HMI_Wert" //eine Int

AUF "Array_Werte"
T DBW [#Adresse]

Statt

Code:
L 2
*D
SLD 3

kann man auch gleich nur

Code:
SLD 4

schreiben.

So wie das geschrieben ist, muß das Array im DB immer als erstes stehen und als "Array of Int" definiert sein.
#Adresse als DWord definieren.
Wenn nicht, brauchst du noch einen Offset, je nachdem, wo das Array im DB steht, der auf die Adresse aufaddiert wird.
 
Zurück
Oben