# FB erstellen?



## ottopaul (3 Mai 2007)

Hallo,
ich muss 20 ventile über DP ansteuern und möchte einen FB dafür schreiben.
Ich habe ein PEW und ein PAW.
Die Bits und Bytes sind wie folgt eingeteilt:
Eingangswort
Byte 0 Bit 0 = Endlage AUF
Byte 0 Bit 1 = Endlage ZU
Byte 0 Bit 2 = Reserve
Byte 0 Bit 3 = Reserve
Byte 0 Bit 4 = Fährt AUF
Byte 0 Bit 5 = Fährt ZU
Byte 0 Bit 6 = Warnung
Byte 0 Bit 7 = Fehler
Byte 1 Bit 0 = Thermofehler
Byte 1 Bit 1 = Netzfehler
Byte 1 Bit 2 = Wahlschalter Fern
Byte 1 Bit 3 = Wahlschalter Ort
Byte 1 Bit 4 = Wegendschalter AUF
Byte 1 Bit 5 = Wegendschalter ZU
Byte 1 Bit 6 = Drehmomentschalter AUF
Byte 1 Bit 7 = Drehmomentschalter Zu
Ausgangswort
Byte 0 Bit 0 = Befehl AUF
Byte 0 Bit 1 = Befehl ZU
Byte 0 Bit 2 = Reserve
Byte 0 Bit 3 = Reserve
Byte 0 Bit 4 = Reserve
Byte 0 Bit 5 = Reserve
Byte 0 Bit 6 = Reserve
Byte 0 Bit 7 = Reserve
Byte 1 Bit 0 = Reserve
Byte 1 Bit 1 = Reserve
Byte 1 Bit 2 = Reserve
Byte 1 Bit 3 = Reserve
Byte 1 Bit 4 = Reserve
Byte 1 Bit 5 = Reserve
Byte 1 Bit 6 = Reserve
Byte 1 Bit 7 = Reserve
Wie erstelle ich eine FB, damit ich nur noch das PEW /PAW dranschreiben muss?
und das Ventil Auf Bzw. Zu angesteuert wird. ????
Danke im Voraus.


----------



## OHGN (3 Mai 2007)

Hm... 
das mit den PEW und PAW verstehe ich nicht, wenn Du über den Profibus DP ansteuern willst.


----------



## Werner54 (3 Mai 2007)

*Erstmal kopieren*

@ottopaul

am Beginn Deiner Bearbeitung erstmal das PEW in ein Merkerwort kopieren. Als Merker lassen sich alle normalen funktionen anwenden. Am Schluss das erzeugte Merkerwort nur ins PAW kopieren.


----------



## ottopaul (3 Mai 2007)

*FB erstellen*

Ich muss das Ventil doch am Profibus einbinden und vergebe eine Adresse, also PEW256 bzw PAW 256.
Nun muss ich doch irgendwie auf die einzelenen Bits im FB zugreifen bzw verarbeiten . 
JA...das ist mein Problem.


----------



## Zefix (3 Mai 2007)

Werner54 schrieb:


> @ottopaul
> 
> am Beginn Deiner Bearbeitung erstmal das PEW in ein Merkerwort kopieren. Als Merker lassen sich alle normalen funktionen anwenden. Am Schluss das erzeugte Merkerwort nur ins PAW kopieren.


 
Bei 20 Worten würd ich das lieber mit UDT über einen DB machen.
Im DB gibst als IN den UDT an, somit kann im FB mit den selben Variablen wie im DB gearbeitet werden.

Am Ausgang muss es genauso gehen.

Gruss Andy


----------



## Zefix (3 Mai 2007)

ottopaul schrieb:


> Ich muss das Ventil doch am Profibus einbinden und vergebe eine Adresse, also PEW256 bzw PAW 256.


Das machst ja in der Hardware und dort weist du doch die Ein und Ausgänge zu.So solltest du auch ohne PEW auskommen.
z.B.
U EW 1 
T DB_Ventile.Zylinder_1

