TIA zügige Prozessdatenspeicherung

OP
Z

ZottelMD

Well-known member
Beiträge
65
Punkte Reaktionen
1
Zuviel Werbung?
->Hier kostenlos registrieren
Genau so, beachte bitte die Worte: Ein Datensatz darf 5kByte groß sein.
Ein Datensatz ist bei Dir eine Zeile!
Also um bei der Methode zu bleiben: Ein einzelnes Rezept darf 5kByte nicht überschreiten. Aber Du kannst beliebig viele Rezepte/Datensätze speichern.
Ebenso für den Header...
Der baut sich vermutlich eine Zeile für das Wegschreiben zusammen, und diese Zeile darf 5kByte nicht überschreiten, also 5000 Zeichen. Weggeschrieben. Fertig. Nächste Zeile. Wieder max. 5000 Byte.
Check, das kann ich bestätigen. In den letzten Minuten kam mir der gleiche Gedanke mir "ein Datensatz".

ich hab das jetzt mal exemplarisch mit meinem Array of 0..100 of UDT ausprobiert. Was soll ich sagen, das geht ab wie ein Torpedo. Richtig gute Idee mit dem Rezept. Kleines Manko, man muss das Rezept aber eben auch immer rausräumen, wird hart überschrieben, wenn man wieder RecipeExport benutzt. ABER als Mindestlösung ist das absolut top !!!

1622203088537.png

führt zu

1622202965108.png

Ich erweitere das Array jetzt pauschal mal bis zu 999 und dann geht das Feintuning los. Geschickt in mein Programm integrieren. Kontrolliert DB clearen, vernünftiges UI im IPC usw . usf.

Ich danke euch MAXIMAL für die ausdauernden Tipps. Mit der Lösung kann ich sehr gut leben und mit gefällt besonders, dass man hier nicht drölf-millionen mal mit datalog_Write arbeiten muss. Er schreibt n riesen Batzen an Daten am Stück. Find ich richtig gut. Ich werd bestimmt noch n bissle recherchieren, ob ich die CSV von der MemoryCard irgendwie durch ein Script oder so herunter bekommen kann, sodass ich eventuell den Speicherplatz immer automatisch freiräumen kann und die Datei entsprechend automatisch benennen kann, z. B. Datums/ZeitStempel, aber das ist alles nur Kür. Grundsätzlich funktioniert das "hochfrequente" Aufzeichnen der Messkurven in Messmode 2 & 3 und das ist top !
 
OP
Z

ZottelMD

Well-known member
Beiträge
65
Punkte Reaktionen
1
Kann man in der neuen GUI hier im Forum noch irgendwie den hilfreichsten/die hilfreichsten Beiträge markieren oder nur likes vergeben ?
 
OP
Z

ZottelMD

Well-known member
Beiträge
65
Punkte Reaktionen
1
Zuviel Werbung?
->Hier kostenlos registrieren
Auch richtig gut, wenn man einen Benutzer Account einstellt (Hardware Config der CPU - Webserver), dann kann man eingeloggt im Webserver sofort den Namen der Datei ändern. Das heißt das standardmäßige Verhalten, dass RecipeExport sofort hart die vorhandene Datei mit gleichem Namen überschreibt, kann ich ganz elegant umgehen.

1622205268664.png

Jetzt gefällt mir der ganze kram noch mehr ^^. Der Benutzer kann sofort den Namen vergeben, was will man mehr !
 
OP
Z

ZottelMD

Well-known member
Beiträge
65
Punkte Reaktionen
1
nächste zugehörige Frage:

irgendwie klappt bei mir das Löschen/Clearen/Reseten meines Array of UDT nicht:

1622221609640.png
Ich habe für den Messmode 1 (Drehzahl konstant) einen eigenen globalen DB angelegt ("datExpArray_ConstSpeed_DB"), so wie wir das oben besprochen haben. In diesem DB habe ich wieder ein Array [0..99] of UDT angelegt. Das sieht dann so aus. Hier kommen ja dann immer die Messwerte rein. Beim ersten Messen wird dann "constSpeedMVArray[0]" mit seinen 11 verschiedenen Werten gefüllt. Beim zweiten Messen wird dann "constSpeedMVArray[1]" mit anderen momentanen 11 Werten gefüllt, usw. usf.

1622220166488.png

Der UDT enthält hier wieder alle Informationen die ich pro Mittelwertbildung (Messmodus 1) festhalten will. Hier diesmal nicht speichersparend angelegt mit Rohwerten (zum Test). Sondern direkt alles mal auf LREAL geknallt.

Nehmen wir an die Messung ist rum, ich habe die Daten in einer CSV exportiert und das Array of UDT ist von den 100 Einträgen zur Hälfte gefüllt. Dann will ich per HMI-Taster das Array of UDT reseten. quasi alle nicht 0 Zeilen zu 0 setzen.

