Funktionsbausteine

Zuviel Werbung?
-> Hier kostenlos registrieren
@vollmi ...habe 2001 sechs Monate als 5-Achs CNC Fräser für RIETER in Winterthur gearbeitet ...(befristeter Vertrag)

SUPER LOHN ....super LAND ....super Kollegen :*

Ist günstig in der Schweiz zu leben , bist Schweizer ?

.
 
Hallo Leute,

ich habe mal eine Frage zu der Thematik FB/FC.
Ich habe mir einen FB erstellt "Betriebszustand", dieser wird im OB1 durchlaufen. Den FB "Betriebszustand" habe ich im FB "Langzeitmessung" aufgerufen und mit IN bzw Out Variablen beschaltet. Den FB Langzeitmessung hab ich wiederum im OB1 aufgerufen und die IN bzw OUT mit den PLC variablen von der Steuerung beschaltet. Also Taster S1 ist %ID... usw.

Nun war es so gedacht, den FB "Betriebszustand" in zwei weiteren FB's aufzurufen "Füllvorgang". Hab das dann dort so wie beim FB "Langzeitmessung" gemacht und quasi die IN /Out Variablen vom FB "Betriebszustand" bis in den OB1 zu meinen PLC Variablen durch geschaltet.

Im FB "Langzeitmessung" arbeitet der FB "Betriebszustand" noch ganz normal und im FB "Füllvorgang" nicht mehr. Er schaltet trotz "True" an P1 nicht den Ausgang an der SPS.

Jetzt kommt die Frage, hätte ich den FB "Betriebszustand" lieber als FC ausführen sollen??
Oder liegt das an etwas anderem??

Hat jemand ne Idee und kann mir jemand einen Tipp geben um den Fehler einzugrenzen!?

Schon mal danke....
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hast du dem FB für jeden Aufruf einen eigenen Instanz DB gegeben?
Verwendest du absolute Adressen (Merker, Zeiten etc...) in dem FB?
Warum muss er überhaupt 4 mal aufgerufen werden?
Ich nehme mal an es geht um den "Betriebszustandistwertanzeigebaustein" aus deinem anderen Thread.
Als FC wird das schon 2 mal nichts, weil da noch ein paar Sachen mehr zu beachten sind als beim FB

Deine Fragen setzen fast immer hellseherische Fähigkeiten voraus.

Und noch was:
Wenn ich mir vorstelle eure Werksfeuerwehr muss sich darauf verlassen, dass die Atemluft-Flaschen voll sind,
weil dein wirres Programm es so gemessen hat.....
Die Jungs setzen im Ernstfall ihr Leben aufs Spiel!
 
Hallo Paul,

ja es geht um diesen FB "Betriebszustands-Baustein". Ich will erst mal noch was zum Thema Feuerwehr sagen, ob das Gerät bei denen zum Einsatz kommt weis ich nicht und soweit ich weis wollten sie CO2 Feuerlöscher befüllen, momentan machen sie das irgendwie von Hand. Was die da genau vorhaben weis ich nicht, Sie wollen bloß einen Sollwert eingeben können. Wenn der Istwert den Sollwert erreicht soll das Ventil ein Um-Befüllvorgang unterbinden.

Da dir mein Programmierstil nicht gefällt könntest du mir auch mal einen Verbesserungsvorschlag machen was man verbessern könnte als jedes mal darauf herum zu hacken ;)
Ich hab immer ein offenes Ohr für einen Verbesserungsvorschlag :sm5:

Ich wird mal ein paar Bilder erstellen wo man eig alles sehen sollte, kommen gleich.........
 
So nun die Bilder....(Ich hoffe man kann es erkennen?)

Bild FBs, ich hab mir den FB2 im OB1 erstellt, diesen hab ich mir in den FB6 gezogen. Im FB6 hab ich noch ein paar weitere Netzwerke dazu konstruiert und anschließend den FB6 in meinen OB1 gezogen und dann dort meine Variablen angelegt.

Das gleiche hab ich dann bei dem FB "Aktuelle Messung" und "Langzeitmessung" gemacht. Ich dachte das man das so machen kann!?:confused:

Da ich die Funktion des Betriebszustands in den Drei FB benötige und nicht für jeden Prozess (Messung) neu erstellen wollte.

Wie wäre es richtig gewesen?


LG
 

Anhänge

  • FBs.jpg
    FBs.jpg
    25,3 KB · Aufrufe: 25
  • Schnittstellen_FB_Füllvorgang.jpg
    Schnittstellen_FB_Füllvorgang.jpg
    16,7 KB · Aufrufe: 18