Anderer Fall:
Deine Steuerung kann vielleicht zb. nur  1024 E/A Verwalten,die E/A die drüber liegen musst du dann mit den DP Send / Receive Bausteinen einlesen.(Weiss grad die genaue Bezeichnung / Numer nicht).



ottopaul schrieb:


> Nun muss ich doch irgendwie auf die einzelenen Bits im FB zugreifen bzw verarbeiten .
> JA...das ist mein Problem.


Siehe meinen Beitrag drüber


----------



## ottopaul (3 Mai 2007)

*FB erstellen*

geht das nicht alles in einem FB? hast du ein beispiel für sowas? ich dachte der FB legt die Instanz an. Aber im FB kann ich die einzelnen Bits ja nicht beschriften, oder?
ein beispiel wäre super....danke


----------



## TommyG (3 Mai 2007)

Das mit

den PEW's/ PAW's kenn ich eher vom Koppler. Wenn Du die Ventile so angesprochen bekommst, dann ist doch gut. 

Aber Deine einegtliche Frage, also wie man sich nen FB baut, nen 'Ventilautomaten' der die Verarbeitung zwischen Ein und Auslesen macht, DAS würd mich auch interessieren.

also plz profis, gibt mal den Noobs nen paar Tipps



Greetz


----------



## OHGN (3 Mai 2007)

In der Deklarationstabelle ein Eingang und einen Ausgang als Word deklarieren.

im ersten Netzwerk des Bausteins:
L #in //Eingangsword
T LW0 //in temporäre Variable laden

auf die temporäre Variable kann dann wie folgt bitweise zugegriffen werden:
L0.0 Byte 0 Bit 0 = Endlage AUF
L0.1 Byte 0 Bit 1 = Endlage ZU
L0.2 Byte 0 Bit 2 = Reserve
L0.3 Byte 0 Bit 3 = Reserve
L0.4 Byte 0 Bit 4 = Fährt AUF
L0.5 Byte 0 Bit 5 = Fährt ZU
L0.6 Byte 0 Bit 6 = Warnung
L0.7 Byte 0 Bit 7 = Fehler
L1.0 Byte 1 Bit 0 = Thermofehler
L1.1 Byte 1 Bit 1 = Netzfehler
L1.2 Byte 1 Bit 2 = Wahlschalter Fern
L1.3 Byte 1 Bit 3 = Wahlschalter Ort
L1.4 Byte 1 Bit 4 = Wegendschalter AUF
L1.5 Byte 1 Bit 5 = Wegendschalter ZU
L1.6 Byte 1 Bit 6 = Drehmomentschalter AUF
L1.7 Byte 1 Bit 7 = Drehmomentschalter Zu

Dann kommt Dein Programmcode, dessen Ergebnis Du bitweise auf die 2.temporäre Variable schreibst:

L2.0 Byte 0 Bit 0 = Befehl AUF
L2.1 Byte 0 Bit 1 = Befehl ZU
L2.2 Byte 0 Bit 2 = Reserve
L2.3 Byte 0 Bit 3 = Reserve
L2.4 Byte 0 Bit 4 = Reserve
L2.5 Byte 0 Bit 5 = Reserve
L2.6 Byte 0 Bit 6 = Reserve
L2.7 Byte 0 Bit 7 = Reserve
L3.0 Byte 1 Bit 0 = Reserve
L3.1 Byte 1 Bit 1 = Reserve
L3.2 Byte 1 Bit 2 = Reserve
L3.3 Byte 1 Bit 3 = Reserve
L3.4 Byte 1 Bit 4 = Reserve
L3.5 Byte 1 Bit 5 = Reserve
L3.6 Byte 1 Bit 6 = Reserve
L3.7 Byte 1 Bit 7 = Reserve

im letzten Netzwerk des Bausteins:
L Lw2 //temporäre Variable
T #OUT //in Ausgangsword laden


----------



## Zefix (3 Mai 2007)

ottopaul schrieb:


