FB erstellen?

ottopaul

Level-1
Beiträge
160
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
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.
 
Hm...
das mit den PEW und PAW verstehe ich nicht, wenn Du über den Profibus DP ansteuern willst.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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.
 
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.
 
@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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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).

Nun muss ich doch irgendwie auf die einzelenen Bits im FB zugreifen bzw verarbeiten .
JA...das ist mein Problem.
Siehe meinen Beitrag drüber ;)
 
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
 
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
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
 
alles pfusch, und direkter zugriff auf temps sollte mit dem tod bestraft werden... :ROFLMAO:



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:

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 
      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...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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?
 
...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.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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...
 
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 :rolleyes:

Upps,Markus kam zuvor...
 
Zuletzt bearbeitet:
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.:)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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...


Tja, hätten die ein gescheites Forum im Rücken, währe das nicht passiert :ROFLMAO:
 
@ohgn
ich habe an dieser stelle auch den bösen bösen werner zitiert...
 
Nachfolgende Lösung sollte auch funktionieren:

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

Anhänge

  • OB1.pdf
    3,1 KB · Aufrufe: 29
  • FB100.pdf
    4,9 KB · Aufrufe: 35
  • DB100.pdf
    3,7 KB · Aufrufe: 26
Zurück
Oben