Zuviel Werbung?
-> Hier kostenlos registrieren
Da dir mein Programmierstil nicht gefällt könntest du mir auch mal einen Verbesserungsvorschlag machen was man verbessern könnte als jedes mal darauf herum zu hacken ;)
Du beißt dir die Zähne daran aus wenn du erforschen sollst, warum eine einfache Flanke nicht funktioniert,
sprichst aber im gleichen Atemzug davon, dass du Messwerte in dynamische Arrays schreiben willst.
In Sachen S7 Programmierung fehlen dir die Grundlagen, du glaubst aber offenbar dass man diese überspringen und gleich zu Arrays gehen kann.

Du schreibst, dass du dir irgendwas programmiert hast, das auch funktioniert, bloß leider nicht so wie es soll. :confused::confused::confused:

Wenn du Fragen stellst, setzt du offenbar voraus dass die Anderen dein Programm schon kennen oder vorliegen haben.
Du sagst selbst "Was die da genau vorhaben weis ich nicht". Wie willst du was programmieren wenn du nicht mal weist was das werden soll?

Zu deinem Programmierstil kann ich nichts sagen, weil noch nichts davon gesehen habe, außer das bisschen Code mit den Flanken, die nicht gehen.

Mir stehen nur die Haare zu Berge wenn ich deine Herangehensweise an die Probleme betrachte.
Du weißt offenbar selber nicht was das werden soll. Langzeitmessung Vorgabe nur in Stunden (1-24), im selben Satz aber auch: ".... auch schon mal 30 Minuten"
Mal sprichst du von Atemluft Flaschen mal von CO2 Löschern, fast das gleiche.
Mal so nebenbei CO2 ist ein farb- und geruchloses Gas, schwerer als Luft und in der richtigen Konzentration absolut tödlich.

Deine Frage FB oder besser FC ist ungefähr so wie "Mein Auto springt nicht an, meint Ihr es hilft wenn ich wieder Sommerreifen aufziehe? Im Sommer ging´s noch"

Mein Verbesserungsvorschlag:
Mach dir erst mal ein vernünftiges Konzept was das eigentlich werden soll.
Mach eine Risikobewertung.
Orientiere dich beim Bedienkonzept an normalen Anlagen und nicht an einem Schneepflug.
Schau erst mal dass du die einfachen hinkriegst, und zwar so dass du auch weißt WARUM es funktioniert.
 
@Schmidtchen
Die Grafiken die du im Beitrag #64 angehängt hast sind genau das was ich meine.
3 Netzwerke hingeklatscht ersichtlicher Code --> Null. Hellsehen ist gefragt.

Und noch was:
Du hast einen DB "Füllvorgang_DB" als Instanz DB für deinen FB Füllvorgang.
Den FB-Eingang <HMI BLD Freigabe> beschaltest du mit einem Bit aus seinem eigenen Instanz DB.
So was ist Zufall, wenn es funktioniert
 
Wo fange ich jetzt an zu antworten.....aber ich muss dir schon recht geben, dass die Projekt Erarbeitung in Sachen Programmierung chaotisch ist. Das liegt wahrscheinlich daran das es mit der Zeit langsam eng wird und es noch nicht so funktioniert wie es sollte und ich mach so ein Projekt zum ersten Mal. Hatte während der Ausbildung schon mal S7 aber nicht in diesem Umfang und das ist mittlerweile 3 Jahre her. Im letzten Semester hatte ich industrielle Steuerungstechnik, aber die Praktika in S7 kommen erst nächstes Semester.

Und nochmal zu dem Füllvorgang, Sie wollen einen Sollwert (Druck) eingeben können und wenn Sie den Prozess starten öffnet sich ein Ventil um irgendein Medium umzufüllen...Wenn der Sensor (Druck) ermittelt und der Istwert == Sollwert soll sich das Ventil wieder verschließen (abfallen). Das ist die Funktion die Sie haben möchten, mehr nicht....wie weit ich das dann ausdehne ist mir überlassen. Und Sie können auch Wasser in Flaschen abfüllen, wenn das Adapterstück einen entsprechenden Anschluss für das Magnetventil bzw. für den Sensor hat. Ich will damit sagen es ist nicht konkret gesagt wurde.

Bei der Langzeitmessung hab ich mich wahrscheinlich falsch ausgedrückt. Ich zähle momentan die Felder des Array und hab es auf eine maximale Anzahl von 1440 begrenzt, was 60 Messwerte/Min und einer Messzeit von 24 h bedeutet. Wenn 1440 Felder gezählt wurden beginnt er wieder beim 1. Feld. Da ich gerne eine Messzeit von 2h eingeben wollte oder auch 0,5h (bzw im Format: 00:30) müsste ich die Eingabe mit festen Werten Vergleichen. Also bei 2 h die Feldanzahl des Array auf 120 setzten. Bei dem Prinzip muss ich aber vorher alle Messzeiten definieren (Feldanzahl). Da bei 2 h (120 Felder) noch 1320 Felder frei wären. Da ich gerne die Messdaten auf der CPU (Speicherkarte) speichern würde um sie später aufrufen zu können, wollte ich die Felder die nicht benötigt werden auch nicht speichern.