> geht das nicht alles in einem FB? hast du ein beispiel für sowas? ich dachte der FB legt die Instanz an. Aber im FB kann ich die einzelnen Bits ja nicht beschriften, oder?
> ein beispiel wäre super....danke


 
Ja, würde im FB auch gehen.
Unter AWL würde ich es machen wie oben,über den DB.
Unter SCL würde ich es so machen dass mann das EW/AW an den FB als Parameter angeben kann.

Mal schaun ob ich heut abend noch dazu komm dir ein Beispiel zu machen  
Sonst erst am Sonntag...

Gruss Andy


----------



## Markus (3 Mai 2007)

alles pfusch, und direkter zugriff auf temps sollte mit dem tod bestraft werden...  



also dein fb bekommt einen IN parameter für die adresse, und je nachdem was du sonst noch brauchst eben weitere in, out, inout


an den in paremeter "ADRESSE" schreibst du beim aufruf eben 256 oder so...

in deinen baustein machst du im stat bereich eine structur mit dem namen "Y_IN" und eine mit dem namen "Y_OUT", in diese structuren machst du jeweils die bools die du oben gelistet hast.


im ersten netzwerk machst du:


```
L     ADRESSE          // In parameter im INT format
      T     Adresse_W       // temp also word
      SLD   3                   // anpassen byteadressierung
      LAR1  
      L     PEW [AR1,P#0.0]         // das PEW laden 
      LAR1  P##Y_IN.symbolvomerstenbool
      T     DIW [AR1,P#0.0]         // in die struktur kopieren
```
 

dann verknuddelst du den ganzen senf mit weiteren IN,OUT,... nach herzenslust...


im letzten netzwerk das ganze andersrum um die struktur "Y_OUT" ins paw zu schreiben...


----------



## Werner54 (3 Mai 2007)

*bitweise im PAW wursteln*

Hallo,

selbst wenn es funktionieren sollte, direkt einzelne Bits im PEW/PAW anzusprechen, was spricht dagegen das ganze Wort/Byte erstmal ganz normal als Merker oder im Datenbaustein so zu bearbeiten, wie das vorgesehen ist?


----------



## Markus (3 Mai 2007)

Werner54 schrieb:


> was spricht dagegen das ganze Wort/Byte erstmal ganz normal als Merker


 

es gibt bei step7 keine merker mehr, und wenn hier einer fragt wie man einen fb für mehrere ventile mach gibt es die erst recht nicht mehr!


----------



## OHGN (3 Mai 2007)

Markus schrieb:


> ...und wenn hier einer fragt wie man einen fb für mehrere ventile mach...


...kann ich mir kaum vorstellen das derjenige Deinen Lösungsvorschlag verstanden hat.
So unprofessionell der von mir auch aussehen mag, so glaube ich, ist er für den Anfänger doch am ehesten durchschaubar.
Und warum man nicht absolut auf Lokaldaten zugreifen sollte, muss man mir erstmal plausibel erklären.


----------



## Markus (3 Mai 2007)

auch ein anfänger soll nicht mit pfuscherlösungen ohne hirn abgespeist werden. er soll gleich wissen wie es richtig geht, wenn er es nicht verstanden hat dann darf er gerne fragen. zu fragen ist keine schande, aber eine merkerverseuchten murksercode abzuliefern schon!

man greift weder auf lokaldaten noch auf sonst irgendwas direkt zu, entweder symbolisch oder wenn das wie in diesem fall nicht geht eben indirekt mit symbolischem pointer.

ansonsten gibts später chaos wenn da einer was reinbaut...


und jetzt noch eine erklärung warum er es gleich richtig machen soll:
bei einem kunden von mir hat ein anderern externer eine software für eine kleinserie entwickelt, das ding konnte nicht viel, und die 315 reichte locker. das war aber auch so ein seltendoofer merker und timer programmierer!
und das ende vom lied war das dieser vollpfosten während der ib in asien gemerkt hat das man seine 12 (ZWÖLF!!!) 315 gegen 317er ersetzen muss . und jetzt haltet euch fest: WEIL DIE 315 ZU WENIG TIMER HAT!
ich hätte den typen qualvoll töten lassen wenn ich als projektverantwortlicher mal eben 12 x 317er spendieren müsste...
die philosophie der s7 programmierung hat mit merkern, timern und s5 nix zu tun, alles historischer ballast...
und dieser vollpfosten war auch noch stolz auf sein gigaprojekt mit 12 317er, meingott ich habe die kranke software gesehen das pack ich im schlaf in ne 313...


