Der FB schafft mich langsam aber sicher...

Mr.Munshun

Level-1
Beiträge
5
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

nachdem ich hier schon einige Themen zu meinem Problem gelesen habe (die mir nicht wirklich geholfen haben), habe ich mich entschlossen ein neues Thema aufzumachen. Sicherlich wird der Ein oder Andere jetzt denken: "Oh nein, nicht schon wieder diese Frage!".

Aber ich komme da einfach nicht weiter...

Nun mein Problem:
Ich habe einen FB erstellt, der den Status von Ventilen (es sind 12 Stück) erfassen und dementsprechend verarbeiten soll.
Funktionieren tut das ganze so, das als allererstes geprüft wird, ob alle Bedingungen gegeben sind um das Ventil X einschalten zu können.


Das heißt, ich habe von Außen alle Ventile angeknüpft die nicht zusammen mit Ventil X angesteuert sein dürfen und einmal alle die mit Ventil X eingeschaltet sein müssen (diese Konfiguration ändert sich je nach Programmschritt). Wenn eine der Bedingungen nicht erfüllt ist, geht die Anlage in Störung und gibt diese über die Ausgänge des FB's aus. Stimmt alles wird über die Ausgänge des FB´s das Ventil X und die dazugehörige Meldeleuchte eingeschaltet.
Ist das Ventil X eingeschaltet, so läuft auf dem FB eine Rückmeldung auf. Diese dient dazu, einen eventuellen Fehler des Ventil X selbst festzustellen.
Genau diese Rückmeldung ist mein Sorgenkind. Als ich den FB mit nur einem Ventil getestet hatte, lief alles genau so wie es vorgesehen ist.
Kaum hatte ich das 2. Ventil mit eingebunden um zu Testen ob der FB auch nach einem Mehrfachaufruf seinen Dienst tut, gab es Probleme.
Alles läuft so wie es soll, nur die Rückmeldung der Ventile wird irgendwie als ein Signal angenommen.
Heißt, wenn ich Ventil 1 im Betrieb "abschalte"; passiert gar nichts. Die Anlage sollte dann aber in Störung gehen und das dafür verantwortliche Ventil durch Blinken seiner Meldeleuchte kenntlich machen. Erst wenn ich das 2. Ventil deaktiviere geht die Anlage in Störung und lässt die Meldeleuchten beider Ventile blinken. Wie schon vermutet deutet das ja darauf hinn, das die Rückmeldungen nicht unabhängig von einander gesehen werden.

Zur Beschaltung und Konfiguration des FB´s, jedes Ventil hat diesen FB, Eingänge und Ausgänge sind für jedes Ventil anders.
Die einzigen Beschaltungen die die FB´s gemeinsam haben sind ein Taktmerker, so wie Störungsquittierung etc. .
Intern habe ich den Ein- und Ausgängen ihre dementsprechenden Variablen zugewiesen.
Als "Merker" für die interne Kommunikation unter den Netzwerken habe ich die Variable VAR S, Typ BOOL , Anfangswert false benutzt. Jeder FB (Aufruf) hat seinen eigenen DB mit dem er auch im OB1 aufgerufen ist (Jeder Aufruf des FB findet in einem anderen FC statt, da ich jedem Ventil einen spendiert habe).
Ich verstehe nun wirklich nicht was da los ist.

Meine Vermutung wäre ja, das ich entweder etwas mit den Variablen falsch gemacht habe, oder aber mit dem Mehrfachaufruf.
Ich habe mich auch schon an der Multiinztanz versucht, da ich aber nichts brauchbares (eine vernünftige Anleitung) gefunden habe, habe ich den Versuch wieder verworfen. Dazu sollte vieleicht noch gesagt sein, das ich kein Profi in der SPS-Programmierung bin.

Ach ja, arbeiten tue ich in diesem Fall mit WinPLC7, SPS ist eine VIPA Speed 7 CPU 314 SE.
 