Vlt hast du ja einen Hinweis wie man dieses Problem elegant lösen kann. (Ansatz)

Na ich meine eine CO2 Feuerlöscher, CO2 muss ja auch schwerer sein als Luft, damit es dem Feuer die Luft zufuhr abdreht, quasi ersticken. (ich hab es nicht gegoogelt, aber so sollte die Funktionsweise sein);)

Wie macht sollte eine Risikobewertung erfolgen bzw gibt es da ne Richtlinie?
Zu Thread #67:

Angenommen ich habe einen FB "Betriebszustand" und möchte diesen in einem anderem FB aufrufen. Ich habe mehrere Prozesse die eine gleiche Betriebszustands Visualisierung (Funktion von Zwei Meldeleuchten) haben sollen, aber jeder Prozess etwas anderes macht. Wie würde man das aufbauen/verschachteln? Ist dafür ein FB oder eher ein FC geeignet?

Ich muss noch anmerken, dass ich am 31.1 meinen letzten Tag habe. Da soll das Gerät funktionstüchtig sein und ich eine Bedienungsanleitung für den Anwender erstellt haben. :sm4:


LG
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Schmidtchen
Die Grafiken die du im Beitrag #64 angehängt hast sind genau das was ich meine.
3 Netzwerke hingeklatscht ersichtlicher Code --> Null. Hellsehen ist gefragt.

Und noch was:
Du hast einen DB "Füllvorgang_DB" als Instanz DB für deinen FB Füllvorgang.
Den FB-Eingang <HMI BLD Freigabe> beschaltest du mit einem Bit aus seinem eigenen Instanz DB.
So was ist Zufall, wenn es funktioniert
@Paul,
ich bin ja erstaunt, dass Du auf den Bildern überhaupt was erkennst!

@Schmidtchen,
wenn Du schon "nur" Screenshot machst und nicht das Programm selbst bzw. einen Codeauszug postest, dann verkleinere nicht noch die Bildgröße. Auf den jetzigen Bildern kann man (zumindest bei mir) nur mit der Gefahr von Augenkrebs was erkennen.
;)

