Indirekte Adressierung

Bensen83

Level-1
Beiträge
777
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute ich möchte einen FB erstelln, in dem ich etwas in verschiedene Peripherie Ausgänge schreibe und eingänge lese.

Alles in ner S7 317-2DP

Ich möchte es so machen, dass ich die Anfangsadressen als Input in den FB schreibe und dann in dem FB intern einen Offset auf die Adressen druf rechen. also zB.

Anfangsadresse = 300

L "erstes doppelwort"
T PAD 300

L "zweites doppelwort"
T PAD 304


usw.

Wie geht das denn? Danke
 
Vlt so

Code:
LAR1 P#M100.0
LAR2 P#A300.0

L #anzahl_Daten
M001: T #schleifenzaehler
L D[AR1,P#0.0]
T D[AR2,P#0.0]
+AR1 P#4.0
+AR2 P#4.0
L #schleifenzaehler
LOOP M001
 
Zuletzt bearbeitet:
wer indirekt ausgänge anspricht gehört standrechtlich erschossen!

Hilfe !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
der SPS-Inquisitor 4LG startet mal wieder eine Verfolgung aller,die vom rechten SPS-Glauben abgewichen sind.Hoffentlich leistet mir Helmut_von _der_Reperatur Unterschlupf.Vermute das 4LG über die Feiertage zuviel SPS-Weihwasser getrunken hat.Naja ist auch egal,bin erst einmal auf der Flucht in die SPS-reformierten Gebiete.Hoffentlich erwischt mich 4LG nicht,ich glaube der kennt keine Gnade.Sehe mich schon blutend im Strassengraben um Gnade bettelnd und die Prozessabilder anflehend.Habe keine Zeit muß sofort weg.

Viele Grüße der flüchtende Bernard
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hilfe !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
der SPS-Inquisitor 4LG startet mal wieder eine Verfolgung aller,die vom rechten SPS-Glauben abgewichen sind.Hoffentlich leistet mir Helmut_von _der_Reperatur Unterschlupf.Vermute das 4LG über die Feiertage zuviel SPS-Weihwasser getrunken hat.Naja ist auch egal,bin erst einmal auf der Flucht in die SPS-reformierten Gebiete.Hoffentlich erwischt mich 4LG nicht,ich glaube der kennt keine Gnade.Sehe mich schon blutend im Strassengraben um Gnade bettelnd und die Prozessabilder anflehend.Habe keine Zeit muß sofort weg.

Viele Grüße der flüchtende Bernard

Junge ich hoffe du bleibst weg.
Solch eine Mist zu schreiben, da muss dein Rechner in den Rechnerhimmel direkt gehoben werden, für jemand der so etwas erträgt wäre die Hölle nur ein Umzug.

Denn deine Aussage zeigt dass du von PLC programmieren keine Ahnung hast.
Denn vierlagig hat recht.

bike
 
Bei DA's tut man das nicht, okay.

Aber bei beispielsweise Profibus-FU-Kopplungen (über PED, PAD-Zugriff), muss der Programmierer nicht erschossen werden, da ist das ganz normal... Also keine Angst...

Gruß
Flinn

Nein, das muss nicht sein. Und normal ist schon garnicht.
(Wobei ich die Defininition von normal in Frage stelle)
Und ich möchte dich fluchen hören wenn du in solch einem Programm Fehler suchst oder etwas dazu bauen darfst

bike
 
Nein, das muss nicht sein. Und normal ist schon garnicht.
(Wobei ich die Defininition von normal in Frage stelle)
Und ich möchte dich fluchen hören wenn du in solch einem Programm Fehler suchst oder etwas dazu bauen darfst
Und wie machst du das wenn du 50 FU Antriebe hast bei denen nicht nur Statuswort und Steuerword/Sollwert ausgewertet werden?
Jedes PEW/D als Funktionsparameter? Jeder Antrieb bekommt einen eigenen Baustein nur damit nichts indirekt gemacht werden muss?

Bei Status-/Steuerword, Sollwert ließe ich das noch durchgehen, ansonsten wird das doch absolut unübersichtlich.

Bei mir haben z.B. bei FUs die PEW und PAW Startadressen immer den gleichen Wert. Der Standardbaustein hat einen Eingang "FU_Adresse" an welche diese eingetragen wird. Im Baustein erfolgt der Zugriff dann indirekt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Genau

Genau das habe ich vor, will nen Stnadardbaustein zur Ansteuerung von Servoreglern erstellen.
Muss Steuerwort, Drehzahl, Lageziehl, Profilnummer, Rampe Start, Rampe Stopp, Referenzsollposition, usw. übertragen. und ill eben genau nur die anfangs PAD angeben.

müsste ja so gehen, oder?

L #anfngsadresse
SLD 3

L #daten
T PAD [AR1, P#0.0]

L #daten2
T PAD [AR1, P#4.0]
 
Lieber Themenstarter

Nicht so ganz.

Code:
l #Anfangsadresse//integer
sld 3//in das Pointerformat schieben
lar1//Übergabe an das AR1

l wert_1//z.B dint
t pad[ar1,p#0.0]//Erstwert

l wert_2//z.B int
t paw[ar1,p#4,0]

etc........
Leider weiß ich nicht in was für einem Bausteintyp du das ganze Programmieren willst.Deshalb empfehle ich dir
Die AR Register zu retten.


Viele Grüße Bernard
 
Zuletzt bearbeitet:
Man muss das aber nicht so umständlich über AR1 machen.
Einfacher wäre- wenn die Startadresse von Typ INT ist - bei Siemens MM nenne ich diese #PKW_Basis:

L #PKW_Basis
SLD 3
T #temp_PKW

L PEW[#temp_PKW]
T #foo

Um den Zugriff wenigstens auf die Anfangsadresse in der Referenzliste wiederzufinden, könnte man das Start PEW auch vom Typ POINTER machen, und diesen dann im Baustein zerlegen. Dann kann ich außerhalb z.B. PEW256 dranschreiben, und wenigstens diese Adresse findet sich in der Querverweisliste wieder.
 
Kein Indirekter Zugriff auf Ausgänge

Hat Siemens mit der S7-1200 ja versucht,sogar so gründlich das es dort zu Anfang überhaupt keine indirekte
Adressierung gab.Hat sich aber mit SP2 erledigt.

Viele Grüße Bernard
 
Und wie machst du das wenn du 50 FU Antriebe hast bei denen nicht nur Statuswort und Steuerword/Sollwert ausgewertet werden?
Jedes PEW/D als Funktionsparameter? Jeder Antrieb bekommt einen eigenen Baustein nur damit nichts indirekt gemacht werden muss?

Bei Status-/Steuerword, Sollwert ließe ich das noch durchgehen, ansonsten wird das doch absolut unübersichtlich.

Bei mir haben z.B. bei FUs die PEW und PAW Startadressen immer den gleichen Wert. Der Standardbaustein hat einen Eingang "FU_Adresse" an welche diese eingetragen wird. Im Baustein erfolgt der Zugriff dann indirekt.

*ACK*

Um den Zugriff wenigstens auf die Anfangsadresse in der Referenzliste wiederzufinden, könnte man das Start PEW auch vom Typ POINTER machen, und diesen dann im Baustein zerlegen. Dann kann ich außerhalb z.B. PEW256 dranschreiben, und wenigstens diese Adresse findet sich in der Querverweisliste wieder.

*ACK*

Du könntest mein Kollege sein!

@helmut, vl, bike
Wie würdet Ihr denn jetzt 50 FU's, Servo's oder ähnliches einbinden?
Tippen bis der Arzt für die Finger kommt und der Admin für die Tastatur kommt, oder wie?

Gruß
Flinn
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@helmut, vl, bike
Wie würdet Ihr denn jetzt 50 FU's, Servo's oder ähnliches einbinden?
Tippen bis der Arzt für die Finger kommt und der Admin für die Tastatur kommt, oder wie?

Hallo Flinn,
ich mach es mit den Adreßregistern, wie den auch sonst.
Wenn du den Thread gelesen hättest wäre dir bei #2 aufgefallen
das ich es auch so vorgeschlagen hatte.

schönen gruß
Helmut
 
@helmut, vl, bike
Wie würdet Ihr denn jetzt 50 FU's, Servo's oder ähnliches einbinden?
Tippen bis der Arzt für die Finger kommt und der Admin für die Tastatur kommt, oder wie?

Gruß
Flinn

Natürlich, du weisst ja ich Neuling ;)

Also ich hole mir die Daten vom Profibusslave nicht über PEW und schreibe PAW.
Es gibt doch denke ich SFC um Daten zu lesen und zu schreiben.
Ich lade mir die Daten in eine DB, dann kann ich mit diesen Daten in einem FB wunderschön indirekt adressiert arbeiten, aber ich schreibe keine Ausgänge indirekt.
Es können und dürfen auch Merker sein.

Also es geht auch ohne mauscheln

bike
 
Hallo Flinn,
ich mach es mit den Adreßregistern, wie den auch sonst.
Wenn du den Thread gelesen hättest wäre dir bei #2 aufgefallen
das ich es auch so vorgeschlagen hatte.

schönen gruß
Helmut

Sorry Helmut, habe den Thread wohl gelesen, aber wohl nicht so gut.
Wie konnte das nur passieren? Meinte dich gar nicht! Nix für ungut.

Gruß
Flinn
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Natürlich, du weisst ja ich Neuling ;)

Also ich hole mir die Daten vom Profibusslave nicht über PEW und schreibe PAW.
Es gibt doch denke ich SFC um Daten zu lesen und zu schreiben.
Ich lade mir die Daten in eine DB, dann kann ich mit diesen Daten in einem FB wunderschön indirekt adressiert arbeiten, aber ich schreibe keine Ausgänge indirekt.
Es können und dürfen auch Merker sein.

Also es geht auch ohne mauscheln

bike

Ja, es gibt SFC14/SFC15. Letztendlich machen aber auch die SFC mit Angabe der Adresse (LADDR:=W#16#64 - unschönerweise als WORD in HEX angegeben) aber nichts anderes als einen indirekten Zugriff auf deine Peripherieeingänge bzw. -ausgänge. Ob das jetzt soviel besser ist (bzw. kein "mauscheln")??? Im übrigen nehme ich, wenn möglich auch den SFC14/15, aber nur aus Konsistenzgründen.

Denn deine Aussage zeigt dass du von PLC programmieren keine Ahnung hast.
Denn vierlagig hat recht.

So eine Aussage überzeugt mich wiederum auch nicht.

Gruß
Flinn
 
So eine Aussage überzeugt mich wiederum auch nicht.

Gruß
Flinn
Will ich dich überzeugen? :confused:
Bestimmt nicht.

Ich zeige nur, dass es einfach auch richtig geht, wie es für Instandhalter(Kunden) und Servicetechniker einfacher ist das Programm zu verstehen und ggF Fehler (die ja nicht drin sind ;) ) finden können.

Programmier doch mit deinen indirekenten Adressen, niemand hintert dich doch.

Ich sehe es bei meinen Kollegen und bei mir, dass wir nach einem oder zwei Jahren unsere Programme selbst nicht mehr gut finden,da zu indirekt und bei Änderungen oft besser neuschreiben.



bike

P.S: Und die Jungs die können programmieren. Und ich lerne es bestimmt noch.
 
Zurück
Oben