Step 7 Funktionsbaustein

ertrinkender

Level-1
Beiträge
35
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
bin mal wieder kurz vorm Verzweifeln.

Problem: Die entworfene Funktion soll als Störmeldebaustein arbeiten. Nach einer freieinstellbaren
Zeit soll eine Störung generiert werden. Dies funktioniert auch. Problem ist aber, sobald die
Funktion mehrmals aufgerufen wird und ich eine Störung generieren möchte wird die Störung
nicht durchgeschaltet. Dies geschiet erst wenn bei allen Funktionen die Eingänge fehlen.

Zum Besseren Verständnis habe ich das Programm mal angeheftet.

Die Störmeldebaustein liegen im FC80 ab und sin die Funktionen FC14.

Es ist doch so das man eine Funktion mehrmals aufrufen kann. So habe ich es verschiedenen Unterlagen gesehen.

Es wäre wunderbar wenn ihr helfen könntet!!!!

Anhang anzeigen Versuch_3_08_01_14.zip
 
z.B. #bAlarm hast du bei Out deklariert.

Schreibst aber nicht immer darauf bevor du liest. Darum ist dieser Zustand zufällig.

bAlarm gehört also nach INOUT deklariert.

dasselbe gilt für #bAlarm_intern

Für #Zeit_abgelaufen gilt das auch.
Findest du heraus warum?

mfG René
 
Hallo René,

vielen Dank für Deine Hilfe. Der Hinweis für die Deklaration
für die Ausgänge war sehr hilfreich. Es sieht schon viel besser
aus im Programm.

Leider bin ich noch nicht dahinter gekommen wie die Eingänge nicht überschrieben werden.

Vielleicht kannst Du mir noch einen Hinweis geben.

Gruß
Stephan
 
Also hast Du eine Idee???

Bitte formulier deine Frage aus. Wo liegt denn jetzt noch das Problem, jetzt wo du weisst das IN und Out Temporär sind? Ich meine IN musst du ja extern anhängen weil dir sonst Step7 das speichern verwehrt also dürfte daher kein Problem kommen.
Wenn du nur in Teilsätzen fragst, wird dir keiner helfen können.

mfG René
 
Hallo Leute,

wenn ich die Funktion 14 einmal im Programm aufrufe ist alles in Ordnung, d.h. wenn eine
ich den Eingang [126.4] wegnehme kommt auch der Alarm.

Wenn ich jetzt die Funktion 14 zum zweiten mal aufrufe [Eingang 126.2] und diesen Eingang
wegnehme passiert nichts.

Der Alarm wird erst dann generiert wenn ich den Eingang [126.4] auch wegnehme. Die Eingänge werden
somit von den anderen Eingängen überschrieben.

Was mache ich hier falsch.

Gruß
Stephan
:confused:
newreply.php
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Na, wahrscheinlich benutzt Du im FC globale oder temporäre Variablen falsch.
Wie sieht Dein FC14 jetzt aus? Bitte lade den Code als Text hier hoch (nicht .zip) oder noch besser: kopiere den Programmcode lesbar in den Beitrag in CODE-Tags (der #-Button im Beitrags-Editor).

Harald
 
Du hast im FC80 bei den beiden Aufrufen des FC14 das IN_OUT-Struct DB_Meldungen jeweils "DB310.DB_Meldungen" angegeben!
Wenn ich das richtig sehe, werden darin die ganzen Zeitberechnungen u.ä. des FC14 gespeichert.
Die überschreiben sich somit bei 2 (oder mehr) anstehenden Alarmen garantiert immer wieder gegenseitig.
 
Hallo Leute,

ich trau mich gar nicht mehr zu melden. Aber es funktioniert jetzt.

Hucki hat die richtigen Hinweis gegeben.

Warum ich da nicht selber darauf gekommen bin?... fragt mich nicht.

Gut das, das ganze hier anonym ist...!!!!

Gruß
Etrinkender
 
Du hast im FC80 bei den beiden Aufrufen des FC14 das IN_OUT-Struct DB_Meldungen jeweils "DB310.DB_Meldungen" angegeben!
Wenn ich das richtig sehe, werden darin die ganzen Zeitberechnungen u.ä. des FC14 gespeichert.
Ich hätte das eh' nicht mit einem FC(14) gemacht, sondern einen FB erstellt. So werden für jeden Aufruf die zugehörigen (Zeitverzögerungs-) Daten in dessen Instanz-DB gespeichert und nicht in einem globalen DB. (Nebenbei kannst Du in einem FB dann auch noch die IEC-Zeiten verwenden, anstatt selbst zu berechnen.)
Wenn Du nicht Hunderte von IDBs willst, kann man auch den FC80 als FB erstellen und dann mit dem FB14 eine Multiinstanz erstellen.

Nur die Alarme selbst hätte ich dann noch in dem globalen DB gespeichert.
 
Hi hucki,

meine Idee ist die alle DB's die vorkommen können in einem Fehlerbaustein
[Array] zu speichern und die Alarmmeldungen dann in einen extra DB-Baustein.

Dies sollte doch funktionieren!?!

Nachdem ich die Funktionen getestet habe ist mir noch was aufgefallen.
Sobald ich die Zeiten über 10 Sekunden stelle geht die CPU in Störung.

Dies liegt an dem "Hexa-Code" bzw. BCD-Umwandlung. Hab mich im Forum schon schlau gemacht
wie ich die Zeit [Sekunden] in Integer-Werte umwandeln kann. Bin aber nicht so recht
schlau daraus geworden.

Hast Du eine Idee?


Gruß
Ertrinkender [Stephan]
 
Zurück
Oben