BDE mittels DB

A

Anonymous

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
HI

Ich hätte da eine nette Aufgabe aus der Praxis.

Ich habe eine Maschine mit C7-633, also eine S7-300 mit eingebautem OP7. Ich möchte da so ne Art Betriebsdatenerfassung programmieren:
Es gibt 10 verschiedene Verarbeitungstypen. Diese stehen von 1 - 10 in einem MW60 . Jetzt will ich die produzierte Stückzahl eines jeden Tages in einem DB mitschreiben. Am einfachsten wäre es wohl, pro Typ ein DB, also 10 DB . In jedem DB soll jetzt möglicherweise eine STRUCT angelegt werden mit Datum, und produzierter Stückzahl(INT). Das Datum müßte man normalerweise über das OP bekommen, wenn nicht vielleicht sogar durch die CPU selbst. Im Datum müßte dann stehen z.B. 23.12.2004, 23/12/2004 oder so. In der Stückzahl eben die produzierten Einheiten des entsprechenden Datums. Und das alles im entsprechenden Typ-DB.
Ist der DB voll, so soll das neuere Datum das älteste überschreben.
Ist das machbar?
 
naja ich denke dein ansatz ist etwas kompliziert...

ich würde nur einen db anlegen, darin ein strukt mit date_and_time, und teile typ. dazu vieleicht noch 10 integer die jedes teil mitzählen.

dann würde ich ein schieberegister schreiben was bei jedem ende eines produktionszyklusses einen eintrag macht, der aus datum und teilenummer besteht. das teil wird im entsprechenden int mitgezählt.

ich weiß ja nicht wieviele daten du sammeln willst bzw. wie hoch die zykluszeit der maschine ist, wenn ein db nicht ausreicht müsstest du eben mehrere nacheinader füllen.

die date_and_time bekommst du über eine bestimmte sfc oder über den lokaldatenbereich von ob1 direkt von der cpu.

bei neuen cpu&s mit mmc kannst du dort auch db&s unlinked ablegen, und mit speziellen sfc&s drauf lesen bzw schreiben, wäre interessant wenn du extrem viele daten sammeln musst...

interessant zu wissen wäre aber wieviele daten du am tag bekommst und wie lange die haltbar sein müssen.

muss wirklich für jedes produzierte teil das datum mitgeschrieben werden? würde es auch genügen das bei produktwechsel zu tun?
eine date_time braucht eben viel platz...

mfg!
markus
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

genau sowas habe ich vor einer Woche programmiert. Nur mit dem Unterschied das ich 4 Timer bzw. vorgebene Zeiten verwende, an denen die Werte in den DB geschrieben werden. Ist der DB voll (das passiert bei mir nach 28 Messungen) wird einfach der älteste Wert aus dem DB geschmissen und es ist wieder Platz für eine neue Messung bzw. Eintrag in den DB. Müßtest es halt vielleicht auf deine Bedürfnisse anpassen.

Wenn du willst, kann ich Dir das Programm per Mail zuschicken!

Das einzige Problem, was ich dabei sehe, wenn die Spannung ausfällt, sind natürlich die Messdaten bzw. der Pointer der auf die Einträge im DB zeigt hinüber. Man könnte natürlich jetzt meinen Pointer bzw. Zähler remanent machen, aber dann müßte somit auch der DB remanent sein, und das geht bei meiner CPU 316 2-DB nur für 4096 Bytes. Mein DB ist leider ein bißchen groß geworden, 8700 Bytes. Somit muß ich nach Spannungswiederkehr den DB löschen und den Zähler wieder auf eins setzen. Das geht halt nicht anders. Ich verstehe sowieso nicht, warum Siemens bei dem Speicher so spart. Meiner Meinung nach gehört das ein 128 MB Modul rein, kostet ja sowieso nichts mehr und auch die dazugehörigen Kommentare und Symbole mit übertragen in die CPU, somit braucht man keine Angst haben, wenn das Offline Projekt mal flöten geht, oder wenn man wie es bei uns schon mal vorgekommen ist, der DB online geändert worden ist und offline nicht, somit keine Chance einen AG Abzug mit diesem DB zu machen!

Viele Grüße
Michael

Gruß
Michael
 
Zurück
Oben