Zuletzt bearbeitet:
Hallo zusammen, nachdem ich hier schon einige Themen zu meinem Problem gelesen habe (die mir nicht wirklich geholfen haben), habe ich mich entschlossen ein neues Thema aufzumachen. Sicherlich wird der Ein oder Andere jetzt denken: "Oh nein, nicht schon wieder diese Frage!". Aber ich komme da einfach nicht weiter... Nun mein Problem: Ich habe einen FB erstellt, der den Status von Ventilen (es sind 12 Stück) erfassen und dementsprechend verarbeiten soll. Funktionieren tut das ganze so, das als allererstes geprüft wird, ob alle Bedingungen gegeben sind um das Ventil X einschalten zu können. Das heißt, ich habe von Außen alle Ventile angeknüpft die nicht zusammen mit Ventil X angesteuert sein dürfen und einmal alle die mit Ventil X eingeschaltet sein müssen (diese Konfiguration ändert sich je nach Programmschritt). Wenn eine der Bedingungen nicht erfüllt ist, geht die Anlage in Störung und gibt diese über die Ausgänge des FB's aus. Stimmt alles wird über die Ausgänge des FB´s das Ventil X und die dazugehörige Meldeleuchte eingeschaltet. Ist das Ventil X eingeschaltet, so läuft auf dem FB eine Rückmeldung auf. Diese dient dazu, einen eventuellen Fehler des Ventil X selbst festzustellen. Genau diese Rückmeldung ist mein Sorgenkind. Als ich den FB mit nur einem Ventil getestet hatte, lief alles genau so wie es vorgesehen ist. Kaum hatte ich das 2. Ventil mit eingebunden um zu Testen ob der FB auch nach einem Mehrfachaufruf seinen Dienst tut, gab es Probleme. Alles läuft so wie es soll, nur die Rückmeldung der Ventile wird irgendwie als ein Signal angenommen. Heist, wenn ich Ventil 1 im Betrieb "abschalte" passiert gar nichts. Die Anlage sollte dann aber in Störung gehen und das dafür verantwortliche Ventil durch Blinken seiner Meldeleuchte kenntlich machen. Erst wenn ich das 2. Ventil deaktiviere geht die Anlage in Störung und lässt die Meldeleuchten beider Ventile blinken. Wie schon vermutet deutet das ja darauf hinn, das die Rückmeldungen nicht unabhängig von einander gesehen werden. Zur Beschaltung und Konfiguration des FB´s, jedes Ventil hat diesen FB, Eingänge und Ausgänge sind für jedes Ventil anders. Die einzigen Beschaltungen die die FB´s gemeinsam haben sind ein Taktmerker, so wie Störungsquittierung etc. . Intern habe ich den Ein- und Ausgängen ihre dementsprechenden Variablen zugewiesen. Als "Merker" für die interne Kommunikation unter den Netzwerken habe ich die Variable VAR S, Typ BOOL , Anfangswert false benutzt. Jeder FB (Aufruf) hat seinen eigenen DB mit dem er auch im OB1 aufgerufen ist (Jeder Aufruf des FB findet in einem anderen FC statt, da ich jedem Ventil einen spendiert habe). Ich verstehe nun wirklich nicht was da los ist. Meine Vermutung wäre ja, das ich entweder etwas mit den Variablen falsch gemacht habe, oder aber mit dem Mehrfachaufruf. Ich habe mich auch schon an der Multiinzanz versucht, da ich aber nichts brauchbares (eine vernünftige Anleitung) gefunden habe habe ich den Versuch wieder verworfen. Dazu sollte vieleicht noch gesagt sein, das ich kein Profi in der SPS-Programmierung bin. Ach ja, arbeiten tue ich in diesem Fall mit WinPLC7, SPS ist eine VIPA Speed 7 CPU 314 SE.

Hast du dir durchgelesen, was du fragst?
Wie soll man da etwas daraus verstehen?
Mit Zeilenumbruch und etwas überarbeiteter Formulierung kann man vielleicht verstehen was du willst und dir ggF eine Hilfestellung geben.


bike
 
Hast du dir durchgelesen, was du fragst?
Wie soll man da etwas daraus verstehen?
Mit Zeilenumbruch und etwas überarbeiteter Formulierung kann man vielleicht verstehen was du willst und dir ggF eine Hilfestellung geben.


bike

Schon geändert, leider ist die Formatierung nach dem Senden futsch gewesen. Was die Formulierung angeht, Ansichtssache, jeder drückt sich halt anders aus, von daher wüste ich nicht wirklich wie ich das anders schreiben soll.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Stimmt jeder schreibt so wer denkt.