----------



## Zefix (3 Mai 2007)

Wenn man AWL/KOP/FUP umschaltung macht kanns Probleme mit den Lokaldaten geben, weil KOP/FUP selbst direkte Zugriffe auf die Lokaldaten macht.

Ist letztens erst wieder ein Kollege drübergestolpert 


Zitat auf mich:


> Das machst ja in der Hardware und dort weist du doch die Ein und Ausgänge zu.So solltest du auch ohne PEW auskommen.
> z.B.
> U EW 1
> T DB_Ventile.Zylinder_1


 
Klappt so leider nicht unter AWL,also gar nicht erst Probiern 

Upps,Markus kam zuvor...


----------



## OHGN (3 Mai 2007)

Markus schrieb:


> auch ein anfänger soll nicht mit pfuscherlösungen ohne hirn abgespeist werden. er soll gleich wissen wie es richtig geht, wenn er es nicht verstanden hat dann darf er gerne fragen. zu fragen ist keine schande, aber eine merkerverseuchten murksercode abzuliefern schon!


Wobei Du mir aber zugestehen solltest, dass meine Lösung nichts mit Merkern oder gar Timern zu tun hat.


> ansonsten gibts später chaos wenn da einer was reinbaut...


Dagegen dass da irgendeiner was reinbaut ist man nie gefeit. Wer in einem Programmcode irgendwas ändert sollte schon wissen was er tut.


----------



## plc_tippser (3 Mai 2007)

Markus schrieb:


> und jetzt noch eine erklärung warum er es gleich richtig machen soll:
> bei einem kunden von mir hat ein anderern externer eine software für eine kleinserie entwickelt, das ding konnte nicht viel, und die 315 reichte locker. das war aber auch so ein seltendoofer merker und timer programmierer!
> und das ende vom lied war das dieser vollpfosten während der ib in asien gemerkt hat das man seine 12 (ZWÖLF!!!) 315 gegen 317er ersetzen muss . und jetzt haltet euch fest: WEIL DIE 315 ZU WENIG TIMER HAT!
> ich hätte den typen qualvoll töten lassen wenn ich als projektverantwortlicher mal eben 12 x 317er spendieren müsste...
> ...


 

Tja, hätten die ein gescheites Forum im Rücken, währe das nicht passiert


----------



## Markus (3 Mai 2007)

@ohgn
ich habe an dieser stelle auch den bösen bösen werner zitiert...


----------



## Kai (3 Mai 2007)

Nachfolgende Lösung sollte auch funktionieren:


```
// Netzwerk 1
 
      L     #Adresse_IN
      SLW   3
      T     #Adresse_IN_TMP
 
      L     P##Ventil_IN
      T     #Ventil_IN_TMP
 
      L     PEW [#Adresse_IN_TMP]
      T     DIW [#Ventil_IN_TMP]
 
// Netzwerk2
 
      U     #Ventil_IN.Wahlschalter_FERN
      UN    #Ventil_IN.Endlage_AUF
      U     #Ventil_IN.Faehrt_AUF
      =     #Ventil_OUT.Befehl_AUF
 
      U     #Ventil_IN.Wahlschalter_FERN
      UN    #Ventil_IN.Endlage_ZU
      U     #Ventil_IN.Faehrt_ZU
      =     #Ventil_OUT.Befehl_ZU
 
// Netzwerk 3
 
      L     #Adresse_OUT
      SLW   3
      T     #Adresse_OUT_TMP
 
      L     P##Ventil_OUT
      T     #VENTIL_OUT_TMP
 
      L     DIW [#VENTIL_OUT_TMP]
      T     PAW [#Adresse_OUT_TMP]
```
 
Gruß Kai


----------



## Larry Laffer (3 Mai 2007)

So wie ich das sehe ist Kai bisher der Einzige, der sich Gedanken um die Problemstellung gemacht hat und einen Vorschlag erarbeitet hat ...!

