Variablen aus TXT Datei zyklisch beschreiben

Ich hätte da auch mal einen (etwas anderen) Ansatz :
Die bisherigen Aussagen, dass das mit mehreren Variablen und/oder einer Aktualisierungsrate von 100 ms nicht sauber funktioniert, halte ich für korrekt.
Deswegen würde ich es so machen :
- du speicherst (z.B. mittels eines OB35-Taktes) die Variablen erstmal in der SPS in einen Puffer 1
- hat dieser Puffer 1 eine Anzahl x von Variablen archiviert setzt du ein Triggerbit für die Visu um diese Daten einzulesen und speicherst ab da deine Daten in Puffer 2
- hat dieser Puffer 2 eine Anzahl x von Variablen archiviert setzt du ein weiteres Triggerbit für die Visu um diese Daten einzulesen und speicherst ab da deine Daten wieder in Puffer 1
- usw.

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich würde das etwa so realisieren
- in der SPS einen Ringpuffer für ca. 1600 Zeilen (Datensätze) je 9 INT (Reserve: 10 INT) anlegen (z.B. ARRAY[0..1599] OF ARRAY[0..8] OF INT (oder OF STRUCT))
- in der SPS einen Kommunikationspuffer für ca. 40 Zeilen anlegen
- im Skript jeweils 40 Zeilen aus der csv-Datei in eine Rezeptur einlesen (kann Dein HMI(?) Arrays in Rezepturen? Wenn nicht dann brauchst Du 360 Rezeptur-Variablen)
- handshake-gesteuert die Rezeptur aus dem HMI in den Kommunikationspuffer in der SPS schreiben (WinCC flex: SetDataRecordTagsToPLC())
- wenn die Rezeptur vollständig in der SPS angekommen ist, dann vom Kommunikationspuffer in den Ringpuffer kopieren
- wiederholen mit nächsten 40 Zeilen, solange noch Platz im Ringpuffer und csv-Datei noch nicht vollständig ausgelesen
- in der SPS per OB35 (oder Timer) alle 100ms eine Zeile aus dem Ringpuffer entnehmen und den 9 Variablen zuweisen

Bei dieser Art der Zwischenpufferung ist der 100ms-Takt zur Variablenzuweisung von der csv-Lesezeit entkoppelt, das csv-Lesen und in die SPS übertragen ist nicht mehr so kritisch. Du hast je 40-Zeilen-Rezeptur durchschnittlich 4s Zeit zum Auslesen aus der csv und in die SPS übertragen. Tatsächlich sollte die Übertragung nur höchstens 2s dauern. Wenn der Ringpuffer voll ist enthält er Daten für die nächsten ca. 150s.

Hier ein Beispiel für den umgekehrten Weg, wie das "häppchenweise" Übertragen von mehreren KByte von SPS zu csv-Datei funktioniert.

Harald
 
Hallo Larry hallo Harald,
Danke für die Vorschläge. Beides hört sich nicht schlecht an. Werde ich als nächstes ausprobieren sobald ich dazu komme und mich wieder melden.

Gruß
 
Zurück
Oben