FB erstellen?

Zuviel Werbung?
-> Hier kostenlos registrieren
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 ...:confused:
 
...
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?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
      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.symbolvomerstenbool[/COLOR]
      T     DIW [AR1,P#0.0]         // in die struktur kopieren

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

Code:
      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
 
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 ...:confused:

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...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das ist meiner Meinung nach so nicht richtig und muss stattdessen heißen:

Code:
      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

1:0 für dich!
 
Hier noch eine leicht verbesserte Programmversion:

Code:
// 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
 

Anhänge

  • OB1.pdf
    3,2 KB · Aufrufe: 37
  • FB102.pdf
    4,8 KB · Aufrufe: 41
  • DB102.pdf
    3,7 KB · Aufrufe: 27
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
 
... 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 ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
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?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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.

Code:
/ 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
 

Anhänge

  • OB1.pdf
    3,2 KB · Aufrufe: 20
  • FB104.pdf
    6,6 KB · Aufrufe: 23
  • DB104.pdf
    5,3 KB · Aufrufe: 14
Man kann alternativ auch folgenden Programmcode verwenden:

Code:
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
 

Anhänge

  • OB1.pdf
    3,3 KB · Aufrufe: 13
  • FB106.pdf
    6,9 KB · Aufrufe: 18
  • DB106.pdf
    5,3 KB · Aufrufe: 13
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
 
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.
 
@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
 
Zurück
Oben