Ich Hoffe OttoPaul kann etwas damit anfangen ...


----------



## zotos (3 Mai 2007)

Markus schrieb:


> ...
> die philosophie der s7 programmierung hat mit merkern, timern und s5 nix zu tun, alles historischer ballast...
> ...



Friert die Hölle gerade zu?

100% Ack. Nicht nur zu dem Textausschnitt den wollte ich nur noch mal hervorheben. Nur weil etwas geht ist es noch lange nicht gut. Aber die Sache mit der Todesstrafe auf schlechten Code ist mir zu hart ;o)

@Markus: Sollte man mal einen Thread aufmachen mit Änderungswünschen für die Nächste  Step7 Version?


----------



## Kai (3 Mai 2007)

Markus schrieb:


> ```
> L     ADRESSE          // In parameter im INT format
> T     Adresse_W       // temp also word
> SLD   3                   // anpassen byteadressierung
> ...


 
Das ist meiner Meinung nach so nicht richtig und muss stattdessen heißen:


```
L     ADRESSE          // In parameter im INT format
      T     Adresse_W       // temp also word
      SLD   3                   // anpassen byteadressierung
      LAR1  
      L     PEW [AR1,P#0.0]         // das PEW laden 
      [COLOR=red]LAR1  P##Y_IN[/COLOR]
      T     DIW [AR1,P#0.0]         // in die struktur kopieren
```
 
Gruß Kai


----------



## plc_tippser (3 Mai 2007)

zotos schrieb:


> @Markus: Sollte man mal einen Thread aufmachen mit Änderungswünschen für die Nächste Step7 Version?


 
Das würde sicherlich den Trafic sprengen


----------



## Markus (3 Mai 2007)

Larry Laffer schrieb:


> So wie ich das sehe ist Kai bisher der Einzige, der sich Gedanken um die Problemstellung gemacht hat und einen Vorschlag erarbeitet hat ...!
> 
> Ich Hoffe OttoPaul kann etwas damit anfangen ...


 
und was willst du hier?
kannst du lesen? in meinem beitrag war der entscheidende code für nw1 und der rest lässt sich ableiten...
versuche gerade verzweifelt deinem beitrag eine daseinsberechtigung zu finden...


@zotos
ich weiss das es in deiner welt noch schöner ist (das ist keine ironie)...
das mit der wunschliste für step7 ist ne gute idee...


----------



## Markus (3 Mai 2007)

Kai schrieb:


> Das ist meiner Meinung nach so nicht richtig und muss stattdessen heißen:
> 
> 
> ```
> ...


 
1:0 für dich!


----------



## Kai (3 Mai 2007)

Larry Laffer schrieb:


> So wie ich das sehe ist Kai bisher der Einzige, der sich Gedanken um die Problemstellung gemacht hat und einen Vorschlag erarbeitet hat ...!


 
Wie Markus schon richtig geschrieben hat, ist der Lösungsansatz mit der Verwendung von Struktur-Variablen von ihm gekommen.

Gruß Kai


----------



## Kai (3 Mai 2007)

Hier noch eine leicht verbesserte Programmversion:


```
// Netzwerk 1
 
      L     P##Ventil_IN
      T     #Ventil_IN_TMP
 
      L     #Adresse_IN
      T     DIW [#Ventil_IN_TMP]
 
// Netzwerk 2
 
      U     #Ventil_IN.Wahlschalter_FERN
      UN    #Ventil_IN.Endlage_AUF
      U     #Ventil_IN.Faehrt_AUF
      =     #Ventil_OUT.Befehl_AUF
 
      U     #Ventil_IN.Wahlschalter_FERN
      UN    #Ventil_IN.Endlage_ZU
      U     #Ventil_IN.Faehrt_ZU
      =     #Ventil_OUT.Befehl_ZU
 
// Netzwerk 3
 
      L     P##Ventil_OUT
      T     #VENTIL_OUT_TMP
 
      L     DIW [#VENTIL_OUT_TMP]
      T     #Adresse_OUT
```
 
Gruß Kai


----------



## Larry Laffer (3 Mai 2007)

Kai schrieb:


> Wie Markus schon richtig geschrieben hat, ist der Lösungsansatz mit der Verwendung von Struktur-Variablen von ihm gekommen.i


 
Gut ... das sehe ich ein ...
Ansonsten bleibe ich bei meinem Statement !


----------



## Kai (3 Mai 2007)

Jedenfalls hat OttoPaul von mir nicht nur ein paar Zeilen Programmcode bekommen, sondern einen vollständigen FB, der ihm als Vorlage dienen kann. :grin: 

Gruß Kai


----------



## Larry Laffer (3 Mai 2007)

... das meinte ich.
Wenn ich eine solche Anfrage ins Forum stellen würde, dann würde mich auch nicht interessieren, ob man die PEW's in Lokalworte oder sonstwohin kopieren kann - da verstehe ich, dass Markus sich aufregt - sondern ich würde wissen wollen, wie man es macht. So lautete glaube ich auch die Anfrage von OttoPaul ...

In diesem Sinne ...


----------



## ottopaul (3 Mai 2007)

ich dachte, ich hätte eine einfache frage gestellt....
aber dass sich splch eine diskussion ergibt hätte nicht gedacht...
jetzt habt ihr mich gut verwirrt......

vielen dank an alle


----------



## Markus (3 Mai 2007)

ottopaul schrieb:


> jetzt habt ihr mich gut verwirrt......
> 
> vielen dank an alle


 
hmm meinst du damit das deine frage nicht beantwortet ist?

kommst du mit dem code von kai klar oder brauchst du noch was?


----------



## Eagel1 (21 August 2007)

Mal eben nur kurze frage...
kann man eure vorshläge auch mit einen doppelwort verwenden und wenn ja was müsste ich noch abändern?


----------



## Kai (21 August 2007)

Eagel1 schrieb:


> Mal eben nur kurze frage...
> kann man eure vorshläge auch mit einen doppelwort verwenden und wenn ja was müsste ich noch abändern?


 
Hier mal ein kurzes Programmbeispiel für die Verwendung mit einem Doppelwort.

Zusätzlich zur Änderung des Programmcodes müssen natürlich auch die Variablen in der Variablendeklaration des FB angepasst werden.


```
/ Netzwerk 1
 
      L     P##Ventil_IN
      T     #Ventil_IN_TMP
 
      L     #Adresse_IN
      T     DID [#Ventil_IN_TMP]
 
// Netzwerk 2
 
      U     #Ventil_IN.Wahlschalter_FERN
      UN    #Ventil_IN.Endlage_AUF
      U     #Ventil_IN.Faehrt_AUF
      =     #Ventil_OUT.Befehl_AUF
 
      U     #Ventil_IN.Wahlschalter_FERN
      UN    #Ventil_IN.Endlage_ZU
      U     #Ventil_IN.Faehrt_ZU
      =     #Ventil_OUT.Befehl_ZU
 
      U     #Ventil_IN.Reserve_20
      =     #Ventil_OUT.Reserve_20
 
      U     #Ventil_IN.Reserve_27
      =     #Ventil_OUT.Reserve_27
 
      U     #Ventil_IN.Reserve_30
      =     #Ventil_OUT.Reserve_30
 
      U     #Ventil_IN.Reserve_37
      =     #Ventil_OUT.Reserve_37
 
// Netzwerk 3
 
      L     P##Ventil_OUT
      T     #Ventil_OUT_TMP
 
      L     DID [#Ventil_OUT_TMP]
      T     #Adresse_OUT
```
 
Gruß Kai


----------



## Kai (21 August 2007)

Man kann alternativ auch folgenden Programmcode verwenden:


```
FB106 : Ventil
 
// Adressregister AR1 sichern
 
      TAR1  #AR1_TEMP
 
 
// Adresse_IN (DWORD) => Ventil_IN (STRUCT)
 
      L     P##Ventil_IN
      LAR1  
 
      L     #Adresse_IN
      T     D [AR1,P#0.0]
 
 
// Ventil_IN (STRUCT) => Ventil_OUT (STRUCT)
 
      U     #Ventil_IN.Wahlschalter_FERN
      UN    #Ventil_IN.Endlage_AUF
      U     #Ventil_IN.Faehrt_AUF
      =     #Ventil_OUT.Befehl_AUF
 
      U     #Ventil_IN.Wahlschalter_FERN
      UN    #Ventil_IN.Endlage_ZU
      U     #Ventil_IN.Faehrt_ZU
      =     #Ventil_OUT.Befehl_ZU
 
      U     #Ventil_IN.Reserve_20
      =     #Ventil_OUT.Reserve_20
 
      U     #Ventil_IN.Reserve_27
      =     #Ventil_OUT.Reserve_27
 
      U     #Ventil_IN.Reserve_30
      =     #Ventil_OUT.Reserve_30
 
      U     #Ventil_IN.Reserve_37
      =     #Ventil_OUT.Reserve_37
 
 
// Ventil_OUT (STRUCT) => Adresse_OUT (DWORD)
 
      L     P##Ventil_OUT
      LAR1  
 
      L     D [AR1,P#0.0]
      T     #Adresse_OUT
 
 
// Adressegister AR1 wiederherstellen
 
      LAR1  #AR1_TEMP
```
 
Gruß Kai


----------



## Jordy (22 August 2007)

Hi... Frage:
Wofür wird das adressregister am Anfang gesichert und am Ende wieder zurück geschrieben? Ist das notwendig?


Und:
      L     P##Ventil_IN
      LAR1  

Das ist ja quasi diese bereichsübergreifende Addressierung oder wie sich das nennt ne? Was genau wird da im Adressregister gespeichert? Es werden nicht die einzelnen Bits vom struct "Ventil_in" gespeichert, sondern nur quasi der Speicherort, oder??


Danke


----------



## Eagel1 (22 August 2007)

Danke Kai 

für die schnelle antwort ich werde es mal ausprobieren. 
denn ich habe eine bandwaage die nur mit doppelwoter arbeitet.

Gruß Lars


----------



## Fanta-Er (29 März 2008)

ich glaube das ist eine "grundsatzfrage" zum thema:

wie baue ich mir einen indirekt addresierten FB auf.

grundsätze:
in dem fb den ihr erstellen wollt gibt es NIERGENDS eine feste addresse.
(keinen merker, keine L dbx.dbx.3.4 oder ähnliches)

alles was ihr braucht wir im kopf des fb´s deklariert.

die eingangs- und ausganssignal werden über die in/outs oder in-outs übergeben. (müssen auch deklariert werden)
d.h. in-parameter  eingänge type word

hast du diesen schritt geschaft kannst du es umladen wohin du willst.
einweder in den tempbereich (auf interne addressen achten am besten einen namen vergeben) oder du hohlst dir die einzelnen zustände mit vergleicher raus.

hast du deinen baustein geschrieben, übergibst du die parameter an die outs.

im nächsten FB deklarierst du den geschriebenen FB in den stat mit namen und rufst den über call in deinen programm auf und schreibst deine pew und paw dran. den geschreibenen fb kannst du immerwieder mit neuen namen aufrufen und somit x-mal benutzen.


es gibt tausend möglichkeiten um die aufgabe zu lösen. die kurzanleitung ist die übersichtlichste, da mann ohne awl arbeiten kann und mit "gehe zu" noch nen treffer hat.

kai hat es eigentlich gut beschrieben, und ählich würde ich es auch machen.

leute die nur mit kop oder fup arbeiten, tuen sich aber damit schwer.

less die hilfe für indirekte addressierung... hilft.


----------



## Larry Laffer (29 März 2008)

@Fanta-Er:
Meiner Ansicht nach macht es wenig Sinn, Beiträge, die schon mehrere Wochen (oder Monate) alt sind wieder aufzugreifen, es sein denn mann hat dazu noch eine Frage ...
In diesem Fall gehe ich mal davon aus, dass die Fragen hinreichend beantwortet waren ...

Gruß
LL


----------