Da hilft mir auch der Zoom meines Browsers nicht weiter.
:(
 
Also erst mal das A&O funktioniert dein Druckaufnehmer so, dass du 10bar angezeigt bekommst wenn 10bar anstehen.

Zweitens: Für was soll diese Langzeitmessung eigentlich gut sein?
Dauert es 24 Std um so eine Flasche zu füllen, oder soll da geprüft werden ob sie dem Druck hält.
Alle 100ms einen Messwert aufzeichnen. Für was?
Um das zu Archivieren (meinetwegen die letzten 10 Messungen) ist die Speicherkarte der CPU, denke ich zu klein.

Drittens: Was soll das mit Wasser abfüllen? Dazu brauchst du einen Durchflußsensor oder Füllstandsensor.

Wenn du einen FB mehrfach verwenden willst, dann dürfen in dem FB keine Merker, klassischen Zeiten etc. verbaut sein.
Das muss alles in der Deklarationstabelle stehen.
Wenn der FB dann mehrfach verwendet wird, braucht er für jeden Aufruf einen eigenen Instanz DB.
Evtl. Stichwort Multi Instanzfähig
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hab nochmal die Bilder erneuert, ich hoffe man kann es besser lesen?

Wie kann man denn noch Bilder hochladen?

Ich benutzte einen Rechner der am Netzhängt und einen autarken Rechner zur Programmierung.
 

Anhänge

  • FB_Betriebszustand_Netzwerk 3 und 4.jpg
    FB_Betriebszustand_Netzwerk 3 und 4.jpg
    20,2 KB · Aufrufe: 18
  • FB_Betriebszustand_Netzwerk 5 und 6.jpg
    FB_Betriebszustand_Netzwerk 5 und 6.jpg
    22,6 KB · Aufrufe: 14
  • FB_Betriebszustandsanzeigen.jpg
    FB_Betriebszustandsanzeigen.jpg
    19,1 KB · Aufrufe: 12
  • FB_Langzeitmessung.jpg
    FB_Langzeitmessung.jpg
    22 KB · Aufrufe: 12
  • FBBetriebszustand_Netzwerk 1 und 2.jpg
    FBBetriebszustand_Netzwerk 1 und 2.jpg
    22,3 KB · Aufrufe: 12
Ja der Drucksensor zeigt mir das an.
Also die Langzeitmessung ist dafür gedacht, eine Anlage länger als 24 Stunden überwachen zu können. Bei dieser Funktion sollen je nach Messbereichswahl (Zwei Drucksensoren einmal für 400 und einmal für 3000 bar) das ein Signal (4 bis 20 oder 0 bis 20 mA) auf eine Messbuchse geschaltet werden. Dieses Signal kann ich dann mit einem externen Schreiber erfassen. Eig hat die Langzeitmessung und der Füllvorgang Garnichts mit einander zu tun. Die Langzeitmessung dient eig nur zur Überwachung einer Anlage.

Bei dem Prozess "Aktuelle Messung" soll alle 100 MS ein Wert ermittelt werden, nach einer Minute (600 Messwerte) soll der Mittelwert gebildet werden. Mit den Mittelwerten soll eigentlich ein Diagramm gefüttert werden, welches den Druck in Abhängigkeit der Zeit darstellt. Außerdem möchte ich den Mittelwert in dem Array ablegen und speichern. (Aber Array in Array speichern geht wahrscheinlich schlecht in C konnte man das über Strukturen machen (glaub ich)?)--> Da weis ich noch nicht wie das hier geht?

Wie könnte man die Messdaten den Speichern?

Das Wasser war doch nur ein Beispiel (Bei einem geschlossenem Gefäß steigt ja auch der Wasserdruck wenn es voll wird oder?).
Sie können auch irgendein anderes Medium messen.

Ok....woher weis ich denn ob sich jetzt ein FC sich besser als ein FB eignet (oder anders herum)?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok....woher weis ich denn ob sich jetzt ein FC sich besser als ein FB eignet (oder anders herum)?
Grob gesagt:

Wenn Du im Baustein Daten erstellst, die nur dieser Baustein im nächsten Zyklus wieder benötigt, speichert man das üblicherweise im Instanzdatenbaustein. Den hat nur ein FB, also benutzt Du selbigen.
Solche Daten wären z.B. Flankenmerker, Ausgänge mit Setzen und Rücksetzen bearbeiten, Timerdaten, Zwischenergebnisse zum Weiterberechnen im nächsten Zyklus u.ä..

Wenn solche Daten nicht anfallen, kannst Du das auch mit einem FC erschlagen.
(Wenn solche Daten nur in geringen Ausmass, z.B nur ein Flankenmerker o.ä., anfallen, kann man diese beim FC über INOUT auch global speichern und sich so einen IDB ersparen)
 
Leider sind die neuen Bilder nicht wirklich größer. :(

Egal. Aber etwas wirklich Wichtiges hast Du vergessen - den Deklarationsteil der Schnittstelle.

Deshalb kann ich nur anhand der Bezeichnungen vermuten, dass Du die Flankenmerker als temporäre Variablen erstellt hast.
Solche gelten immer nur für den aktuellen Aufruf des Bausteins im aktuellen Zyklus.
Die Flankenmerker brauchst Du aber für den nächsten Zyklus! Deswegen müssen sie statisch sein!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Screenshot selbst ist schon ok.
Eventuell vorher die Ansicht im TIA über den Schieberegler rechts unten vergrößern.
Dann darauf achten, dass das bild beim Hochladen nicht (automatisch?) verkleinert wird.
Ich lade meine Bilder über einen externen Hoster hoch und verlinke das hier nur. Im meinen Profil findest Du ein Album, wo Du Dir das ansehen kannst.

PS: Du kannst aber auch das Programm selbst, gepackt als Archiv, hier hochladen. Dann kann sich das jeder, der möchte, selbst in Ruhe ansehen.
 
Zuletzt bearbeitet:
Hab nochmal eine Frage, bei der Langzeitmessung möchte ich ja die Messwerte auf eine Messbuchse legen (da muss ich meine Temperatur auf das gewünschte Ausgangssignal skalieren). Da ich das Signal von Sensor (Integer) in einen Realwert umgewandelt habe muss ich das ja auch wieder in einen Integer umwandeln bevor ich es ausgebe oder?
 
Screenshot selbst ist schon ok.
Eventuell vorher die Ansicht im TIA über den Schieberegler rechts unten vergrößern.
Dann darauf achten, dass das bild beim Hochladen nicht (automatisch?) verkleinert wird.
Ich lade meine Bilder über einen externen Hoster hoch und verlinke das hier nur. Im meinen Profil findest Du ein Album, wo Du Dir das ansehen kannst.

Ich schaue mal....

Bei dir sieht das super aus....:s12:

Zum Packen des Programms müsste ich z.B. ein zusätzliches Programm benutzen oder kann man das im TIA Portal machen?
 
Zuletzt bearbeitet:
Zurück
Oben