Ich habe daraufhin eine statische Variable vom gleichen UDT erstellt, in der die einzelnen Elemente Time, M_Ax1, ... usw alle 0 sind.

1622220827099.png

Dann wollte ich mit FILL_BLK diese leere UDT-Variable nehmen und als "neuer Wert" in das Array of UDT schreiben. Geht net =(

Hat jemand von euch schon ein Array of UDT erfolgreich zurückgesetzt ?

VG

Kann das sein, dass der oben gezeigte FILL_BLK-Baustein nicht funktioniert
 

Anhänge

  • 1622220018944.png
    1622220018944.png
    4,9 KB · Aufrufe: 8
Zuletzt bearbeitet:

JSEngineering

Well-known member
Beiträge
970
Punkte Reaktionen
237
Hab gerade kein TIA auf dem Handy, aber Fill_Blk gibst Du glaube ich eine Anzahl Byte vor, die gefüllt werden sollen. Damit könntest Du also Dein Array auf einen Schlag ohne FOR mit 0 füllen.
 
OP
Z

ZottelMD

Well-known member
Beiträge
65
Punkte Reaktionen
1
warum mit Fill_Blk? wenn du schon eine leere Variable extra anlegst, dann kannst Du direkt zuweisen.

Code:
For x:=0 to 99 do
    MeinUdt[x] := LeererUdt;
end_for;

Schei... bin ich dumm, na klar =D. Zur Not muss das auch so funktionieren.

Hab gerade kein TIA auf dem Handy, aber Fill_Blk gibst Du glaube ich eine Anzahl Byte vor, die gefüllt werden sollen. Damit könntest Du also Dein Array auf einen Schlag ohne FOR mit 0 füllen.

Genau das wollte ich damit erreichen. Normalerweise gibt man bei FILL_BLK bei IN den Wert an, den man "reinfüllen" will, bei COUNT die Anzahl der Wiederholungen und bei OUT quasi den Pointer auf das gewümnschte Startelement. Bei normalen regulären Arrays funktioniert das bei mir immer hervorragend, aber bei meinem UDT-Array so mal gar nicht ^^

Dann werde ich wahrscheinlich die Version mit der FOR-Schleife nehmen, solange ich oder ein anderer den Fehler nicht findet, bis man das Array of UDT auch mit FILL_BLK "clearen" könnte
 

JSEngineering

Well-known member
Beiträge
970
Punkte Reaktionen
237
Zuviel Werbung?
->Hier kostenlos registrieren
Genau das wollte ich damit erreichen. Normalerweise gibt man bei FILL_BLK bei IN den Wert an, den man "reinfüllen" will, bei COUNT die Anzahl der Wiederholungen und bei OUT quasi den Pointer auf das gewümnschte Startelement. Bei normalen regulären Arrays funktioniert das bei mir immer hervorragend, aber bei meinem UDT-Array so mal gar nicht ^^

Dann werde ich wahrscheinlich die Version mit der FOR-Schleife nehmen, solange ich oder ein anderer den Fehler nicht findet, bis man das Array of UDT auch mit FILL_BLK "clearen" könnte

Du kombinierst in dem Fall eine FOR Schleife mit einem Programm, das sowieso X Mal einen Wert auffüllt?
Und was steht in #idx? Die FOR Schleife läuft mit #cnt...

Ist #idx vielleicht Null?
 
OP
Z

ZottelMD

Well-known member
Beiträge
65
Punkte Reaktionen
1
1622296357664.png
Naaaaaaa, wenn ich mich jetzt nicht ganz falsch an meine letzte funktionierende Verwendung von FILL_BLK zurückerinnere, dann funktioniert das doch so:
Code:
FILL_BLK(in := "WertDerInsArraySoll z.B. 2.4",
          COUNT := 5,
          OUT := "StartPositionDesArraysWasGefuelltWerdenSoll z. B. Array [0..9] of REAL und Array[2]");
Das führt doch dann von z. B.:
Code:
Array[0] = 0.0 -> Array[0] = 0.0
Array[1] = 0.0 -> Array[1] = 0.0
Array[2] = 0.0 -> Array[2] = 2.4
Array[3] = 0.0 -> Array[3] = 2.4
Array[4] = 0.0 -> Array[4] = 2.4
Array[5] = 0.0 -> Array[5] = 2.4
Array[6] = 0.0 -> Array[6] = 2.4
Array[7] = 0.0 -> Array[7] = 0.0
Array[8] = 0.0 -> Array[8] = 0.0
Array[9] = 0.0 -> Array[9] = 0.0

Count selbst ist eine Angabe/Konstante. Der Baustein wird das intern nutzen, um einen Zähler zu dem Countwert hochzuzählen. Meine Variable #idx ist jene Variable, die mit die beschriebenen "Zeilen" in meinm riesen Array of UDT kennzeichnet. Heißt, wenn mein Array of UDT ja 1000 "Zeilen", also Array [0..999] of UDT hat/ist und ich z. B. durch die Wahl meiner Messdauer und der Samplezeit 500 Einträge vom Array fülle, dann steht mein #idx auf 499.

Bei dem Versuch das Array dann zu clearen, wenn ich fertig bin, will ich vermeiden, dassich jedes Mal 1000 "Zeilen" cleare ohne, dass die überhaupt beschrieben sind. Ich übergebe also #idx an den FILL_BLK-Baustein, wenn es funktionieren würde.

Du hast aber mit deinem Alternativvorschlag mit der FOR-Schleife genau ins Schwarze getroffen, dass funktioniert gut. Ich hatte die naheliegende Lösung einfach nicht gesehen. Denke wahrscheinlich schon zu verquert.

Falls jemand herausfindet, wie man mein Array od UDT mit FILL_BLK clearen kann, kann er ja einen Beitrag schreiben, ansonsten lasse ich es erst einmal bei der FOR-Schleife und ohne den Aufruf von FILL_BLK

VG

p. s. ich hoffe ich hab deinen letzten Beitrag richtig verstanden und daruaf reagiert ^^ Sicher bin ich mir nicht
 

Windoze

Well-known member
Beiträge
151
Punkte Reaktionen
75
Soweit ich weiß, funktioniert FILL_BLK nur mit einfachen Datentypen. Nicht mit Strukturen oder UDTs.
Ich verwende da auch immer eine FOR-Schleife.
 

JSEngineering

Well-known member
Beiträge
970
Punkte Reaktionen
237
Ja, wenn #idx Deine Variable angibt, die beschreibt, wie viele Einträge vorhanden sind - also gelöscht werden sollen, ist das OK.
Wofür aber die FOR-Schleife drumherum? Du führst ja jetzt ein un den selben Code 99 Mal aus!?

Soweit ich weiß, funktioniert FILL_BLK nur mit einfachen Datentypen. Nicht mit Strukturen oder UDTs.
Ich verwende da auch immer eine FOR-Schleife.
Das ist laut Hilfe korrekt: Mit Deinem UDT funktioniert das nicht.
Bleib am besten bei der aktuellen FOR-Lösung. Ist auch am übersichtlichsten.
 
OP
Z

ZottelMD

Well-known member
Beiträge
65
Punkte Reaktionen
1
ich werde zukunftsnah und bei Zeiten mal noch einen längeren Post hier reinstellen, in dem ich die Antworten und den Lösungsweg zusammenfasse. Das soll dann zukünftige Leser schneller zu EINER Lösung/zum Ergebnis führen, aber ansonsten kann man den Fred hier dann als geloest betrachten. Ich danke euch alles fürs Zutun
 
OP
Z

ZottelMD

Well-known member
Beiträge
65
Punkte Reaktionen
1
Zuviel Werbung?
->Hier kostenlos registrieren
...
Wofür aber die FOR-Schleife drumherum? Du führst ja jetzt ein un den selben Code 99 Mal aus!?

...
Ich glaub ich steh immernoch auf dem Schlauch. Ist die Frage noch aktuell? Wenn ja weiß ich nicht genau, worauf du das noch beziehst. Eigentlich hab ich deinen Vorschlag ja minimalistisch übernommen und führ mit einer FOR-Schleife das "Reseten" aus. Kein Plan, wo da noch eine Schleife drum herum sein sollte oder wo es nach Redundanz schreit. Falls ich hier noch irgendwas überssehe, stubs mich mit der Nase drauf =D
 

JSEngineering

Well-known member
Beiträge
970
Punkte Reaktionen
237
Wenn's jetzt funktioniert, ist es nicht mehr aktuell.
Aber zum Verständnis und der Vollständigkeit halber, ich beziehe mich auf Deinen Screenshot:
1622457209215.png
 
OP
Z

ZottelMD

Well-known member
Beiträge
65
Punkte Reaktionen
1
Wenn's jetzt funktioniert, ist es nicht mehr aktuell.
Aber zum Verständnis und der Vollständigkeit halber, ich beziehe mich auf Deinen Screenshot:
Anhang anzeigen 54548
Ahhhhhh, jetzt versteh ichs...
Im Post #45 hängt das fälschlicherweise noch im Anhang drin. Den Code hatte ich hier für ein paar Minuten im Fließtext drin, jap. Dann hab ich bemerkt, dass das falsch ist und den Screenshot im Fließtext geändert. Hab anscheinend vergessen, die automatisch angehängte Bilddatei zu ändern/löschen. Fliegt jetzt raus ^^
Also es ist mir natürlich bewusst, dass der FILL_BLK Baustein schon alleine "schleift" und ich den nicht mit einer Schleife umgeben muss ! =D
Sorry für die Verwirrung

UPDATE: Kann Post #45 nicht mehr bearbeiten, demnach kann ich den verwirrenden ALT-Screenshot im Anhang nicht entfernen. Allgemeine Info: der ist obsolet ^^
 
Oben