Habe da ein kniffliges Problem bei der Programmierung einer Fehlerauswertung

Kayser

Level-1
Beiträge
19
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Komme hier einfach nicht mehr weiter!!
Hardware: Siemens CPU 414-2DP; CP 443-1 IT
Software: Simatic Step 7 V5.2 +SP1 (AWL, FUP)


Folgendes:
Im DB104 werden die Fehlerbits (Bereich zwischen DB104.DBX 128.0
bis DB104.DBX 255.7 ) dynamisch von der Anlage gesetzt. Diese könne manuell vom
Bediener wieder zurückgesetzt werden.
Als Fehlermaskierung habe ich den DB200 einen Bereich zwischen DB200.DBX 0.0 und DB200.DBX 127.7 zugeordnet. Hier wird statisch festgelegt, welcher Fehler eine Relevanz für die darauf folgende Auswertung hat.

Beispiel:
DB200.DBX 1.0 hat den bool’schen Wert ’1’ und
im DB104.DBX 129.0 ist durch einen Fehler ebenfalls auf ’true’ gesetzt,
so ist dieser Fehler relevant.

Mein jetziges Konzept:
Wird ein Fehlerbit im DB104 gesetzt, soll nach dem Vergleich des DB104 mit dem DB200 die Bitadresse ermittelt werden. Im Anschluss daran soll automatisch eine Email generiert werden (hier verwende ich die Funktion FC50 (AG Long Send), die im DB10 als Anlage die Fehlernummer (= Fehlerbit) und eine Beschreibung des Fehlers im Klartext dynamisch eingefügt werden soll.

OB1
Code:
[COLOR=black]Netzwerk 1:[/COLOR]
[COLOR=black]Call FB 10, DB11[/COLOR]
 
[COLOR=black]Netzwek 2:[/COLOR]
[COLOR=black]Call FB 30 , DB30[/COLOR]

FB10
Code:
[COLOR=black]Netzwerk 1: Flankensteuerung, da beim Aufteten eines Fehlerfalls der Anlage nur eine Email versendet werden soll (Vermeidung von Dauerfeuer)[/COLOR]
 
[COLOR=black]U M11.0  // Aktivierung[/COLOR]
[COLOR=black]FP M11.1  // Flanke[/COLOR]
[COLOR=black]= M10.0  // Sendeimpuls[/COLOR]
 
[COLOR=black]Netzwerk 2: Kommunikationsbaustein[/COLOR]
[COLOR=black]CALL FC50[/COLOR]
[COLOR=black]ACT:= M10.0[/COLOR]
[COLOR=black]ID:= 1[/COLOR]
[COLOR=black]LADDR:= W#16#1FF8[/COLOR]
[COLOR=black]SEND:= P#DB10.DBX0.0 BYTE 558[/COLOR]
[COLOR=black]LEN:= 558[/COLOR]
[COLOR=black]DONE:= M10.1  // Ausführung der Versandbestätigung[/COLOR]
[COLOR=black]ERROR:= M10.2[/COLOR]
[COLOR=black]STATUS:= MW100[/COLOR]
 
[COLOR=black]Netzwerk 3: Speichern der Versandbestätigung[/COLOR]
[COLOR=black]U M10.1[/COLOR]
[COLOR=black]S M10.5  // Versandbestätigung[/COLOR]
[COLOR=black]U M10.4 // Rücksetzen der Versandbestätigung[/COLOR]
[COLOR=black]R M10.5 [/COLOR]
 
Netzwerk 3:
BE

FB 30
Code:
[COLOR=black]Netzwerk 1:[/COLOR]
[COLOR=black]TAR1 #Adr_1[/COLOR]
[COLOR=black]TAR2 #Adr_2[/COLOR]
 
[COLOR=black]Netzwerk 2:[/COLOR]
[COLOR=black]L 104[/COLOR]
[COLOR=black]T #Quell_DB[/COLOR]
 
[COLOR=black]L 200[/COLOR]
[COLOR=black]T #Maske_DB[/COLOR]
 
[COLOR=black]Netzwerk 3:[/COLOR]
[COLOR=black]LAR1 P#128.0[/COLOR]
[COLOR=black]LAR2 P#0.0[/COLOR]
 
[COLOR=black]Netzwerk 4:[/COLOR]
[COLOR=black]// Bit-Schleife[/COLOR]
[COLOR=black]L 127[/COLOR]
[COLOR=black]M002: T #zaehler_1[/COLOR]
 
[COLOR=black]L 7[/COLOR]
[COLOR=black]M001: T #zaehler[/COLOR]
 
[COLOR=black]AUF DB [#Quell_DB][/COLOR]
[COLOR=black]U DBX [AR1,P#0.0][/COLOR]
[COLOR=black]AUF DB [#Maske_DB][/COLOR]
[COLOR=black]U DBX [AR2,P#0.0]   [/COLOR]
[COLOR=black]= M30.0    // setzen der pos. Flanke[/COLOR]
 
[COLOR=black]+AR! P#0.1[/COLOR]
[COLOR=black]+AR2 P#0.1[/COLOR]
 
[COLOR=black]L #zaehler[/COLOR]
[COLOR=black]LOOP M001[/COLOR]
 
[COLOR=black]// Byte-Schleife[/COLOR]
[COLOR=black]LAR1 P#128.0[/COLOR]
[COLOR=black]LAR2 P#0.0[/COLOR]
 
[COLOR=black]+AR1 P#1.0[/COLOR]
[COLOR=black]+AR2 P#1.0[/COLOR]
 
[COLOR=black]L #zaehler_1[/COLOR]
[COLOR=black]LOOP M002[/COLOR]
 
[COLOR=black]Netzwerk 5:[/COLOR]
[COLOR=black]LAR1 #Adr_1[/COLOR]
[COLOR=black]LAR2 #ADR_2[/COLOR]
 
[COLOR=black]Netzwerk 6:[/COLOR]
[COLOR=black]BE[/COLOR]

Hat jemand mit der mathematische Operation LN Erkenntnisse im
Bezug auf die Berechnung der Bit-Position?
Formel: bitposition = LN bitwert / LN 2

Mein Problem ist der Vergleich der Datenbausteine als auch die Fehlerbit-Berechnung und zu guter Letzt die Implementierung der Fehlernummer/Klartext im Anhang der Email.

Im Voraus sag ich schon mal DANKE!

Mfg
Kayser

P.S. Rückfragen und Anregungen erwünscht!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich würde auf jeden Fall Wort- oder Doppelwortweise vorgehen, das Fehlerwort und das Freigabewort miteinander "verunden" und bei einem Vegleichs-Ergebnis > 0 das entsprechende Bit ermitteln, sonst mit dem nächsten Wort weitermachen, das verkürzt die Schleife enorm.
 
Zuletzt bearbeitet:
Haben Sie auch einen Baustein für den letzten Wert? Wann soll die Mail geschickt werden? Nur bei kommenden Fehlern oder auch bei gehenden?
 
Hallo Herr Hönle,

Haben Sie auch einen Baustein für den letzten Wert?
Da kann ich Ihnen leider nicht ganz folgen.
Was meinen Sie mit dem letzten Wert?

Wann soll die Mail geschickt werden?
Also beim Auftreten eines Fehlers, wird ein Bit im DB104 gesetzt.
Durch einen Vergleich mit der Fehlermaskierung DB200 soll die Relevanz,
ob eine Email generiert wird oder nicht, entscheiden.

Ist der Fehler relevant, so soll die Bitnummer (Fehlernummer) im Anhang
der Email eingesetzt werden und anschließend automatisch verschickt.
Dieses muß natürlich flankengesteuert abgewickelt werden, da sonst
eine Überflut von Email versand wird.
Taucht der Fehler nach der Fehlerquittierung wieder auf, so soll
erneut eine Email mit der Fehlernummer versand werden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Kayser schrieb:
Haben Sie auch einen Baustein für den letzten Wert?
Da kann ich Ihnen leider nicht ganz folgen.
Was meinen Sie mit dem letzten Wert?
Sie haben einen Baustein mit der Freigabe (DB 200) und einen Baustein mit den Aktualwerten (DB 104). Um einen Flankenwechsel zu erkennen benötigt man noch den alten Zustand. Oder sind im DB 104 nicht die Aktualwerte sondern die Flanken?
 
Hallo,
jetzt verstehe ich die Problematik! Also wenn kein Fehler registriert wurde,
sind alle Aktualwerte "false" gesetzt. Beim Fehler wird ein Bit des
entsprechenden Fehlerortes gesetzt, z.B. DB104.DBX 129.1. Dieser steht
solange an bis eine Quittierung vom Bediener erfolgt.
Ist der Fehler als relevant eingestuft (Vergleich mit den statischen
Werten im DB200), so soll die Bitadresse ermittelt werden und in den
Anhang der Email implementiert und ein Versand angestoßen werden.

Klar, wird jetzt wieder der DB104 verglichen, so würde wiederum eine
Email versand. Somit muss alle Aktualwerte sammeln und bearbeiten.
D.h. wird im DB104 ein Bit von 0 -> 1 gesetzt, so muss ich diesen Wert
andernorts speichern.

Wo ich jetzt gerade noch hänge ist, wie kann ich das umsetzen?

Schöne Grüß von der Küste

Kayser
 
Einfach noch einen Speicherbereich (z.B. in einem DB) einführen, in dem die Zustände aus dem letzten Zyklus stehen. Nur wenn ein Flankenwechsel nach 1 erfolgt (aktueller Zustand 1, letzter Zustand 0, Freigabebit 1) wird dann die Mail verschickt.
 
Zurück
Oben