Ich würde jetzt zum Test einmal den FB als FB1 mit IDB1, und einmal als FB2 mit IDB2 testen. Den FB auf FB 1 und FB 2 kopieren und ins Programm einfügen.
Dann kannst du debuggen und siehst ob es funktioniert.

Wenn es so funktioniert, dann hast du ein Problem mit Temp Variablen, die nicht bei jedem Aufruf initialisiert werden.


bike
 
Falscher Lösungsansatz

Hallo,

Mr.Munshun schrieb:
Nun mein Problem:
Ich habe einen FB erstellt, der den Status von Ventilen (es sind 12 Stück) erfassen und dementsprechend verarbeiten soll.

Soll das heissen, Du möchtest mit einem FB diese 12 Ventile ansteuern ? Dann hast Du Dir das Problem selbst geschaffen. Zerlege Dein Problem in kleine, überschaubare Einheiten. Also zuerst mache einen FB oder FC, der erstmal alle Funktionen eines Ventils beinhaltet. Und für jede Art des Ventils (2 oder 3 Wege, mit/ohne Rückmeldung, elektrisch, pneumatisch oder hydraulisch etc.) erstelle einen eigenen Baustein. Diesen Baustein dann auf die gewünschte Funktionalität des Ventiles testen.

Und erst dann kannst Du mal langsam versuchen, die logische Ansteuerung dieser Ventile weiter in einem Baustein zu verknüpfen.

Du bist dabei, Dir einen Monsterbaustein zu basteln, der Dich irgendwann auffrisst.

Gruß

Question_mark
 
@QM , nö er hat schon vor sich einen Ventibaustein für Mehrfachaufruf zu schreiben..





Jeder deiner FBs hat einen anderen Instanz DB?

