# Indirekte Adressierung



## Bensen83 (10 Januar 2010)

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


----------



## rostiger Nagel (10 Januar 2010)

Vlt so


```
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
```


----------



## vierlagig (10 Januar 2010)

wer indirekt ausgänge anspricht gehört standrechtlich erschossen!


----------



## Flinn (10 Januar 2010)

vierlagig schrieb:


> wer indirekt ausgänge anspricht gehört standrechtlich erschossen!


 
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


----------



## Bernard (10 Januar 2010)

*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


----------



## bike (10 Januar 2010)

Bernard schrieb:


> 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


----------



## bike (10 Januar 2010)

Flinn schrieb:


> 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...
> 
> ...



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


----------



## Thomas_v2.1 (10 Januar 2010)

bike schrieb:


> 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.


----------



## Bensen83 (10 Januar 2010)

*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]


----------



## Bernard (10 Januar 2010)

*Lieber Themenstarter*

Nicht so ganz.


```
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


----------



## Thomas_v2.1 (10 Januar 2010)

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.


----------



## rostiger Nagel (11 Januar 2010)

vierlagig schrieb:


> wer indirekt ausgänge anspricht gehört standrechtlich erschossen!


 
vielleicht sollten wir gemeinsam daran Arbeiten das diese Funktionen aus
dem Step 7 Editor genommen werden, damit sie nicht mehr eingesetzt
werden können .


----------



## Bernard (11 Januar 2010)

*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


----------



## Flinn (11 Januar 2010)

Thomas_v2.1 schrieb:


> 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.
> ...


 
*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


----------



## rostiger Nagel (12 Januar 2010)

Flinn schrieb:


> @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


----------



## bike (12 Januar 2010)

Flinn schrieb:


> @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?
> 
> ...



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


----------



## Flinn (12 Januar 2010)

Helmut_von_der_Reparatur schrieb:


> 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.
> ...


 
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


----------



## Flinn (12 Januar 2010)

bike schrieb:


> 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.
> ...


 
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.



bike schrieb:


> 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


----------



## vierlagig (12 Januar 2010)

sfc14/15 findet man aber, anders als eine handgestrickte indirekte adressierung in den referenzdaten wieder.


----------



## bike (12 Januar 2010)

Flinn schrieb:


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


Will ich dich überzeugen? 
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.


----------



## Bensen83 (13 Januar 2010)

*Steuerdoppelwort senden*

Hallo, ich habe jetzt ein Steuerwort, welches ich zum Regler senden möchte. Dieses Steuerdoppelwort, ist jedoch kein DBD, sondern eine STRUCT, bestehend aus 32 Bit. 

Meine Frage ist jetzt , wie kann ich dieses Steuerwort jetzt zum Regler senden? 

L #Steuerwort
T PAD 300 

funktioniert ja nicht. also wie bekomme ich es hin das Steuerwort zu laden? woher weis man das er 32 Bit laden soll?


----------



## rostiger Nagel (13 Januar 2010)

Du könntest das Steuerword mit dem SFC20 umladen.


```
CALL  "BLKMOV"
       SRCBLK :=P#DBxy.DBxy BYTE 4       //hier ist dein Struct
       RET_VAL:=#RET_VAL_SFC20_lesen
       DSTBLK :=#Hilfsmerker             //eine Variable im Doppelwortformat vlt. Lokal
 
      L #Hilfmerker
      T PAD 300
