Schnabeltiermann
Level-1
- Beiträge
- 6
- Reaktionspunkte
- 0
-> Hier kostenlos registrieren
Hallo!
Ich arbeite erst seit ca einem Monat als Steuerungstechniker und bin daher noch blutiger Anfänger in Sachen SPS.
Für ein Schulungsbeispiel sollte ich ein Programm in AWL schreiben, das für eine Zahl (1-10), die am HMI (KTP 600 PN) eingegeben wird, den entsprechenden (in einem DB gespeicherten) Wert am HMI ausgibt. Zusätzlich soll am HMI für eine Zahl ein neuer Wert eingegeben werden und per Tastendruck übernommen werden können.
Mit Hilfe der S7 Hilfe und einiger Foreneinträge habe ich ein funktionierendes Programm geschrieben, das Pointer verwendete, die über das Adressregister 1 angesprochen werden.
Das Code sieht folgendermaßen aus:
Das Programm funktioniert einfwandfrei, allerdings soll ich es nun (als Übung und zum besseren Verständnis) so umschreiben,
dass kein Adressregister mehr benötigt wird.
Brauche ich zu diesem Zweck eine Temp Variable?
Bzw. ist mir überhaupt nicht klar, wie ich einen Pointer erstelle bzw. lade ohne das Adressregister zu verwenden.
Ich bin um jeden Beitrag dankbar und bitte bedenkt, dass mir nach so kurzer Zeit erst ein sehr begrenztes Grundwissen zum Thema S7 Programmierung zur Verfügung steht.
Danke im Voraus
Schnabeltiermann
Ich arbeite erst seit ca einem Monat als Steuerungstechniker und bin daher noch blutiger Anfänger in Sachen SPS.
Für ein Schulungsbeispiel sollte ich ein Programm in AWL schreiben, das für eine Zahl (1-10), die am HMI (KTP 600 PN) eingegeben wird, den entsprechenden (in einem DB gespeicherten) Wert am HMI ausgibt. Zusätzlich soll am HMI für eine Zahl ein neuer Wert eingegeben werden und per Tastendruck übernommen werden können.
Mit Hilfe der S7 Hilfe und einiger Foreneinträge habe ich ein funktionierendes Programm geschrieben, das Pointer verwendete, die über das Adressregister 1 angesprochen werden.
Das Code sieht folgendermaßen aus:
Code:
//-Pointer 4.0 in Akku 1 laden----------
L 4 // lade 4
SLD 3 // schiebe um 3 nach links
LAR1 // in Adressregister 1 laden (Pointer P#4.0)
L 10 // lade die Anzahl der Schleifenzyklen in Akku 1
//- Zahlenvergleich---------------------
NEXT: T MW 100 // Sprungmarke --> Beginn der Schleife/ Inhalt von Akku 1 in Merkerwort 100 speichern
L MW 100 // lade Merkerwort 100
L "DB1".Zahl // lade Zahl aus DB1 (Zahl, die am HMI eingegeben wurde)
==I // vergleiche
SPBN NW1 // springe bedingt nicht zur Sprungmarke NW1
AUF "DB1" // DB1 öffnen
L DBW [AR1,P#0.0] // Pointer laden
T "DB1".Wert // lade in "DB1".Wert (wird am HMI angezeigt)
//- neuen Wert Übernehmen---------------
U "m_uebernehmen" // Merker Übernehmen betätigt
SPBN NW1 // springe bedingt nicht zur Sprungmarke NW1
L "DB1".NeuerWert // lade neuen Wert
T DBW [AR1,P#0.0] // lade in Pointer --> Pointer wird um 2 erhöht
//-Pointer um 2 erhöhen-----------------
NW1: L 2 // lade 2
SLD 3 // schiebe um 3 nach links
+AR1 // zum Inhalt von Adressregister addieren
//- Schleifenfunktion-------------------
L MW 100 // lade Merkerwort 100 (enthält den Inhalt von Akku 1 zu Beginn der Schleife
LOOP NEXT // Schleife/ springe zu NEXT wenn inhalt von Akku 1 <> 0
Das Programm funktioniert einfwandfrei, allerdings soll ich es nun (als Übung und zum besseren Verständnis) so umschreiben,
dass kein Adressregister mehr benötigt wird.
Brauche ich zu diesem Zweck eine Temp Variable?
Bzw. ist mir überhaupt nicht klar, wie ich einen Pointer erstelle bzw. lade ohne das Adressregister zu verwenden.
Ich bin um jeden Beitrag dankbar und bitte bedenkt, dass mir nach so kurzer Zeit erst ein sehr begrenztes Grundwissen zum Thema S7 Programmierung zur Verfügung steht.
Danke im Voraus
Schnabeltiermann
Zuletzt bearbeitet: