S7-CPU316-2DP - seltsames Verhalten bei IEC FC6

Feng

Level-1
Beiträge
116
Reaktionspunkte
21
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag - ich bin das erste Mal hier und hoffe auf eine Erklärung für ein seltsames Phänomen bei meiner CPU 316 (6ES7 316-2AG00-0AB0 V.02) in Verbindung mit Datum-Zeitabfrage SCF1 und anschließender Umwandlung in Datum über IEC F6.

Im Programm (AWL) werden ausschließlich FC's verwendet (keine FB).
Ein bestimmter FCx wird mehrfach mit verschiedenen Parametern aufgerufen.
Datum+Zeit wird über SFC1 aus der CPU ausgelesen und mit den IEC F6 in das Datum gewandelt und mit IEC F8 in die aktuelle Zeit gewandelt. Die Werte werden jeweils in einem globalen DB gespeichert.

So weit so gut funktioniert alles - bis auf ein Phänomen: Bei den verschiedenen Aufrufen der FCx funktionieren alle bis auf einen.

Ich bin seit 2 Tagen am Suchen, Probieren, Forschen und habe jetzt endlich rausgefunden: Wenn ich nur den IEC FC6 (Datum herauslösen) deaktiviere, dann funktioniert wieder alles.

Ich kann mir darauf keinen Reim machen - es gibt keine Datenüberschneidungen - das Programm ist m.E. ok (soweit man das von einem Programm behaupten kann ...).

Bisher hatte ich Fehlfunktionen im Programmablauf eher als sportliche Herausforderung gesehen - und die Simatic hatte immer Recht...!
Aber jetzt zweifle ich ein wenig an der Hardware/Software - hoffentlich kann mir jemand das Vertrauen wieder zurückgeben.
Danke im voraus!
Feng
 
Wird dieser FCx immer im gleichen OB/FC mehrfach aufgerufen ?

Es könnte eventuell an den Lokaldaten liegen,
nur mal so ins blaue geschossen.
Verteile die Aufrufe z.B. mal in zwei Bausteine, die hintereinander im OB1 aufgerufen werden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die Antwort!
Nein, die Aufrufe für die FCx sind weit gestreut - es verweigert immer nur 1 bestimmte FCx ihren Dienst.

Wenn ich die IEC F6 (umbenannt in FC106, weil die FC6 schon belegt ist) in einer anderen FC aufrufe :

CALL FC 106 //IEC-Funktion FC6 in FC106 umbenannt
IN :="REAL".akt_Date_Time // Eingangsgröße: DT im DB2 ("REAL")
RET_VAL:=DB2.DBW128 // Ausgangsgröße: Akt.Datum (Date)

- der gleiche Fehler.

Wenn ich aber die IEC FC6 wegnehme, funktioniert wieder alles.

Zusatzfragen:
1) Könnte die Umbenennung der IEC FC6 in FC106 der "Hund" sein?
2) Was steht in der IEC FC6 drin?
------------------------------
Zu 1): Nee, hab' ich gerade ausprobiert und meine FC6 gelöscht und die IEC-FC106 wieder in IEC FC6 umbenannt - der gleiche Fehler. Also die Umbenennung der IEC-FC6 war nicht der "Hund".

Was zum Teufel läuft in der IEC F6 ab??
Wieso macht die IEC-F8 (Extraktion der akt.Zeit aus Date_Time) keine Probleme??
 
Zuletzt bearbeitet:
- der gleiche Fehler.

Ich lese immer nur Fehler, was für ein Fehler denn genau?

1) Könnte die Umbenennung der IEC FC6 in FC106 der "Hund" sein?

Eher nein, ich benenne die auch grundsätzlich um.

2) Was steht in der IEC FC6 drin?
[/QUOTE]

Das weiß Siemens.

PS: Wenn du die aktuelle Zeit wandelst, warum tust du das überhaupt mehrmals. Mach es einmal, im OB1-Kopf stehen übrigens auch die Zeitdaten, da brauchst du nicht mal den SFC1, schreib es in einen DB und nutze dann im gesamten Programm.

PS2: Aber den Fehler sollte man trotzdem erstmal suchen ;).
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich denke Du hast folgenden "Programmierfehler"

Wenn man an FCs Output-Parameter nutzt und diese z.B. mit
Variablen aus einem DB beschaltet muß dieser OUT auch im FC
zugewiesen werden.
Wenn z.B. durch einen Sprung im FC der OUT nicht beschrieben steht am
Ausgang des FC nur Schrott drin.

Das liegt daran das DB-Variablen als Parameter nicht direkt substituiert werden, sondern über den UMweg L-Stack beschrieben werden.
Wenn Du also nicht zuweist im FC dann werden am Ende des FC Lokaldaten auf den OUTPUT geschrieben die aus einem anderen Baustein
stammen können.
 
Vielen Dank!
Der "Fehler" ist: Die FCx soll auf verschiedene Tasten und weitere Randbedingungen eine Pumpe starten - tut sie nicht, wenn der IEC-FC6 läuft. Bei anderen Pumpen geht es einwandfrei.
Zufall kann eigentlich nicht sein - der Zusammenhang mit der IEC-FC6 ist reproduzierbar.

Das gesamte Programm in AWL ist zu lang zum mailen - denke ich...

Danke für den Hinweis, dass im OB1 Date_Time schon angeboten wird - hatte ich noch gar nicht entdeckt.

Ich könnte ja auch selbst das Date aus Date_Time "rauszuzeln" - aber irgendwie ärgert mich die "Nebenwirkung" der IEC-FC6, wenn ich den Grund nicht weiß - zumal ich jetzt schon so lange daran rummache...
Gruß
Feng
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich denke nach wie vor, daß in deinem Programm nach dem FC6 Lokaldaten überschrieben sind, auf welche du später im Programm zugreifst, obwohl deren Daten aus dem vorigen Zyklus stammen und diese damit eigentlich ungültig sind. Siehe auch die beschriebene Out-Problematik. Hast du irgendwo Temp-Var (Lokaldaten) genutzt, die du länger als einen Zyklus benötigst/nutzt? Das geht dann irgendwann schief, wenn ein anderer Baustein zwischendurch diese Lokaldaten für sich nutzt!!!
 
Zurück
Oben