```


----------



## Bensen83 (13 Januar 2010)

*Danke*

Danke dir, ich werde es mal versuchen


----------



## bike (13 Januar 2010)

Bensen83 schrieb:


> Hallo, ich habe jetzt ein Steuerwort, welches ich zum Regler senden möchte. Dieses Steuerdoppelwort, ist jedoch kein DBD, sondern eine STRUCT, bestehend aus 32 Bit.
> 
> Meine Frage ist jetzt , wie kann ich dieses Steuerwort jetzt zum Regler senden?
> 
> ...



Du kannst natürlich auch die Adresse der Struct an den Regler senden.
Also wenn deine Struct bei db1.dbx0.0 beginnt kannst du das ganze mit 
l db1dbd0
t paw 300
machen.
Ansonst kannst du mit dem SFC15(glaube ich, habe kein S7) die Struct an dem Profislave direkt schicken.


bike


----------



## R.Blum (14 Januar 2010)

Hallo ihr Bit verbieger,

es ist vollkomen normal, größere Mengen an Ausgangsdaten, wie bei den angesprochenen FUs blockweise zu übertragen, es geht ja oftmals auch darum, dass die Daten Konsistent verarbeitet werden. Genau zu diesem Zweck stellt Siemens die SFC14 (lesen) und SFC15 (schreiben) bereit, die die Daten blockweise übertragen können.

am geschicktesten definiert man in einem Datenbeustein eine Struktur, die dem jeweiligen SFC als Quelle bzw. als Ziel vorgegeben werden. Weiter brauchts nur noch die startbytes als Nummer von wo die Daten geholt werden bzw wo sie hingehen.

Wenn ich noch an die S5 und Profibus denke, wie aufwendig es war konsitstente Daten eines Slaves zu verarbeiten, das war auch noch CPU abhängig wie das gemacht werden musst, da ist es bei der S7 egal ob 300er oder 400er viel eleganter. Das einzige was mache ich arbeite dann nicht mehr mit E/As direkt sondern mit Datenbauteinen als Prozessabbild Ersatz, einfacher gehts nicht.

Außerdem, wenn ich einen FU anspreche, egal, ob nur Drehzahlgeregelt oder als Positionierantrieb, alles was es dazu braucht kommt in einen FB oder FC und der wird jedesmal verwendet. Wenn der funktioniert, interssiert sich niemand dafür was darin vorgeht,ich muss ihn nur vernünftig dokumentieren, oder könnt ihr ohne weiters in geschützte Bausteine von Siemens oder sonst wem reinschauen?

Gruß Rolf


----------



## bike (14 Januar 2010)

R.Blum schrieb:


> Hallo ihr Bit verbieger,
> 
> es ist vollkomen normal, ....



Klasse! PLC und normal *ROFL*

Das ist doch wie du lesen kannst Geschmacksache. 
Jeder soll doch mit seinem Programm glücklich werden, würde ich sagen.

bike

P.S: kann mir bitte jemand den Biegeradius von Bits nennen, die verbiegen werden sollen?
Danke


----------



## R.Blum (15 Januar 2010)

bike schrieb:


> Klasse! PLC und normal *ROFL*
> 
> Das ist doch wie du lesen kannst Geschmacksache.
> Jeder soll doch mit seinem Programm glücklich werden, würde ich sagen.
> ...


 
Richtig, jeder kann sein Programm schreiben wie er will, solange es andere nicht in die Finger bekommen und sich durch schlecht- bzw. falsch dokumentierte Software durchwühlen müssen.

Wenn Du dich schon über andere lustig machst, dann schreib wenigstens richtig.


----------



## Bernard (15 Januar 2010)

*Biegeradius von Bits nennen, die verbiegen werden sollen*

Da ein Bit nulldimensional (Datentechnisch nicht Pysikalisch) ist,muß sein Radius Null sein.


----------



## R.Blum (15 Januar 2010)

Bernard schrieb:


> Da ein Bit nulldimensional (Datentechnisch nicht Pysikalisch) ist,muß sein Radius Null sein.


 
Also mein Bit ist physisch und sogar dreidimensional, durch den flüssigen Aggregatzustand bei entsprechender Temperierung äußerst schmackhaft und wenn man genügend davon intus hat, ist einem der Biegeradius gleichgültig. 

In diesem Sinne, :sm24: und ein schönes WE

Gruß Rolf


----------



## Approx (15 Januar 2010)

R.Blum schrieb:


> Also mein Bit ist physisch und sogar dreidimensional, durch den flüssigen Aggregatzustand bei entsprechender Temperierung äußerst schmackhaft und wenn man genügend davon intus hat, ist einem der Biegeradius gleichgültig.


 
Und falls man sich mal verbogen hat, kann man hiermit den Biegeradius wieder gerade feilen!
;-)


----------



## Bernard (15 Januar 2010)

*Also mein Bit ist physisch und sogar dreidimensional*

Man hast du das gut,
schick mir doch mal ein Array of Fass über.

Schönes Wochenende Bernard


----------



## bike (16 Januar 2010)

R.Blum schrieb:


> Richtig, jeder kann sein Programm schreiben wie er will, solange es andere nicht in die Finger bekommen und sich durch schlecht- bzw. falsch dokumentierte Software durchwühlen müssen.
> 
> Wenn Du dich schon über andere lustig machst, dann schreib wenigstens richtig.



Danke Herr Lehrer
Was habe ich falsch geschrieben? 
Gut, dass du mich in Kunst des Programmieren einweist und erklärst was schelchte Programme sind.
Wie schon an anderer Stelle erwähnt ich lerne noch.

Sorry habe wohl wieder die [ironie][/ironie] vergessen.



Bernard schrieb:


> Da ein Bit nulldimensional (Datentechnisch nicht Pysikalisch) ist,muß sein Radius Null sein.



Stimmt, danke für die Aufklärung 

bike


----------



## R.Blum (17 Januar 2010)

bike schrieb:


> Danke Herr Lehrer
> Was habe ich falsch geschrieben?
> Gut, dass du mich in Kunst des Programmieren einweist und erklärst was schelchte Programme sind.
> Wie schon an anderer Stelle erwähnt ich lerne noch.
> ...


 
Nichts für ungut, aber Du machst genau den gleiche nFehler wie beim letzten Mal, geht mir aber genauso, meine eigenen Fehler finde ich selten, bis man mich mit der Nase draufstößt.

Dass dein Kommentar ironisch gemeint sein könnte war, zumindest für mich nict auf den ersten Blick zu erkennen, sorry, am weiteren Verlauf der Diskussion, war aber die Ironie sehr gut zu bemerken, oder?

Wenn Du noch lernst, wie Du selbst schreibst, was ich im übrigen selbst nach 25 Jahren Beruferfahung auch immer noch tue, dann solltest Du vielleicht auch mal von deren was annehmen.

Deinen Kommentar:


> Klasse! PLC und normal *ROFL*
> 
> Das ist doch wie du lesen kannst Geschmacksache.
> Jeder soll doch mit seinem Programm glücklich werden, würde ich sagen.
> ...


 
fasse ich als sehr überheblich auf.

Dennoch einen schönen Sonntag
Gruß Rolf


----------



## ticinese (26 Januar 2010)

*@Bike and 4lg*

Zu eurer Meinung möchte ich nur folgendes sagen:

Die dümmsten Programmierer haben die längsten Programme.


----------



## R.Blum (26 Januar 2010)

ticinese schrieb:


> Zu eurer Meinung möchte ich nur folgendes sagen:
> 
> Die dümmsten Programmierer haben die längsten Programme.


 

Gegen Dummheit ist kein Kraut gewachsen, erst recht nicht gegen einen Newbi.

Gruß Rolf


----------

