Werte in DB schreiben

SolSna

Level-1
Beiträge
10
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
leider habe ich sehr wenig Erfahrung in S7 und bräuchte einen kleinen Anstoß...

Ich möchte die Wirkleistung eines Motors ermitteln aus folgenden vorliegenden Werten:

Wert 1: DataIN_0 --> Spannung
Wert 2: DataIN_1 --> Strom
Wert 3: DataIN_2 --> cosPhi

Werte sind Word-Adressiert


Frage:
Benötige ich für jeden Wert einen eigenen DB, oder kann ich die 3 Werte gleichzeitig unter Verwendung von unterschiedlichen Arrays in dem selben DB schreiben? Wie kann ich die Werte miteinander verrechnen? Was muss ich beachten?
 
...
Frage:
Benötige ich für jeden Wert einen eigenen DB, oder kann ich die 3 Werte gleichzeitig unter Verwendung von unterschiedlichen Arrays in dem selben DB schreiben? Wie kann ich die Werte miteinander verrechnen? Was muss ich beachten?
Du kannst alle Werte in einem DB schreiben. Einach für jeden Wert ein Element anlegen. Gucke auch mal hier
 
Code:
L  DB20.DBW0
L  DB20.DBW2
*I
L  DB20.DBW4
*I
L  DB20.DBW6
*I
T  DB20.DBW8
und schon hast du deine INT-werte in form der wirkleistung (in dbw0 steht wurzel(3) * 100; in dbw6 cos phi * 100 und überhaupt alles * 100) im dbw8 des db 20 im format INT mit dem faktor 100 abgelegt
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Wurzel(3) in einem Wort:confused:

f*** ... lori hat recht, nicht mein tag heut ... öhm ... sagen wir ... nun ... genähert zwei ... aber ich frag mich, wie er cos phi in einem word darstellt ... also vielleicht den ganzen spaß nach oben rechnen und das ergebnis wieder normalisieren ... soll heißen wurzel(3) wäre dann 173, cos phi 89 und das ergebnis in einer real-division mit 100 in einen real-wert schreiben
 
Zuletzt bearbeitet:
Berechnungsbeispiel im FC... :


Code:
L DB90.DBW2  // Wert1
L DB90.DBW6  // Wert2
*I
L DB90.DBW10 // Wert3
*I
L 3                      // * faktor 3
*I
T MW10


L 100000    // Wertkorrektur um Faktor 100000
L MW10
/I

T MW20   // Wert Wirkleistung



Richtig???
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Berechnungsbeispiel im FC... :


Code:
...
L 100000    // Wertkorrektur um Faktor 100000
L MW10
/I

T MW20   // Wert Wirkleistung
Richtig???
Hier teilst du 100000 durch deinen errechneten Wert, wolltest du das nicht anders herum haben. Und wenn du mit /I teilst, dann kommt ein Integer (Ganzzahl) raus. Wenn du Kommastellen haben willst, dann musst du /R nehmen und dann natürlich auch in einem Doppelword vom Format Real speichern. Deine Integers solltses du dann vorher auch noch in Real wandeln (ITD, DTR)
 
Naja, die Kommazahl spielt keine große Rolle...



Nun ist es aber so, dass dieser errechnete Wert...

1. als "Referenzwert" (einmaliger Wert, die nicht überschrieben werden darf)
2. als "Aktuellwert" (Wert wird bei jedem neuen Bearbeitungszyklus neu eingelesen)

...dienen soll

Referenzwert und Aktuallwert sollen schließlich miteinander verglichen werden (später auch visuell).
Letzendlich soll eine Werkzeugüberwachung realisiert werden.
Vergleichbar mit Artis...



Meine Frage ist nun, wie packe ich die Sache am besten an?

Bisher habe ich Werte mit Hilfe von UDT in ein DB geschrieben,
diese Werte miteinander verrechnet (Wirkleistung) und nun weiß ich nicht so recht wie ich weitermachen soll...
Ein Bearbeitungszyklus dauert 20 Sekunden. Mit einem Taktmerker habe ich einen Zyklustakt von 100ms generiert (50ms positive Flanke). Es sind also 200 Werte die aufgezeichnet werden müsse/sollen.
Leider weiß ich nicht wie ich das am besten realisieren könnte.

Wäre über ein Denkanstoss oder Vergleichsprojekte sehr dankbar
 
Um Werte hintereinander in einen DB zu schreiben, lese dir erstmal Volker seinen Beitrag aus der FAQ durch
Pointer Zeiger FIFO LIFO

P.S.
du rechnest in deiner Formel mit dem Faktor 3, das gilt nur für die Strangwerte. Für Leiterwerte musst du mit Wurzel 3 rechnen
 
Zurück
Oben