Hast du darauf geachtet im FB auch nur mit Lokalvariablen (mit # davor) zu arbeiten?
Oben in der Variablendeklaration lieber mit "Stat" wie Statischen arbeiten statt temporären Variablen.
 
...

Hallo,

Zefix schrieb:
@QM , nö er hat schon vor sich einen Ventibaustein für Mehrfachaufruf zu schreiben..

Da bin ich mir eben nicht so sicher, und zwar deswegen ..

TE schrieb:
Ich habe einen FB erstellt, der den Status von Ventilen (es sind 12 Stück) erfassen und dementsprechend verarbeiten soll.

Ich habe eher den Eindruck (und der muss aber nicht unbedingt richtig sein), das hier der Versuch gestartet wird, aus einem Baustein diese 12 Ventile anzusteuern. Ich glaube, ich lese mir das ganze Thema nochmal von Anfang an durch.

Gruß

Question_mark
 
Zuletzt bearbeitet:
Erst einmal vielen Dank für die schnellen Antworten!

Stimmt jeder schreibt so wer denkt.

Ich würde jetzt zum Test einmal den FB als FB1 mit IDB1, und einmal als FB2 mit IDB2 testen. Den FB auf FB 1 und FB 2 kopieren und ins Programm einfügen.
Dann kannst du debuggen und siehst ob es funktioniert.

Wenn es so funktioniert, dann hast du ein Problem mit Temp Variablen, die nicht bei jedem Aufruf initialisiert werden.


bike

Habe ich grad mal ausprobiert, hat leider nix gebracht, es funktioniert auch so nicht.



Hallo,



Soll das heissen, Du möchtest mit einem FB diese 12 Ventile ansteuern ? Dann hast Du Dir das Problem selbst geschaffen. Zerlege Dein Problem in kleine, überschaubare Einheiten. Also zuerst mache einen FB oder FC, der erstmal alle Funktionen eines Ventils beinhaltet. Und für jede Art des Ventils (2 oder 3 Wege, mit/ohne Rückmeldung, elektrisch, pneumatisch oder hydraulisch etc.) erstelle einen eigenen Baustein. Diesen Baustein dann auf die gewünschte Funktionalität des Ventiles testen.

Und erst dann kannst Du mal langsam versuchen, die logische Ansteuerung dieser Ventile weiter in einem Baustein zu verknüpfen.

Du bist dabei, Dir einen Monsterbaustein zu basteln, der Dich irgendwann auffrisst.

Gruß

Question_mark

Jedes der 12 Ventile soll einzelnd mit einem neu aufgerufenen und individuell beschalteten FB angesteuert werden.
Das Programm welches ich in dem FB verwenden möchte habe ich vorher in einem FC aufgebaut und dann getestet...es lief. Dann habe ich daraus einen FB gebaut und die vorher verwendeten Merker durch Variablen ersetzt. Getestet habe ich den FB erst mal mit einem Ventil, es hat alles so funktioniert wie vorher mit der FC Version auch. Nur wie gesagt läuft es nicht mit einem 2. Ventil.

@QM , nö er hat schon vor sich einen Ventibaustein für Mehrfachaufruf zu schreiben..





Jeder deiner FBs hat einen anderen Instanz DB?

Hast du darauf geachtet im FB auch nur mit Lokalvariablen (mit # davor) zu arbeiten?
Oben in der Variablendeklaration lieber mit "Stat" wie Statischen arbeiten statt temporären Variablen.


Ja, habe jedem FB Aufruf seinen eigenen DB zugeordnet.
Die Variablen haben auch alle ein (#) davor (ohne hat er auch rumgemeckert).

Oder nutzt du irgendwo die S5-Timer (T1 - Tn) ? Diese können dir natürlich auch Freude bereiten...

Grüße

Marcel

Ja, die habe ich tatsächlich innerhalb des FB benutzt...
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
...

Hallo,

Mr.Munshun schrieb:
Ja, die habe ich tatsächlich innerhalb des FB benutzt...

Moment mal...

Habe ich das richtig verstanden ?

Du benutzt innerhalb eines FBs, der mehrfach (also je Ventil) aufgerufen wird, den gleichen Timer ?

Und übrigens, Dein FB muss ja sehr geheim sein. Stelle den doch einfach als Anhang hier rein, dann kann man Dir besser helfen. Manchmal ist meine Kristallkugel in Reparatur.

Gruß

Question_mark
 
Hallo,
mir ist die ganze Geschichte (genau wie QM) ein bißchen zu allgemein. Mit dem Programmcode könnte man sicherlich gezielter helfen.

Ich stimme aber auch mit QM darin überein, dass man überlegen sollte, ob man den gesammten Baustein nicht (programmtechnisch) in weitere Einzelteile zerlegen sollte (die sich dann auch wesentlich besser warten und debuggen liessen).

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich stimme aber auch mit QM darin überein, dass man überlegen sollte, ob man den gesammten Baustein nicht (programmtechnisch) in weitere Einzelteile zerlegen sollte (die sich dann auch wesentlich besser warten und debuggen liessen).
Man konnte es am Anfang zwar nicht raus lesen aber Mr.Munshun macht es doch schon:
Jedes der 12 Ventile soll einzelnd mit einem neu aufgerufenen und individuell beschalteten FB angesteuert werden.
Das Programm welches ich in dem FB verwenden möchte habe ich vorher in einem FC aufgebaut und dann getestet...es lief. Dann habe ich daraus einen FB gebaut und die vorher verwendeten Merker durch Variablen ersetzt. Getestet habe ich den FB erst mal mit einem Ventil, es hat alles so funktioniert wie vorher mit der FC Version auch. Nur wie gesagt läuft es nicht mit einem 2. Ventil.
Das Problem wird garantiert, wie schon mehrfach geschrieben wurde, die Timer oder die Instanz-DB's sein.
 
@Paule:
Das ist für mich nicht so klar gewesen - und ist es auch immer noch nicht. Ich bleibe hier aber auch mal bei der Frage nach dem Baustein-Code. Viele Dinge lassen sich nicht unbedingt pauschal beantworten ... :rolleyes:

Gruß
Larry
 
Nutze die SFC4 oder SFC5 (wenn es denn stimmt) TON, TOF, ETC.
Mit den T1-Tn wird das nix, wie will er denn unterscheiden welcher Timer gerade läuft, wenn du aus X FBs auf den gleichen Timer zugreifst???
Grüße
Marcel

woran geilt ihr denn euch noch auf? Marcel hat doch gelöst!?!

Jo, hat er wohl... jedoch mit den SFB´s 4+5, oder ?

Kann der TE nicht auch alternativ eine S5-Timer-Nr. an seinen FB als Eingangsparameter übergeben (natürlich unterschiedliche pro FB-Aufruf), falls er nicht mit TON und TOF arbeiten möchte ?

Gruss
 
Zurück
Oben