Step 7 Daten von einem Werkstück in einen DB abspeichern

Nicknight

Level-1
Beiträge
15
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Mädls und Jungs, ich bräuchte dringend eure Hilfe. Ist es möglich Daten von einem Werkstück in einem DB zu speichern und diese Daten dann immer weiter nach hinten im DB zu verschieben um so die letzten 100 Werkstücke zu speichern. Ich nähme an ein FIFO wäre da das richtige. Nur kann ich das FIFO so machen das die Daten die ich speichere definierbar sind. zur Zeit habe ich für das Werkstück 10 Daten, wir wollen aber später mal 12 oder 15 Daten pro Werkstück speichern. Hat jemand zufällig eine Vorlage für mich oder vielleicht sogar ein fertiges Programm wo ich mir sowas anschauen kann. Danke für eure Hilfe Gruß Nick
 
Ja, ist möglich.
FIFO ist gar nicht schlecht, ich würde aber möglichst einen Ringpuffer mit Schreibzeiger verwenden, da entfällt das Umspeichern
Die Struktur im ARRAY OF STRUCT gleich für die spätere Anzahl Datenpunkte + Reserve auslegen, dann bleiben die Speicherinhalte bei späteren Programmänderungen erhalten.
Benutze mal die Forumsuche nach FIFO, da gibt es auch eine FAQ mit Link zu Volkers Homepage

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

hier ein Beispiel für einen Ringpuffer mit 10 Einträgen der einen Wert zusammen mit Zeitstempel speichert:

--------------------------------------------------------------------------------------
in: error_code type word
temp: SFC_21_Ret_Val type INT
now type Date_And_Time


AUF "DB_fault_history" //open fault DB
L "DB_fault_history".actual_pointer
L 8 // convert to byte
*D
L 10
*D // 10 Bytes between entries
L P#DBX 0.0
+D
LAR1

L #error_code // store error code
T DBW [AR1,P#0.0]


CALL "READ_CLK"
RET_VAL:=#SFC_21_Ret_Val // read date and time
CDT :=#now

L LD 2 // store date and time
T DBD [AR1,P#2.0]
L LD 6
T DBD [AR1,P#6.0]


L "DB_fault_history".actual_pointer
+ 1
L 9
>I
TAK
SPBN next
L 0
next: T "DB_fault_history".actual_pointer
BEA


Die Konfiguration des DB's


fault_1 WORD W#16#0
date_and_time_1 DATE_AND_TIME DT#90-1-1-0:0:0.000
fault_2 WORD W#16#0
date_and_time_2 DATE_AND_TIME DT#90-1-1-0:0:0.000
fault_3 WORD W#16#0
date_and_time_3 DATE_AND_TIME DT#90-1-1-0:0:0.000
fault_4 WORD W#16#0
date_and_time_4 DATE_AND_TIME DT#90-1-1-0:0:0.000
fault_5 WORD W#16#0
date_and_time_5 DATE_AND_TIME DT#90-1-1-0:0:0.000
fault_6 WORD W#16#0
date_and_time_6 DATE_AND_TIME DT#90-1-1-0:0:0.000
fault_7 WORD W#16#0
date_and_time_7 DATE_AND_TIME DT#90-1-1-0:0:0.000
fault_8 WORD W#16#0
date_and_time_8 DATE_AND_TIME DT#90-1-1-0:0:0.000
fault_9 WORD W#16#0
date_and_time_9 DATE_AND_TIME DT#90-1-1-0:0:0.000
fault_10 WORD W#16#0
date_and_time_10 DATE_AND_TIME DT#90-1-1-0:0:0.000
actual_pointer INT 0 points to actual entry in ring buffer

--------------------------------------------------------------------------------------------------
Anstelle von Datum/Uhrzeit kannst Du natürlich auch andere Daten in den Puffer schreiben und das ganze aufbohren.


Hoffe das gibt eine Anregung

Gruss

Oliver
 
CALL "READ_CLK"
RET_VAL:=#SFC_21_Ret_Val // read date and time
CDT :=#now

Du (Sch)luder, aber eine einfache Möglichkeit.
Für Werkstückdaten würde ich trotzdem eher nach FIFO schauen.
In der Bibliothek fblib1 gibts bei mir nen FC92 Buffer Storage (FIFO), den würde ich mir mal anschauen.
Für die Erweiterung der Daten von 10 auf 15 würde ich schon vorab entsprechend Reserve lassen, alternativ gibts nen parallelen Buffer.
Siemens bietet auch eine Menge Beispiele, zB hier

gruß MK
 
Zurück
Oben